1e5c31af7Sopenharmony_cigroup custom "Custom loop tests"
2e5c31af7Sopenharmony_ci
3e5c31af7Sopenharmony_ci	case continue_in_fragment_for_loop
4e5c31af7Sopenharmony_ci		version 300 es
5e5c31af7Sopenharmony_ci		vertex ""
6e5c31af7Sopenharmony_ci			#version 300 es
7e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
8e5c31af7Sopenharmony_ci			void main()
9e5c31af7Sopenharmony_ci			{
10e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
11e5c31af7Sopenharmony_ci			}
12e5c31af7Sopenharmony_ci		""
13e5c31af7Sopenharmony_ci		fragment ""
14e5c31af7Sopenharmony_ci			#version 300 es
15e5c31af7Sopenharmony_ci			${FRAGMENT_DECLARATIONS}
16e5c31af7Sopenharmony_ci			void main()
17e5c31af7Sopenharmony_ci			{
18e5c31af7Sopenharmony_ci				int count1 = 0;
19e5c31af7Sopenharmony_ci				for(int i=0;i<4;i++)
20e5c31af7Sopenharmony_ci				{
21e5c31af7Sopenharmony_ci					if (count1 == 2)
22e5c31af7Sopenharmony_ci						continue;
23e5c31af7Sopenharmony_ci				}
24e5c31af7Sopenharmony_ci				${FRAG_COLOR} = vec4(1.0);
25e5c31af7Sopenharmony_ci			}
26e5c31af7Sopenharmony_ci		""
27e5c31af7Sopenharmony_ci	end
28e5c31af7Sopenharmony_ci
29e5c31af7Sopenharmony_ciend # custom
30e5c31af7Sopenharmony_ci
31e5c31af7Sopenharmony_ci# https://github.com/KhronosGroup/WebGL/blob/master/sdk/tests/conformance2/glsl3/short-circuiting-in-loop-condition.html
32e5c31af7Sopenharmony_cigroup short_circuit "Short-circuiting operator in a loop using a function call with side effects"
33e5c31af7Sopenharmony_ci
34e5c31af7Sopenharmony_ci	case while
35e5c31af7Sopenharmony_ci		version 300 es
36e5c31af7Sopenharmony_ci		values
37e5c31af7Sopenharmony_ci		{
38e5c31af7Sopenharmony_ci			input bool in0 = [ false | true ];
39e5c31af7Sopenharmony_ci			output int sideEffectCounter = [ 0 | 10 ];
40e5c31af7Sopenharmony_ci		}
41e5c31af7Sopenharmony_ci
42e5c31af7Sopenharmony_ci		both ""
43e5c31af7Sopenharmony_ci			#version 300 es
44e5c31af7Sopenharmony_ci			precision mediump float;
45e5c31af7Sopenharmony_ci			precision mediump int;
46e5c31af7Sopenharmony_ci
47e5c31af7Sopenharmony_ci			${DECLARATIONS}
48e5c31af7Sopenharmony_ci
49e5c31af7Sopenharmony_ci			bool foo() {
50e5c31af7Sopenharmony_ci				++sideEffectCounter;
51e5c31af7Sopenharmony_ci				return true;
52e5c31af7Sopenharmony_ci			}
53e5c31af7Sopenharmony_ci
54e5c31af7Sopenharmony_ci			void main()
55e5c31af7Sopenharmony_ci			{
56e5c31af7Sopenharmony_ci				${SETUP}
57e5c31af7Sopenharmony_ci				sideEffectCounter = 0;
58e5c31af7Sopenharmony_ci				int iterations = 0;
59e5c31af7Sopenharmony_ci				while (in0 && foo()) {
60e5c31af7Sopenharmony_ci					++iterations;
61e5c31af7Sopenharmony_ci					if (iterations >= 10) {
62e5c31af7Sopenharmony_ci						break;
63e5c31af7Sopenharmony_ci					}
64e5c31af7Sopenharmony_ci				}
65e5c31af7Sopenharmony_ci				${OUTPUT}
66e5c31af7Sopenharmony_ci			}
67e5c31af7Sopenharmony_ci		""
68e5c31af7Sopenharmony_ci	end
69e5c31af7Sopenharmony_ci
70e5c31af7Sopenharmony_ci	case for
71e5c31af7Sopenharmony_ci		version 300 es
72e5c31af7Sopenharmony_ci		values
73e5c31af7Sopenharmony_ci		{
74e5c31af7Sopenharmony_ci			input bool in0 = [ false | true ];
75e5c31af7Sopenharmony_ci			output int sideEffectCounter = [ 0 | 10 ];
76e5c31af7Sopenharmony_ci		}
77e5c31af7Sopenharmony_ci
78e5c31af7Sopenharmony_ci		both ""
79e5c31af7Sopenharmony_ci			#version 300 es
80e5c31af7Sopenharmony_ci			precision mediump float;
81e5c31af7Sopenharmony_ci			precision mediump int;
82e5c31af7Sopenharmony_ci
83e5c31af7Sopenharmony_ci			${DECLARATIONS}
84e5c31af7Sopenharmony_ci
85e5c31af7Sopenharmony_ci			bool foo() {
86e5c31af7Sopenharmony_ci				++sideEffectCounter;
87e5c31af7Sopenharmony_ci				return true;
88e5c31af7Sopenharmony_ci			}
89e5c31af7Sopenharmony_ci
90e5c31af7Sopenharmony_ci			void main()
91e5c31af7Sopenharmony_ci			{
92e5c31af7Sopenharmony_ci				${SETUP}
93e5c31af7Sopenharmony_ci				sideEffectCounter = 0;
94e5c31af7Sopenharmony_ci				for (int iterations = 0; true; in0 && foo()) {
95e5c31af7Sopenharmony_ci					++iterations;
96e5c31af7Sopenharmony_ci					if (iterations > 10) {
97e5c31af7Sopenharmony_ci						break;
98e5c31af7Sopenharmony_ci					}
99e5c31af7Sopenharmony_ci				}
100e5c31af7Sopenharmony_ci				${OUTPUT}
101e5c31af7Sopenharmony_ci			}
102e5c31af7Sopenharmony_ci		""
103e5c31af7Sopenharmony_ci	end
104e5c31af7Sopenharmony_ci
105e5c31af7Sopenharmony_ci	case do_while
106e5c31af7Sopenharmony_ci		version 300 es
107e5c31af7Sopenharmony_ci		values
108e5c31af7Sopenharmony_ci		{
109e5c31af7Sopenharmony_ci			input bool in0 = [ false | true ];
110e5c31af7Sopenharmony_ci			output int sideEffectCounter = [ 0 | 10 ];
111e5c31af7Sopenharmony_ci		}
112e5c31af7Sopenharmony_ci
113e5c31af7Sopenharmony_ci		both ""
114e5c31af7Sopenharmony_ci			#version 300 es
115e5c31af7Sopenharmony_ci			precision mediump float;
116e5c31af7Sopenharmony_ci			precision mediump int;
117e5c31af7Sopenharmony_ci
118e5c31af7Sopenharmony_ci			${DECLARATIONS}
119e5c31af7Sopenharmony_ci
120e5c31af7Sopenharmony_ci			bool foo() {
121e5c31af7Sopenharmony_ci				++sideEffectCounter;
122e5c31af7Sopenharmony_ci				return true;
123e5c31af7Sopenharmony_ci			}
124e5c31af7Sopenharmony_ci
125e5c31af7Sopenharmony_ci			void main()
126e5c31af7Sopenharmony_ci			{
127e5c31af7Sopenharmony_ci				${SETUP}
128e5c31af7Sopenharmony_ci				sideEffectCounter = 0;
129e5c31af7Sopenharmony_ci				int iterations = 0;
130e5c31af7Sopenharmony_ci				do {
131e5c31af7Sopenharmony_ci					++iterations;
132e5c31af7Sopenharmony_ci					if (iterations > 10) {
133e5c31af7Sopenharmony_ci						break;
134e5c31af7Sopenharmony_ci					}
135e5c31af7Sopenharmony_ci				} while (in0 && foo());
136e5c31af7Sopenharmony_ci				${OUTPUT}
137e5c31af7Sopenharmony_ci			}
138e5c31af7Sopenharmony_ci		""
139e5c31af7Sopenharmony_ci	end
140e5c31af7Sopenharmony_ci
141e5c31af7Sopenharmony_ci	case while_sequence
142e5c31af7Sopenharmony_ci		version 300 es
143e5c31af7Sopenharmony_ci		values
144e5c31af7Sopenharmony_ci		{
145e5c31af7Sopenharmony_ci			input bool in0 = [ false | true ];
146e5c31af7Sopenharmony_ci			output int sideEffectCounter = [ 0 | 10 ];
147e5c31af7Sopenharmony_ci		}
148e5c31af7Sopenharmony_ci
149e5c31af7Sopenharmony_ci		both ""
150e5c31af7Sopenharmony_ci			#version 300 es
151e5c31af7Sopenharmony_ci			precision mediump float;
152e5c31af7Sopenharmony_ci			precision mediump int;
153e5c31af7Sopenharmony_ci
154e5c31af7Sopenharmony_ci			${DECLARATIONS}
155e5c31af7Sopenharmony_ci
156e5c31af7Sopenharmony_ci			bool foo() {
157e5c31af7Sopenharmony_ci				++sideEffectCounter;
158e5c31af7Sopenharmony_ci				return true;
159e5c31af7Sopenharmony_ci			}
160e5c31af7Sopenharmony_ci
161e5c31af7Sopenharmony_ci			void main()
162e5c31af7Sopenharmony_ci			{
163e5c31af7Sopenharmony_ci				${SETUP}
164e5c31af7Sopenharmony_ci				sideEffectCounter = 0;
165e5c31af7Sopenharmony_ci				int iterations = 0;
166e5c31af7Sopenharmony_ci				while ((in0, in0 && foo())) {
167e5c31af7Sopenharmony_ci					++iterations;
168e5c31af7Sopenharmony_ci					if (iterations >= 10) {
169e5c31af7Sopenharmony_ci						break;
170e5c31af7Sopenharmony_ci					}
171e5c31af7Sopenharmony_ci				}
172e5c31af7Sopenharmony_ci				${OUTPUT}
173e5c31af7Sopenharmony_ci			}
174e5c31af7Sopenharmony_ci		""
175e5c31af7Sopenharmony_ci	end
176e5c31af7Sopenharmony_ci
177e5c31af7Sopenharmony_ciend # short_circuit
178