group basic "Basic Tests"

	case correct_phases
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			#define e +1
			${DECLARATIONS}
			void main()
			{
				mediump int n = 1e;
				${OUTPUT}
			}
		""
	end

	case invalid_identifier
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			#define e +1
			${DECLARATIONS}
			void main()
			{
				mediump int 1xyz = 1;
				${OUTPUT}
			}
		""
	end

	case null_directive
		version 300 es
		values { output float out0 = 0.0; }
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}

			#
		# // comment
	/*sfd*/		# /* */

			void main()
			{
				out0 = 0.0;
				${OUTPUT}
			}
		""
	end

	case invalid_directive
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			#defin AAA
			${DECLARATIONS}

			void main()
			{
				${OUTPUT}
			}
		""
	end

	case missing_identifier
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			#define
			${DECLARATIONS}

			void main()
			{
				${OUTPUT}
			}
		""
	end

	case empty_object
		version 300 es
		values { output float out0 = -1.0; }
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}

			# define VALUE

			void main()
			{
				out0 = VALUE - 1.0;
				${OUTPUT}
			}
		""
	end

	case empty_function
		version 300 es
		values { output float out0 = -1.0; }
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}

			# define VALUE(a)

			void main()
			{
				out0 = VALUE(2.0) - 1.0;
				${OUTPUT}
			}
		""
	end

	case empty_directive
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}

			#

			void main()
			{
				out0 = 1.0;
				${OUTPUT}
			}
		""
	end

	case identifier_with_double_underscore
		values { output float out0 = 1.0; }
		version 300 es
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			# define __VALUE__	1

			void main()
			{
				// __VALUE__ not used since it might be set by an "underlying software layer"
				out0 = float(1.0);
				${OUTPUT}
			}
		""
	end
end # basic

group definitions "Symbol Definition Tests"

	case define_value_and_function
		version 300 es
		values { output float out0 = 6.0; }

		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS:single-line}
			#	define		VALUE			(1.5 + 2.5)
			#	define		FUNCTION(__LINE__, b)	__LINE__+b

			void main()
			{
				out0 = FUNCTION(VALUE, ((0.2) + 1.8) );
				${OUTPUT}
			}
		""
	end

	case undefine_object_invalid_syntax
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			#define		VAL			2.0
			#undef		VAL	sdflkjfds
			#define		VAL			1.0
			${DECLARATIONS}

			void main()
			{
				${POSITION_FRAG_COLOR} = vec4(VAL);
			}
		""
	end

	case undefine_invalid_object_1
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			#undef __LINE__
			${DECLARATIONS}

			void main()
			{
				${POSITION_FRAG_COLOR} = vec4(__LINE__);
			}
		""
	end

	case undefine_invalid_object_2
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			#undef __FILE__
			${DECLARATIONS}

			void main()
			{
				${POSITION_FRAG_COLOR} = vec4(__FILE__);
			}
		""
	end

	case undefine_invalid_object_3
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			#undef __VERSION__
			${DECLARATIONS}

			void main()
			{
				${POSITION_FRAG_COLOR} = vec4(__VERSION__);
			}
		""
	end

	case undefine_invalid_object_4
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			#undef GL_ES
			${DECLARATIONS}

			void main()
			{
				${POSITION_FRAG_COLOR} = vec4(GL_ES);
			}
		""
	end

	case undefine_function
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			precision mediump float;
			#define		FUNCTION(a,b) a+b
			#undef		FUNCTION
			#define		FUNCTION(a,b) a-b
			${DECLARATIONS}

			void main()
			{
				out0 = FUNCTION(3.0, 2.0);
				${OUTPUT}
			}
		""
	end

end # definitions

group invalid_definitions "Invalid Definition Tests"

	case define_non_identifier
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			#define 123 321
			${DECLARATIONS}

			void main()
			{
				${POSITION_FRAG_COLOR} = vec4(1.0);
			}
		""
	end

	case undef_non_identifier_1
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			#undef 123
			${DECLARATIONS}

			void main()
			{
				${POSITION_FRAG_COLOR} = vec4(1.0);
			}
		""
	end

	case undef_non_identifier_2
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			#undef foo.bar
			${DECLARATIONS}

			void main()
			{
				${POSITION_FRAG_COLOR} = vec4(1.0);
			}
		""
	end


end # invalid_definitions

group object_redefinitions "Object Redefinition Tests"

	case invalid_object_ident
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			# define AAA		2.0
			# define AAAA		2.1
			# define VALUE (AAA - 1.0)
			# define VALUE (AAAA - 1.0)

			void main()
			{
				${POSITION_FRAG_COLOR} = vec4(VALUE);
			}
		""
	end

	case invalid_object_whitespace
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			# define AAA		2.0
			# define VALUE (AAA - 1.0)
			# define VALUE (AAA- 1.0)

			void main()
			{
				${POSITION_FRAG_COLOR} = vec4(VALUE);
			}
		""
	end

	case invalid_object_op
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			# define AAA		2.0
			# define VALUE (AAA - 1.0)
			# define VALUE (AAA + 1.0)

			void main()
			{
				${POSITION_FRAG_COLOR} = vec4(VALUE);
			}
		""
	end

	case invalid_object_floatval_1
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			# define AAA		2.0
			# define VALUE (AAA - 1.0)
			# define VALUE (AAA - 1.1)

			void main()
			{
				${POSITION_FRAG_COLOR} = vec4(VALUE);
			}
		""
	end

	case invalid_object_floatval_2
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			# define AAA		2.0
			# define VALUE (AAA - 1.0)
			# define VALUE (AAA - 1.0e-1)

			void main()
			{
				${POSITION_FRAG_COLOR} = vec4(VALUE);
			}
		""
	end

	case invalid_object_intval_1
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			# define AAA		2
			# define VALUE (AAA - 1)
			# define VALUE (AAA - 2)

			void main()
			{
				${POSITION_FRAG_COLOR} = vec4(VALUE);
			}
		""
	end

	case invalid_object_intval_2
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			# define AAA		2
			# define VALUE (AAA - 1)
			# define VALUE (AAA - 0x1)

			void main()
			{
				${POSITION_FRAG_COLOR} = vec4(VALUE);
			}
		""
	end

	case redefine_object_1
		version 300 es
		values { output float out0 = 6.0; }

		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			#	define  VAL1 1.0
			#define		VAL2 2.0

			#define RES2 (RES1 * VAL2)
			#define RES1	(VAL2 / VAL1)
			#define RES2	(RES1 * VAL2)
			#define VALUE	(RES2 + RES1)

			void main()
			{
				out0 = VALUE;
				${OUTPUT}
			}
		""
	end

	case redefine_object_ifdef
		version 300 es
		values { output float out0 = 1.0; }

		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			#define ADEFINE 1
			#define ADEFINE 1

			#ifdef ADEFINE
			#define VALUE 1.0
			#else
			#define VALUE 0.0
			#endif

			void main()
			{
				out0 = VALUE;
				${OUTPUT}
			}
		""
	end

	case redefine_object_undef_ifdef
		version 300 es
		values { output float out0 = 1.0; }

		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			#define ADEFINE 1
			#define ADEFINE 1
			#undef ADEFINE

			#ifdef ADEFINE
			#define VALUE 0.0
			#else
			#define VALUE 1.0
			#endif

			void main()
			{
				out0 = VALUE;
				${OUTPUT}
			}
		""
	end

	case redefine_object_ifndef
		version 300 es
		values { output float out0 = 1.0; }

		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			#define ADEFINE 1
			#define ADEFINE 1

			#ifndef ADEFINE
			#define VALUE 0.0
			#else
			#define VALUE 1.0
			#endif

			void main()
			{
				out0 = VALUE;
				${OUTPUT}
			}
		""
	end

	case redefine_object_defined_1
		version 300 es
		values { output float out0 = 1.0; }

		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			#define ADEFINE 1
			#define ADEFINE 1

			#if defined(ADEFINE)
			#define VALUE 1.0
			#else
			#define VALUE 0.0
			#endif

			void main()
			{
				out0 = VALUE;
				${OUTPUT}
			}
		""
	end

	case redefine_object_defined_2
		version 300 es
		values { output float out0 = 1.0; }

		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			#define ADEFINE 1
			#define ADEFINE 1

			#if defined ADEFINE
			#define VALUE 1.0
			#else
			#define VALUE 0.0
			#endif

			void main()
			{
				out0 = VALUE;
				${OUTPUT}
			}
		""
	end

	case redefine_object_comment
		version 300 es
		values { output float out0 = 6.0; }

		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			#	define  VAL1 1.0
			#define		VAL2 2.0

			#define RES2 /* fdsjklfdsjkl dsfjkhfdsjkh fdsjklhfdsjkh */ (RES1 * VAL2)
			#define RES1	(VAL2 / VAL1)
			#define RES2	/* ewrlkjhsadf */ (RES1 * VAL2)
			#define VALUE	(RES2 + RES1)

			void main()
			{
				out0 = VALUE;
				${OUTPUT}
			}
		""
	end

	case redefine_object_multiline_comment
		version 300 es
		values { output float out0 = 6.0; }

		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			#	define  VAL1 1.0
			#define		VAL2 2.0

			#define RES2 /* fdsjklfdsjkl
							dsfjkhfdsjkh
							fdsjklhfdsjkh */ (RES1 * VAL2)
			#define RES1	(VAL2 / VAL1)
			#define RES2	/* ewrlkjhsadf */ (RES1 * VAL2)
			#define VALUE	(RES2 + RES1)

			void main()
			{
				out0 = VALUE;
				${OUTPUT}
			}
		""
	end

