case float_input
	values
	{
		input float in0		= [ 1.123 | 0.75 | -512.0 | -72.13 | 199.91 | -1.123 | -0.75 | 512.0 | -72.13 | -199.91 ];
		output float out0	= [ 1.123 | 0.75 | -512.0 | -72.13 | 199.91 | -1.123 | -0.75 | 512.0 | -72.13 | -199.91 ];
	}

	both ""
		precision highp float;
		${DECLARATIONS}
		void main()
		{
			out0 = in0;
			${OUTPUT}
		}
	""
end

case float_uniform
	values
	{
		uniform float uni0	= [ 1.123 | 0.75 | -512.0 | -72.13 | 199.91 ];
		output float out0	= [ 1.123 | 0.75 | -512.0 | -72.13 | 199.91 ];
	}

	both ""
		precision highp float;
		${DECLARATIONS}
		uniform float uni0;
		void main()
		{
			out0 = uni0;
			${OUTPUT}
		}
	""
end

case float_0
	values { output float out0 = 1.123; }
	both ""
		precision highp float;
		${DECLARATIONS}
		void main()
		{
			out0 = +1.123;
			${OUTPUT}
		}
	""
end

case float_1
	values { output float out0 = -1.123; }
	both ""
		precision highp float;
		${DECLARATIONS}
		void main()
		{
			out0 = -1.123;
			${OUTPUT}
		}
	""
end

case float_2
	values { output float out0 = 123.0; }
	both ""
		precision highp float;
		${DECLARATIONS}
		void main()
		{
			out0 = 123.;
			${OUTPUT}
		}
	""
end

case float_3
	values { output float out0 = 0.123; }
	both ""
		precision highp float;
		${DECLARATIONS}
		void main()
		{
			out0 = .123;
			${OUTPUT}
		}
	""
end

case float_4
	values { output float out0 = 123.0; }
	both ""
		precision highp float;
		${DECLARATIONS}
		void main()
		{
			out0 = 1.23e+2;
			${OUTPUT}
		}
	""
end

case float_5
	values { output float out0 = -123.0; }
	both ""
		precision highp float;
		${DECLARATIONS}
		void main()
		{
			out0 = -1.23E+2;
			${OUTPUT}
		}
	""
end

case float_6
	values { output float out0 = -123.0; }
	both ""
		precision highp float;
		${DECLARATIONS}
		void main()
		{
			out0 = -1.23e2;
			${OUTPUT}
		}
	""
end

case float_7
	values { output float out0 = 0.123; }
	both ""
		precision highp float;
		${DECLARATIONS}
		void main()
		{
			out0 = 1.23e-1;
			${OUTPUT}
		}
	""
end

case float_8
	values { output float out0 = 1000.0; }
	both ""
		precision highp float;
		${DECLARATIONS}
		void main()
		{
			out0 = 1e3;
			${OUTPUT}
		}
	""
end

case int_0
	values { output int out0 = 123; }
	both ""
		precision highp float;
		${DECLARATIONS}
		void main()
		{
			out0 = 123;
			${OUTPUT}
		}
	""
end

case int_1
	values { output int out0 = -321; }
	both ""
		precision highp float;
		${DECLARATIONS}
		void main()
		{
			out0 = -321;
			${OUTPUT}
		}
	""
end

case int_2
	values { output int out0 = 123; }
	both ""
		precision highp float;
		${DECLARATIONS}
		void main()
		{
			out0 = 0x7B;
			${OUTPUT}
		}
	""
end

case int_3
	values { output int out0 = 123; }
	both ""
		precision highp float;
		${DECLARATIONS}
		void main()
		{
			out0 = 0X7b;
			${OUTPUT}
		}
	""
end

case int_4
	values { output int out0 = 123; }
	both ""
		precision highp float;
		${DECLARATIONS}
		void main()
		{
			out0 = 0173;
			${OUTPUT}
		}
	""
end

case bool_0
	values { output bool out0 = true; }
	both ""
		precision highp float;
		${DECLARATIONS}
		void main()
		{
			out0 = true;
			${OUTPUT}
		}
	""
