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

		void main ()
		{
			switch ()
			{
				case 1:
					${POSITION_FRAG_COLOR} = vec4(1.0);
			}

			${OUTPUT}
		}
	""
end

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

		void main ()
		{
			float c = 1.0;
			switch (c)
			{
				case 1:
					${POSITION_FRAG_COLOR} = vec4(1.0);
			}

			${OUTPUT}
		}
	""
end

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

		void main ()
		{
			bool c = true;
			switch (c)
			{
				case 1:
					${POSITION_FRAG_COLOR} = vec4(1.0);
			}

			${OUTPUT}
		}
	""
end

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

		void main ()
		{
			ivec2 c = ivec2(1, 1);
			switch (c)
			{
				case 1:
					${POSITION_FRAG_COLOR} = vec4(1.0);
			}

			${OUTPUT}
		}
	""
end

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

		struct S { int m; };

		void main ()
		{
			S c = S(1);
			switch (c)
			{
				case 1:
					${POSITION_FRAG_COLOR} = vec4(1.0);
			}

			${OUTPUT}
		}
	""
end

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

		void main ()
		{
			int c = 1;
			switch (c)
			{
				case 1:
				case 1:
					break;
			}

			${OUTPUT}
		}
	""
end

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

		void main ()
		{
			int c = 1;
			switch (c)
			{
				case 1.0:
					break;
			}

			${OUTPUT}
		}
	""
end

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

		void main ()
		{
			int c = 1;
			int l = 2;
			switch (c)
			{
				case l:
					break;
			}

			${OUTPUT}
		}
	""
end

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

		void main ()
		{
			switch (1)
			{
					${POSITION_FRAG_COLOR} = vec4(1.0);
				case 1:
					${POSITION_FRAG_COLOR} = vec4(0.0);
			}

			${OUTPUT}
		}
	""
end

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

		void main ()
		{
			switch (1)
			{
					${POSITION_FRAG_COLOR} = vec4(1.0);
				default:
					${POSITION_FRAG_COLOR} = vec4(0.0);
			}

			${OUTPUT}
		}
	""
end

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

		void main ()
		{
			switch (1)
			{
				case 0:
					break;
				case 1:
			}

			${OUTPUT}
		}
	""
end

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

		void main ()
		{
			switch (1)
			{
				case 0:
					break;
				default:
			}

			${OUTPUT}
		}
	""
end

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

		void main ()
		{
			float f = 1.0;
			switch (1)
			{
				case 0:
					f = 0.0;
					if (f > 0.0)
					{
						case 1:
							f *= 2.0;
					}
					break;
				case 2:
					break;
			}

			${OUTPUT}
		}
	""
end

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

		void main ()
		{
			float f = 1.0;
			switch (1)
			{
				case 0:
					f = 0.0;
					if (f > 0.0)
					{
						default:
							f *= 2.0;
					}
					break;
				case 2:
					break;
			}

			${OUTPUT}
		}
	""
end

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

		void main ()
		{
			float f = 1.0;
			switch (1)
			{
				case 0:
					f = 0.0;
					for (int i = 0; i < 2; i++)
					{
						case 1:
							f *= 2.0;
					}
					break;
				case 2:
					break;
			}

			${OUTPUT}
		}
	""
end

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

		void main ()
		{
			float f = 1.0;
			switch (1)
			{
				case 0:
					f = 0.0;
					for (int i = 0; i < 2; i++)
					{
						default:
							f *= 2.0;
					}
					break;
				case 2:
					break;
			}

			${OUTPUT}
		}
	""
end

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

		void main ()
		{
			float f = 1.0;
			switch (1)
			{
				case 0:
					f = 0.0;
					while (f > 0.0)
					{
						case 1:
							f *= 2.0;
					}
					break;
				case 2:
					break;
			}

			${OUTPUT}
		}
	""
end

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

		void main ()
		{
			float f = 1.0;
			switch (1)
			{
				case 0:
					f = 0.0;
					while (f > 0.0)
					{
						default:
							f *= 2.0;
					}
					break;
				case 2:
					break;
			}

			${OUTPUT}
		}
	""
end

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

		void main ()
		{
			float f = 1.0;
			switch (1)
			{
				case 0:
					f = 0.0;
					do
					{
						case 1:
							f *= 2.0;
					} while (f > 0.0);
					break;
				case 2:
					break;
			}

			${OUTPUT}
		}
	""
end

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

		void main ()
		{
			float f = 1.0;
			switch (1)
			{
				case 0:
					f = 0.0;
					do
					{
						default:
							f *= 2.0;
					} while (f > 0.0);
					break;
				case 2:
					break;
			}

			${OUTPUT}
		}
	""
end

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

		void main ()
		{
			switch (1)
			{
				case 1
					${POSITION_FRAG_COLOR} = vec4(1.0);
			}

			${OUTPUT}
		}
	""
end

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

		void main ()
		{
			switch (1)
				case 1:
					${POSITION_FRAG_COLOR} = vec4(1.0);
			}

			${OUTPUT}
		}
	""
end

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

		void main ()
		{
			switch (1)
			{
				case 1:
					${POSITION_FRAG_COLOR} = vec4(1.0);

			${OUTPUT}
		}
	""
end

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

		void main ()
		{
			switch (1)
			{
				case case 1:
					${POSITION_FRAG_COLOR} = vec4(1.0);
			}

			${OUTPUT}
		}
	""
end

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

		void main ()
		{
			switch (1)
			{
				default:
					break;
				default:
					${POSITION_FRAG_COLOR} = vec4(1.0);
			}

			${OUTPUT}
		}
	""
end

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

		void main ()
		{
			switch (1)
			{
				default default:
					${POSITION_FRAG_COLOR} = vec4(1.0);
			}

			${OUTPUT}
		}
	""
end