end # object_redefinitions

group invalid_redefinitions "Invalid Redefinitions Tests"

	case invalid_identifier_2
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			# define GL_VALUE	1.0

			void main()
			{
				${POSITION_FRAG_COLOR} = vec4(GL_VALUE);
			}
		""
	end

end # invalid_redefinitions

group comments "Comment Tests"

	case multiline_comment_define
		version 300 es
		values { output float out0 = 4.2; }
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			#define VALUE /* current
						value */ 4.2

			void main()
			{
				out0 = VALUE;
				${OUTPUT}
			}
		""
	end

	case nested_comment
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				out0 = 0.0;
				/* /* */
				out0 = 1.0;
				// */
				${OUTPUT}
			}
		""
	end

	case comment_trick_1
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				/*/
				out0 = 0.0;
				/*/
				out0 = 1.0;
				/**/
				${OUTPUT}
			}
		""
	end

	case comment_trick_2
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				/**/
				out0 = 1.0;
				/*/
				out0 = 0.0;
				/**/
				${OUTPUT}
			}
		""
	end

	case invalid_comment
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				/* /* */ */
				${POSITION_FRAG_COLOR} = 1.0;
			}
		""
	end

	case unterminated_comment_1
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				/*
			}
		""
	end

	case unterminated_comment_2
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			/*
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
			}
		""
	end

	case backslash_in_a_comment_1
		version 300 es
		expect build_successful
		both ""
			#version 300 es
			// \\note these are some declarations
			precision mediump float;
			${DECLARATIONS}
			// \\note this is the main function
			void main()
			{
				// \\note this is a function body
				${OUTPUT}
			}
		""
	end

	case backslash_in_a_comment_2
		version 300 es
		expect build_successful
		both ""
			#version 300 es
			/* \\note these are some declarations */
			precision mediump float;
			${DECLARATIONS}
			/* \\note this is the main function */
			void main()
			{
				/* \\note this is a function body */
				${OUTPUT}
			}
		""
	end
end # comments

group line_continuation "Line Continuation Tests"

	case comment
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}

			void main ()
			{
				out0 = 1.0;
				// comment \\
				out0 = -1.0;
				${OUTPUT}
			}
		""
	end

	case define
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			#define A(X) \\
				(-1.0*(X))

			void main ()
			{
				out0 = A(-1.0);
				${OUTPUT}
			}
		""
	end

	case preprocessing_token
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			#def\\
			ine A(X) (-1.0*(X))

			void main ()
			{
				out0 = A(-1.0);
				${OUTPUT}
			}
		""
	end

	case token
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}

			void main ()
			{
				float f\\
			oo = 1.0;
				out0 = foo;
				${OUTPUT}
			}
		""
	end

	case middle_of_line
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			#define A a \\ b
			#define B 1.0

			void main ()
			{
				out0 = B;
				${OUTPUT}
			}
		""
	end

end # line_continuation

group function_definitions "Function Definitions Tests"

	case same_object_and_function_param
		version 300 es
		values { output float out0 = 1.0; }

		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			#define VALUE 1.0
			#define FUNCTION(VALUE, B)	(VALUE-B)

			void main()
			{
				out0 = FUNCTION(3.0, 2.0);
				${OUTPUT}
			}
		""
	end

	case complex_func
		version 300 es
		values { output float out0 = 518.5; }
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			#define AAA(a,b)	a*(BBB(a,b))
			#define BBB(a,b)	a-b

			void main()
			{
				out0 = BBB(AAA(8.0/4.0, 2.0)*BBB(2.0*2.0,0.75*2.0), AAA(40.0,10.0*BBB(5.0,3.0)));
				${OUTPUT}
			}
		""
	end

	case function_definition_with_comments
		version 300 es
		values { output float out0 = 3.0; }
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			/* sdfljk */	#/* sdfljk */define /* sdfljk */ FUNC( /* jklsfd*/a /*sfdjklh*/, /*sdfklj */b /*sdfklj*/)		a+b

			void main()
			{
				out0 = FUNC(1.0, 2.0);
				${OUTPUT}
			}
		""
	end

end # function_definitions

group recursion "Recursions Tests"

	case recursion_1
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			# define AAA	AAA

			void main()
			{
				${POSITION_FRAG_COLOR} = vec4(AAA);
			}
		""
	end

	case recursion_2
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			# define AAA	BBB
			#define BBB		AAA

			void main()
			{
				${POSITION_FRAG_COLOR} = vec4(AAA);
			}
		""
	end

	case recursion_3
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			# define AAA	(1.0+BBB)
			#define BBB		(2.0+AAA)

			void main()
			{
				${POSITION_FRAG_COLOR} = vec4(AAA);
			}
		""
	end

	case recursion_4
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			# define AAA(a)	AAA(a)

			void main()
			{
				${POSITION_FRAG_COLOR} = vec4(AAA(1.0));
			}
		""
	end

	case recursion_5
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			# define AAA(a, b)	AAA(b, a)

			void main()
			{
				${POSITION_FRAG_COLOR} = vec4(AAA(1.0, 2.0));
			}
		""
	end

end # recursion

group function_redefinitions "Function Redefinition Tests"

	case function_redefinition_1
		version 300 es
		values { output float out0 = 3.0; }
		both ""
			#version 300 es
			precision mediump float;
			# define FUNC(a,b)		a+b
			# define FUNC( a, b)		a+b

			${DECLARATIONS}
			void main()
			{
				out0 = FUNC(1.0, 2.0);
				${OUTPUT}
			}
		""
	end

	case function_redefinition_2
		version 300 es
		values { output float out0 = 3.0; }
		both ""
			#version 300 es
			precision mediump float;
			# define FUNC(a,b)		(a  +b)
			# define FUNC( a, b )(a			+b)

			${DECLARATIONS}
			void main()
			{
				out0 = FUNC(1.0, 2.0);
				${OUTPUT}
			}
		""
	end

	case function_redefinition_3
		version 300 es
		values { output float out0 = 3.0; }
		both ""
			#version 300 es
			precision mediump float;
			# define FUNC(a,b)		(a  +b)
			# define FUNC(a,b)(a	/* comment
									 */ +b)

			${DECLARATIONS}
			void main()
			{
				out0 = FUNC(1.0, 2.0);
				${OUTPUT}
			}
		""
	end

	case invalid_function_redefinition_param_1
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			# define FUNC(a,b)		a+b
			# define FUNC(A,b)		A+b

			${DECLARATIONS}
			void main()
			{
				${POSITION_FRAG_COLOR} = vec4(FUNC(1.0, 2.0));
			}
		""
	end

	case invalid_function_redefinition_param_2
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			# define FUNC(a,b)		a+b
			# define FUNC(a,b,c)	a+b+c

			${DECLARATIONS}
			void main()
			{
				${POSITION_FRAG_COLOR} = vec4(FUNC(1.0, 2.0, 3.0));
			}
		""
	end

	case invalid_function_redefinition_param_3
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			# define FUNC(a,b)		a+b
			# define FUNC(a,b)		b+a

			${DECLARATIONS}
			void main()
			{
				${POSITION_FRAG_COLOR} = vec4(FUNC(1.0, 2.0));
			}
		""
	end