end

case bool_1
	values { output bool out0 = false; }
	both ""
		precision highp float;
		${DECLARATIONS}
		void main()
		{
			out0 = false;
			${OUTPUT}
		}
	""
end

case const_float_global
	 values { output float out0 = 1000.0; }

	 both ""
		  precision mediump float;
		  ${DECLARATIONS}
		  const float theConstant = 1000.0;
		  void main()
		  {
				out0 = theConstant;
				${OUTPUT}
		  }
	 ""
end

case const_float_main
	 values { output float out0 = -1000.0; }

	 both ""
		  precision mediump float;
		  ${DECLARATIONS}
		  void main()
		  {
			    const float theConstant = -1000.0;
				out0 = theConstant;
				${OUTPUT}
		  }
	 ""
end

case const_float_function
	 values { output float out0 = -0.012; }

	 both ""
		  precision mediump float;
		  ${DECLARATIONS}
		  float func()
		  {
			    const float theConstant = -0.012;
				return theConstant;
		  }
		  void main()
		  {
				out0 = func();
				${OUTPUT}
		  }
	 ""
end

case const_float_scope
	 values { output float out0 = 1.0; }

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

case const_float_scope_shawdowing_1
	 values { output float out0 = 1.0; }

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

case const_float_scope_shawdowing_2
	 values { output float out0 = 1.0; }

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

case const_float_scope_shawdowing_3
	 values { output float out0 = 1.0; }

	 both ""
		  precision mediump float;
	      ${DECLARATIONS}
		  const float theConstant = 100.0;
		  void main()
		  {
			    const float theConstant = -100.0;
				{
					 const float theConstant = 1.0;
					 out0 = theConstant;
			    }
				${OUTPUT}
		  }
	 ""
end

case const_float_scope_shawdowing_4
	 values { output float out0 = 2.0; }

	 both ""
		  precision mediump float;
	      ${DECLARATIONS}
		  const float theConstant = 100.0;
		  float func()
		  {
				const float theConstant = 2.0;
				return theConstant;
		  }
		  void main()
		  {
			    const float theConstant = -100.0;
				{
					 const float theConstant = 1.0;
					 out0 = func();
			    }
				${OUTPUT}
		  }
	 ""
end

case const_float_operations_with_const
	 values { output float out0 = 21.0; }

	 both ""
		  precision mediump float;
	      ${DECLARATIONS}
		  const float theGlobalConstant = 10.0;
		  float func()
		  {
				const float theConstant = 2.0;
				return theConstant;
		  }
		  void main()
		  {
			    const float theConstant = -100.0;
				{
					 const float theConstant = 1.0;
					 out0 = func() * theGlobalConstant + theConstant;
			    }
				${OUTPUT}
		  }
	 ""
end

case const_float_assignment_1
	 values { output float out0 = 10.0; }

	 both ""
		  precision mediump float;
	      ${DECLARATIONS}
		  void main()
		  {
			    const float theConstant1 = 10.0;
				const float theConstant2 = theConstant1;
				out0 = theConstant2;
				${OUTPUT}
		  }
	 ""
end

case const_float_assignment_2
	 values { output float out0 = 10.0; }

	 both ""
		  precision mediump float;
	      ${DECLARATIONS}
		  void main()
		  {
			    const float theConstant1 = 10.0;
				{
					const float theConstant2 = theConstant1;
					out0 = theConstant2;
				}
				${OUTPUT}
		  }
	 ""
end

case const_float_assignment_3
	 values { output float out0 = 10.0; }

	 both ""
		  precision mediump float;
	      ${DECLARATIONS}
	      const float theConstant1 = 10.0;
		  void main()
		  {
				const float theConstant2 = theConstant1;
				out0 = theConstant2;
				${OUTPUT}
		  }
	 ""
end

