You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
4317 lines
62 KiB
4317 lines
62 KiB
group basic "Basic Tests"
|
|
|
|
case correct_phases
|
|
expect compile_fail
|
|
both ""
|
|
#define e +1
|
|
void main()
|
|
{
|
|
mediump int n = 1e;
|
|
}
|
|
""
|
|
end
|
|
|
|
case invalid_identifier
|
|
expect compile_fail
|
|
both ""
|
|
#define e +1
|
|
|
|
void main()
|
|
{
|
|
mediump int 1xyz = 1;
|
|
}
|
|
""
|
|
end
|
|
|
|
case null_directive
|
|
values { output float out0 = 0.0; }
|
|
both ""
|
|
precision mediump float;
|
|
${DECLARATIONS}
|
|
|
|
#
|
|
# // comment
|
|
/*sfd*/ # /* */
|
|
|
|
void main()
|
|
{
|
|
out0 = 0.0;
|
|
${OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case invalid_directive
|
|
expect compile_fail
|
|
both ""
|
|
#defin AAA
|
|
|
|
void main()
|
|
{
|
|
}
|
|
""
|
|
end
|
|
|
|
case missing_identifier
|
|
expect compile_fail
|
|
both ""
|
|
#define
|
|
|
|
void main()
|
|
{
|
|
}
|
|
""
|
|
end
|
|
|
|
case empty_object
|
|
values { output float out0 = -1.0; }
|
|
both ""
|
|
precision mediump float;
|
|
${DECLARATIONS}
|
|
|
|
# define VALUE
|
|
|
|
void main()
|
|
{
|
|
out0 = VALUE - 1.0;
|
|
${OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case empty_function
|
|
values { output float out0 = -1.0; }
|
|
both ""
|
|
precision mediump float;
|
|
${DECLARATIONS}
|
|
|
|
# define VALUE(a)
|
|
|
|
void main()
|
|
{
|
|
out0 = VALUE(2.0) - 1.0;
|
|
${OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
|
|
case empty_directive
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
precision mediump float;
|
|
${DECLARATIONS}
|
|
|
|
#
|
|
|
|
void main()
|
|
{
|
|
out0 = 1.0;
|
|
${OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case identifier_with_double_underscore
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
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
|
|
values { output float out0 = 6.0; }
|
|
|
|
both ""
|
|
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
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
#define VAL 2.0
|
|
#undef VAL sdflkjfds
|
|
#define VAL 1.0
|
|
|
|
void main()
|
|
{
|
|
${POSITION_FRAG_COLOR} = vec4(VAL);
|
|
}
|
|
""
|
|
end
|
|
|
|
case undefine_invalid_object_1
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
#undef __LINE__
|
|
|
|
void main()
|
|
{
|
|
${POSITION_FRAG_COLOR} = vec4(__LINE__);
|
|
}
|
|
""
|
|
end
|
|
|
|
case undefine_invalid_object_2
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
#undef __FILE__
|
|
|
|
void main()
|
|
{
|
|
${POSITION_FRAG_COLOR} = vec4(__FILE__);
|
|
}
|
|
""
|
|
end
|
|
|
|
case undefine_invalid_object_3
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
#undef __VERSION__
|
|
|
|
void main()
|
|
{
|
|
${POSITION_FRAG_COLOR} = vec4(__VERSION__);
|
|
}
|
|
""
|
|
end
|
|
|
|
case undefine_invalid_object_4
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
#undef GL_ES
|
|
|
|
void main()
|
|
{
|
|
${POSITION_FRAG_COLOR} = vec4(GL_ES);
|
|
}
|
|
""
|
|
end
|
|
|
|
case undefine_function
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
precision mediump float;
|
|
${DECLARATIONS}
|
|
#define FUNCTION(a,b) a+b
|
|
#undef FUNCTION
|
|
#define FUNCTION(a,b) a-b
|
|
|
|
void main()
|
|
{
|
|
out0 = FUNCTION(3.0, 2.0);
|
|
${OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
end # definitions
|
|
|
|
group invalid_definitions "Invalid Definition Tests"
|
|
|
|
case define_non_identifier
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
#define 123 321
|
|
|
|
void main()
|
|
{
|
|
${POSITION_FRAG_COLOR} = vec4(1.0);
|
|
}
|
|
""
|
|
end
|
|
|
|
case undef_non_identifier_1
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
#undef 123
|
|
|
|
void main()
|
|
{
|
|
${POSITION_FRAG_COLOR} = vec4(1.0);
|
|
}
|
|
""
|
|
end
|
|
|
|
case undef_non_identifier_2
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
#undef foo.bar
|
|
|
|
void main()
|
|
{
|
|
${POSITION_FRAG_COLOR} = vec4(1.0);
|
|
}
|
|
""
|
|
end
|
|
|
|
|
|
end # invalid_definitions
|
|
|
|
group object_redefinitions "Object Redefinition Tests"
|
|
|
|
case invalid_object_ident
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
# 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
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
# 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
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
# 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
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
# 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
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
# 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
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
# define AAA 2
|
|
# define VALUE (AAA - 1)
|
|
# define VALUE (AAA - 2)
|
|
|
|
void main()
|
|
{
|
|
${POSITION_FRAG_COLOR} = vec4(VALUE);
|
|
}
|
|
""
|
|
end
|
|
|
|
case invalid_object_intval_2
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
# define AAA 2
|
|
# define VALUE (AAA - 1)
|
|
# define VALUE (AAA - 0x1)
|
|
|
|
void main()
|
|
{
|
|
${POSITION_FRAG_COLOR} = vec4(VALUE);
|
|
}
|
|
""
|
|
end
|
|
|
|
case redefine_object_1
|
|
values { output float out0 = 6.0; }
|
|
|
|
both ""
|
|
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
|
|
values { output float out0 = 1.0; }
|
|
|
|
both ""
|
|
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
|
|
values { output float out0 = 1.0; }
|
|
|
|
both ""
|
|
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
|
|
values { output float out0 = 1.0; }
|
|
|
|
both ""
|
|
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
|
|
values { output float out0 = 1.0; }
|
|
|
|
both ""
|
|
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
|
|
values { output float out0 = 1.0; }
|
|
|
|
both ""
|
|
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
|
|
values { output float out0 = 6.0; }
|
|
|
|
both ""
|
|
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
|
|
values { output float out0 = 6.0; }
|
|
|
|
both ""
|
|
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
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
# 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
|
|
values { output float out0 = 4.2; }
|
|
both ""
|
|
precision mediump float;
|
|
${DECLARATIONS}
|
|
#define VALUE /* current
|
|
value */ 4.2
|
|
|
|
void main()
|
|
{
|
|
out0 = VALUE;
|
|
${OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case nested_comment
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
precision mediump float;
|
|
${DECLARATIONS}
|
|
void main()
|
|
{
|
|
out0 = 0.0;
|
|
/* /* */
|
|
out0 = 1.0;
|
|
// */
|
|
${OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case comment_trick_1
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
precision mediump float;
|
|
${DECLARATIONS}
|
|
void main()
|
|
{
|
|
/*/
|
|
out0 = 0.0;
|
|
/*/
|
|
out0 = 1.0;
|
|
/**/
|
|
${OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case comment_trick_2
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
precision mediump float;
|
|
${DECLARATIONS}
|
|
void main()
|
|
{
|
|
/**/
|
|
out0 = 1.0;
|
|
/*/
|
|
out0 = 0.0;
|
|
/**/
|
|
${OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case invalid_comment
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
void main()
|
|
{
|
|
/* /* */ */
|
|
${POSITION_FRAG_COLOR} = 1.0;
|
|
}
|
|
""
|
|
end
|
|
|
|
case unterminated_comment_1
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
void main()
|
|
{
|
|
/*
|
|
}
|
|
""
|
|
end
|
|
|
|
case unterminated_comment_2
|
|
expect compile_fail
|
|
both ""
|
|
/*
|
|
precision mediump float;
|
|
void main()
|
|
{
|
|
}
|
|
""
|
|
end
|
|
|
|
end # comments
|
|
|
|
group function_definitions "Function Definitions Tests"
|
|
|
|
case same_object_and_function_param
|
|
values { output float out0 = 1.0; }
|
|
|
|
both ""
|
|
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
|
|
values { output float out0 = 518.5; }
|
|
both ""
|
|
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
|
|
values { output float out0 = 3.0; }
|
|
both ""
|
|
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
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
# define AAA AAA
|
|
|
|
void main()
|
|
{
|
|
${POSITION_FRAG_COLOR} = vec4(AAA);
|
|
}
|
|
""
|
|
end
|
|
|
|
case recursion_2
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
# define AAA BBB
|
|
#define BBB AAA
|
|
|
|
void main()
|
|
{
|
|
${POSITION_FRAG_COLOR} = vec4(AAA);
|
|
}
|
|
""
|
|
end
|
|
|
|
case recursion_3
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
# define AAA (1.0+BBB)
|
|
#define BBB (2.0+AAA)
|
|
|
|
void main()
|
|
{
|
|
${POSITION_FRAG_COLOR} = vec4(AAA);
|
|
}
|
|
""
|
|
end
|
|
|
|
case recursion_4
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
# define AAA(a) AAA(a)
|
|
|
|
void main()
|
|
{
|
|
${POSITION_FRAG_COLOR} = vec4(AAA(1.0));
|
|
}
|
|
""
|
|
end
|
|
|
|
case recursion_5
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
# 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
|
|
values { output float out0 = 3.0; }
|
|
both ""
|
|
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
|
|
values { output float out0 = 3.0; }
|
|
both ""
|
|
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
|
|
values { output float out0 = 3.0; }
|
|
both ""
|
|
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
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
# define FUNC(a,b) a+b
|
|
# define FUNC(A,b) A+b
|
|
|
|
void main()
|
|
{
|
|
${POSITION_FRAG_COLOR} = vec4(FUNC(1.0, 2.0));
|
|
}
|
|
""
|
|
end
|
|
|
|
case invalid_function_redefinition_param_2
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
# define FUNC(a,b) a+b
|
|
# define FUNC(a,b,c) a+b+c
|
|
|
|
void main()
|
|
{
|
|
${POSITION_FRAG_COLOR} = vec4(FUNC(1.0, 2.0, 3.0));
|
|
}
|
|
""
|
|
end
|
|
|
|
case invalid_function_redefinition_param_3
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
# define FUNC(a,b) a+b
|
|
# define FUNC(a,b) b+a
|
|
|
|
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
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
# define FUNC(a,b) a+b
|
|
|
|
void main()
|
|
{
|
|
${POSITION_FRAG_COLOR} = vec4(FUNC);
|
|
}
|
|
""
|
|
end
|
|
|
|
case arguments_2
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
# define FUNC(a,b) a+b
|
|
|
|
void main()
|
|
{
|
|
${POSITION_FRAG_COLOR} = vec4(FUNC());
|
|
}
|
|
""
|
|
end
|
|
|
|
case arguments_3
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
# define FUNC(a,b) a+b
|
|
|
|
void main()
|
|
{
|
|
${POSITION_FRAG_COLOR} = vec4(FUNC((();
|
|
}
|
|
""
|
|
end
|
|
|
|
case arguments_4
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
# define FUNC(a,b) a+b
|
|
|
|
void main()
|
|
{
|
|
${POSITION_FRAG_COLOR} = vec4(FUNC));
|
|
}
|
|
""
|
|
end
|
|
|
|
case arguments_5
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
# define FUNC(a,b) a+b
|
|
|
|
void main()
|
|
{
|
|
${POSITION_FRAG_COLOR} = vec4(FUNC(1.0));
|
|
}
|
|
""
|
|
end
|
|
|
|
case arguments_6
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
# define FUNC(a,b) a+b
|
|
|
|
void main()
|
|
{
|
|
${POSITION_FRAG_COLOR} = vec4(FUNC(1.0,2.0);
|
|
}
|
|
""
|
|
end
|
|
|
|
case arguments_7
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
# define FUNC(a,b) a+b
|
|
|
|
void main()
|
|
{
|
|
${POSITION_FRAG_COLOR} = vec4(FUNC(1.0,));
|
|
}
|
|
""
|
|
end
|
|
|
|
case arguments_8
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
# define FUNC(a,b) a+b
|
|
|
|
void main()
|
|
{
|
|
${POSITION_FRAG_COLOR} = vec4(FUNC(1.0, 2.0, 3.0));
|
|
}
|
|
""
|
|
end
|
|
|
|
case unique_param_name
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
# define FUNC(a,a) a+a
|
|
|
|
void main()
|
|
{
|
|
${POSITION_FRAG_COLOR} = vec4(FUNC(1.0,2.0));
|
|
}
|
|
""
|
|
end
|
|
|
|
case argument_list_1
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
# define FUNC(a b) a+b
|
|
|
|
void main()
|
|
{
|
|
${POSITION_FRAG_COLOR} = vec4(FUNC(1.0,2.0));
|
|
}
|
|
""
|
|
end
|
|
|
|
case argument_list_2
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
# define FUNC(a + b) a+b
|
|
|
|
void main()
|
|
{
|
|
${POSITION_FRAG_COLOR} = vec4(FUNC(1.0,2.0));
|
|
}
|
|
""
|
|
end
|
|
|
|
case argument_list_3
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
# define FUNC(,a,b) a+b
|
|
|
|
void main()
|
|
{
|
|
${POSITION_FRAG_COLOR} = vec4(FUNC(1.0,2.0));
|
|
}
|
|
""
|
|
end
|
|
|
|
case no_closing_parenthesis_1
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
# define FUNC(
|
|
|
|
void main()
|
|
{
|
|
${POSITION_FRAG_COLOR} = vec4(FUNC(1.0,2.0));
|
|
}
|
|
""
|
|
end
|
|
|
|
case no_closing_parenthesis_2
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
# define FUNC(A a+b
|
|
|
|
void main()
|
|
{
|
|
${POSITION_FRAG_COLOR} = vec4(FUNC(1.0,2.0));
|
|
}
|
|
""
|
|
end
|
|
|
|
case no_closing_parenthesis_3
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
# define FUNC(A,B,C a+b
|
|
|
|
void main()
|
|
{
|
|
${POSITION_FRAG_COLOR} = vec4(FUNC(1.0,2.0));
|
|
}
|
|
""
|
|
end
|
|
|
|
case no_closing_parenthesis_4
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
# define FUNC(
|
|
""
|
|
end
|
|
|
|
end # invalid_function_definitions
|
|
|
|
group semantic "Semantic Tests"
|
|
|
|
case ops_as_arguments
|
|
values { output float out0 = 20.0; }
|
|
both ""
|
|
precision mediump float;
|
|
${DECLARATIONS}
|
|
#define FOO(a, b) (1 a 9) b 2
|
|
|
|
void main()
|
|
{
|
|
out0 = float(FOO(+, *));
|
|
${OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case correct_order
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
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
|
|
values { output float out0 = 100.0; }
|
|
both ""
|
|
precision mediump float;
|
|
${DECLARATIONS}
|
|
void main()
|
|
{
|
|
#define AAA __VERSION__
|
|
out0 = float(AAA);
|
|
${OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case gl_es_1
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
precision mediump float;
|
|
${DECLARATIONS}
|
|
|
|
void main()
|
|
{
|
|
out0 = float(GL_ES);
|
|
${OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case gl_es_2
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
precision mediump float;
|
|
${DECLARATIONS}
|
|
#define AAA(A) A
|
|
|
|
void main()
|
|
{
|
|
out0 = float(AAA(GL_ES));
|
|
${OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case line_1
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
const mediump int line = __LINE__;
|
|
precision mediump float;
|
|
${DECLARATIONS}
|
|
void main()
|
|
{
|
|
out0 = float(line);
|
|
${OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case line_2
|
|
# Note: Arguments are macro replaced in the first stage.
|
|
# Macro replacement list is expanded in the last stage.
|
|
values { output vec4 out0 = vec4(11.0, 11.0, 9.0, 10.0); }
|
|
|
|
both ""
|
|
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
|
|
values { output float out0 = 0.0; }
|
|
both ""
|
|
precision mediump float;
|
|
${DECLARATIONS}
|
|
void main()
|
|
{
|
|
out0 = float(__FILE__);
|
|
${OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case if_gl_es
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
precision mediump float;
|
|
${DECLARATIONS}
|
|
void main()
|
|
{
|
|
#if GL_ES
|
|
out0 = 1.0;
|
|
#else
|
|
out0 = -1.0;
|
|
#endif
|
|
${OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case if_version
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
precision mediump float;
|
|
${DECLARATIONS}
|
|
void main()
|
|
{
|
|
#if __VERSION__ == 100
|
|
out0 = 1.0;
|
|
#else
|
|
out0 = -1.0;
|
|
#endif
|
|
${OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
end # predefined_macros
|
|
|
|
group conditional_inclusion "Conditional Inclusion Tests"
|
|
|
|
case basic_1
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
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
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
precision mediump float;
|
|
${DECLARATIONS}
|
|
void main()
|
|
{
|
|
#define AAA defined(BBB)
|
|
|
|
#if !AAA
|
|
out0 = 1.0;
|
|
#else
|
|
out0 = 0.0;
|
|
#endif
|
|
${OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case basic_3
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
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
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
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
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
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
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
precision mediump float;
|
|
${DECLARATIONS}
|
|
void main()
|
|
{
|
|
#if !((~2 >> 1) & 1)
|
|
out0 = 1.0;
|
|
#else
|
|
out0 = -1.0;
|
|
#endif
|
|
${OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case unary_ops_2
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
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
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
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
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
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
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
#define AAA 1
|
|
|
|
void main()
|
|
{
|
|
#if defined
|
|
${POSITION_FRAG_COLOR} = vec4(1.0);
|
|
#endif
|
|
}
|
|
""
|
|
end
|
|
|
|
case invalid_defined_expected_identifier_2
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
#define AAA 1
|
|
|
|
void main()
|
|
{
|
|
#if defined()
|
|
${POSITION_FRAG_COLOR} = vec4(1.0);
|
|
#endif
|
|
}
|
|
""
|
|
end
|
|
|
|
case invalid_defined_expected_identifier_3
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
#define AAA 1
|
|
|
|
void main()
|
|
{
|
|
#if defined(
|
|
${POSITION_FRAG_COLOR} = vec4(1.0);
|
|
#endif
|
|
}
|
|
""
|
|
end
|
|
|
|
case invalid_defined_expected_identifier_4
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
#define AAA 1
|
|
|
|
void main()
|
|
{
|
|
#if defined)
|
|
${POSITION_FRAG_COLOR} = vec4(1.0);
|
|
#endif
|
|
}
|
|
""
|
|
end
|
|
|
|
case invalid_defined_expected_identifier_5
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
#define AAA 1
|
|
|
|
void main()
|
|
{
|
|
#if defined((AAA))
|
|
${POSITION_FRAG_COLOR} = vec4(FUNC(1.0,2.0);
|
|
#endif
|
|
}
|
|
""
|
|
end
|
|
|
|
case invalid_defined_expected_rparen
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
#define AAA 1
|
|
|
|
void main()
|
|
{
|
|
#if defined(AAA
|
|
${POSITION_FRAG_COLOR} = vec4(1.0);
|
|
#endif
|
|
}
|
|
""
|
|
end
|
|
|
|
case defined_define
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
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
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
precision mediump float;
|
|
${DECLARATIONS}
|
|
void main()
|
|
{
|
|
#if 1 || AAA
|
|
out0 = 1.0;
|
|
#else
|
|
out0 = -1.0;
|
|
#endif
|
|
${OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case valid_undefined_identifier_2
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
precision mediump float;
|
|
${DECLARATIONS}
|
|
void main()
|
|
{
|
|
#if 0 && AAA
|
|
out0 = -1.0;
|
|
#else
|
|
out0 = 1.0;
|
|
#endif
|
|
${OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case undefined_identifier_1
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
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
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
void main()
|
|
{
|
|
#if !A
|
|
${POSITION_FRAG_COLOR} = vec4(1.0);
|
|
#else
|
|
${POSITION_FRAG_COLOR} = vec4(-1.0);
|
|
#endif
|
|
}
|
|
""
|
|
end
|
|
|
|
case undefined_identifier_3
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
void main()
|
|
{
|
|
#if -A
|
|
${POSITION_FRAG_COLOR} = vec4(1.0);
|
|
#else
|
|
${POSITION_FRAG_COLOR} = vec4(-1.0);
|
|
#endif
|
|
}
|
|
""
|
|
end
|
|
|
|
case undefined_identifier_4
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
void main()
|
|
{
|
|
#if ~A
|
|
${POSITION_FRAG_COLOR} = vec4(1.0);
|
|
#else
|
|
${POSITION_FRAG_COLOR} = vec4(-1.0);
|
|
#endif
|
|
}
|
|
""
|
|
end
|
|
|
|
case undefined_identifier_5
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
void main()
|
|
{
|
|
#if A && B
|
|
${POSITION_FRAG_COLOR} = vec4(1.0);
|
|
#else
|
|
${POSITION_FRAG_COLOR} = vec4(-1.0);
|
|
#endif
|
|
}
|
|
""
|
|
end
|
|
|
|
case undefined_identifier_6
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
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
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
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
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
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
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
void main()
|
|
{
|
|
#if A || B
|
|
${POSITION_FRAG_COLOR} = vec4(1.0);
|
|
#else
|
|
${POSITION_FRAG_COLOR} = vec4(-1.0);
|
|
#endif
|
|
}
|
|
""
|
|
end
|
|
|
|
case undefined_identifier_10
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
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
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
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
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
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
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
void main()
|
|
{
|
|
#if
|
|
${POSITION_FRAG_COLOR} = vec4(1.0);
|
|
}
|
|
""
|
|
end
|
|
|
|
case empty_ifdef
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
void main()
|
|
{
|
|
#ifdef
|
|
${POSITION_FRAG_COLOR} = vec4(1.0);
|
|
}
|
|
""
|
|
end
|
|
|
|
case empty_ifndef
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
void main()
|
|
{
|
|
#ifndef
|
|
${POSITION_FRAG_COLOR} = vec4(1.0);
|
|
}
|
|
""
|
|
end
|
|
|
|
case empty_if_defined
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
void main()
|
|
{
|
|
#if defined
|
|
${POSITION_FRAG_COLOR} = vec4(1.0);
|
|
}
|
|
""
|
|
end
|
|
|
|
case unterminated_if_1
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
void main()
|
|
{
|
|
#if 1
|
|
${POSITION_FRAG_COLOR} = vec4(1.0);
|
|
}
|
|
""
|
|
end
|
|
|
|
case unterminated_if_2
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
void main()
|
|
{
|
|
#if 0
|
|
${POSITION_FRAG_COLOR} = vec4(1.0);
|
|
}
|
|
""
|
|
end
|
|
|
|
case unterminated_ifdef
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
void main()
|
|
{
|
|
#ifdef FOOBAR
|
|
${POSITION_FRAG_COLOR} = vec4(1.0);
|
|
}
|
|
""
|
|
end
|
|
|
|
case unterminated_ifndef
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
void main()
|
|
{
|
|
#ifndef GL_ES
|
|
${POSITION_FRAG_COLOR} = vec4(1.0);
|
|
}
|
|
""
|
|
end
|
|
|
|
case unterminated_else_1
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
void main()
|
|
{
|
|
#if 1
|
|
#else
|
|
${POSITION_FRAG_COLOR} = vec4(1.0);
|
|
}
|
|
""
|
|
end
|
|
|
|
case unterminated_else_2
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
void main()
|
|
{
|
|
#if 0
|
|
#else
|
|
${POSITION_FRAG_COLOR} = vec4(1.0);
|
|
}
|
|
""
|
|
end
|
|
|
|
case unterminated_elif_1
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
void main()
|
|
{
|
|
#if 0
|
|
#elif 1
|
|
${POSITION_FRAG_COLOR} = vec4(1.0);
|
|
}
|
|
""
|
|
end
|
|
|
|
case unterminated_elif_2
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
void main()
|
|
{
|
|
#if 1
|
|
#elif 0
|
|
${POSITION_FRAG_COLOR} = vec4(1.0);
|
|
}
|
|
""
|
|
end
|
|
|
|
case unterminated_elif_3
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
void main()
|
|
{
|
|
#if 0
|
|
#elif 0
|
|
${POSITION_FRAG_COLOR} = vec4(2.0);
|
|
}
|
|
""
|
|
end
|
|
|
|
case elif_after_else
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
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
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
void main()
|
|
{
|
|
#else
|
|
${POSITION_FRAG_COLOR} = vec4(1.0);
|
|
#endif
|
|
}
|
|
""
|
|
end
|
|
|
|
case elif_without_if
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
void main()
|
|
{
|
|
#elif 1
|
|
${POSITION_FRAG_COLOR} = vec4(1.0);
|
|
#endif
|
|
}
|
|
""
|
|
end
|
|
|
|
case endif_without_if
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
void main()
|
|
{
|
|
${POSITION_FRAG_COLOR} = vec4(1.0);
|
|
#endif
|
|
}
|
|
""
|
|
end
|
|
|
|
case else_after_else
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
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
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
void main()
|
|
{
|
|
#if 1
|
|
${POSITION_FRAG_COLOR} = vec4(1.0);
|
|
# elif
|
|
${POSITION_FRAG_COLOR} = vec4(0.0);
|
|
# endif
|
|
#endif
|
|
}
|
|
""
|
|
end
|
|
|
|
case if_float
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
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
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
void main()
|
|
{
|
|
#if 1 foobar
|
|
${POSITION_FRAG_COLOR} = vec4(1.0);
|
|
#endif
|
|
}
|
|
""
|
|
end
|
|
|
|
case tokens_after_elif
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
void main()
|
|
{
|
|
#if 0
|
|
#elif foobar
|
|
${POSITION_FRAG_COLOR} = vec4(1.0);
|
|
#endif
|
|
}
|
|
""
|
|
end
|
|
|
|
case tokens_after_else
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
void main()
|
|
{
|
|
#if 1
|
|
#else foobar 1.231
|
|
#endif
|
|
${POSITION_FRAG_COLOR} = vec4(1.0);
|
|
}
|
|
""
|
|
end
|
|
|
|
case tokens_after_endif
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
void main()
|
|
{
|
|
#if 1
|
|
#else
|
|
#endif foobar
|
|
${POSITION_FRAG_COLOR} = vec4(1.0);
|
|
}
|
|
""
|
|
end
|
|
|
|
case tokens_after_ifdef
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
void main()
|
|
{
|
|
#ifdef FOOBAR foobar
|
|
#else
|
|
#endif
|
|
${POSITION_FRAG_COLOR} = vec4(1.0);
|
|
}
|
|
""
|
|
end
|
|
|
|
case tokens_after_ifndef
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
void main()
|
|
{
|
|
#ifndef FOOBAR ,, +- << barbar
|
|
#else
|
|
#endif
|
|
${POSITION_FRAG_COLOR} = vec4(1.0);
|
|
}
|
|
""
|
|
end
|
|
|
|
end # invalid_conditionals
|
|
|
|
group conditionals "Conditionals Tests"
|
|
|
|
case unterminated_nested_blocks
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
void main()
|
|
{
|
|
#if 1
|
|
# if 1
|
|
${POSITION_FRAG_COLOR} = vec4(1.0);
|
|
}
|
|
""
|
|
end
|
|
|
|
case ifdef_1
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
#define AAA
|
|
precision mediump float;
|
|
${DECLARATIONS}
|
|
void main()
|
|
{
|
|
#ifdef AAA
|
|
out0 = 1.0;
|
|
#else
|
|
out0 = -1.0;
|
|
#endif
|
|
${OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case ifdef_2
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
#define AAA
|
|
precision mediump float;
|
|
${DECLARATIONS}
|
|
void main()
|
|
{
|
|
#if defined ( AAA)
|
|
out0 = 1.0;
|
|
#else
|
|
out0 = -1.0;
|
|
#endif
|
|
${OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case ifdef_3
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
precision mediump float;
|
|
${DECLARATIONS}
|
|
void main()
|
|
{
|
|
#ifdef AAA
|
|
out0 = -1.0;
|
|
#else
|
|
out0 = 1.0;
|
|
#endif
|
|
${OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case invalid_ifdef
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
void main()
|
|
{
|
|
#ifdef 1
|
|
${POSITION_FRAG_COLOR} = vec4(1.0);
|
|
#endif
|
|
}
|
|
""
|
|
end
|
|
|
|
case ifndef_1
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
precision mediump float;
|
|
${DECLARATIONS}
|
|
void main()
|
|
{
|
|
#ifndef AAA
|
|
out0 = 1.0;
|
|
#else
|
|
out0 = -1.0;
|
|
#endif
|
|
${OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case ifndef_2
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
precision mediump float;
|
|
${DECLARATIONS}
|
|
#define AAA
|
|
void main()
|
|
{
|
|
#ifndef AAA
|
|
out0 = -1.0;
|
|
#else
|
|
out0 = 1.0;
|
|
#endif
|
|
${OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case invalid_ifndef
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
void main()
|
|
{
|
|
#ifndef 1
|
|
${POSITION_FRAG_COLOR} = vec4(1.0);
|
|
#endif
|
|
}
|
|
""
|
|
end
|
|
|
|
case mixed_conditional_inclusion
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
precision mediump float;
|
|
${DECLARATIONS}
|
|
void main()
|
|
{
|
|
#ifndef AAA
|
|
out0 = 1.0;
|
|
#elif 1
|
|
out0 = -1.0;
|
|
#endif
|
|
${OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case nested_if_1
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
precision mediump float;
|
|
${DECLARATIONS}
|
|
void main()
|
|
{
|
|
#if GL_ES
|
|
# if __VERSION__ != 100
|
|
out0 = -1.0;
|
|
# else
|
|
out0 = 1.0;
|
|
# endif
|
|
#endif
|
|
${OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case nested_if_2
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
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
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
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
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
/* asdf */
|
|
#version 100
|
|
precision mediump float;
|
|
${DECLARATIONS}
|
|
void main()
|
|
{
|
|
out0 = 1.0;
|
|
${OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case version_is_less
|
|
expect compile_fail
|
|
both ""
|
|
#version 99
|
|
precision mediump float;
|
|
void main()
|
|
{
|
|
${POSITION_FRAG_COLOR} = vec4(1.0);
|
|
}
|
|
""
|
|
end
|
|
|
|
case version_is_more
|
|
expect compile_fail
|
|
both ""
|
|
#version 101
|
|
precision mediump float;
|
|
void main()
|
|
{
|
|
${POSITION_FRAG_COLOR} = vec4(1.0);
|
|
}
|
|
""
|
|
end
|
|
|
|
case version_missing
|
|
expect compile_fail
|
|
both ""
|
|
#version
|
|
precision mediump float;
|
|
void main()
|
|
{
|
|
${POSITION_FRAG_COLOR} = vec4(1.0);
|
|
}
|
|
""
|
|
end
|
|
|
|
case version_not_first_statement_1
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
#version 100
|
|
void main()
|
|
{
|
|
${POSITION_FRAG_COLOR} = vec4(1.0);
|
|
}
|
|
""
|
|
end
|
|
|
|
case version_not_first_statement_2
|
|
expect compile_fail
|
|
both ""
|
|
#define FOO BAR
|
|
#version 100
|
|
precision mediump float;
|
|
void main()
|
|
{
|
|
${POSITION_FRAG_COLOR} = vec4(1.0);
|
|
}
|
|
""
|
|
end
|
|
|
|
case version_invalid_token_1
|
|
expect compile_fail
|
|
both ""
|
|
#version 100.0
|
|
precision mediump float;
|
|
void main()
|
|
{
|
|
${POSITION_FRAG_COLOR} = vec4(1.0);
|
|
}
|
|
""
|
|
end
|
|
|
|
case version_invalid_token_2
|
|
expect compile_fail
|
|
both ""
|
|
#version foobar
|
|
precision mediump float;
|
|
void main()
|
|
{
|
|
${POSITION_FRAG_COLOR} = vec4(1.0);
|
|
}
|
|
""
|
|
end
|
|
|
|
case invalid_version
|
|
expect compile_fail
|
|
both ""
|
|
#version AAA
|
|
precision mediump float;
|
|
void main()
|
|
{
|
|
${POSITION_FRAG_COLOR} = vec4(1.0);
|
|
}
|
|
""
|
|
end
|
|
|
|
case additional_tokens
|
|
expect compile_fail
|
|
both ""
|
|
#version 100 foobar
|
|
precision mediump float;
|
|
void main()
|
|
{
|
|
${POSITION_FRAG_COLOR} = vec4(1.0);
|
|
}
|
|
""
|
|
end
|
|
|
|
case error_with_no_tokens
|
|
expect compile_fail
|
|
both ""
|
|
#error
|
|
precision mediump float;
|
|
void main()
|
|
{
|
|
${POSITION_FRAG_COLOR} = vec4(1.0);
|
|
}
|
|
""
|
|
end
|
|
|
|
case error
|
|
expect compile_fail
|
|
both ""
|
|
#define AAA asdf
|
|
#error 1 * AAA /* comment */
|
|
precision mediump float;
|
|
void main()
|
|
{
|
|
${POSITION_FRAG_COLOR} = vec4(1.0);
|
|
}
|
|
""
|
|
end
|
|
|
|
end # directive
|
|
|
|
group builtin "Built-in Symbol Tests"
|
|
|
|
case line
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
precision mediump float;
|
|
${DECLARATIONS}
|
|
void main()
|
|
{
|
|
#line 1
|
|
out0 = float(__LINE__);
|
|
${OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case line_and_file
|
|
values { output vec4 out0 = vec4(234.0, 234.0, 10.0, 10.0); }
|
|
both ""
|
|
precision mediump float;
|
|
${DECLARATIONS}
|
|
void main()
|
|
{
|
|
#line 234 10
|
|
out0 = vec4(__LINE__, __LINE__, __FILE__, __FILE__);
|
|
${OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case line_defined_1
|
|
values { output float out0 = 4.0; }
|
|
both ""
|
|
precision mediump float;
|
|
${DECLARATIONS}
|
|
void main()
|
|
{
|
|
#define A 4
|
|
#line A
|
|
out0 = float(__LINE__);
|
|
${OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case line_defined_2
|
|
values { output vec4 out0 = vec4(234.0, 234.0, 10.0, 10.0); }
|
|
both ""
|
|
precision mediump float;
|
|
${DECLARATIONS}
|
|
void main()
|
|
{
|
|
#define A 10
|
|
#line 234 A
|
|
out0 = vec4(__LINE__, __LINE__, __FILE__, __FILE__);
|
|
${OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case empty_line
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
void main()
|
|
{
|
|
#line
|
|
${POSITION_FRAG_COLOR} = vec4(1.0);
|
|
}
|
|
""
|
|
end
|
|
|
|
case invalid_line_file_1
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
void main()
|
|
{
|
|
#line 22 1.234
|
|
${POSITION_FRAG_COLOR} = vec4(__LINE__, __LINE__, __FILE__, __FILE__);
|
|
}
|
|
""
|
|
end
|
|
|
|
case invalid_line_file_3
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
void main()
|
|
{
|
|
#line 233 10 2
|
|
${POSITION_FRAG_COLOR} = vec4(__LINE__, __LINE__, __FILE__, __FILE__);
|
|
}
|
|
""
|
|
end
|
|
|
|
case invalid_line_file_4
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
void main()
|
|
{
|
|
#line foobar
|
|
${POSITION_FRAG_COLOR} = vec4(__LINE__, __LINE__, __FILE__, __FILE__);
|
|
}
|
|
""
|
|
end
|
|
|
|
end # builtin
|
|
|
|
group pragmas "Pragma Tests"
|
|
|
|
case pragma_vertex
|
|
values { output float out0 = 1.0; }
|
|
|
|
vertex ""
|
|
#pragma
|
|
#pragma STDGL invariant(all)
|
|
#pragma debug(off)
|
|
#pragma optimize(off)
|
|
|
|
precision mediump float;
|
|
${VERTEX_DECLARATIONS}
|
|
varying float v_val;
|
|
void main()
|
|
{
|
|
v_val = 1.0;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
precision mediump float;
|
|
${FRAGMENT_DECLARATIONS}
|
|
invariant varying float v_val;
|
|
void main()
|
|
{
|
|
out0 = v_val;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case pragma_fragment
|
|
values { output float out0 = 1.0; }
|
|
|
|
vertex ""
|
|
precision mediump float;
|
|
${VERTEX_DECLARATIONS}
|
|
varying float v_val;
|
|
void main()
|
|
{
|
|
v_val = 1.0;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
fragment ""
|
|
#pragma
|
|
#pragma STDGL invariant(all)
|
|
#pragma debug(off)
|
|
#pragma optimize(off)
|
|
|
|
precision mediump float;
|
|
${FRAGMENT_DECLARATIONS}
|
|
varying float v_val;
|
|
void main()
|
|
{
|
|
out0 = v_val;
|
|
${FRAGMENT_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case pragma_macro_exp
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
#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
|
|
expect build_successful
|
|
both ""
|
|
#pragma debug(1.23)
|
|
|
|
// unrecognized preprocessor token
|
|
|
|
precision mediump float;
|
|
void main()
|
|
{
|
|
${POSITION_FRAG_COLOR} = vec4(1.0);
|
|
}
|
|
""
|
|
end
|
|
|
|
case pragma_unrecognized_token
|
|
expect build_successful
|
|
both ""
|
|
#pragma ¤¤½
|
|
|
|
// trailing bytes form a valid but unrecognized preprocessor token
|
|
|
|
precision mediump float;
|
|
void main()
|
|
{
|
|
${POSITION_FRAG_COLOR} = vec4(1.0);
|
|
}
|
|
""
|
|
end
|
|
|
|
end # pragmas
|
|
|
|
group extensions "Extension Tests"
|
|
|
|
case basic
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
#extension all : warn
|
|
|
|
precision mediump float;
|
|
${DECLARATIONS}
|
|
void main()
|
|
{
|
|
out0 = 1.0;
|
|
${OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case macro_exp
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
#define warn enable
|
|
|
|
#extension all : warn
|
|
|
|
precision mediump float;
|
|
${DECLARATIONS}
|
|
void main()
|
|
{
|
|
out0 = 1.0;
|
|
${OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case missing_extension_name
|
|
expect compile_fail
|
|
both ""
|
|
#extension
|
|
precision mediump float;
|
|
void main()
|
|
{
|
|
${POSITION_FRAG_COLOR} = vec4(1.0);
|
|
}
|
|
""
|
|
end
|
|
|
|
case invalid_extension_name
|
|
expect compile_fail
|
|
both ""
|
|
#extension 2 : all
|
|
precision mediump float;
|
|
void main()
|
|
{
|
|
${POSITION_FRAG_COLOR} = vec4(1.0);
|
|
}
|
|
""
|
|
end
|
|
|
|
case missing_colon
|
|
expect compile_fail
|
|
both ""
|
|
#extension all
|
|
precision mediump float;
|
|
void main()
|
|
{
|
|
${POSITION_FRAG_COLOR} = vec4(1.0);
|
|
}
|
|
""
|
|
end
|
|
|
|
case expected_colon
|
|
expect compile_fail
|
|
both ""
|
|
#extension all ;
|
|
precision mediump float;
|
|
void main()
|
|
{
|
|
${POSITION_FRAG_COLOR} = vec4(1.0);
|
|
}
|
|
""
|
|
end
|
|
|
|
case missing_behavior
|
|
expect compile_fail
|
|
both ""
|
|
#extension all :
|
|
precision mediump float;
|
|
void main()
|
|
{
|
|
${POSITION_FRAG_COLOR} = vec4(1.0);
|
|
}
|
|
""
|
|
end
|
|
|
|
case invalid_behavior_1
|
|
expect compile_fail
|
|
both ""
|
|
#extension all : WARN
|
|
precision mediump float;
|
|
void main()
|
|
{
|
|
${POSITION_FRAG_COLOR} = vec4(1.0);
|
|
}
|
|
""
|
|
end
|
|
|
|
case invalid_behavior_2
|
|
expect compile_fail
|
|
both ""
|
|
#extension all : require
|
|
precision mediump float;
|
|
void main()
|
|
{
|
|
${POSITION_FRAG_COLOR} = vec4(1.0);
|
|
}
|
|
""
|
|
end
|
|
|
|
case invalid_char_in_name
|
|
expect compile_fail
|
|
both ""
|
|
#extension all¤ : warn
|
|
precision mediump float;
|
|
void main()
|
|
{
|
|
${POSITION_FRAG_COLOR} = vec4(1.0);
|
|
}
|
|
""
|
|
end
|
|
|
|
case invalid_char_in_behavior
|
|
expect compile_fail
|
|
both ""
|
|
#extension all : war¤n
|
|
precision mediump float;
|
|
void main()
|
|
{
|
|
${POSITION_FRAG_COLOR} = vec4(1.0);
|
|
}
|
|
""
|
|
end
|
|
|
|
case unterminated_comment
|
|
expect compile_fail
|
|
both ""
|
|
#extension all : warn /*asd
|
|
precision mediump float;
|
|
void main()
|
|
{
|
|
${POSITION_FRAG_COLOR} = vec4(1.0);
|
|
}
|
|
""
|
|
end
|
|
|
|
case after_non_preprocessing_tokens
|
|
expect compile_fail
|
|
both ""
|
|
#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
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
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
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
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
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
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
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
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
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
precision mediump float;
|
|
${DECLARATIONS}
|
|
void main()
|
|
{
|
|
#define VAL 6
|
|
out0 = 0.0;
|
|
#if (VAL | 5) == 7
|
|
out0 = 1.0;
|
|
#endif
|
|
${OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case and
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
precision mediump float;
|
|
${DECLARATIONS}
|
|
void main()
|
|
{
|
|
#define VAL 6
|
|
out0 = 0.0;
|
|
#if (VAL & 5) == 4
|
|
out0 = 1.0;
|
|
#endif
|
|
${OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case xor
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
precision mediump float;
|
|
${DECLARATIONS}
|
|
void main()
|
|
{
|
|
#define VAL 6
|
|
out0 = 0.0;
|
|
#if (VAL ^ 5) == 3
|
|
out0 = 1.0;
|
|
#endif
|
|
${OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case mod
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
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
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
precision mediump float;
|
|
${DECLARATIONS}
|
|
void main()
|
|
{
|
|
#define VAL (( (4 ) ) )
|
|
out0 = 0.0;
|
|
#if VAL >= 4
|
|
out0 = 1.0;
|
|
#endif
|
|
${OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case parenthesis_tricky
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
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
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
precision mediump float;
|
|
${DECLARATIONS}
|
|
void main()
|
|
{
|
|
#define VAL 4
|
|
out0 = 0.0;
|
|
#if VAL >= 4
|
|
out0 = 1.0;
|
|
#endif
|
|
${OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case parenthesis_if
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
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
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
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
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
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
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
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
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
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
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
precision mediump float;
|
|
${DECLARATIONS}
|
|
void main()
|
|
{
|
|
#if -4 + 5 == 1
|
|
out0 = 1.0;
|
|
#else
|
|
out0 = 0.0;
|
|
#endif
|
|
${OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case eval_basic_1
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
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
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
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
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
precision mediump float;
|
|
${DECLARATIONS}
|
|
void main()
|
|
{
|
|
#if 2 - 2 / 2 == 1
|
|
out0 = 1.0;
|
|
#else
|
|
out0 = 0.0;
|
|
#endif
|
|
${OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
|
|
case defined_1
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
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
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
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
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
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
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
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
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
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
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
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
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
void main()
|
|
{
|
|
#if !
|
|
${POSITION_FRAG_COLOR} = vec4(1.0);
|
|
}
|
|
""
|
|
end
|
|
|
|
case invalid_binary_expr
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
void main()
|
|
{
|
|
#if 3+4+
|
|
${POSITION_FRAG_COLOR} = vec4(1.0);
|
|
}
|
|
""
|
|
end
|
|
|
|
case missing_expr
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
void main()
|
|
{
|
|
#if
|
|
${POSITION_FRAG_COLOR} = vec4(1.0);
|
|
}
|
|
""
|
|
end
|
|
|
|
case invalid_expr_1
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
void main()
|
|
{
|
|
#if 4 4
|
|
${POSITION_FRAG_COLOR} = vec4(1.0);
|
|
}
|
|
""
|
|
end
|
|
|
|
case invalid_expr_2
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
void main()
|
|
{
|
|
#if 4 * * 4
|
|
${POSITION_FRAG_COLOR} = vec4(1.0);
|
|
}
|
|
""
|
|
end
|
|
|
|
case invalid_expr_3
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
void main()
|
|
{
|
|
#if (4)(4)
|
|
${POSITION_FRAG_COLOR} = vec4(1.0);
|
|
}
|
|
""
|
|
end
|
|
|
|
case unopened_parenthesis
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
void main()
|
|
{
|
|
#if 4)
|
|
${POSITION_FRAG_COLOR} = vec4(1.0);
|
|
}
|
|
""
|
|
end
|
|
|
|
case unclosed_parenthesis
|
|
expect compile_fail
|
|
both ""
|
|
precision mediump float;
|
|
void main()
|
|
{
|
|
#if ((4 + 7)
|
|
${POSITION_FRAG_COLOR} = vec4(1.0);
|
|
}
|
|
""
|
|
end
|
|
|
|
end # invalid_expressions
|
|
|
|
group operator_precedence "Operator precedence"
|
|
|
|
|
|
case modulo_vs_not
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
|
|
#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
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
|
|
#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
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
|
|
#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
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
|
|
#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
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
|
|
#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
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
|
|
#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
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
|
|
#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
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
|
|
#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
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
|
|
#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
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
|
|
#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
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
|
|
#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
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
|
|
#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
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
|
|
#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
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
|
|
#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
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
|
|
#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
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
|
|
#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
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
|
|
#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
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
|
|
#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
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
|
|
#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
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
|
|
#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
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
|
|
#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
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
|
|
#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
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
|
|
#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
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
|
|
#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
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
|
|
#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
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
|
|
#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
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
|
|
#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
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
|
|
#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
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
|
|
#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
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
|
|
#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
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
|
|
#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
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
|
|
#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
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
|
|
#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
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
|
|
#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
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
|
|
#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
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
|
|
#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
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
|
|
#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
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
|
|
#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
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
|
|
#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
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
|
|
#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
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
|
|
#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
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
|
|
#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
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
|
|
#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
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
|
|
#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
|
|
values { output float out0 = 1.0; }
|
|
both ""
|
|
|
|
#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
|