end # functions_redefinitions

group invalid_function_definitions "Invalid Function Definition Tests"

	case arguments_1
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			# define FUNC(a,b)		a+b

			${DECLARATIONS}
			void main()
			{
				${POSITION_FRAG_COLOR} = vec4(FUNC);
			}
		""
	end

	case arguments_2
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			# define FUNC(a,b)		a+b

			${DECLARATIONS}
			void main()
			{
				${POSITION_FRAG_COLOR} = vec4(FUNC());
			}
		""
	end

	case arguments_3
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			# define FUNC(a,b)		a+b

			${DECLARATIONS}
			void main()
			{
				${POSITION_FRAG_COLOR} = vec4(FUNC((();
			}
		""
	end

	case arguments_4
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			# define FUNC(a,b)		a+b

			${DECLARATIONS}
			void main()
			{
				${POSITION_FRAG_COLOR} = vec4(FUNC));
			}
		""
	end

	case arguments_5
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			# define FUNC(a,b)		a+b

			${DECLARATIONS}
			void main()
			{
				${POSITION_FRAG_COLOR} = vec4(FUNC(1.0));
			}
		""
	end

	case arguments_6
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			# define FUNC(a,b)		a+b

			${DECLARATIONS}
			void main()
			{
				${POSITION_FRAG_COLOR} = vec4(FUNC(1.0,2.0);
			}
		""
	end

	case arguments_7
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			# define FUNC(a,b)		a+b

			${DECLARATIONS}
			void main()
			{
				${POSITION_FRAG_COLOR} = vec4(FUNC(1.0,));
			}
		""
	end

	case arguments_8
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			# define FUNC(a,b)		a+b

			${DECLARATIONS}
			void main()
			{
				${POSITION_FRAG_COLOR} = vec4(FUNC(1.0, 2.0, 3.0));
			}
		""
	end

	case unique_param_name
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			# define FUNC(a,a)		a+a

			${DECLARATIONS}
			void main()
			{
				${POSITION_FRAG_COLOR} = vec4(FUNC(1.0,2.0));
			}
		""
	end

	case argument_list_1
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			# define FUNC(a b)		a+b

			${DECLARATIONS}
			void main()
			{
				${POSITION_FRAG_COLOR} = vec4(FUNC(1.0,2.0));
			}
		""
	end

	case argument_list_2
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			# define FUNC(a + b)		a+b

			${DECLARATIONS}
			void main()
			{
				${POSITION_FRAG_COLOR} = vec4(FUNC(1.0,2.0));
			}
		""
	end

	case argument_list_3
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			# define FUNC(,a,b)		a+b

			${DECLARATIONS}
			void main()
			{
				${POSITION_FRAG_COLOR} = vec4(FUNC(1.0,2.0));
			}
		""
	end

	case no_closing_parenthesis_1
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			# define FUNC(

			${DECLARATIONS}
			void main()
			{
				${POSITION_FRAG_COLOR} = vec4(FUNC(1.0,2.0));
			}
		""
	end

	case no_closing_parenthesis_2
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			# define FUNC(A  a+b

			${DECLARATIONS}
			void main()
			{
				${POSITION_FRAG_COLOR} = vec4(FUNC(1.0,2.0));
			}
		""
	end

	case no_closing_parenthesis_3
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			# define FUNC(A,B,C  a+b

			${DECLARATIONS}
			void main()
			{
				${POSITION_FRAG_COLOR} = vec4(FUNC(1.0,2.0));
			}
		""
	end

	case no_closing_parenthesis_4
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			# define FUNC(
		""
	end

end # invalid_function_definitions

group semantic "Semantic Tests"

	case ops_as_arguments
		version 300 es
		values { output float out0 = 20.0; }
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			#define FOO(a, b)		(1 a 9) b 2

			void main()
			{
				out0 = float(FOO(+, *));
				${OUTPUT}
			}
		""
	end

	case correct_order
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			#define FUNC(A) A
			#define A 2.0

			void main()
			{
				out0 = FUNC(A - 1.0);
				${OUTPUT}
			}
		""
	end

end # semantic

group predefined_macros "Predefined Macros Tests"

	case version
		version 300 es
		values { output float out0 = 300.0; }
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				#define AAA __VERSION__
				out0 = float(AAA);
				${OUTPUT}
			}
		""
	end

	case gl_es_1
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}

			void main()
			{
				out0 = float(GL_ES);
				${OUTPUT}
			}
		""
	end

	case gl_es_2
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			#define AAA(A) A

			void main()
			{
				out0 = float(AAA(GL_ES));
				${OUTPUT}
			}
		""
	end

	case line_1
		version 300 es
		values { output float out0 = 2.0; }
		both ""
			#version 300 es
			const mediump int line = __LINE__;
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				out0 = float(line);
				${OUTPUT}
			}
		""
	end

	case line_2
		version 300 es
		# Note: Arguments are macro replaced in the first stage.
		# Macro replacement list is expanded in the last stage.
		values { output vec4 out0 = vec4(12.0, 12.0, 10.0, 11.0); }

		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS:single-line}
			#define BBB		__LINE__, /*
				*/ __LINE__
			#define AAA(a,b) BBB, a, b

			void main()
			{
				out0 = vec4(AAA(__LINE__,
						__LINE__
						));
				${OUTPUT}
			}
		""
	end

	case file
		version 300 es
		values { output float out0 = 0.0; }
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				out0 = float(__FILE__);
				${OUTPUT}
			}
		""
	end

	case if_gl_es
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
	#if GL_ES
				out0 = 1.0;
	#else
				out0 = -1.0;
	#endif
				${OUTPUT}
			}
		""
	end

	case if_version
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
	#if __VERSION__ == 300
				out0 = 1.0;
	#else
				out0 = -1.0;
	#endif
				${OUTPUT}
			}
		""
	end

end # predefined_macros

group conditional_inclusion "Conditional Inclusion Tests"

	case basic_1
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
	#define AAA asdf

	#if defined AAA && !defined(BBB)
				out0 = 1.0;
	#else
				out0 = 0.0;
	#endif
				${OUTPUT}
			}
		""
	end

	case basic_2
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
	#define AAA defined(BBB)

	#if !AAA
				out0 = 1.0;
	#else
				out0 = 0.0;
	#endif
				${OUTPUT}
			}
		""
	end

	case defined_macro_defined_test
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
	#define AAA defined

	#if AAA AAA
				out0 = 1.0;
	#else
				out0 = 0.0;
	#endif
				${OUTPUT}
			}
		""
	end

	case defined_macro_undef
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
	#define BBB 1
	#define AAA defined(BBB)
	#undef BBB

	#if !AAA
				out0 = 1.0;
	#else
				out0 = 0.0;
	#endif
				${OUTPUT}
			}
		""
	end

	case define_defined
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
	#define CCC 1
	#define defined BBB
	#define AAA defined

	#if AAA CCC
				out0 = 1.0;
	#else
				out0 = 0.0;
	#endif
				${OUTPUT}
			}
		""
	end

	case define_defined_outside_if
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
	#define CCC - 0.5
	#define defined 0.5
	#define AAA defined
				out0 = 1.0 - (AAA CCC);
				${OUTPUT}
			}
		""
	end

	case defined_invalid_before_all_macros_replaced
		version 300 es
		expect compile_fail
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
	#define FOO 1
	#define OPEN defined(
	#define CLOSE FOO)

	#if OPEN CLOSE
				out0 = 1.0;
	#else
				out0 = 0.0;
	#endif
				${OUTPUT}
			}
		""
	end

	case basic_3
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
	#if 0
				out0 = -1.0;
	#elif 0
				out0 = -2.0;
	#elif 1
				out0 = 1.0;
	#else
				out0 = -3.0;
	#endif
				${OUTPUT}
			}
		""
	end

	case basic_4
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
	#if 0
				out0 = -1.0;
	#elif 0
				out0 = -2.0;
	#else
				out0 = 1.0;
	#endif
				${OUTPUT}
			}
		""
	end

	case basic_5
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
	#if 1
				out0 = 1.0;
	#elif 0
				out0 = -2.0;
	#else
				out0 = -1.0;
	#endif
				${OUTPUT}
			}
		""
	end

	case unary_ops_1
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
	#if !((~2 >> 1) & 1)
				out0 = 1.0;
	#else
				out0 = -1.0;
	#endif
				${OUTPUT}
			}
		""
	end

	case unary_ops_2
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
	#if !((~(- - - - - 1 + + + + + +1) >> 1) & 1)
				out0 = -1.0;
	#else
				out0 = 1.0;
	#endif
				${OUTPUT}
			}
		""
	end

