group trivial "Trivial expressions"

	case float
		values { output float out0 = 5.0; }
		both ""

			precision highp float;
			${DECLARATIONS}

			void main()
			{
				const float a = 5.0;
				out0 = a;
				${OUTPUT}
			}
		""
	end

	case int
		values { output int out0 = 5; }
		both ""
			precision highp float;
			${DECLARATIONS}

			void main()
			{
				const int a = 5;
				out0 = a;
				${OUTPUT}
			}
		""
	end

	case bool
		values { output bool out0 = true; }
		both ""
			precision highp float;
			${DECLARATIONS}

			void main()
			{
				const bool a = true;
				out0 = a;
				${OUTPUT}
			}
		""
	end

	case cast
		values { output float out0 = 1.0; }
		both ""
			precision highp float;
			${DECLARATIONS}

			void main()
			{
				const float a = float(int(bool(true)));
				out0 = a;
				${OUTPUT}
			}
		""
	end

end # trivial

group operators "Operators"

	case math_float
		values { output float out0 = 2.19; }
		both ""
			precision highp float;
			${DECLARATIONS}

			void main()
			{
				const float a = 6.0/3.5 + 1.8*2.6 - 4.2;
				out0 = a;
				${OUTPUT}
			}
		""
	end

	case math_vec
		values { output float out0 = 15.0; }
		both ""
			precision highp float;
			${DECLARATIONS}

			void main()
			{
				const vec3 a = (vec4(1.0, 2.0, 3.0, 4.0).zyx * vec3(1.0, 1.5, 3.0).xyz).xzy + (vec2(5.0)/vec2(2.5)).xxy;
				out0 = a.x + a.y + a.z;
				${OUTPUT}
			}
		""
	end

	case math_int
		values { output int out0 = 7; }
		both ""
			precision highp int;
			${DECLARATIONS}

			void main()
			{
				const int a = 5-1 + 2*3 - 9/3;
				out0 = a;
				${OUTPUT}
			}
		""
	end

	case math_ivec
		values { output int out0 = 21; }
		both ""
			precision highp int;
			${DECLARATIONS}

			void main()
			{
				const ivec3 a = ivec2(5-1, 4).xxy + ivec4(1*3, 9/3, 1+2, 8/4).xyz;
				out0 = a.x + a.y + a.z;
				${OUTPUT}
			}
		""
	end

	case math_mat
		values { output float out0 = 8.0; }
		both ""
			precision highp float;
			${DECLARATIONS}

			void main()
			{
				const mat3 a = mat3(3.0) * mat3(4.0);
				const mat4 b = mat4(a[1][1])*2.0;
				const mat2 c = mat2(b[0][0]) / 3.0;
				out0 = c[0][0]+c[1][0];
				${OUTPUT}
			}
		""
	end

	case logical
		values { output bool out0 = true; }
		both ""
			precision highp int;
			${DECLARATIONS}

			void main()
			{
				const bool a = (!false || false) && (true ^^ false);
				out0 = a;
				${OUTPUT}
			}
		""
	end

	case compare
		values { output bool out0 = true; }
		both ""
			precision highp int;
			${DECLARATIONS}

			void main()
			{
				const bool a = (false == false) && (true != false) && (1 < 2) && (3 <= 3) && ((1 > 1) != (1 >= 1));
				out0 = a;
				${OUTPUT}
			}
		""
	end

	case selection
		values { output float out0 = 5.3; }
		both ""
			precision highp float;
			${DECLARATIONS}

			void main()
			{
				const float a = false ? 0.0 : (true ? 5.3 : 1.0);
				out0 = a;
				${OUTPUT}
			}
		""
	end

end # operators

group complex_types "Arrays, structs & nested calls"

	case struct
		values { output float out0 = 260.922; }
		both ""
			precision highp float;
			${DECLARATIONS}

			struct S
			{
				vec4 a;
				int  b;
			};

			void main()
			{
				const S s = S(vec4(1.5), 123);
				out0 = length(s.a.xy)*float(s.b);
				${OUTPUT}
			}
		""
	end

	case nested_struct
		values { output float out0 = 965.9; }
		both ""
			precision highp float;
			${DECLARATIONS}

			struct S
			{
				vec4 v;
				int  i;
			};

			struct T
			{
				S s;
				bool b;
				int i;
			};

			struct U
			{
				S s;
				T t;
			};

			void main()
			{
				const S s = S(vec4(1.5), 123);
				const T t = T(s, false, 3);
				const U u = U(s, t);
				const U v = U(S(vec4(1.3), 4), T(S(vec4(2.0), 5), true, 6));
				out0 = float(u.s.i*v.t.i + v.t.s.i)*v.s.v.x; // float(123*6 + 5)*1.3
				${OUTPUT}
			}
		""
	end

	case array
		values
		{
			input float in0 = [ 0.0 | 1.0];
			output float out0 = [0.0 | 1.0];
		}
		both ""
			precision highp float;
			${DECLARATIONS}

			void main()
			{
				float a[int(max(-1.0, 2.0))];
				a[0] = -1.0;
				a[1] = in0;
				out0 = a[int(min(1.0, 2.0))];
				${OUTPUT}
			}
		""
	end

	case nested_builtin_funcs
		values { output float out0 = 3.05; }
		both ""
			precision highp float;
			${DECLARATIONS}

			void main()
			{
				const float a = sqrt( atan(sin(1.5)/cos(1.5)) /*1.5*/ * log2(exp2(log(exp(6.2) + 0.1)) + 0.1) /*~6.2*/);
				out0 = a;
				${OUTPUT}
			}
		""
	end

end # complex_types