case const_float_assignment_4
	 values { output float out0 = 10.0; }

	 both ""
		  precision mediump float;
	      ${DECLARATIONS}
	      const float theConstant1 = 10.0;
		  float func()
		  {
				const float theConstant2 = theConstant1;
				return theConstant2;
		  }
		  void main()
		  {
				out0 = func();
				${OUTPUT}
		  }
	 ""
end

case const_float_assign_uniform
	 expect compile_fail
	 values { output float out0 = 10.0; }
	 both ""
		  precision mediump float;
	      ${DECLARATIONS}
		  uniform float theUniform;
		  void main()
		  {
				const float theConstant = theUniform;
				out0 = theConstant;
				${OUTPUT}
		  }
	 ""
end

case const_float_assign_varying
	 expect compile_fail
	 values { output float out0 = 10.0; }
	 vertex ""
	      ${VERTEX_DECLARATIONS}
		  varying float theVarying;
		  void main()
		  {
				theVarying = 1.0;
				gl_Position = vec(1.0);
		  }
	 ""
	 fragment ""
		  precision mediump float;
	      ${FRAGMENT_DECLARATIONS}
		  varying float theVarying;
		  void main()
		  {
				const float theConstant = theVarying;
				out0 = theConstant;
				${FRAGMENT_OUTPUT}
		  }
	 ""
end

case const_float_function_gotcha
	 desc "Function constant parameters are not really constants, so using them as constant expressions should fail."
	 expect compile_fail
	 values { output float out0 = 20.0; }
	 both ""
		  precision mediump float;
	      ${DECLARATIONS}
		  float func(const float gotcha)
		  {
				const float theConstant2 = gotcha;
				return theConstant2*2.0;
		  }
		  void main()
		  {
			    const float theConstant = 10.0;
				out0 = func(theConstant);
				${OUTPUT}
		  }
	 ""
end

case const_float_from_int
	 values { output float out0 = 10.0; }

	 both ""
		  precision mediump float;
	      ${DECLARATIONS}
	      const float theConstant = float(10);
		  void main()
		  {
				out0 = theConstant;
				${OUTPUT}
		  }
	 ""
end

case const_float_from_vec2
	 values { output float out0 = 10.0; }

	 both ""
		  precision mediump float;
	      ${DECLARATIONS}
	      const float theConstant = vec2(1.0, 10.0).y;
		  void main()
		  {
				out0 = theConstant;
				${OUTPUT}
		  }
	 ""
end

case const_float_from_vec3
	 values { output float out0 = 10.0; }

	 both ""
		  precision mediump float;
	      ${DECLARATIONS}
	      const float theConstant = vec3(1.0, 10.0, 20.0).y;
		  void main()
		  {
				out0 = theConstant;
				${OUTPUT}
		  }
	 ""
end

case const_float_from_vec4
	 values { output float out0 = 10.0; }

	 both ""
		  precision mediump float;
	      ${DECLARATIONS}
	      const float theConstant = vec4(1.0, 10.0, 20.0, -10.0).y;
		  void main()
		  {
				out0 = theConstant;
				${OUTPUT}
		  }
	 ""
end

case const_float_assign_variable_1
	 expect compile_fail
	 values { output float out0 = 20.0; }
	 both ""
		  precision mediump float;
	      ${DECLARATIONS}
		  void main()
		  {
				float theVariable = 20.0;
				const float theConstant = theVariable;
				out0 = theConstant;
				${OUTPUT}
		  }
	 ""
end

case const_float_assign_variable_2
	 expect compile_fail
	 values { output float out0 = 50.0; }
	 both ""
		  precision mediump float;
	      ${DECLARATIONS}
		  void main()
		  {
				float theVariable = 20.0;
				theVariable += 30.0;
				const float theConstant = theVariable;
				out0 = theConstant;
				${OUTPUT}
		  }
	 ""
end

case const_float_assign_user_func
	 expect compile_fail
	 values { output float out0 = 50.0; }
	 both ""
		  precision mediump float;
	      ${DECLARATIONS}
		  float func()
		  {
				return 50.0;
		  }
		  void main()
		  {
				const float theConstant = func();
				out0 = theConstant;
				${OUTPUT}
		  }
	 ""
end