end # conditional_inclusion

group invalid_ops "Invalid Operations Tests"

	case invalid_op_1
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
	#if !((~(+ ++1 - - - -1) >> 1) & 1)
				${POSITION_FRAG_COLOR} = vec4(-1.0);
	#else
				${POSITION_FRAG_COLOR} = vec4(1.0);
	#endif
			}
		""
	end

	case invalid_op_2
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
	#if !((~(+ + +1 - -- -1) >> 1) & 1)
				${POSITION_FRAG_COLOR} = vec4(-1.0);
	#else
				${POSITION_FRAG_COLOR} = vec4(1.0);
	#endif
			}
		""
	end

	case invalid_defined_expected_identifier_1
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			#define AAA 1

			${DECLARATIONS}
			void main()
			{
	#if defined
				${POSITION_FRAG_COLOR} = vec4(1.0);
	#endif
			}
		""
	end

	case invalid_defined_expected_identifier_2
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			#define AAA 1

			${DECLARATIONS}
			void main()
			{
	#if defined()
				${POSITION_FRAG_COLOR} = vec4(1.0);
	#endif
			}
		""
	end

	case invalid_defined_expected_identifier_3
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			#define AAA 1

			${DECLARATIONS}
			void main()
			{
	#if defined(
				${POSITION_FRAG_COLOR} = vec4(1.0);
	#endif
			}
		""
	end

	case invalid_defined_expected_identifier_4
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			#define AAA 1

			${DECLARATIONS}
			void main()
			{
	#if defined)
				${POSITION_FRAG_COLOR} = vec4(1.0);
	#endif
			}
		""
	end

	case invalid_defined_expected_identifier_5
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			#define AAA 1

			${DECLARATIONS}
			void main()
			{
	#if defined((AAA))
				${POSITION_FRAG_COLOR} = vec4(FUNC(1.0,2.0);
	#endif
			}
		""
	end

	case invalid_defined_expected_rparen
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			#define AAA 1

			${DECLARATIONS}
			void main()
			{
	#if defined(AAA
				${POSITION_FRAG_COLOR} = vec4(1.0);
	#endif
			}
		""
	end

	case defined_define
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
	#define define 1
	#define AAA 1.0

			void main()
			{
				out0 = AAA;
				${OUTPUT}
			}
		""
	end

end # invalid_ops

group undefined_identifiers "Undefined Identifiers Tests"

	case valid_undefined_identifier_1
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
	#if 1 || AAA
				out0 = 1.0;
	#else
				out0 = -1.0;
	#endif
				${OUTPUT}
			}
		""
	end

	case valid_undefined_identifier_2
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
	#if 0 && AAA
				out0 = -1.0;
	#else
				out0 = 1.0;
	#endif
				${OUTPUT}
			}
		""
	end

	case undefined_identifier_1
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
	#if 1 - CCC + (-AAA || BBB)
				${POSITION_FRAG_COLOR} = vec4(1.0);
	#else
				${POSITION_FRAG_COLOR} = vec4(-1.0);
	#endif
			}
		""
	end

	case undefined_identifier_2
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
	#if !A
				${POSITION_FRAG_COLOR} = vec4(1.0);
	#else
				${POSITION_FRAG_COLOR} = vec4(-1.0);
	#endif
			}
		""
	end

	case undefined_identifier_3
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
	#if -A
				${POSITION_FRAG_COLOR} = vec4(1.0);
	#else
				${POSITION_FRAG_COLOR} = vec4(-1.0);
	#endif
			}
		""
	end

	case undefined_identifier_4
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
	#if ~A
				${POSITION_FRAG_COLOR} = vec4(1.0);
	#else
				${POSITION_FRAG_COLOR} = vec4(-1.0);
	#endif
			}
		""
	end

	case undefined_identifier_5
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
	#if A && B
				${POSITION_FRAG_COLOR} = vec4(1.0);
	#else
				${POSITION_FRAG_COLOR} = vec4(-1.0);
	#endif
			}
		""
	end

	case undefined_identifier_6
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
    #define A 1
	#if A && B
				${POSITION_FRAG_COLOR} = vec4(1.0);
	#else
				${POSITION_FRAG_COLOR} = vec4(-1.0);
	#endif
			}
		""
	end

	case undefined_identifier_7
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
    #define B 1
	#if A && B
				${POSITION_FRAG_COLOR} = vec4(1.0);
	#else
				${POSITION_FRAG_COLOR} = vec4(-1.0);
	#endif
			}
		""
	end

	case undefined_identifier_8
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
    #define B 1
	#define A 2
	#undef A
	#if A && B
				${POSITION_FRAG_COLOR} = vec4(1.0);
	#else
				${POSITION_FRAG_COLOR} = vec4(-1.0);
	#endif
			}
		""
	end

	case undefined_identifier_9
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
	#if A || B
				${POSITION_FRAG_COLOR} = vec4(1.0);
	#else
				${POSITION_FRAG_COLOR} = vec4(-1.0);
	#endif
			}
		""
	end

	case undefined_identifier_10
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
    #define A 0
	#if A || B
				${POSITION_FRAG_COLOR} = vec4(1.0);
	#else
				${POSITION_FRAG_COLOR} = vec4(-1.0);
	#endif
			}
		""
	end

	case undefined_identifier_11
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
    #define A 0
	#define B 2
	#undef B
	#if A || B
				${POSITION_FRAG_COLOR} = vec4(1.0);
	#else
				${POSITION_FRAG_COLOR} = vec4(-1.0);
	#endif
			}
		""
	end

	case undefined_identifier_12
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
    #define B 1
	#if A || B
				${POSITION_FRAG_COLOR} = vec4(1.0);
	#else
				${POSITION_FRAG_COLOR} = vec4(-1.0);
	#endif
			}
		""
	end

end # undefined_identifiers

group invalid_conditionals "Invalid Conditionals Tests"

	case empty_if
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
	#if
				${POSITION_FRAG_COLOR} = vec4(1.0);
			}
		""
	end

	case empty_ifdef
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
	#ifdef
				${POSITION_FRAG_COLOR} = vec4(1.0);
			}
		""
	end

	case empty_ifndef
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
	#ifndef
				${POSITION_FRAG_COLOR} = vec4(1.0);
			}
		""
	end

	case invalid_ifdef
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
	#ifdef 1
				${POSITION_FRAG_COLOR} = vec4(1.0);
	#endif
			}
		""
	end

	case invalid_ifndef
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
	#ifndef 1
				${POSITION_FRAG_COLOR} = vec4(1.0);
	#endif
			}
		""
	end

	case empty_if_defined
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
	#if defined
				${POSITION_FRAG_COLOR} = vec4(1.0);
			}
		""
	end

	case unterminated_if_1
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
	#if 1
				${POSITION_FRAG_COLOR} = vec4(1.0);
			}
		""
	end

	case unterminated_if_2
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
	#if 0
				${POSITION_FRAG_COLOR} = vec4(1.0);
			}
		""
	end

	case unterminated_ifdef
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
	#ifdef FOOBAR
				${POSITION_FRAG_COLOR} = vec4(1.0);
			}
		""
	end

	case unterminated_ifndef
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
	#ifndef GL_ES
				${POSITION_FRAG_COLOR} = vec4(1.0);
			}
		""
	end

	case unterminated_else_1
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
	#if 1
	#else
				${POSITION_FRAG_COLOR} = vec4(1.0);
			}
		""
	end

	case unterminated_else_2
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
	#if 0
	#else
				${POSITION_FRAG_COLOR} = vec4(1.0);
			}
		""
	end

	case unterminated_elif_1
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
	#if 0
	#elif 1
				${POSITION_FRAG_COLOR} = vec4(1.0);
			}
		""
	end

	case unterminated_elif_2
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
	#if 1
	#elif 0
				${POSITION_FRAG_COLOR} = vec4(1.0);
			}
		""
	end

	case unterminated_elif_3
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
	#if 0
	#elif 0
				${POSITION_FRAG_COLOR} = vec4(2.0);
			}
		""
	end

	case elif_after_else
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
	#if 0
				${POSITION_FRAG_COLOR} = vec4(1.0);
	#else
				${POSITION_FRAG_COLOR} = vec4(-1.0);
	#elif 1
				${POSITION_FRAG_COLOR} = vec4(0.0);
	#endif
			}
		""
	end

	case else_without_if
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
	#else
				${POSITION_FRAG_COLOR} = vec4(1.0);
	#endif
			}
		""
	end

	case elif_without_if
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
	#elif 1
				${POSITION_FRAG_COLOR} = vec4(1.0);
	#endif
			}
		""
	end

	case endif_without_if
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				${POSITION_FRAG_COLOR} = vec4(1.0);
	#endif
			}
		""
	end

	case else_after_else
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
	#if !GL_ES
			${POSITION_FRAG_COLOR} = vec4(1.0);
	#else
			${POSITION_FRAG_COLOR} = vec4(-1.0);
	#else
			${POSITION_FRAG_COLOR} = vec4(-1.0);
	#endif
			}
		""
	end

	case nested_elif_without_if
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
	#if 1
			${POSITION_FRAG_COLOR} = vec4(1.0);
	#	elif
			${POSITION_FRAG_COLOR} = vec4(0.0);
	#	endif
	#endif
			}
		""
	end

	case if_float
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
	#if 1.231
			${POSITION_FRAG_COLOR} = vec4(1.0);
	#	elif
			${POSITION_FRAG_COLOR} = vec4(0.0);
	#	endif
	#endif
			}
		""
	end

	case tokens_after_if
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
	#if 1 foobar
				${POSITION_FRAG_COLOR} = vec4(1.0);
	#endif
			}
		""
	end

	case tokens_after_elif
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
	#if 0
	#elif foobar
				${POSITION_FRAG_COLOR} = vec4(1.0);
	#endif
			}
		""
	end

	case tokens_after_else
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
	#if 1
	#else foobar 1.231
	#endif
				${POSITION_FRAG_COLOR} = vec4(1.0);
			}
		""
	end

	case tokens_after_endif
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
	#if 1
	#else
	#endif foobar
				${POSITION_FRAG_COLOR} = vec4(1.0);
			}
		""
	end

	case tokens_after_ifdef
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
	#ifdef FOOBAR foobar
	#else
	#endif
				${POSITION_FRAG_COLOR} = vec4(1.0);
			}
		""
	end

	case tokens_after_ifndef
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
	#ifndef FOOBAR ,, +- << barbar
	#else
	#endif
				${POSITION_FRAG_COLOR} = vec4(1.0);
			}
		""
	end

	case unterminated_nested_blocks
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
	#if 1
	#	if 1
				${POSITION_FRAG_COLOR} = vec4(1.0);
			}
		""
	end

end # invalid_conditionals

group conditionals "Conditionals Tests"

	case ifdef_1
		version 300 es
		values { output float out0 = 1.0; }
		both ""
	#version 300 es
	#define AAA
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
	#ifdef AAA
				out0 = 1.0;
	#else
				out0 = -1.0;
	#endif
				${OUTPUT}
			}
		""
	end

	case ifdef_2
		version 300 es
		values { output float out0 = 1.0; }
		both ""
	#version 300 es
	#define AAA
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
	#if defined  ( AAA)
				out0 = 1.0;
	#else
				out0 = -1.0;
	#endif
				${OUTPUT}
			}
		""
	end

	case ifdef_3
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
	#ifdef AAA
				out0 = -1.0;
	#else
				out0 = 1.0;
	#endif
				${OUTPUT}
			}
		""
	end

	case ifndef_1
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
	#ifndef AAA
				out0 = 1.0;
	#else
				out0 = -1.0;
	#endif
				${OUTPUT}
			}
		""
	end

	case ifndef_2
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
	#define AAA
			void main()
			{
	#ifndef AAA
				out0 = -1.0;
	#else
				out0 = 1.0;
	#endif
				${OUTPUT}
			}
		""
	end

	case mixed_conditional_inclusion
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
	#ifndef AAA
				out0 = 1.0;
	#elif 1
				out0 = -1.0;
	#endif
				${OUTPUT}
			}
		""
	end

	case nested_if_1
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
	#if GL_ES
	#	if __VERSION__ != 300
				out0 = -1.0;
	#	else
				out0 = 1.0;
	#	endif
	#endif
				${OUTPUT}
			}
		""
	end

	case nested_if_2
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
	#if 1
	#	if 0
				out0 = -1.0;
	#	else
	#		if 0
				out0 = -1.0;
	#		elif 1
				out0 = 1.0;
	#		else
				out0 = -1.0;
	#		endif
	#	endif
	#endif
				${OUTPUT}
			}
		""
	end

	case nested_if_3
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
	#if 0
	#	if 1
				out0 = -1.0;
	#	endif
	#else
				out0 = 1.0;
	#endif
				${OUTPUT}
			}
		""
	end

end # conditionals

group directive "Directive Tests"

	case version_is_less
		expect compile_fail
		version 300 es
		both ""
			#version 299 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				${POSITION_FRAG_COLOR} = vec4(1.0);
			}
		""
	end

	case version_is_more
		expect compile_fail
		version 300 es
		both ""
			#version 301 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				${POSITION_FRAG_COLOR} = vec4(1.0);
			}
		""
	end

	case version_missing_es
		expect compile_fail
		version 300 es
		both ""
			#version 300
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				${POSITION_FRAG_COLOR} = vec4(1.0);
			}
		""
	end

	case version_missing
		expect compile_fail
		version 300 es
		both ""
			#version
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				${POSITION_FRAG_COLOR} = vec4(1.0);
			}
		""
	end

	case version_not_first_statement_1
		expect compile_fail
		version 300 es
		both ""
			precision mediump float;
			#version 300 es
			${DECLARATIONS}
			void main()
			{
				${POSITION_FRAG_COLOR} = vec4(1.0);
			}
		""
	end

	case version_not_first_statement_2
		expect compile_fail
		version 300 es
		both ""
			#define FOO BAR
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				${POSITION_FRAG_COLOR} = vec4(1.0);
			}
		""
	end

	case version_invalid_token_1
		expect compile_fail
		version 300 es
		both ""
			#version 300 es.0
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				${POSITION_FRAG_COLOR} = vec4(1.0);
			}
		""
	end

	case version_invalid_token_2
		expect compile_fail
		version 300 es
		both ""
			#version foobar
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				${POSITION_FRAG_COLOR} = vec4(1.0);
			}
		""
	end

	case invalid_version
		expect compile_fail
		version 300 es
		both ""
			#version AAA
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				${POSITION_FRAG_COLOR} = vec4(1.0);
			}
		""
	end

	case additional_tokens
		expect compile_fail
		version 300 es
		both ""
			#version 300 es foobar
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				${POSITION_FRAG_COLOR} = vec4(1.0);
			}
		""
	end

	case error_with_no_tokens
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			#error
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				${POSITION_FRAG_COLOR} = vec4(1.0);
			}
		""
	end

	case error
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			#define AAA asdf
			#error 1 * AAA /* comment */
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				${POSITION_FRAG_COLOR} = vec4(1.0);
			}
		""
	end

end # directive

group builtin "Built-in Symbol Tests"

	case line
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
			#line 1
				out0 = float(__LINE__);
				${OUTPUT}
			}
		""
	end

	case line_and_file
		version 300 es
		values { output vec4 out0 = vec4(234.0, 234.0, 10.0, 10.0); }
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
	#line 234 10
				out0 = vec4(__LINE__, __LINE__, __FILE__, __FILE__);
				${OUTPUT}
			}
		""
	end

	case line_defined_1
		version 300 es
		values { output float out0 = 4.0; }
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
			#define A 4
			#line A
				out0 = float(__LINE__);
				${OUTPUT}
			}
		""
	end

	case line_defined_2
		version 300 es
		values { output vec4 out0 = vec4(234.0, 234.0, 10.0, 10.0); }
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
			#define A 10
			#line 234 A
				out0 = vec4(__LINE__, __LINE__, __FILE__, __FILE__);
				${OUTPUT}
			}
		""
	end

	case empty_line
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
			#line
				${POSITION_FRAG_COLOR} = vec4(1.0);
			}
		""
	end

	case invalid_line_file_1
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
			#line 22 1.234
				${POSITION_FRAG_COLOR} = vec4(__LINE__, __LINE__, __FILE__, __FILE__);
			}
		""
	end

	case invalid_line_file_3
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
			#line 233 10 2
				${POSITION_FRAG_COLOR} = vec4(__LINE__, __LINE__, __FILE__, __FILE__);
			}
		""
	end

	case invalid_line_file_4
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
			#line foobar
				${POSITION_FRAG_COLOR} = vec4(__LINE__, __LINE__, __FILE__, __FILE__);
			}
		""
	end

end # builtin

group pragmas "Pragma Tests"

	case pragma_vertex
		version 300 es
		values { output float out0 = 1.0; }
		vertex ""
			#version 300 es
			#pragma
			#pragma STDGL invariant(all)
			#pragma debug(off)
			#pragma optimize(off)

			${VERTEX_DECLARATIONS}
			void main()
			{
				${VERTEX_OUTPUT}
			}
		""
		fragment ""
			#version 300 es
			precision mediump float;
			${FRAGMENT_DECLARATIONS}
			void main()
			{
				out0 = 1.0;
				${FRAGMENT_OUTPUT}
			}
		""
	end

	case pragma_fragment
		version 300 es
		values { output float out0 = 1.0; }
		vertex ""
			#version 300 es
			${VERTEX_DECLARATIONS}
			void main()
			{
				${VERTEX_OUTPUT}
			}
		""
		fragment ""
			#version 300 es
			#pragma
			#pragma debug(off)
			#pragma optimize(off)

			precision mediump float;
			${FRAGMENT_DECLARATIONS}
			void main()
			{
				out0 = 1.0;
				${FRAGMENT_OUTPUT}
			}
		""
	end

	case pragma_macro_exp
		version 300 es
		values { output float out0 = 1.0; }
		both ""
	#version 300 es
	#define off	INVALID
	/* pragma line not macro expanded */
	#pragma debug(off)

			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				out0 = 1.0;
				${OUTPUT}
			}
		""
	end

	case pragma_unrecognized_debug
		version 300 es
		expect build_successful
		both ""
			#version 300 es
			#pragma debug(1.23)

			// unrecognized preprocessor token

			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				${POSITION_FRAG_COLOR} = vec4(1.0);
			}
		""
	end

	case pragma_unrecognized_token
		version 300 es
		expect build_successful
		both ""
			#version 300 es
			#pragma ¤¤½

			// trailing bytes form a valid but unrecognized preprocessor token

			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				${POSITION_FRAG_COLOR} = vec4(1.0);
			}
		""
	end

end # pragmas

group extensions "Extension Tests"

	case basic
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			#extension all : warn

			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				out0 = 1.0;
				${OUTPUT}
			}
		""
	end

	case macro_exp
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			#define warn enable

			#extension all : warn

			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				out0 = 1.0;
				${OUTPUT}
			}
		""
	end

	case missing_extension_name
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			#extension
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				${POSITION_FRAG_COLOR} = vec4(1.0);
			}
		""
	end

	case invalid_extension_name
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			#extension 2 : all
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				${POSITION_FRAG_COLOR} = vec4(1.0);
			}
		""
	end

	case missing_colon
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			#extension all
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				${POSITION_FRAG_COLOR} = vec4(1.0);
			}
		""
	end

	case expected_colon
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			#extension all ;
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				${POSITION_FRAG_COLOR} = vec4(1.0);
			}
		""
	end

	case missing_behavior
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			#extension all :
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				${POSITION_FRAG_COLOR} = vec4(1.0);
			}
		""
	end

	case invalid_behavior_1
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			#extension all : WARN
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				${POSITION_FRAG_COLOR} = vec4(1.0);
			}
		""
	end

	case invalid_behavior_2
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			#extension all : require
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				${POSITION_FRAG_COLOR} = vec4(1.0);
			}
		""
	end

	case invalid_char_in_name
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			#extension all¤ : warn
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				${POSITION_FRAG_COLOR} = vec4(1.0);
			}
		""
	end

	case invalid_char_in_behavior
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			#extension all : war¤n
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				${POSITION_FRAG_COLOR} = vec4(1.0);
			}
		""
	end

	case unterminated_comment
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			#extension all : warn /*asd
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				${POSITION_FRAG_COLOR} = vec4(1.0);
			}
		""
	end

	case after_non_preprocessing_tokens
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			#extension all : warn

			precision mediump float;
			${DECLARATIONS}
			void main()
			{
			#extension all : disable
				${POSITION_FRAG_COLOR} = vec4(1.0);
			}
		""
	end
end # extensions

group expressions "Expression Tests"

	case shift_left
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				#define VAL 4
				out0 = 0.0;
				#if (VAL << 2) == 16
					out0 = 1.0;
				#endif
				${OUTPUT}
			}
		""
	end

	case shift_right
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				#define VAL 5
				out0 = 0.0;
				#if (VAL >> 1) == 2
					out0 = 1.0;
				#endif
				${OUTPUT}
			}
		""
	end

	case cmp_less_than
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				#define VAL 5
				out0 = 0.0;
				#if (VAL < 6) && (-VAL < -4)
					out0 = 1.0;
				#endif
				${OUTPUT}
			}
		""
	end

	case less_or_equal
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				#define VAL 6
				out0 = 0.0;
				#if (VAL <= 6) && (-VAL <= -6)
					out0 = 1.0;
				#endif
				${OUTPUT}
			}
		""
	end

	case or
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				#define VAL 6
				out0 = 0.0;
				#if (VAL | 5) == 7
					out0 = 1.0;
				#endif
				${OUTPUT}
			}
		""
	end

	case and
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				#define VAL 6
				out0 = 0.0;
				#if (VAL & 5) == 4
					out0 = 1.0;
				#endif
				${OUTPUT}
			}
		""
	end

	case xor
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				#define VAL 6
				out0 = 0.0;
				#if (VAL ^ 5) == 3
					out0 = 1.0;
				#endif
				${OUTPUT}
			}
		""
	end

	case mod
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				#define VAL 12
				out0 = 0.0;
				#if (VAL % 5) == 2
					out0 = 1.0;
				#endif
				${OUTPUT}
			}
		""
	end

	case parenthesis_value
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				#define VAL ((  (4   ) )  )
				out0 = 0.0;
				#if VAL >= 4
					out0 = 1.0;
				#endif
				${OUTPUT}
			}
		""
	end

	case parenthesis_tricky
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				#define VAL ((  (4   ) )
				out0 = 0.0;
				#if VAL) >= 4
					out0 = 1.0;
				#endif
				${OUTPUT}
			}
		""
	end

	case parenthesis_if_no
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				#define VAL 4
				out0 = 0.0;
				#if VAL >= 4
					out0 = 1.0;
				#endif
				${OUTPUT}
			}
		""
	end

	case parenthesis_if
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				#define VAL 4
				out0 = 0.0;
				#if (VAL >= 4)
					out0 = 1.0;
				#endif
				${OUTPUT}
			}
		""
	end

	case parenthesis_multi_if
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				#define VAL (4)
				out0 = 0.0;
				#if (((VAL)) >= (4))
					out0 = 1.0;
				#endif
				${OUTPUT}
			}
		""
	end

	case parenthesis_single_if
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				#define VAL 4
				out0 = 0.0;
				#if (VAL >= 4)
					out0 = 1.0;
				#endif
				${OUTPUT}
			}
		""
	end

	case parenthesis_ifelse_true
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				#define VAL 4
				#if (VAL >= 4)
					out0 = 1.0;
				#else
					out0 = 0.0;
				#endif
				${OUTPUT}
			}
		""
	end

	case parenthesis_ifelse_false
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				#define VAL 4
				#if (VAL > 4)
					out0 = 0.0;
				#else
					out0 = 1.0;
				#endif
				${OUTPUT}
			}
		""
	end

	case eval_basic_0
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				#if -4 + 5 == 1
					out0 = 1.0;
				#else
					out0 = 0.0;
				#endif
				${OUTPUT}
			}
		""
	end

	case eval_basic_1
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				#if (2 * 2) - 3 >= 0
					out0 = 1.0;
				#else
					out0 = 0.0;
				#endif
				${OUTPUT}
			}
		""
	end

	case eval_simple_precedence_0
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				#if 2 * 3 - 3 == 3
					out0 = 1.0;
				#else
					out0 = 0.0;
				#endif
				${OUTPUT}
			}
		""
	end

	case eval_simple_precedence_1
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				#if 2 - 2 / 2 == 1
					out0 = 1.0;
				#else
					out0 = 0.0;
				#endif
				${OUTPUT}
			}
		""
	end

	case defined_1
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			#define X 0
			void main()
			{
				#if defined(X)
					out0 = 1.0;
				#else
					out0 = 0.0;
				#endif
				${OUTPUT}
			}
		""
	end

	case defined_2
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			#define X 0
			#define Y 1
			void main()
			{
				#if defined(X) == Y
					out0 = 1.0;
				#else
					out0 = 0.0;
				#endif
				${OUTPUT}
			}
		""
	end

	case defined_3
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			#define X 0
			#define Y 1
			void main()
			{
				#if defined(X) && defined(Y)
					out0 = 1.0;
				#else
					out0 = 0.0;
				#endif
				${OUTPUT}
			}
		""
	end

	case defined_4
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			#define X 0
			#define Y 1
			#undef X
			void main()
			{
				#if defined(X) && defined(Y)
					out0 = 0.0;
				#else
					out0 = 1.0;
				#endif
				${OUTPUT}
			}
		""
	end

	case defined_5
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			#define X 0
			#define Y 1
			#undef X
			void main()
			{
				#if defined(X) || defined(Y)
					out0 = 1.0;
				#else
					out0 = 0.0;
				#endif
				${OUTPUT}
			}
		""
	end

	case defined_6
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			#define X 0
			#define Y 1
			#undef Y
			void main()
			{
				#if defined(X) && (defined(Y) || (X == 0))
					out0 = 1.0;
				#else
					out0 = 0.0;
				#endif
				${OUTPUT}
			}
		""
	end

end # expressions

group invalid_expressions "Invalid Expression Tests"

	case invalid_unary_expr
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
			#if !
				${POSITION_FRAG_COLOR} = vec4(1.0);
			}
		""
	end

	case invalid_binary_expr
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
			#if 3+4+
				${POSITION_FRAG_COLOR} = vec4(1.0);
			}
		""
	end

	case missing_expr
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
			#if
				${POSITION_FRAG_COLOR} = vec4(1.0);
			}
		""
	end

	case invalid_expr_1
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
			#if 4 4
				${POSITION_FRAG_COLOR} = vec4(1.0);
			}
		""
	end

	case invalid_expr_2
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
			#if 4 * * 4
				${POSITION_FRAG_COLOR} = vec4(1.0);
			}
		""
	end

	case invalid_expr_3
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
			#if (4)(4)
				${POSITION_FRAG_COLOR} = vec4(1.0);
			}
		""
	end

	case unopened_parenthesis
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
			#if 4)
				${POSITION_FRAG_COLOR} = vec4(1.0);
			}
		""
	end

	case unclosed_parenthesis
		version 300 es
		expect compile_fail
		both ""
			#version 300 es
			precision mediump float;
			${DECLARATIONS}
			void main()
			{
			#if ((4 + 7)
				${POSITION_FRAG_COLOR} = vec4(1.0);
			}
		""
	end

end # invalid_expressions

group operator_precedence "Operator precedence"


	case modulo_vs_not
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			#if ( 8 % ! 0 ) == 0
			#define VAL 1.0
			#else
			#define VAL 0.0
			#endif

			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				out0 = VAL;
				${OUTPUT}
			}
		""
	end

	case div_vs_not
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			#if ( 8 / ! 0 ) == 8
			#define VAL 1.0
			#else
			#define VAL 0.0
			#endif

			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				out0 = VAL;
				${OUTPUT}
			}
		""
	end

	case mul_vs_not
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			#if ( 8 * ! 0 ) == 8
			#define VAL 1.0
			#else
			#define VAL 0.0
			#endif

			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				out0 = VAL;
				${OUTPUT}
			}
		""
	end

	case modulo_vs_bit_invert
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			#if ( 8 % ~ 4 ) == 3
			#define VAL 1.0
			#else
			#define VAL 0.0
			#endif

			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				out0 = VAL;
				${OUTPUT}
			}
		""
	end

	case modulo_vs_minus
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			#if ( 8 % - 2 ) == 0
			#define VAL 1.0
			#else
			#define VAL 0.0
			#endif

			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				out0 = VAL;
				${OUTPUT}
			}
		""
	end

	case modulo_vs_plus
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			#if ( 8 % + 2 ) == 0
			#define VAL 1.0
			#else
			#define VAL 0.0
			#endif

			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				out0 = VAL;
				${OUTPUT}
			}
		""
	end

	case div_vs_bit_invert
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			#if ( 8 / ~ 2 ) == -2
			#define VAL 1.0
			#else
			#define VAL 0.0
			#endif

			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				out0 = VAL;
				${OUTPUT}
			}
		""
	end

	case div_vs_minus
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			#if ( 8 / - 2 ) == -4
			#define VAL 1.0
			#else
			#define VAL 0.0
			#endif

			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				out0 = VAL;
				${OUTPUT}
			}
		""
	end

	case div_vs_plus
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			#if ( 8 / + 2 ) == 4
			#define VAL 1.0
			#else
			#define VAL 0.0
			#endif

			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				out0 = VAL;
				${OUTPUT}
			}
		""
	end

	case mul_vs_bit_invert
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			#if ( 8 * ~ 2 ) == -24
			#define VAL 1.0
			#else
			#define VAL 0.0
			#endif

			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				out0 = VAL;
				${OUTPUT}
			}
		""
	end

	case mul_vs_minus
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			#if ( 8 * - 2 ) == -16
			#define VAL 1.0
			#else
			#define VAL 0.0
			#endif

			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				out0 = VAL;
				${OUTPUT}
			}
		""
	end

	case mul_vs_plus
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			#if ( 8 * + 2 ) == 16
			#define VAL 1.0
			#else
			#define VAL 0.0
			#endif

			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				out0 = VAL;
				${OUTPUT}
			}
		""
	end

	case sub_vs_modulo
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			#if ( 8 - 3 % 2 ) == 7
			#define VAL 1.0
			#else
			#define VAL 0.0
			#endif

			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				out0 = VAL;
				${OUTPUT}
			}
		""
	end

	case sub_vs_div
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			#if ( 8 - 3 / 2 ) == 7
			#define VAL 1.0
			#else
			#define VAL 0.0
			#endif

			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				out0 = VAL;
				${OUTPUT}
			}
		""
	end

	case sub_vs_mul
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			#if ( 8 - 3 * 2 ) == 2
			#define VAL 1.0
			#else
			#define VAL 0.0
			#endif

			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				out0 = VAL;
				${OUTPUT}
			}
		""
	end

	case add_vs_modulo
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			#if ( 8 + 3 % 2 ) == 9
			#define VAL 1.0
			#else
			#define VAL 0.0
			#endif

			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				out0 = VAL;
				${OUTPUT}
			}
		""
	end

	case add_vs_div
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			#if ( 8 + 3 / 2 ) == 9
			#define VAL 1.0
			#else
			#define VAL 0.0
			#endif

			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				out0 = VAL;
				${OUTPUT}
			}
		""
	end

	case add_vs_mul
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			#if ( 8 + 3 * 2 ) == 14
			#define VAL 1.0
			#else
			#define VAL 0.0
			#endif

			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				out0 = VAL;
				${OUTPUT}
			}
		""
	end

	case rshift_vs_sub
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			#if ( 8 >> 3 - 2 ) == 4
			#define VAL 1.0
			#else
			#define VAL 0.0
			#endif

			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				out0 = VAL;
				${OUTPUT}
			}
		""
	end

	case rshift_vs_add
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			#if ( 8 >> 3 + 2 ) == 0
			#define VAL 1.0
			#else
			#define VAL 0.0
			#endif

			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				out0 = VAL;
				${OUTPUT}
			}
		""
	end

	case lshift_vs_sub
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			#if ( 8 << 3 - 2 ) == 16
			#define VAL 1.0
			#else
			#define VAL 0.0
			#endif

			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				out0 = VAL;
				${OUTPUT}
			}
		""
	end

	case lshift_vs_add
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			#if ( 8 << 3 + 2 ) == 256
			#define VAL 1.0
			#else
			#define VAL 0.0
			#endif

			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				out0 = VAL;
				${OUTPUT}
			}
		""
	end

	case greater_or_equal_vs_rshift
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			#if ( 8 >= 3 >> 2 ) == 1
			#define VAL 1.0
			#else
			#define VAL 0.0
			#endif

			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				out0 = VAL;
				${OUTPUT}
			}
		""
	end

	case greater_or_equal_vs_lshift
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			#if ( 8 >= 3 << 2 ) == 0
			#define VAL 1.0
			#else
			#define VAL 0.0
			#endif

			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				out0 = VAL;
				${OUTPUT}
			}
		""
	end

	case less_or_equal_vs_rshift
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			#if ( 8 <= 3 >> 2 ) == 0
			#define VAL 1.0
			#else
			#define VAL 0.0
			#endif

			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				out0 = VAL;
				${OUTPUT}
			}
		""
	end

	case less_or_equal_vs_lshift
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			#if ( 8 <= 3 << 2 ) == 1
			#define VAL 1.0
			#else
			#define VAL 0.0
			#endif

			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				out0 = VAL;
				${OUTPUT}
			}
		""
	end

	case greater_vs_rshift
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			#if ( 8 > 3 >> 2 ) == 1
			#define VAL 1.0
			#else
			#define VAL 0.0
			#endif

			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				out0 = VAL;
				${OUTPUT}
			}
		""
	end

	case greater_vs_lshift
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			#if ( 8 > 3 << 2 ) == 0
			#define VAL 1.0
			#else
			#define VAL 0.0
			#endif

			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				out0 = VAL;
				${OUTPUT}
			}
		""
	end

	case less_vs_rshift
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			#if ( 8 < 3 >> 2 ) == 0
			#define VAL 1.0
			#else
			#define VAL 0.0
			#endif

			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				out0 = VAL;
				${OUTPUT}
			}
		""
	end

	case less_vs_lshift
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			#if ( 8 < 3 << 2 ) == 1
			#define VAL 1.0
			#else
			#define VAL 0.0
			#endif

			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				out0 = VAL;
				${OUTPUT}
			}
		""
	end

	case not_equal_vs_greater_or_equal
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			#if ( 8 != 3 >= 2 ) == 1
			#define VAL 1.0
			#else
			#define VAL 0.0
			#endif

			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				out0 = VAL;
				${OUTPUT}
			}
		""
	end

	case not_equal_vs_less_or_equal
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			#if ( 8 != 3 <= 2 ) == 1
			#define VAL 1.0
			#else
			#define VAL 0.0
			#endif

			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				out0 = VAL;
				${OUTPUT}
			}
		""
	end

	case not_equal_vs_greater
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			#if ( 8 != 3 > 2 ) == 1
			#define VAL 1.0
			#else
			#define VAL 0.0
			#endif

			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				out0 = VAL;
				${OUTPUT}
			}
		""
	end

	case not_equal_vs_less
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			#if ( 8 != 3 < 2 ) == 1
			#define VAL 1.0
			#else
			#define VAL 0.0
			#endif

			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				out0 = VAL;
				${OUTPUT}
			}
		""
	end

	case equal_vs_greater_or_equal
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			#if ( 8 == 3 >= 2 ) == 0
			#define VAL 1.0
			#else
			#define VAL 0.0
			#endif

			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				out0 = VAL;
				${OUTPUT}
			}
		""
	end

	case equal_vs_less_or_equal
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			#if ( 8 == 3 <= 2 ) == 0
			#define VAL 1.0
			#else
			#define VAL 0.0
			#endif

			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				out0 = VAL;
				${OUTPUT}
			}
		""
	end

	case equal_vs_greater
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			#if ( 8 == 3 > 2 ) == 0
			#define VAL 1.0
			#else
			#define VAL 0.0
			#endif

			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				out0 = VAL;
				${OUTPUT}
			}
		""
	end

	case equal_vs_less
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			#if ( 8 == 3 < 2 ) == 0
			#define VAL 1.0
			#else
			#define VAL 0.0
			#endif

			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				out0 = VAL;
				${OUTPUT}
			}
		""
	end

	case bitwise_and_vs_not_equal
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			#if ( 8 & 3 != 2 ) == 0
			#define VAL 1.0
			#else
			#define VAL 0.0
			#endif

			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				out0 = VAL;
				${OUTPUT}
			}
		""
	end

	case bitwise_and_vs_equal
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			#if ( 8 & 3 == 2 ) == 0
			#define VAL 1.0
			#else
			#define VAL 0.0
			#endif

			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				out0 = VAL;
				${OUTPUT}
			}
		""
	end

	case xor_vs_bitwise_and
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			#if ( 8 ^ 3 & 2 ) == 10
			#define VAL 1.0
			#else
			#define VAL 0.0
			#endif

			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				out0 = VAL;
				${OUTPUT}
			}
		""
	end

	case bitwise_or_vs_xor
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			#if ( 8 | 3 ^ 2 ) == 9
			#define VAL 1.0
			#else
			#define VAL 0.0
			#endif

			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				out0 = VAL;
				${OUTPUT}
			}
		""
	end

	case logical_and_vs_bitwise_or
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			#if ( 0 && 3 | 2 )
			#define VAL 0.0
			#else
			#define VAL 1.0
			#endif

			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				out0 = VAL;
				${OUTPUT}
			}
		""
	end

	case logical_and_vs_bitwise_and
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			#if ( 0 && 4 & 2 )
			#define VAL 0.0
			#else
			#define VAL 1.0
			#endif

			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				out0 = VAL;
				${OUTPUT}
			}
		""
	end

	case logical_or_vs_logical_and
		version 300 es
		values { output float out0 = 1.0; }
		both ""
			#version 300 es
			#if ( 0 || 4 && 0 )
			#define VAL 0.0
			#else
			#define VAL 1.0
			#endif

			precision mediump float;
			${DECLARATIONS}
			void main()
			{
				out0 = VAL;
				${OUTPUT}
			}
		""
	end

end # operator_precedence
