1e5c31af7Sopenharmony_ci# Tests todo:
2e5c31af7Sopenharmony_ci# - inout with varyings, attributes, uniforms (and arrays of 'em)
3e5c31af7Sopenharmony_ci# - inout with arrays, array elements
4e5c31af7Sopenharmony_ci# - inout with array elements
5e5c31af7Sopenharmony_ci# - inout by-value semantics (arrays & elements & structs)
6e5c31af7Sopenharmony_ci
7e5c31af7Sopenharmony_ci# Done:
8e5c31af7Sopenharmony_ci# - control flow: return, return in loop, etc.
9e5c31af7Sopenharmony_ci
10e5c31af7Sopenharmony_cigroup datatypes "Function Parameter Data Types"
11e5c31af7Sopenharmony_ci
12e5c31af7Sopenharmony_ci	case float_float
13e5c31af7Sopenharmony_ci		values
14e5c31af7Sopenharmony_ci		{
15e5c31af7Sopenharmony_ci			input float in0		= [ 0.0 | 1.0 | -2.0 | 2.5 ];
16e5c31af7Sopenharmony_ci			output float out0	= [ 0.0 | -1.0 | 2.0 | -2.5 ];
17e5c31af7Sopenharmony_ci		}
18e5c31af7Sopenharmony_ci
19e5c31af7Sopenharmony_ci		both ""
20e5c31af7Sopenharmony_ci			precision mediump float;
21e5c31af7Sopenharmony_ci			${DECLARATIONS}
22e5c31af7Sopenharmony_ci
23e5c31af7Sopenharmony_ci			float func (float a)
24e5c31af7Sopenharmony_ci			{
25e5c31af7Sopenharmony_ci				return -a;
26e5c31af7Sopenharmony_ci			}
27e5c31af7Sopenharmony_ci
28e5c31af7Sopenharmony_ci			void main()
29e5c31af7Sopenharmony_ci			{
30e5c31af7Sopenharmony_ci				out0 = func(in0);
31e5c31af7Sopenharmony_ci				${OUTPUT}
32e5c31af7Sopenharmony_ci			}
33e5c31af7Sopenharmony_ci		""
34e5c31af7Sopenharmony_ci	end
35e5c31af7Sopenharmony_ci
36e5c31af7Sopenharmony_ci	case float_vec2
37e5c31af7Sopenharmony_ci		values
38e5c31af7Sopenharmony_ci		{
39e5c31af7Sopenharmony_ci			input vec2 in0		= [ vec2(0.0, 1.0) | vec2(2.0, 2.5) ];
40e5c31af7Sopenharmony_ci			output float out0	= [ -1.0 | -4.5 ];
41e5c31af7Sopenharmony_ci		}
42e5c31af7Sopenharmony_ci
43e5c31af7Sopenharmony_ci		both ""
44e5c31af7Sopenharmony_ci			precision mediump float;
45e5c31af7Sopenharmony_ci			${DECLARATIONS}
46e5c31af7Sopenharmony_ci
47e5c31af7Sopenharmony_ci			float func (vec2 a)
48e5c31af7Sopenharmony_ci			{
49e5c31af7Sopenharmony_ci				return -(a.x + a.y);
50e5c31af7Sopenharmony_ci			}
51e5c31af7Sopenharmony_ci
52e5c31af7Sopenharmony_ci			void main()
53e5c31af7Sopenharmony_ci			{
54e5c31af7Sopenharmony_ci				out0 = func(in0);
55e5c31af7Sopenharmony_ci				${OUTPUT}
56e5c31af7Sopenharmony_ci			}
57e5c31af7Sopenharmony_ci		""
58e5c31af7Sopenharmony_ci	end
59e5c31af7Sopenharmony_ci
60e5c31af7Sopenharmony_ci	case float_vec3
61e5c31af7Sopenharmony_ci		values
62e5c31af7Sopenharmony_ci		{
63e5c31af7Sopenharmony_ci			input vec3 in0		= [ vec3(0.0, 1.0, -2.0) | vec3(2.0, 2.5, -4.0) ];
64e5c31af7Sopenharmony_ci			output float out0	= [ 1.0 | -0.5 ];
65e5c31af7Sopenharmony_ci		}
66e5c31af7Sopenharmony_ci
67e5c31af7Sopenharmony_ci		both ""
68e5c31af7Sopenharmony_ci			precision mediump float;
69e5c31af7Sopenharmony_ci			${DECLARATIONS}
70e5c31af7Sopenharmony_ci
71e5c31af7Sopenharmony_ci			float func (vec3 a)
72e5c31af7Sopenharmony_ci			{
73e5c31af7Sopenharmony_ci				return -(a.x + a.y + a.z);
74e5c31af7Sopenharmony_ci			}
75e5c31af7Sopenharmony_ci
76e5c31af7Sopenharmony_ci			void main()
77e5c31af7Sopenharmony_ci			{
78e5c31af7Sopenharmony_ci				out0 = func(in0);
79e5c31af7Sopenharmony_ci				${OUTPUT}
80e5c31af7Sopenharmony_ci			}
81e5c31af7Sopenharmony_ci		""
82e5c31af7Sopenharmony_ci	end
83e5c31af7Sopenharmony_ci
84e5c31af7Sopenharmony_ci	case float_vec4
85e5c31af7Sopenharmony_ci		values
86e5c31af7Sopenharmony_ci		{
87e5c31af7Sopenharmony_ci			input vec4 in0		= [ vec4(0.0, 1.0, -2.0, 0.5) | vec4(2.0, 2.5, 4.0, -7.0) ];
88e5c31af7Sopenharmony_ci			output float out0	= [ 0.5 | -1.5 ];
89e5c31af7Sopenharmony_ci		}
90e5c31af7Sopenharmony_ci
91e5c31af7Sopenharmony_ci		both ""
92e5c31af7Sopenharmony_ci			precision mediump float;
93e5c31af7Sopenharmony_ci			${DECLARATIONS}
94e5c31af7Sopenharmony_ci
95e5c31af7Sopenharmony_ci			float func (vec4 a)
96e5c31af7Sopenharmony_ci			{
97e5c31af7Sopenharmony_ci				return -(a.x + a.y + a.z + a.w);
98e5c31af7Sopenharmony_ci			}
99e5c31af7Sopenharmony_ci
100e5c31af7Sopenharmony_ci			void main()
101e5c31af7Sopenharmony_ci			{
102e5c31af7Sopenharmony_ci				out0 = func(in0);
103e5c31af7Sopenharmony_ci				${OUTPUT}
104e5c31af7Sopenharmony_ci			}
105e5c31af7Sopenharmony_ci		""
106e5c31af7Sopenharmony_ci	end
107e5c31af7Sopenharmony_ci
108e5c31af7Sopenharmony_ci	case float_mat2
109e5c31af7Sopenharmony_ci		values
110e5c31af7Sopenharmony_ci		{
111e5c31af7Sopenharmony_ci			input mat2 in0		= [ mat2(0.0, 1.0, -2.0, 0.5) | mat2(2.0, 2.5, 4.0, -7.0) ];
112e5c31af7Sopenharmony_ci			output float out0	= [ 0.5 | -1.5 ];
113e5c31af7Sopenharmony_ci		}
114e5c31af7Sopenharmony_ci
115e5c31af7Sopenharmony_ci		both ""
116e5c31af7Sopenharmony_ci			precision mediump float;
117e5c31af7Sopenharmony_ci			${DECLARATIONS}
118e5c31af7Sopenharmony_ci
119e5c31af7Sopenharmony_ci			float func (mat2 a)
120e5c31af7Sopenharmony_ci			{
121e5c31af7Sopenharmony_ci				return -(a[0][0] + a[0][1] + a[1][0] + a[1][1]);
122e5c31af7Sopenharmony_ci			}
123e5c31af7Sopenharmony_ci
124e5c31af7Sopenharmony_ci			void main()
125e5c31af7Sopenharmony_ci			{
126e5c31af7Sopenharmony_ci				out0 = func(in0);
127e5c31af7Sopenharmony_ci				${OUTPUT}
128e5c31af7Sopenharmony_ci			}
129e5c31af7Sopenharmony_ci		""
130e5c31af7Sopenharmony_ci	end
131e5c31af7Sopenharmony_ci
132e5c31af7Sopenharmony_ci	case float_mat3
133e5c31af7Sopenharmony_ci		values
134e5c31af7Sopenharmony_ci		{
135e5c31af7Sopenharmony_ci			input mat3 in0		= [ mat3(0.0, 1.0, -2.0, 0.5, 1.0, -1.0, 2.0, 4.0, -1.0) | mat3(2.0, 2.5, 4.0, -7.0, 2.5, 3.0, 0.5, -3.5, 1.0) ];
136e5c31af7Sopenharmony_ci			output float out0	= [ -4.5 | -5.0 ];
137e5c31af7Sopenharmony_ci		}
138e5c31af7Sopenharmony_ci
139e5c31af7Sopenharmony_ci		both ""
140e5c31af7Sopenharmony_ci			precision mediump float;
141e5c31af7Sopenharmony_ci			${DECLARATIONS}
142e5c31af7Sopenharmony_ci
143e5c31af7Sopenharmony_ci			float func (mat3 a)
144e5c31af7Sopenharmony_ci			{
145e5c31af7Sopenharmony_ci				return -(a[0][0] + a[0][1] + a[0][2] + a[1][0] + a[1][1] + a[1][2] + a[2][0] + a[2][1] + a[2][2]);
146e5c31af7Sopenharmony_ci			}
147e5c31af7Sopenharmony_ci
148e5c31af7Sopenharmony_ci			void main()
149e5c31af7Sopenharmony_ci			{
150e5c31af7Sopenharmony_ci				out0 = func(in0);
151e5c31af7Sopenharmony_ci				${OUTPUT}
152e5c31af7Sopenharmony_ci			}
153e5c31af7Sopenharmony_ci		""
154e5c31af7Sopenharmony_ci	end
155e5c31af7Sopenharmony_ci
156e5c31af7Sopenharmony_ci	case float_mat4
157e5c31af7Sopenharmony_ci		values
158e5c31af7Sopenharmony_ci		{
159e5c31af7Sopenharmony_ci			input mat4 in0		= [ mat4(0.0, 1.0, -2.0, 0.5, 1.0, -1.0, 2.0, 4.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -2.0, -2.0) | mat4(2.0, 2.5, 4.0, -7.0, 2.5, 3.0, 0.5, -3.5, 1.0, 0.0, 2.0, -1.0, 1.0, 0.0, -1.0, 3.0) ];
160e5c31af7Sopenharmony_ci			output float out0	= [ -5.5 | -9.0 ];
161e5c31af7Sopenharmony_ci		}
162e5c31af7Sopenharmony_ci
163e5c31af7Sopenharmony_ci		both ""
164e5c31af7Sopenharmony_ci			precision mediump float;
165e5c31af7Sopenharmony_ci			${DECLARATIONS}
166e5c31af7Sopenharmony_ci
167e5c31af7Sopenharmony_ci			float func (mat4 a)
168e5c31af7Sopenharmony_ci			{
169e5c31af7Sopenharmony_ci				return -(a[0][0] + a[0][1] + a[0][2] + a[0][3] + a[1][0] + a[1][1] + a[1][2] + a[1][3] + a[2][0] + a[2][1] + a[2][2] + a[2][3] + a[3][0] + a[3][1] + a[3][2] + a[3][3]);
170e5c31af7Sopenharmony_ci			}
171e5c31af7Sopenharmony_ci
172e5c31af7Sopenharmony_ci			void main()
173e5c31af7Sopenharmony_ci			{
174e5c31af7Sopenharmony_ci				out0 = func(in0);
175e5c31af7Sopenharmony_ci				${OUTPUT}
176e5c31af7Sopenharmony_ci			}
177e5c31af7Sopenharmony_ci		""
178e5c31af7Sopenharmony_ci	end
179e5c31af7Sopenharmony_ci
180e5c31af7Sopenharmony_ci	case int_int
181e5c31af7Sopenharmony_ci		values
182e5c31af7Sopenharmony_ci		{
183e5c31af7Sopenharmony_ci			input int in0		= [ -1 | 0 | 1 | 4 ];
184e5c31af7Sopenharmony_ci			output int out0		= [ 1 | 0 | -1 | -4 ];
185e5c31af7Sopenharmony_ci		}
186e5c31af7Sopenharmony_ci
187e5c31af7Sopenharmony_ci		both ""
188e5c31af7Sopenharmony_ci			precision mediump float;
189e5c31af7Sopenharmony_ci			precision mediump int;
190e5c31af7Sopenharmony_ci			${DECLARATIONS}
191e5c31af7Sopenharmony_ci
192e5c31af7Sopenharmony_ci			int func (int a)
193e5c31af7Sopenharmony_ci			{
194e5c31af7Sopenharmony_ci				return -a;
195e5c31af7Sopenharmony_ci			}
196e5c31af7Sopenharmony_ci
197e5c31af7Sopenharmony_ci			void main()
198e5c31af7Sopenharmony_ci			{
199e5c31af7Sopenharmony_ci				${SETUP}
200e5c31af7Sopenharmony_ci				out0 = func(in0);
201e5c31af7Sopenharmony_ci				${OUTPUT}
202e5c31af7Sopenharmony_ci			}
203e5c31af7Sopenharmony_ci		""
204e5c31af7Sopenharmony_ci	end
205e5c31af7Sopenharmony_ci
206e5c31af7Sopenharmony_ci	case int_ivec2
207e5c31af7Sopenharmony_ci		values
208e5c31af7Sopenharmony_ci		{
209e5c31af7Sopenharmony_ci			input ivec2 in0		= [ ivec2(-1, 0) | ivec2(1, 4) ];
210e5c31af7Sopenharmony_ci			output int out0		= [ 1 | -5 ];
211e5c31af7Sopenharmony_ci		}
212e5c31af7Sopenharmony_ci
213e5c31af7Sopenharmony_ci		both ""
214e5c31af7Sopenharmony_ci			precision mediump float;
215e5c31af7Sopenharmony_ci			precision mediump int;
216e5c31af7Sopenharmony_ci			${DECLARATIONS}
217e5c31af7Sopenharmony_ci
218e5c31af7Sopenharmony_ci			int func (ivec2 a)
219e5c31af7Sopenharmony_ci			{
220e5c31af7Sopenharmony_ci				return -(a.x + a.y);
221e5c31af7Sopenharmony_ci			}
222e5c31af7Sopenharmony_ci
223e5c31af7Sopenharmony_ci			void main()
224e5c31af7Sopenharmony_ci			{
225e5c31af7Sopenharmony_ci				${SETUP}
226e5c31af7Sopenharmony_ci				out0 = func(in0);
227e5c31af7Sopenharmony_ci				${OUTPUT}
228e5c31af7Sopenharmony_ci			}
229e5c31af7Sopenharmony_ci		""
230e5c31af7Sopenharmony_ci	end
231e5c31af7Sopenharmony_ci
232e5c31af7Sopenharmony_ci	case int_ivec3
233e5c31af7Sopenharmony_ci		values
234e5c31af7Sopenharmony_ci		{
235e5c31af7Sopenharmony_ci			input ivec3 in0		= [ ivec3(-1, 0, 2) | ivec3(1, 4, -8) ];
236e5c31af7Sopenharmony_ci			output int out0		= [ -1 | 3 ];
237e5c31af7Sopenharmony_ci		}
238e5c31af7Sopenharmony_ci
239e5c31af7Sopenharmony_ci		both ""
240e5c31af7Sopenharmony_ci			precision mediump float;
241e5c31af7Sopenharmony_ci			precision mediump int;
242e5c31af7Sopenharmony_ci			${DECLARATIONS}
243e5c31af7Sopenharmony_ci
244e5c31af7Sopenharmony_ci			int func (ivec3 a)
245e5c31af7Sopenharmony_ci			{
246e5c31af7Sopenharmony_ci				return -(a.x + a.y + a.z);
247e5c31af7Sopenharmony_ci			}
248e5c31af7Sopenharmony_ci
249e5c31af7Sopenharmony_ci			void main()
250e5c31af7Sopenharmony_ci			{
251e5c31af7Sopenharmony_ci				${SETUP}
252e5c31af7Sopenharmony_ci				out0 = func(in0);
253e5c31af7Sopenharmony_ci				${OUTPUT}
254e5c31af7Sopenharmony_ci			}
255e5c31af7Sopenharmony_ci		""
256e5c31af7Sopenharmony_ci	end
257e5c31af7Sopenharmony_ci
258e5c31af7Sopenharmony_ci	case int_ivec4
259e5c31af7Sopenharmony_ci		values
260e5c31af7Sopenharmony_ci		{
261e5c31af7Sopenharmony_ci			input ivec4 in0		= [ ivec4(-1, 0, 2, 2) | ivec4(1, 4, -8, 2) ];
262e5c31af7Sopenharmony_ci			output int out0		= [ -3 | 1 ];
263e5c31af7Sopenharmony_ci		}
264e5c31af7Sopenharmony_ci
265e5c31af7Sopenharmony_ci		both ""
266e5c31af7Sopenharmony_ci			precision mediump float;
267e5c31af7Sopenharmony_ci			precision mediump int;
268e5c31af7Sopenharmony_ci			${DECLARATIONS}
269e5c31af7Sopenharmony_ci
270e5c31af7Sopenharmony_ci			int func (ivec4 a)
271e5c31af7Sopenharmony_ci			{
272e5c31af7Sopenharmony_ci				return -(a.x + a.y + a.z + a.w);
273e5c31af7Sopenharmony_ci			}
274e5c31af7Sopenharmony_ci
275e5c31af7Sopenharmony_ci			void main()
276e5c31af7Sopenharmony_ci			{
277e5c31af7Sopenharmony_ci				${SETUP}
278e5c31af7Sopenharmony_ci				out0 = func(in0);
279e5c31af7Sopenharmony_ci				${OUTPUT}
280e5c31af7Sopenharmony_ci			}
281e5c31af7Sopenharmony_ci		""
282e5c31af7Sopenharmony_ci	end
283e5c31af7Sopenharmony_ci
284e5c31af7Sopenharmony_ci	case bool_bool
285e5c31af7Sopenharmony_ci		values
286e5c31af7Sopenharmony_ci		{
287e5c31af7Sopenharmony_ci			input bool in0		= [ true | false ];
288e5c31af7Sopenharmony_ci			output bool out0	= [ false | true ];
289e5c31af7Sopenharmony_ci		}
290e5c31af7Sopenharmony_ci
291e5c31af7Sopenharmony_ci		both ""
292e5c31af7Sopenharmony_ci			precision mediump float;
293e5c31af7Sopenharmony_ci			${DECLARATIONS}
294e5c31af7Sopenharmony_ci
295e5c31af7Sopenharmony_ci			bool func (bool a)
296e5c31af7Sopenharmony_ci			{
297e5c31af7Sopenharmony_ci				return !a;
298e5c31af7Sopenharmony_ci			}
299e5c31af7Sopenharmony_ci
300e5c31af7Sopenharmony_ci			void main()
301e5c31af7Sopenharmony_ci			{
302e5c31af7Sopenharmony_ci				${SETUP}
303e5c31af7Sopenharmony_ci				out0 = func(in0);
304e5c31af7Sopenharmony_ci				${OUTPUT}
305e5c31af7Sopenharmony_ci			}
306e5c31af7Sopenharmony_ci		""
307e5c31af7Sopenharmony_ci	end
308e5c31af7Sopenharmony_ci
309e5c31af7Sopenharmony_ci	case bool_bvec2
310e5c31af7Sopenharmony_ci		values
311e5c31af7Sopenharmony_ci		{
312e5c31af7Sopenharmony_ci			input bvec2 in0		= [ bvec2(true, true) | bvec2(false, true) ];
313e5c31af7Sopenharmony_ci			output bool out0	= [ false | true ];
314e5c31af7Sopenharmony_ci		}
315e5c31af7Sopenharmony_ci
316e5c31af7Sopenharmony_ci		both ""
317e5c31af7Sopenharmony_ci			precision mediump float;
318e5c31af7Sopenharmony_ci			${DECLARATIONS}
319e5c31af7Sopenharmony_ci
320e5c31af7Sopenharmony_ci			bool func (bvec2 a)
321e5c31af7Sopenharmony_ci			{
322e5c31af7Sopenharmony_ci				return !(a.x == a.y);
323e5c31af7Sopenharmony_ci			}
324e5c31af7Sopenharmony_ci
325e5c31af7Sopenharmony_ci			void main()
326e5c31af7Sopenharmony_ci			{
327e5c31af7Sopenharmony_ci				${SETUP}
328e5c31af7Sopenharmony_ci				out0 = func(in0);
329e5c31af7Sopenharmony_ci				${OUTPUT}
330e5c31af7Sopenharmony_ci			}
331e5c31af7Sopenharmony_ci		""
332e5c31af7Sopenharmony_ci	end
333e5c31af7Sopenharmony_ci
334e5c31af7Sopenharmony_ci	case bool_bvec3
335e5c31af7Sopenharmony_ci		values
336e5c31af7Sopenharmony_ci		{
337e5c31af7Sopenharmony_ci			input bvec3 in0		= [ bvec3(true, true, false) | bvec3(true, false, false) ];
338e5c31af7Sopenharmony_ci			output bool out0	= [ false | true ];
339e5c31af7Sopenharmony_ci		}
340e5c31af7Sopenharmony_ci
341e5c31af7Sopenharmony_ci		both ""
342e5c31af7Sopenharmony_ci			precision mediump float;
343e5c31af7Sopenharmony_ci			${DECLARATIONS}
344e5c31af7Sopenharmony_ci
345e5c31af7Sopenharmony_ci			bool func (bvec3 a)
346e5c31af7Sopenharmony_ci			{
347e5c31af7Sopenharmony_ci				return (a.x == a.y) == a.z;
348e5c31af7Sopenharmony_ci			}
349e5c31af7Sopenharmony_ci
350e5c31af7Sopenharmony_ci			void main()
351e5c31af7Sopenharmony_ci			{
352e5c31af7Sopenharmony_ci				${SETUP}
353e5c31af7Sopenharmony_ci				out0 = func(in0);
354e5c31af7Sopenharmony_ci				${OUTPUT}
355e5c31af7Sopenharmony_ci			}
356e5c31af7Sopenharmony_ci		""
357e5c31af7Sopenharmony_ci	end
358e5c31af7Sopenharmony_ci
359e5c31af7Sopenharmony_ci	case bool_bvec4
360e5c31af7Sopenharmony_ci		values
361e5c31af7Sopenharmony_ci		{
362e5c31af7Sopenharmony_ci			input bvec4 in0		= [ bvec4(true, true, true, false) | bvec4(false, false, true, true) | bvec4(true, false, false, true) ];
363e5c31af7Sopenharmony_ci			output bool out0	= [ false | true | true ];
364e5c31af7Sopenharmony_ci		}
365e5c31af7Sopenharmony_ci
366e5c31af7Sopenharmony_ci		both ""
367e5c31af7Sopenharmony_ci			precision mediump float;
368e5c31af7Sopenharmony_ci			${DECLARATIONS}
369e5c31af7Sopenharmony_ci
370e5c31af7Sopenharmony_ci			bool func (bvec4 a)
371e5c31af7Sopenharmony_ci			{
372e5c31af7Sopenharmony_ci				return ((a.x == a.y) == (a.z == a.w));
373e5c31af7Sopenharmony_ci			}
374e5c31af7Sopenharmony_ci
375e5c31af7Sopenharmony_ci			void main()
376e5c31af7Sopenharmony_ci			{
377e5c31af7Sopenharmony_ci				${SETUP}
378e5c31af7Sopenharmony_ci				out0 = func(in0);
379e5c31af7Sopenharmony_ci				${OUTPUT}
380e5c31af7Sopenharmony_ci			}
381e5c31af7Sopenharmony_ci		""
382e5c31af7Sopenharmony_ci	end
383e5c31af7Sopenharmony_ci
384e5c31af7Sopenharmony_ci	case mat2
385e5c31af7Sopenharmony_ci		values
386e5c31af7Sopenharmony_ci		{
387e5c31af7Sopenharmony_ci			input mat2 in0	= [ mat2(-2.0, 0.5, -1.0, 1.0) | mat2(1.0, -3.5, -3.5, 2.5) | mat2(-2.0, -2.0, 3.5, 0.0) ];
388e5c31af7Sopenharmony_ci			output mat2 out0	= [ mat2(4.0, -1.0, 2.0, -2.0) | mat2(-2.0, 7.0, 7.0, -5.0) | mat2(4.0, 4.0, -7.0, -0.0) ];
389e5c31af7Sopenharmony_ci		}
390e5c31af7Sopenharmony_ci
391e5c31af7Sopenharmony_ci		both ""
392e5c31af7Sopenharmony_ci			precision mediump float;
393e5c31af7Sopenharmony_ci			${DECLARATIONS}
394e5c31af7Sopenharmony_ci
395e5c31af7Sopenharmony_ci			mat2 func (mat2 a)
396e5c31af7Sopenharmony_ci			{
397e5c31af7Sopenharmony_ci				return -2.0*a;
398e5c31af7Sopenharmony_ci			}
399e5c31af7Sopenharmony_ci
400e5c31af7Sopenharmony_ci			void main()
401e5c31af7Sopenharmony_ci			{
402e5c31af7Sopenharmony_ci				${SETUP}
403e5c31af7Sopenharmony_ci				out0 = func(in0);
404e5c31af7Sopenharmony_ci				${OUTPUT}
405e5c31af7Sopenharmony_ci			}
406e5c31af7Sopenharmony_ci		""
407e5c31af7Sopenharmony_ci	end
408e5c31af7Sopenharmony_ci
409e5c31af7Sopenharmony_ci
410e5c31af7Sopenharmony_ci	case mat3
411e5c31af7Sopenharmony_ci		values
412e5c31af7Sopenharmony_ci		{
413e5c31af7Sopenharmony_ci			input mat3 in0	= [ mat3(2.5, 0.0, 1.0, -2.5, 1.0, 3.0, 0.0, 2.0, 1.5) | mat3(-3.5, 2.0, 0.5, -1.5, -3.5, 2.5, 0.0, 1.5, 3.0) | mat3(1.5, 3.0, -1.0, 2.5, -0.5, 3.5, 3.0, -3.0, -2.5) ];
414e5c31af7Sopenharmony_ci			output mat3 out0	= [ mat3(-5.0, -0.0, -2.0, 5.0, -2.0, -6.0, -0.0, -4.0, -3.0) | mat3(7.0, -4.0, -1.0, 3.0, 7.0, -5.0, -0.0, -3.0, -6.0) | mat3(-3.0, -6.0, 2.0, -5.0, 1.0, -7.0, -6.0, 6.0, 5.0) ];
415e5c31af7Sopenharmony_ci		}
416e5c31af7Sopenharmony_ci
417e5c31af7Sopenharmony_ci		both ""
418e5c31af7Sopenharmony_ci			precision mediump float;
419e5c31af7Sopenharmony_ci			${DECLARATIONS}
420e5c31af7Sopenharmony_ci
421e5c31af7Sopenharmony_ci			mat3 func (mat3 a)
422e5c31af7Sopenharmony_ci			{
423e5c31af7Sopenharmony_ci				return -2.0*a;
424e5c31af7Sopenharmony_ci			}
425e5c31af7Sopenharmony_ci
426e5c31af7Sopenharmony_ci			void main()
427e5c31af7Sopenharmony_ci			{
428e5c31af7Sopenharmony_ci				${SETUP}
429e5c31af7Sopenharmony_ci				out0 = func(in0);
430e5c31af7Sopenharmony_ci				${OUTPUT}
431e5c31af7Sopenharmony_ci			}
432e5c31af7Sopenharmony_ci		""
433e5c31af7Sopenharmony_ci	end
434e5c31af7Sopenharmony_ci
435e5c31af7Sopenharmony_ci
436e5c31af7Sopenharmony_ci	case mat4
437e5c31af7Sopenharmony_ci		values
438e5c31af7Sopenharmony_ci		{
439e5c31af7Sopenharmony_ci			input mat4 in0	= [ mat4(-2.0, 3.5, -0.5, 1.0, -1.5, 0.0, -1.0, -1.0, 0.5, 0.5, 3.0, 1.5, 3.0, 2.5, 3.5, 1.5) | mat4(-2.5, 2.5, 3.5, 3.0, 0.5, 1.5, -2.0, 2.5, 0.5, -1.5, -3.5, 2.5, 3.5, -3.0, 2.5, -0.5) | mat4(-2.5, -1.5, 2.0, 3.0, -3.5, 1.0, -3.5, 1.5, -1.5, 3.0, 3.5, 0.0, 3.5, -1.5, -3.0, 0.5) ];
440e5c31af7Sopenharmony_ci			output mat4 out0	= [ mat4(4.0, -7.0, 1.0, -2.0, 3.0, -0.0, 2.0, 2.0, -1.0, -1.0, -6.0, -3.0, -6.0, -5.0, -7.0, -3.0) | mat4(5.0, -5.0, -7.0, -6.0, -1.0, -3.0, 4.0, -5.0, -1.0, 3.0, 7.0, -5.0, -7.0, 6.0, -5.0, 1.0) | mat4(5.0, 3.0, -4.0, -6.0, 7.0, -2.0, 7.0, -3.0, 3.0, -6.0, -7.0, -0.0, -7.0, 3.0, 6.0, -1.0) ];
441e5c31af7Sopenharmony_ci		}
442e5c31af7Sopenharmony_ci
443e5c31af7Sopenharmony_ci		both ""
444e5c31af7Sopenharmony_ci			precision mediump float;
445e5c31af7Sopenharmony_ci			${DECLARATIONS}
446e5c31af7Sopenharmony_ci
447e5c31af7Sopenharmony_ci			mat4 func (mat4 a)
448e5c31af7Sopenharmony_ci			{
449e5c31af7Sopenharmony_ci				return -2.0*a;
450e5c31af7Sopenharmony_ci			}
451e5c31af7Sopenharmony_ci
452e5c31af7Sopenharmony_ci			void main()
453e5c31af7Sopenharmony_ci			{
454e5c31af7Sopenharmony_ci				${SETUP}
455e5c31af7Sopenharmony_ci				out0 = func(in0);
456e5c31af7Sopenharmony_ci				${OUTPUT}
457e5c31af7Sopenharmony_ci			}
458e5c31af7Sopenharmony_ci		""
459e5c31af7Sopenharmony_ci	end
460e5c31af7Sopenharmony_ci
461e5c31af7Sopenharmony_ci	case float_struct
462e5c31af7Sopenharmony_ci		values
463e5c31af7Sopenharmony_ci		{
464e5c31af7Sopenharmony_ci			input vec3 in0		= [ vec3(0.0, 1.0, -2.0) | vec3(2.0, 2.5, -4.0) ];
465e5c31af7Sopenharmony_ci			output float out0	= [ 1.0 | -0.5 ];
466e5c31af7Sopenharmony_ci		}
467e5c31af7Sopenharmony_ci
468e5c31af7Sopenharmony_ci		both ""
469e5c31af7Sopenharmony_ci			precision mediump float;
470e5c31af7Sopenharmony_ci			${DECLARATIONS}
471e5c31af7Sopenharmony_ci
472e5c31af7Sopenharmony_ci			struct Pos { float a, b, c; };
473e5c31af7Sopenharmony_ci
474e5c31af7Sopenharmony_ci			float func (Pos p)
475e5c31af7Sopenharmony_ci			{
476e5c31af7Sopenharmony_ci				return -(p.a + p.b + p.c);
477e5c31af7Sopenharmony_ci			}
478e5c31af7Sopenharmony_ci
479e5c31af7Sopenharmony_ci			void main()
480e5c31af7Sopenharmony_ci			{
481e5c31af7Sopenharmony_ci				Pos p = Pos(in0.x, in0.y, in0.z);
482e5c31af7Sopenharmony_ci				out0 = func(p);
483e5c31af7Sopenharmony_ci				${OUTPUT}
484e5c31af7Sopenharmony_ci			}
485e5c31af7Sopenharmony_ci		""
486e5c31af7Sopenharmony_ci	end
487e5c31af7Sopenharmony_ci
488e5c31af7Sopenharmony_ci	case struct_struct
489e5c31af7Sopenharmony_ci		values
490e5c31af7Sopenharmony_ci		{
491e5c31af7Sopenharmony_ci			input vec3 in0		= [ vec3(0.0, 1.0, -2.0) | vec3(2.0, 2.5, -4.0) ];
492e5c31af7Sopenharmony_ci			output float out0	= [ 1.0 | -0.5 ];
493e5c31af7Sopenharmony_ci		}
494e5c31af7Sopenharmony_ci
495e5c31af7Sopenharmony_ci		both ""
496e5c31af7Sopenharmony_ci			precision mediump float;
497e5c31af7Sopenharmony_ci			${DECLARATIONS}
498e5c31af7Sopenharmony_ci
499e5c31af7Sopenharmony_ci			struct Pos { float a, b, c; };
500e5c31af7Sopenharmony_ci
501e5c31af7Sopenharmony_ci			Pos func (Pos p)
502e5c31af7Sopenharmony_ci			{
503e5c31af7Sopenharmony_ci				return Pos(-p.a, -p.b, -p.c);
504e5c31af7Sopenharmony_ci			}
505e5c31af7Sopenharmony_ci
506e5c31af7Sopenharmony_ci			void main()
507e5c31af7Sopenharmony_ci			{
508e5c31af7Sopenharmony_ci				Pos p = Pos(in0.x, in0.y, in0.z);
509e5c31af7Sopenharmony_ci				p = func(p);
510e5c31af7Sopenharmony_ci				out0 = p.a + p.b + p.c;
511e5c31af7Sopenharmony_ci				${OUTPUT}
512e5c31af7Sopenharmony_ci			}
513e5c31af7Sopenharmony_ci		""
514e5c31af7Sopenharmony_ci	end
515e5c31af7Sopenharmony_ci
516e5c31af7Sopenharmony_ci	case struct_nested_struct
517e5c31af7Sopenharmony_ci		values
518e5c31af7Sopenharmony_ci		{
519e5c31af7Sopenharmony_ci			input vec3 in0		= [ vec3(0.0, 1.0, -2.0) | vec3(2.0, 2.5, -4.0) ];
520e5c31af7Sopenharmony_ci			output float out0	= [ 1.0 | -0.5 ];
521e5c31af7Sopenharmony_ci		}
522e5c31af7Sopenharmony_ci
523e5c31af7Sopenharmony_ci		both ""
524e5c31af7Sopenharmony_ci			precision mediump float;
525e5c31af7Sopenharmony_ci			${DECLARATIONS}
526e5c31af7Sopenharmony_ci
527e5c31af7Sopenharmony_ci			struct Pos { float a, b, c; };
528e5c31af7Sopenharmony_ci			struct Line { Pos start, end; };
529e5c31af7Sopenharmony_ci
530e5c31af7Sopenharmony_ci			Line func (Pos p)
531e5c31af7Sopenharmony_ci			{
532e5c31af7Sopenharmony_ci				return Line(p, Pos(-p.a, -p.b, -p.c));
533e5c31af7Sopenharmony_ci			}
534e5c31af7Sopenharmony_ci
535e5c31af7Sopenharmony_ci			float sum (Pos p)
536e5c31af7Sopenharmony_ci			{
537e5c31af7Sopenharmony_ci				return (p.a + p.b + p.c);
538e5c31af7Sopenharmony_ci			}
539e5c31af7Sopenharmony_ci
540e5c31af7Sopenharmony_ci			void main()
541e5c31af7Sopenharmony_ci			{
542e5c31af7Sopenharmony_ci				Pos p = Pos(in0.x, in0.y, in0.z);
543e5c31af7Sopenharmony_ci				Line line = func(p);
544e5c31af7Sopenharmony_ci				out0 = sum(line.start) + (2.0 * sum(line.end));
545e5c31af7Sopenharmony_ci				${OUTPUT}
546e5c31af7Sopenharmony_ci			}
547e5c31af7Sopenharmony_ci		""
548e5c31af7Sopenharmony_ci	end
549e5c31af7Sopenharmony_ci
550e5c31af7Sopenharmony_ci	case struct_constructor_highp_in_fragment
551e5c31af7Sopenharmony_ci		desc "passing highp vector to struct constructor in fragment shader yields all zeros"
552e5c31af7Sopenharmony_ci		vertex ""
553e5c31af7Sopenharmony_ci			${VERTEX_DECLARATIONS}
554e5c31af7Sopenharmony_ci			void main()
555e5c31af7Sopenharmony_ci			{
556e5c31af7Sopenharmony_ci				${VERTEX_OUTPUT}
557e5c31af7Sopenharmony_ci			}
558e5c31af7Sopenharmony_ci		""
559e5c31af7Sopenharmony_ci		fragment ""
560e5c31af7Sopenharmony_ci			#ifdef GL_FRAGMENT_PRECISION_HIGH
561e5c31af7Sopenharmony_ci			#define PRECISION highp
562e5c31af7Sopenharmony_ci			#else
563e5c31af7Sopenharmony_ci			#define PRECISION mediump
564e5c31af7Sopenharmony_ci			#endif
565e5c31af7Sopenharmony_ci			struct Test {
566e5c31af7Sopenharmony_ci				PRECISION vec3 color;
567e5c31af7Sopenharmony_ci			} ;
568e5c31af7Sopenharmony_ci			void main() {
569e5c31af7Sopenharmony_ci				PRECISION vec3 color = vec3(0.2, 2.0, 0.1);
570e5c31af7Sopenharmony_ci				Test test = Test(color);
571e5c31af7Sopenharmony_ci				// Bias the color so all components are guaranteed > 1.0.
572e5c31af7Sopenharmony_ci				gl_FragColor = vec4(vec3(0.25, 0.55, 0.65) + vec3(4.0, 0.25, 4.0) * test.color, 1.0);
573e5c31af7Sopenharmony_ci			}
574e5c31af7Sopenharmony_ci		""
575e5c31af7Sopenharmony_ci	end
576e5c31af7Sopenharmony_ci
577e5c31af7Sopenharmony_ciend # datatypes
578e5c31af7Sopenharmony_ci
579e5c31af7Sopenharmony_cigroup qualifiers "Function Parameter Qualifiers"
580e5c31af7Sopenharmony_ci
581e5c31af7Sopenharmony_ci	case in_float
582e5c31af7Sopenharmony_ci		values
583e5c31af7Sopenharmony_ci		{
584e5c31af7Sopenharmony_ci			input float in0		= [ 0.0 | 1.0 | -2.0 | 2.5 ];
585e5c31af7Sopenharmony_ci			output float out0	= [ 0.0 | -1.0 | 2.0 | -2.5 ];
586e5c31af7Sopenharmony_ci		}
587e5c31af7Sopenharmony_ci
588e5c31af7Sopenharmony_ci		both ""
589e5c31af7Sopenharmony_ci			precision mediump float;
590e5c31af7Sopenharmony_ci			precision mediump int;
591e5c31af7Sopenharmony_ci			${DECLARATIONS}
592e5c31af7Sopenharmony_ci
593e5c31af7Sopenharmony_ci			float func (in float a)
594e5c31af7Sopenharmony_ci			{
595e5c31af7Sopenharmony_ci				a = -a;
596e5c31af7Sopenharmony_ci				return 2.0 * a;
597e5c31af7Sopenharmony_ci			}
598e5c31af7Sopenharmony_ci
599e5c31af7Sopenharmony_ci			void main()
600e5c31af7Sopenharmony_ci			{
601e5c31af7Sopenharmony_ci				${SETUP}
602e5c31af7Sopenharmony_ci				float f = in0;
603e5c31af7Sopenharmony_ci				float g = func(f);
604e5c31af7Sopenharmony_ci				out0 = f + g;
605e5c31af7Sopenharmony_ci				${OUTPUT}
606e5c31af7Sopenharmony_ci			}
607e5c31af7Sopenharmony_ci		""
608e5c31af7Sopenharmony_ci	end
609e5c31af7Sopenharmony_ci
610e5c31af7Sopenharmony_ci	case out_float
611e5c31af7Sopenharmony_ci		values
612e5c31af7Sopenharmony_ci		{
613e5c31af7Sopenharmony_ci			input float in0		= [ 0.0 | 1.0 | -2.0 | 2.5 ];
614e5c31af7Sopenharmony_ci			output float out0	= [ 0.0 | -1.0 | 2.0 | -2.5 ];
615e5c31af7Sopenharmony_ci		}
616e5c31af7Sopenharmony_ci
617e5c31af7Sopenharmony_ci		both ""
618e5c31af7Sopenharmony_ci			precision mediump float;
619e5c31af7Sopenharmony_ci			precision mediump int;
620e5c31af7Sopenharmony_ci			${DECLARATIONS}
621e5c31af7Sopenharmony_ci
622e5c31af7Sopenharmony_ci			void func (out float a)
623e5c31af7Sopenharmony_ci			{
624e5c31af7Sopenharmony_ci				a = -1.0;
625e5c31af7Sopenharmony_ci			}
626e5c31af7Sopenharmony_ci
627e5c31af7Sopenharmony_ci			void main()
628e5c31af7Sopenharmony_ci			{
629e5c31af7Sopenharmony_ci				${SETUP}
630e5c31af7Sopenharmony_ci				float f = 1.0;
631e5c31af7Sopenharmony_ci				func(f);
632e5c31af7Sopenharmony_ci				out0 = f * in0;
633e5c31af7Sopenharmony_ci				${OUTPUT}
634e5c31af7Sopenharmony_ci			}
635e5c31af7Sopenharmony_ci		""
636e5c31af7Sopenharmony_ci	end
637e5c31af7Sopenharmony_ci
638e5c31af7Sopenharmony_ci	case inout_float
639e5c31af7Sopenharmony_ci		values
640e5c31af7Sopenharmony_ci		{
641e5c31af7Sopenharmony_ci			input float in0		= [ 0.0 | 1.0 | -2.0 | 2.5 ];
642e5c31af7Sopenharmony_ci			output float out0	= [ 0.0 | -1.0 | 2.0 | -2.5 ];
643e5c31af7Sopenharmony_ci		}
644e5c31af7Sopenharmony_ci
645e5c31af7Sopenharmony_ci		both ""
646e5c31af7Sopenharmony_ci			precision mediump float;
647e5c31af7Sopenharmony_ci			precision mediump int;
648e5c31af7Sopenharmony_ci			${DECLARATIONS}
649e5c31af7Sopenharmony_ci
650e5c31af7Sopenharmony_ci			void func (inout float a)
651e5c31af7Sopenharmony_ci			{
652e5c31af7Sopenharmony_ci				a = -a;
653e5c31af7Sopenharmony_ci			}
654e5c31af7Sopenharmony_ci
655e5c31af7Sopenharmony_ci			void main()
656e5c31af7Sopenharmony_ci			{
657e5c31af7Sopenharmony_ci				${SETUP}
658e5c31af7Sopenharmony_ci				float f = 1.0;
659e5c31af7Sopenharmony_ci				func(f);
660e5c31af7Sopenharmony_ci				out0 = f * in0;
661e5c31af7Sopenharmony_ci				${OUTPUT}
662e5c31af7Sopenharmony_ci			}
663e5c31af7Sopenharmony_ci		""
664e5c31af7Sopenharmony_ci	end
665e5c31af7Sopenharmony_ci
666e5c31af7Sopenharmony_ci	case in_lowp_float
667e5c31af7Sopenharmony_ci		values
668e5c31af7Sopenharmony_ci		{
669e5c31af7Sopenharmony_ci			input float in0		= [ 0.0 | 1.0 | -2.0 | 2.5 ];
670e5c31af7Sopenharmony_ci			output float out0	= [ 0.0 | -1.0 | 2.0 | -2.5 ];
671e5c31af7Sopenharmony_ci		}
672e5c31af7Sopenharmony_ci
673e5c31af7Sopenharmony_ci		both ""
674e5c31af7Sopenharmony_ci			precision mediump float;
675e5c31af7Sopenharmony_ci			precision mediump int;
676e5c31af7Sopenharmony_ci			${DECLARATIONS}
677e5c31af7Sopenharmony_ci
678e5c31af7Sopenharmony_ci			float func (in lowp float a)
679e5c31af7Sopenharmony_ci			{
680e5c31af7Sopenharmony_ci				a = -a;
681e5c31af7Sopenharmony_ci				return 2.0 * a;
682e5c31af7Sopenharmony_ci			}
683e5c31af7Sopenharmony_ci
684e5c31af7Sopenharmony_ci			void main()
685e5c31af7Sopenharmony_ci			{
686e5c31af7Sopenharmony_ci				${SETUP}
687e5c31af7Sopenharmony_ci				float f = in0;
688e5c31af7Sopenharmony_ci				float g = func(f);
689e5c31af7Sopenharmony_ci				out0 = f + g;
690e5c31af7Sopenharmony_ci				${OUTPUT}
691e5c31af7Sopenharmony_ci			}
692e5c31af7Sopenharmony_ci		""
693e5c31af7Sopenharmony_ci	end
694e5c31af7Sopenharmony_ci
695e5c31af7Sopenharmony_ci	case out_lowp_float
696e5c31af7Sopenharmony_ci		values
697e5c31af7Sopenharmony_ci		{
698e5c31af7Sopenharmony_ci			input float in0		= [ 0.0 | 1.0 | -2.0 | 2.5 ];
699e5c31af7Sopenharmony_ci			output float out0	= [ 0.0 | -1.0 | 2.0 | -2.5 ];
700e5c31af7Sopenharmony_ci		}
701e5c31af7Sopenharmony_ci
702e5c31af7Sopenharmony_ci		both ""
703e5c31af7Sopenharmony_ci			precision mediump float;
704e5c31af7Sopenharmony_ci			precision mediump int;
705e5c31af7Sopenharmony_ci			${DECLARATIONS}
706e5c31af7Sopenharmony_ci
707e5c31af7Sopenharmony_ci			void func (out lowp float a)
708e5c31af7Sopenharmony_ci			{
709e5c31af7Sopenharmony_ci				a = -1.0;
710e5c31af7Sopenharmony_ci			}
711e5c31af7Sopenharmony_ci
712e5c31af7Sopenharmony_ci			void main()
713e5c31af7Sopenharmony_ci			{
714e5c31af7Sopenharmony_ci				${SETUP}
715e5c31af7Sopenharmony_ci				float f = 1.0;
716e5c31af7Sopenharmony_ci				func(f);
717e5c31af7Sopenharmony_ci				out0 = f * in0;
718e5c31af7Sopenharmony_ci				${OUTPUT}
719e5c31af7Sopenharmony_ci			}
720e5c31af7Sopenharmony_ci		""
721e5c31af7Sopenharmony_ci	end
722e5c31af7Sopenharmony_ci
723e5c31af7Sopenharmony_ci	case inout_lowp_float
724e5c31af7Sopenharmony_ci		values
725e5c31af7Sopenharmony_ci		{
726e5c31af7Sopenharmony_ci			input float in0		= [ 0.0 | 1.0 | -2.0 | 2.5 ];
727e5c31af7Sopenharmony_ci			output float out0	= [ 0.0 | -1.0 | 2.0 | -2.5 ];
728e5c31af7Sopenharmony_ci		}
729e5c31af7Sopenharmony_ci
730e5c31af7Sopenharmony_ci		both ""
731e5c31af7Sopenharmony_ci			precision mediump float;
732e5c31af7Sopenharmony_ci			precision mediump int;
733e5c31af7Sopenharmony_ci			${DECLARATIONS}
734e5c31af7Sopenharmony_ci
735e5c31af7Sopenharmony_ci			void func (inout lowp float a)
736e5c31af7Sopenharmony_ci			{
737e5c31af7Sopenharmony_ci				a = -a;
738e5c31af7Sopenharmony_ci			}
739e5c31af7Sopenharmony_ci
740e5c31af7Sopenharmony_ci			void main()
741e5c31af7Sopenharmony_ci			{
742e5c31af7Sopenharmony_ci				${SETUP}
743e5c31af7Sopenharmony_ci				float f = 1.0;
744e5c31af7Sopenharmony_ci				func(f);
745e5c31af7Sopenharmony_ci				out0 = f * in0;
746e5c31af7Sopenharmony_ci				${OUTPUT}
747e5c31af7Sopenharmony_ci			}
748e5c31af7Sopenharmony_ci		""
749e5c31af7Sopenharmony_ci	end
750e5c31af7Sopenharmony_ci
751e5c31af7Sopenharmony_ci	case in_highp_float
752e5c31af7Sopenharmony_ci		values
753e5c31af7Sopenharmony_ci		{
754e5c31af7Sopenharmony_ci			input float in0		= [ 0.0 | 1.0 | -2.0 | 2.5 ];
755e5c31af7Sopenharmony_ci			output float out0	= [ 0.0 | -1.0 | 2.0 | -2.5 ];
756e5c31af7Sopenharmony_ci		}
757e5c31af7Sopenharmony_ci
758e5c31af7Sopenharmony_ci		both ""
759e5c31af7Sopenharmony_ci			precision mediump float;
760e5c31af7Sopenharmony_ci			precision mediump int;
761e5c31af7Sopenharmony_ci			${DECLARATIONS}
762e5c31af7Sopenharmony_ci
763e5c31af7Sopenharmony_ci			float func (in highp float a)
764e5c31af7Sopenharmony_ci			{
765e5c31af7Sopenharmony_ci				a = -a;
766e5c31af7Sopenharmony_ci				return 2.0 * a;
767e5c31af7Sopenharmony_ci			}
768e5c31af7Sopenharmony_ci
769e5c31af7Sopenharmony_ci			void main()
770e5c31af7Sopenharmony_ci			{
771e5c31af7Sopenharmony_ci				${SETUP}
772e5c31af7Sopenharmony_ci				float f = in0;
773e5c31af7Sopenharmony_ci				float g = func(f);
774e5c31af7Sopenharmony_ci				out0 = f + g;
775e5c31af7Sopenharmony_ci				${OUTPUT}
776e5c31af7Sopenharmony_ci			}
777e5c31af7Sopenharmony_ci		""
778e5c31af7Sopenharmony_ci	end
779e5c31af7Sopenharmony_ci
780e5c31af7Sopenharmony_ci	case out_highp_float
781e5c31af7Sopenharmony_ci		values
782e5c31af7Sopenharmony_ci		{
783e5c31af7Sopenharmony_ci			input float in0		= [ 0.0 | 1.0 | -2.0 | 2.5 ];
784e5c31af7Sopenharmony_ci			output float out0	= [ 0.0 | -1.0 | 2.0 | -2.5 ];
785e5c31af7Sopenharmony_ci		}
786e5c31af7Sopenharmony_ci
787e5c31af7Sopenharmony_ci		both ""
788e5c31af7Sopenharmony_ci			precision mediump float;
789e5c31af7Sopenharmony_ci			precision mediump int;
790e5c31af7Sopenharmony_ci			${DECLARATIONS}
791e5c31af7Sopenharmony_ci
792e5c31af7Sopenharmony_ci			void func (out highp float a)
793e5c31af7Sopenharmony_ci			{
794e5c31af7Sopenharmony_ci				a = -1.0;
795e5c31af7Sopenharmony_ci			}
796e5c31af7Sopenharmony_ci
797e5c31af7Sopenharmony_ci			void main()
798e5c31af7Sopenharmony_ci			{
799e5c31af7Sopenharmony_ci				${SETUP}
800e5c31af7Sopenharmony_ci				float f = 1.0;
801e5c31af7Sopenharmony_ci				func(f);
802e5c31af7Sopenharmony_ci				out0 = f * in0;
803e5c31af7Sopenharmony_ci				${OUTPUT}
804e5c31af7Sopenharmony_ci			}
805e5c31af7Sopenharmony_ci		""
806e5c31af7Sopenharmony_ci	end
807e5c31af7Sopenharmony_ci
808e5c31af7Sopenharmony_ci	case inout_highp_float
809e5c31af7Sopenharmony_ci		values
810e5c31af7Sopenharmony_ci		{
811e5c31af7Sopenharmony_ci			input float in0		= [ 0.0 | 1.0 | -2.0 | 2.5 ];
812e5c31af7Sopenharmony_ci			output float out0	= [ 0.0 | -1.0 | 2.0 | -2.5 ];
813e5c31af7Sopenharmony_ci		}
814e5c31af7Sopenharmony_ci
815e5c31af7Sopenharmony_ci		both ""
816e5c31af7Sopenharmony_ci			precision mediump float;
817e5c31af7Sopenharmony_ci			precision mediump int;
818e5c31af7Sopenharmony_ci			${DECLARATIONS}
819e5c31af7Sopenharmony_ci
820e5c31af7Sopenharmony_ci			void func (inout highp float a)
821e5c31af7Sopenharmony_ci			{
822e5c31af7Sopenharmony_ci				a = -a;
823e5c31af7Sopenharmony_ci			}
824e5c31af7Sopenharmony_ci
825e5c31af7Sopenharmony_ci			void main()
826e5c31af7Sopenharmony_ci			{
827e5c31af7Sopenharmony_ci				${SETUP}
828e5c31af7Sopenharmony_ci				float f = 1.0;
829e5c31af7Sopenharmony_ci				func(f);
830e5c31af7Sopenharmony_ci				out0 = f * in0;
831e5c31af7Sopenharmony_ci				${OUTPUT}
832e5c31af7Sopenharmony_ci			}
833e5c31af7Sopenharmony_ci		""
834e5c31af7Sopenharmony_ci	end
835e5c31af7Sopenharmony_ci
836e5c31af7Sopenharmony_ci	case const_float
837e5c31af7Sopenharmony_ci		values
838e5c31af7Sopenharmony_ci		{
839e5c31af7Sopenharmony_ci			input float in0		= [ 0.0 | 1.0 | -2.0 | 2.5 ];
840e5c31af7Sopenharmony_ci			output float out0	= [ 0.0 | -1.0 | 2.0 | -2.5 ];
841e5c31af7Sopenharmony_ci		}
842e5c31af7Sopenharmony_ci
843e5c31af7Sopenharmony_ci		both ""
844e5c31af7Sopenharmony_ci			precision mediump float;
845e5c31af7Sopenharmony_ci			precision mediump int;
846e5c31af7Sopenharmony_ci			${DECLARATIONS}
847e5c31af7Sopenharmony_ci
848e5c31af7Sopenharmony_ci			float func (const float a)
849e5c31af7Sopenharmony_ci			{
850e5c31af7Sopenharmony_ci				float b = -a;
851e5c31af7Sopenharmony_ci				return 2.0 * b;
852e5c31af7Sopenharmony_ci			}
853e5c31af7Sopenharmony_ci
854e5c31af7Sopenharmony_ci			void main()
855e5c31af7Sopenharmony_ci			{
856e5c31af7Sopenharmony_ci				${SETUP}
857e5c31af7Sopenharmony_ci				float f = in0;
858e5c31af7Sopenharmony_ci				float g = func(f);
859e5c31af7Sopenharmony_ci				out0 = f + g;
860e5c31af7Sopenharmony_ci				${OUTPUT}
861e5c31af7Sopenharmony_ci			}
862e5c31af7Sopenharmony_ci		""
863e5c31af7Sopenharmony_ci	end
864e5c31af7Sopenharmony_ci
865e5c31af7Sopenharmony_ci	case const_in_float
866e5c31af7Sopenharmony_ci		values
867e5c31af7Sopenharmony_ci		{
868e5c31af7Sopenharmony_ci			input float in0		= [ 0.0 | 1.0 | -2.0 | 2.5 ];
869e5c31af7Sopenharmony_ci			output float out0	= [ 0.0 | -1.0 | 2.0 | -2.5 ];
870e5c31af7Sopenharmony_ci		}
871e5c31af7Sopenharmony_ci
872e5c31af7Sopenharmony_ci		both ""
873e5c31af7Sopenharmony_ci			precision mediump float;
874e5c31af7Sopenharmony_ci			precision mediump int;
875e5c31af7Sopenharmony_ci			${DECLARATIONS}
876e5c31af7Sopenharmony_ci
877e5c31af7Sopenharmony_ci			float func (const in float a)
878e5c31af7Sopenharmony_ci			{
879e5c31af7Sopenharmony_ci				float b = -a;
880e5c31af7Sopenharmony_ci				return 2.0 * b;
881e5c31af7Sopenharmony_ci			}
882e5c31af7Sopenharmony_ci
883e5c31af7Sopenharmony_ci			void main()
884e5c31af7Sopenharmony_ci			{
885e5c31af7Sopenharmony_ci				${SETUP}
886e5c31af7Sopenharmony_ci				float f = in0;
887e5c31af7Sopenharmony_ci				float g = func(f);
888e5c31af7Sopenharmony_ci				out0 = f + g;
889e5c31af7Sopenharmony_ci				${OUTPUT}
890e5c31af7Sopenharmony_ci			}
891e5c31af7Sopenharmony_ci		""
892e5c31af7Sopenharmony_ci	end
893e5c31af7Sopenharmony_ci
894e5c31af7Sopenharmony_ci	case in_int
895e5c31af7Sopenharmony_ci		values
896e5c31af7Sopenharmony_ci		{
897e5c31af7Sopenharmony_ci			input int in0		= [ 0 | 1 | -2 | 4 ];
898e5c31af7Sopenharmony_ci			output int out0		= [ 0 | -1 | 2 | -4 ];
899e5c31af7Sopenharmony_ci		}
900e5c31af7Sopenharmony_ci
901e5c31af7Sopenharmony_ci		both ""
902e5c31af7Sopenharmony_ci			precision mediump float;
903e5c31af7Sopenharmony_ci			precision mediump int;
904e5c31af7Sopenharmony_ci			${DECLARATIONS}
905e5c31af7Sopenharmony_ci
906e5c31af7Sopenharmony_ci			int func (in int a)
907e5c31af7Sopenharmony_ci			{
908e5c31af7Sopenharmony_ci				a = -a;
909e5c31af7Sopenharmony_ci				return 2 * a;
910e5c31af7Sopenharmony_ci			}
911e5c31af7Sopenharmony_ci
912e5c31af7Sopenharmony_ci			void main()
913e5c31af7Sopenharmony_ci			{
914e5c31af7Sopenharmony_ci				${SETUP}
915e5c31af7Sopenharmony_ci				int f = in0;
916e5c31af7Sopenharmony_ci				int g = func(f);
917e5c31af7Sopenharmony_ci				out0 = f + g;
918e5c31af7Sopenharmony_ci				${OUTPUT}
919e5c31af7Sopenharmony_ci			}
920e5c31af7Sopenharmony_ci		""
921e5c31af7Sopenharmony_ci	end
922e5c31af7Sopenharmony_ci
923e5c31af7Sopenharmony_ci	case out_int
924e5c31af7Sopenharmony_ci		values
925e5c31af7Sopenharmony_ci		{
926e5c31af7Sopenharmony_ci			input int in0		= [ 0 | 1 | -2 | 6 ];
927e5c31af7Sopenharmony_ci			output int out0		= [ 0 | -1 | 2 | -6 ];
928e5c31af7Sopenharmony_ci		}
929e5c31af7Sopenharmony_ci
930e5c31af7Sopenharmony_ci		both ""
931e5c31af7Sopenharmony_ci			precision mediump float;
932e5c31af7Sopenharmony_ci			precision mediump int;
933e5c31af7Sopenharmony_ci			${DECLARATIONS}
934e5c31af7Sopenharmony_ci
935e5c31af7Sopenharmony_ci			void func (out int a)
936e5c31af7Sopenharmony_ci			{
937e5c31af7Sopenharmony_ci				a = -1;
938e5c31af7Sopenharmony_ci			}
939e5c31af7Sopenharmony_ci
940e5c31af7Sopenharmony_ci			void main()
941e5c31af7Sopenharmony_ci			{
942e5c31af7Sopenharmony_ci				${SETUP}
943e5c31af7Sopenharmony_ci				int f = 1;
944e5c31af7Sopenharmony_ci				func(f);
945e5c31af7Sopenharmony_ci				out0 = f * in0;
946e5c31af7Sopenharmony_ci				${OUTPUT}
947e5c31af7Sopenharmony_ci			}
948e5c31af7Sopenharmony_ci		""
949e5c31af7Sopenharmony_ci	end
950e5c31af7Sopenharmony_ci
951e5c31af7Sopenharmony_ci	case inout_int
952e5c31af7Sopenharmony_ci		values
953e5c31af7Sopenharmony_ci		{
954e5c31af7Sopenharmony_ci			input int in0		= [ 0 | 1 | -2 | 6 ];
955e5c31af7Sopenharmony_ci			output int out0		= [ 0 | -1 | 2 | -6 ];
956e5c31af7Sopenharmony_ci		}
957e5c31af7Sopenharmony_ci
958e5c31af7Sopenharmony_ci		both ""
959e5c31af7Sopenharmony_ci			precision mediump float;
960e5c31af7Sopenharmony_ci			precision mediump int;
961e5c31af7Sopenharmony_ci			${DECLARATIONS}
962e5c31af7Sopenharmony_ci
963e5c31af7Sopenharmony_ci			void func (inout int a)
964e5c31af7Sopenharmony_ci			{
965e5c31af7Sopenharmony_ci				a = -a;
966e5c31af7Sopenharmony_ci			}
967e5c31af7Sopenharmony_ci
968e5c31af7Sopenharmony_ci			void main()
969e5c31af7Sopenharmony_ci			{
970e5c31af7Sopenharmony_ci				${SETUP}
971e5c31af7Sopenharmony_ci				int f = 1;
972e5c31af7Sopenharmony_ci				func(f);
973e5c31af7Sopenharmony_ci				out0 = f * in0;
974e5c31af7Sopenharmony_ci				${OUTPUT}
975e5c31af7Sopenharmony_ci			}
976e5c31af7Sopenharmony_ci		""
977e5c31af7Sopenharmony_ci	end
978e5c31af7Sopenharmony_ci
979e5c31af7Sopenharmony_ci	case in_lowp_int
980e5c31af7Sopenharmony_ci		values
981e5c31af7Sopenharmony_ci		{
982e5c31af7Sopenharmony_ci			input int in0		= [ 0 | 1 | -2 | 4 ];
983e5c31af7Sopenharmony_ci			output int out0		= [ 0 | -1 | 2 | -4 ];
984e5c31af7Sopenharmony_ci		}
985e5c31af7Sopenharmony_ci
986e5c31af7Sopenharmony_ci		both ""
987e5c31af7Sopenharmony_ci			precision mediump float;
988e5c31af7Sopenharmony_ci			precision mediump int;
989e5c31af7Sopenharmony_ci			${DECLARATIONS}
990e5c31af7Sopenharmony_ci
991e5c31af7Sopenharmony_ci			int func (in lowp int a)
992e5c31af7Sopenharmony_ci			{
993e5c31af7Sopenharmony_ci				a = -a;
994e5c31af7Sopenharmony_ci				return 2 * a;
995e5c31af7Sopenharmony_ci			}
996e5c31af7Sopenharmony_ci
997e5c31af7Sopenharmony_ci			void main()
998e5c31af7Sopenharmony_ci			{
999e5c31af7Sopenharmony_ci				${SETUP}
1000e5c31af7Sopenharmony_ci				int f = in0;
1001e5c31af7Sopenharmony_ci				int g = func(f);
1002e5c31af7Sopenharmony_ci				out0 = f + g;
1003e5c31af7Sopenharmony_ci				${OUTPUT}
1004e5c31af7Sopenharmony_ci			}
1005e5c31af7Sopenharmony_ci		""
1006e5c31af7Sopenharmony_ci	end
1007e5c31af7Sopenharmony_ci
1008e5c31af7Sopenharmony_ci	case out_lowp_int
1009e5c31af7Sopenharmony_ci		values
1010e5c31af7Sopenharmony_ci		{
1011e5c31af7Sopenharmony_ci			input int in0		= [ 0 | 1 | -2 | 6 ];
1012e5c31af7Sopenharmony_ci			output int out0		= [ 0 | -1 | 2 | -6 ];
1013e5c31af7Sopenharmony_ci		}
1014e5c31af7Sopenharmony_ci
1015e5c31af7Sopenharmony_ci		both ""
1016e5c31af7Sopenharmony_ci			precision mediump float;
1017e5c31af7Sopenharmony_ci			precision mediump int;
1018e5c31af7Sopenharmony_ci			${DECLARATIONS}
1019e5c31af7Sopenharmony_ci
1020e5c31af7Sopenharmony_ci			void func (out lowp int a)
1021e5c31af7Sopenharmony_ci			{
1022e5c31af7Sopenharmony_ci				a = -1;
1023e5c31af7Sopenharmony_ci			}
1024e5c31af7Sopenharmony_ci
1025e5c31af7Sopenharmony_ci			void main()
1026e5c31af7Sopenharmony_ci			{
1027e5c31af7Sopenharmony_ci				${SETUP}
1028e5c31af7Sopenharmony_ci				int f = 1;
1029e5c31af7Sopenharmony_ci				func(f);
1030e5c31af7Sopenharmony_ci				out0 = f * in0;
1031e5c31af7Sopenharmony_ci				${OUTPUT}
1032e5c31af7Sopenharmony_ci			}
1033e5c31af7Sopenharmony_ci		""
1034e5c31af7Sopenharmony_ci	end
1035e5c31af7Sopenharmony_ci
1036e5c31af7Sopenharmony_ci	case inout_lowp_int
1037e5c31af7Sopenharmony_ci		values
1038e5c31af7Sopenharmony_ci		{
1039e5c31af7Sopenharmony_ci			input int in0		= [ 0 | 1 | -2 | 6 ];
1040e5c31af7Sopenharmony_ci			output int out0		= [ 0 | -1 | 2 | -6 ];
1041e5c31af7Sopenharmony_ci		}
1042e5c31af7Sopenharmony_ci
1043e5c31af7Sopenharmony_ci		both ""
1044e5c31af7Sopenharmony_ci			precision mediump float;
1045e5c31af7Sopenharmony_ci			precision mediump int;
1046e5c31af7Sopenharmony_ci			${DECLARATIONS}
1047e5c31af7Sopenharmony_ci
1048e5c31af7Sopenharmony_ci			void func (inout lowp int a)
1049e5c31af7Sopenharmony_ci			{
1050e5c31af7Sopenharmony_ci				a = -a;
1051e5c31af7Sopenharmony_ci			}
1052e5c31af7Sopenharmony_ci
1053e5c31af7Sopenharmony_ci			void main()
1054e5c31af7Sopenharmony_ci			{
1055e5c31af7Sopenharmony_ci				${SETUP}
1056e5c31af7Sopenharmony_ci				int f = 1;
1057e5c31af7Sopenharmony_ci				func(f);
1058e5c31af7Sopenharmony_ci				out0 = f * in0;
1059e5c31af7Sopenharmony_ci				${OUTPUT}
1060e5c31af7Sopenharmony_ci			}
1061e5c31af7Sopenharmony_ci		""
1062e5c31af7Sopenharmony_ci	end
1063e5c31af7Sopenharmony_ci
1064e5c31af7Sopenharmony_ci	case in_highp_int
1065e5c31af7Sopenharmony_ci		values
1066e5c31af7Sopenharmony_ci		{
1067e5c31af7Sopenharmony_ci			input int in0		= [ 0 | 1 | -2 | 4 ];
1068e5c31af7Sopenharmony_ci			output int out0		= [ 0 | -1 | 2 | -4 ];
1069e5c31af7Sopenharmony_ci		}
1070e5c31af7Sopenharmony_ci
1071e5c31af7Sopenharmony_ci		both ""
1072e5c31af7Sopenharmony_ci			precision mediump float;
1073e5c31af7Sopenharmony_ci			precision mediump int;
1074e5c31af7Sopenharmony_ci			${DECLARATIONS}
1075e5c31af7Sopenharmony_ci
1076e5c31af7Sopenharmony_ci			int func (in highp int a)
1077e5c31af7Sopenharmony_ci			{
1078e5c31af7Sopenharmony_ci				a = -a;
1079e5c31af7Sopenharmony_ci				return 2 * a;
1080e5c31af7Sopenharmony_ci			}
1081e5c31af7Sopenharmony_ci
1082e5c31af7Sopenharmony_ci			void main()
1083e5c31af7Sopenharmony_ci			{
1084e5c31af7Sopenharmony_ci				${SETUP}
1085e5c31af7Sopenharmony_ci				int f = in0;
1086e5c31af7Sopenharmony_ci				int g = func(f);
1087e5c31af7Sopenharmony_ci				out0 = f + g;
1088e5c31af7Sopenharmony_ci				${OUTPUT}
1089e5c31af7Sopenharmony_ci			}
1090e5c31af7Sopenharmony_ci		""
1091e5c31af7Sopenharmony_ci	end
1092e5c31af7Sopenharmony_ci
1093e5c31af7Sopenharmony_ci	case out_highp_int
1094e5c31af7Sopenharmony_ci		values
1095e5c31af7Sopenharmony_ci		{
1096e5c31af7Sopenharmony_ci			input int in0		= [ 0 | 1 | -2 | 6 ];
1097e5c31af7Sopenharmony_ci			output int out0		= [ 0 | -1 | 2 | -6 ];
1098e5c31af7Sopenharmony_ci		}
1099e5c31af7Sopenharmony_ci
1100e5c31af7Sopenharmony_ci		both ""
1101e5c31af7Sopenharmony_ci			precision mediump float;
1102e5c31af7Sopenharmony_ci			precision mediump int;
1103e5c31af7Sopenharmony_ci			${DECLARATIONS}
1104e5c31af7Sopenharmony_ci
1105e5c31af7Sopenharmony_ci			void func (out highp int a)
1106e5c31af7Sopenharmony_ci			{
1107e5c31af7Sopenharmony_ci				a = -1;
1108e5c31af7Sopenharmony_ci			}
1109e5c31af7Sopenharmony_ci
1110e5c31af7Sopenharmony_ci			void main()
1111e5c31af7Sopenharmony_ci			{
1112e5c31af7Sopenharmony_ci				${SETUP}
1113e5c31af7Sopenharmony_ci				int f = 1;
1114e5c31af7Sopenharmony_ci				func(f);
1115e5c31af7Sopenharmony_ci				out0 = f * in0;
1116e5c31af7Sopenharmony_ci				${OUTPUT}
1117e5c31af7Sopenharmony_ci			}
1118e5c31af7Sopenharmony_ci		""
1119e5c31af7Sopenharmony_ci	end
1120e5c31af7Sopenharmony_ci
1121e5c31af7Sopenharmony_ci	case inout_highp_int
1122e5c31af7Sopenharmony_ci		values
1123e5c31af7Sopenharmony_ci		{
1124e5c31af7Sopenharmony_ci			input int in0		= [ 0 | 1 | -2 | 6 ];
1125e5c31af7Sopenharmony_ci			output int out0		= [ 0 | -1 | 2 | -6 ];
1126e5c31af7Sopenharmony_ci		}
1127e5c31af7Sopenharmony_ci
1128e5c31af7Sopenharmony_ci		both ""
1129e5c31af7Sopenharmony_ci			precision mediump float;
1130e5c31af7Sopenharmony_ci			precision mediump int;
1131e5c31af7Sopenharmony_ci			${DECLARATIONS}
1132e5c31af7Sopenharmony_ci
1133e5c31af7Sopenharmony_ci			void func (inout highp int a)
1134e5c31af7Sopenharmony_ci			{
1135e5c31af7Sopenharmony_ci				a = -a;
1136e5c31af7Sopenharmony_ci			}
1137e5c31af7Sopenharmony_ci
1138e5c31af7Sopenharmony_ci			void main()
1139e5c31af7Sopenharmony_ci			{
1140e5c31af7Sopenharmony_ci				${SETUP}
1141e5c31af7Sopenharmony_ci				int f = 1;
1142e5c31af7Sopenharmony_ci				func(f);
1143e5c31af7Sopenharmony_ci				out0 = f * in0;
1144e5c31af7Sopenharmony_ci				${OUTPUT}
1145e5c31af7Sopenharmony_ci			}
1146e5c31af7Sopenharmony_ci		""
1147e5c31af7Sopenharmony_ci	end
1148e5c31af7Sopenharmony_ci
1149e5c31af7Sopenharmony_ci	case const_int
1150e5c31af7Sopenharmony_ci		values
1151e5c31af7Sopenharmony_ci		{
1152e5c31af7Sopenharmony_ci			input int in0		= [ 0 | 1 | -2 | 4 ];
1153e5c31af7Sopenharmony_ci			output int out0		= [ 0 | -1 | 2 | -4 ];
1154e5c31af7Sopenharmony_ci		}
1155e5c31af7Sopenharmony_ci
1156e5c31af7Sopenharmony_ci		both ""
1157e5c31af7Sopenharmony_ci			precision mediump float;
1158e5c31af7Sopenharmony_ci			precision mediump int;
1159e5c31af7Sopenharmony_ci			${DECLARATIONS}
1160e5c31af7Sopenharmony_ci
1161e5c31af7Sopenharmony_ci			int func (const int a)
1162e5c31af7Sopenharmony_ci			{
1163e5c31af7Sopenharmony_ci				int b = -a;
1164e5c31af7Sopenharmony_ci				return 2 * b;
1165e5c31af7Sopenharmony_ci			}
1166e5c31af7Sopenharmony_ci
1167e5c31af7Sopenharmony_ci			void main()
1168e5c31af7Sopenharmony_ci			{
1169e5c31af7Sopenharmony_ci				${SETUP}
1170e5c31af7Sopenharmony_ci				int f = in0;
1171e5c31af7Sopenharmony_ci				int g = func(f);
1172e5c31af7Sopenharmony_ci				out0 = f + g;
1173e5c31af7Sopenharmony_ci				${OUTPUT}
1174e5c31af7Sopenharmony_ci			}
1175e5c31af7Sopenharmony_ci		""
1176e5c31af7Sopenharmony_ci	end
1177e5c31af7Sopenharmony_ci
1178e5c31af7Sopenharmony_ci	case const_in_int
1179e5c31af7Sopenharmony_ci		values
1180e5c31af7Sopenharmony_ci		{
1181e5c31af7Sopenharmony_ci			input int in0		= [ 0 | 1 | -2 | 4 ];
1182e5c31af7Sopenharmony_ci			output int out0		= [ 0 | -1 | 2 | -4 ];
1183e5c31af7Sopenharmony_ci		}
1184e5c31af7Sopenharmony_ci
1185e5c31af7Sopenharmony_ci		both ""
1186e5c31af7Sopenharmony_ci			precision mediump float;
1187e5c31af7Sopenharmony_ci			precision mediump int;
1188e5c31af7Sopenharmony_ci			${DECLARATIONS}
1189e5c31af7Sopenharmony_ci
1190e5c31af7Sopenharmony_ci			int func (const in int a)
1191e5c31af7Sopenharmony_ci			{
1192e5c31af7Sopenharmony_ci				int b = -a;
1193e5c31af7Sopenharmony_ci				return 2 * b;
1194e5c31af7Sopenharmony_ci			}
1195e5c31af7Sopenharmony_ci
1196e5c31af7Sopenharmony_ci			void main()
1197e5c31af7Sopenharmony_ci			{
1198e5c31af7Sopenharmony_ci				${SETUP}
1199e5c31af7Sopenharmony_ci				int f = in0;
1200e5c31af7Sopenharmony_ci				int g = func(f);
1201e5c31af7Sopenharmony_ci				out0 = f + g;
1202e5c31af7Sopenharmony_ci				${OUTPUT}
1203e5c31af7Sopenharmony_ci			}
1204e5c31af7Sopenharmony_ci		""
1205e5c31af7Sopenharmony_ci	end
1206e5c31af7Sopenharmony_ci
1207e5c31af7Sopenharmony_ci	case in_bool
1208e5c31af7Sopenharmony_ci		values
1209e5c31af7Sopenharmony_ci		{
1210e5c31af7Sopenharmony_ci			input bool in0		= [ true | false ];
1211e5c31af7Sopenharmony_ci			output bool out0	= [ true | true ];
1212e5c31af7Sopenharmony_ci		}
1213e5c31af7Sopenharmony_ci
1214e5c31af7Sopenharmony_ci		both ""
1215e5c31af7Sopenharmony_ci			precision mediump float;
1216e5c31af7Sopenharmony_ci			${DECLARATIONS}
1217e5c31af7Sopenharmony_ci
1218e5c31af7Sopenharmony_ci			bool func (in bool a)
1219e5c31af7Sopenharmony_ci			{
1220e5c31af7Sopenharmony_ci				a = !a;
1221e5c31af7Sopenharmony_ci				return a;
1222e5c31af7Sopenharmony_ci			}
1223e5c31af7Sopenharmony_ci
1224e5c31af7Sopenharmony_ci			void main()
1225e5c31af7Sopenharmony_ci			{
1226e5c31af7Sopenharmony_ci				${SETUP}
1227e5c31af7Sopenharmony_ci				bool f = in0;
1228e5c31af7Sopenharmony_ci				bool g = func(f);
1229e5c31af7Sopenharmony_ci				out0 = (f != g);
1230e5c31af7Sopenharmony_ci				${OUTPUT}
1231e5c31af7Sopenharmony_ci			}
1232e5c31af7Sopenharmony_ci		""
1233e5c31af7Sopenharmony_ci	end
1234e5c31af7Sopenharmony_ci
1235e5c31af7Sopenharmony_ci	case out_bool
1236e5c31af7Sopenharmony_ci		values
1237e5c31af7Sopenharmony_ci		{
1238e5c31af7Sopenharmony_ci			input bool in0		= [ true | false ];
1239e5c31af7Sopenharmony_ci			output bool out0	= [ false | true ];
1240e5c31af7Sopenharmony_ci		}
1241e5c31af7Sopenharmony_ci
1242e5c31af7Sopenharmony_ci		both ""
1243e5c31af7Sopenharmony_ci			precision mediump float;
1244e5c31af7Sopenharmony_ci			${DECLARATIONS}
1245e5c31af7Sopenharmony_ci
1246e5c31af7Sopenharmony_ci			void func (out bool a)
1247e5c31af7Sopenharmony_ci			{
1248e5c31af7Sopenharmony_ci				a = false;
1249e5c31af7Sopenharmony_ci			}
1250e5c31af7Sopenharmony_ci
1251e5c31af7Sopenharmony_ci			void main()
1252e5c31af7Sopenharmony_ci			{
1253e5c31af7Sopenharmony_ci				${SETUP}
1254e5c31af7Sopenharmony_ci				bool f = true;
1255e5c31af7Sopenharmony_ci				func(f);
1256e5c31af7Sopenharmony_ci				out0 = (in0 == f);
1257e5c31af7Sopenharmony_ci				${OUTPUT}
1258e5c31af7Sopenharmony_ci			}
1259e5c31af7Sopenharmony_ci		""
1260e5c31af7Sopenharmony_ci	end
1261e5c31af7Sopenharmony_ci
1262e5c31af7Sopenharmony_ci	case inout_bool
1263e5c31af7Sopenharmony_ci		values
1264e5c31af7Sopenharmony_ci		{
1265e5c31af7Sopenharmony_ci			input bool in0		= [ true | false ];
1266e5c31af7Sopenharmony_ci			output bool out0	= [ false | true ];
1267e5c31af7Sopenharmony_ci		}
1268e5c31af7Sopenharmony_ci
1269e5c31af7Sopenharmony_ci		both ""
1270e5c31af7Sopenharmony_ci			precision mediump float;
1271e5c31af7Sopenharmony_ci			${DECLARATIONS}
1272e5c31af7Sopenharmony_ci
1273e5c31af7Sopenharmony_ci			void func (inout bool a)
1274e5c31af7Sopenharmony_ci			{
1275e5c31af7Sopenharmony_ci				a = !a;
1276e5c31af7Sopenharmony_ci			}
1277e5c31af7Sopenharmony_ci
1278e5c31af7Sopenharmony_ci			void main()
1279e5c31af7Sopenharmony_ci			{
1280e5c31af7Sopenharmony_ci				${SETUP}
1281e5c31af7Sopenharmony_ci				bool f = true;
1282e5c31af7Sopenharmony_ci				func(f);
1283e5c31af7Sopenharmony_ci				out0 = (in0 == f);
1284e5c31af7Sopenharmony_ci				${OUTPUT}
1285e5c31af7Sopenharmony_ci			}
1286e5c31af7Sopenharmony_ci		""
1287e5c31af7Sopenharmony_ci	end
1288e5c31af7Sopenharmony_ci
1289e5c31af7Sopenharmony_ciend # qualifiers
1290e5c31af7Sopenharmony_ci
1291e5c31af7Sopenharmony_cigroup declarations "Function Declarations"
1292e5c31af7Sopenharmony_ci
1293e5c31af7Sopenharmony_ci	case void_vs_no_void
1294e5c31af7Sopenharmony_ci		values
1295e5c31af7Sopenharmony_ci		{
1296e5c31af7Sopenharmony_ci			input float in0		= [ 0.0 | 1.0 | -2.0 | 2.5 ];
1297e5c31af7Sopenharmony_ci			output float out0	= [ 0.0 | -1.0 | 2.0 | -2.5 ];
1298e5c31af7Sopenharmony_ci		}
1299e5c31af7Sopenharmony_ci
1300e5c31af7Sopenharmony_ci		both ""
1301e5c31af7Sopenharmony_ci			precision mediump float;
1302e5c31af7Sopenharmony_ci			${DECLARATIONS}
1303e5c31af7Sopenharmony_ci
1304e5c31af7Sopenharmony_ci			float func ();
1305e5c31af7Sopenharmony_ci
1306e5c31af7Sopenharmony_ci			void main()
1307e5c31af7Sopenharmony_ci			{
1308e5c31af7Sopenharmony_ci				out0 = func() * in0;
1309e5c31af7Sopenharmony_ci				${OUTPUT}
1310e5c31af7Sopenharmony_ci			}
1311e5c31af7Sopenharmony_ci
1312e5c31af7Sopenharmony_ci			float func (void)
1313e5c31af7Sopenharmony_ci			{
1314e5c31af7Sopenharmony_ci				return -1.0;
1315e5c31af7Sopenharmony_ci			}
1316e5c31af7Sopenharmony_ci		""
1317e5c31af7Sopenharmony_ci	end
1318e5c31af7Sopenharmony_ci
1319e5c31af7Sopenharmony_ci	case in_vs_no_in
1320e5c31af7Sopenharmony_ci		values
1321e5c31af7Sopenharmony_ci		{
1322e5c31af7Sopenharmony_ci			input float in0		= [ 0.0 | 1.0 | -2.0 | 2.5 ];
1323e5c31af7Sopenharmony_ci			output float out0	= [ 0.0 | -1.0 | 2.0 | -2.5 ];
1324e5c31af7Sopenharmony_ci		}
1325e5c31af7Sopenharmony_ci
1326e5c31af7Sopenharmony_ci		both ""
1327e5c31af7Sopenharmony_ci			precision mediump float;
1328e5c31af7Sopenharmony_ci			${DECLARATIONS}
1329e5c31af7Sopenharmony_ci
1330e5c31af7Sopenharmony_ci			float func (float f);
1331e5c31af7Sopenharmony_ci
1332e5c31af7Sopenharmony_ci			void main()
1333e5c31af7Sopenharmony_ci			{
1334e5c31af7Sopenharmony_ci				out0 = func(in0);
1335e5c31af7Sopenharmony_ci				${OUTPUT}
1336e5c31af7Sopenharmony_ci			}
1337e5c31af7Sopenharmony_ci
1338e5c31af7Sopenharmony_ci			float func (in float f)
1339e5c31af7Sopenharmony_ci			{
1340e5c31af7Sopenharmony_ci				return -f;
1341e5c31af7Sopenharmony_ci			}
1342e5c31af7Sopenharmony_ci		""
1343e5c31af7Sopenharmony_ci	end
1344e5c31af7Sopenharmony_ci
1345e5c31af7Sopenharmony_ci	case default_vs_explicit_precision
1346e5c31af7Sopenharmony_ci		values
1347e5c31af7Sopenharmony_ci		{
1348e5c31af7Sopenharmony_ci			input float in0		= [ 0.0 | 1.0 | -2.0 | 2.5 ];
1349e5c31af7Sopenharmony_ci			output float out0	= [ 0.0 | -1.0 | 2.0 | -2.5 ];
1350e5c31af7Sopenharmony_ci		}
1351e5c31af7Sopenharmony_ci
1352e5c31af7Sopenharmony_ci		both ""
1353e5c31af7Sopenharmony_ci			precision mediump float;
1354e5c31af7Sopenharmony_ci			${DECLARATIONS}
1355e5c31af7Sopenharmony_ci
1356e5c31af7Sopenharmony_ci			float func (float f);
1357e5c31af7Sopenharmony_ci
1358e5c31af7Sopenharmony_ci			void main()
1359e5c31af7Sopenharmony_ci			{
1360e5c31af7Sopenharmony_ci				out0 = func(in0);
1361e5c31af7Sopenharmony_ci				${OUTPUT}
1362e5c31af7Sopenharmony_ci			}
1363e5c31af7Sopenharmony_ci
1364e5c31af7Sopenharmony_ci			float func (mediump float f)
1365e5c31af7Sopenharmony_ci			{
1366e5c31af7Sopenharmony_ci				return -f;
1367e5c31af7Sopenharmony_ci			}
1368e5c31af7Sopenharmony_ci		""
1369e5c31af7Sopenharmony_ci	end
1370e5c31af7Sopenharmony_ci
1371e5c31af7Sopenharmony_ciend # declarations
1372e5c31af7Sopenharmony_ci
1373e5c31af7Sopenharmony_cigroup overloading "Function Overloading"
1374e5c31af7Sopenharmony_ci
1375e5c31af7Sopenharmony_ci	case user_func_arg_type_simple
1376e5c31af7Sopenharmony_ci		values
1377e5c31af7Sopenharmony_ci		{
1378e5c31af7Sopenharmony_ci			input float in0		= [ 0.0 | 1.0 | -2.0 | 2.5 ];
1379e5c31af7Sopenharmony_ci			output float out0	= [ 0.0 | -1.0 | 2.0 | -2.5 ];
1380e5c31af7Sopenharmony_ci		}
1381e5c31af7Sopenharmony_ci
1382e5c31af7Sopenharmony_ci		both ""
1383e5c31af7Sopenharmony_ci			precision mediump float;
1384e5c31af7Sopenharmony_ci			precision mediump int;
1385e5c31af7Sopenharmony_ci			${DECLARATIONS}
1386e5c31af7Sopenharmony_ci
1387e5c31af7Sopenharmony_ci			float func (float a)
1388e5c31af7Sopenharmony_ci			{
1389e5c31af7Sopenharmony_ci				return -a;
1390e5c31af7Sopenharmony_ci			}
1391e5c31af7Sopenharmony_ci
1392e5c31af7Sopenharmony_ci			int func (int a)
1393e5c31af7Sopenharmony_ci			{
1394e5c31af7Sopenharmony_ci				return -a;
1395e5c31af7Sopenharmony_ci			}
1396e5c31af7Sopenharmony_ci
1397e5c31af7Sopenharmony_ci			void main()
1398e5c31af7Sopenharmony_ci			{
1399e5c31af7Sopenharmony_ci				out0 = func(in0) * float(func(-1));
1400e5c31af7Sopenharmony_ci				${OUTPUT}
1401e5c31af7Sopenharmony_ci			}
1402e5c31af7Sopenharmony_ci		""
1403e5c31af7Sopenharmony_ci	end
1404e5c31af7Sopenharmony_ci
1405e5c31af7Sopenharmony_ci	case user_func_arg_float_types
1406e5c31af7Sopenharmony_ci		values
1407e5c31af7Sopenharmony_ci		{
1408e5c31af7Sopenharmony_ci			input float in0		= [ 0.0 | 1.0 | -2.0 | 2.5 ];
1409e5c31af7Sopenharmony_ci			output float out0	= [ 0.0 | -1.0 | 2.0 | -2.5 ];
1410e5c31af7Sopenharmony_ci		}
1411e5c31af7Sopenharmony_ci
1412e5c31af7Sopenharmony_ci		both ""
1413e5c31af7Sopenharmony_ci			precision mediump float;
1414e5c31af7Sopenharmony_ci			precision mediump int;
1415e5c31af7Sopenharmony_ci			${DECLARATIONS}
1416e5c31af7Sopenharmony_ci
1417e5c31af7Sopenharmony_ci			float func (float a) { return -a; }
1418e5c31af7Sopenharmony_ci			vec2 func (vec2 a) { return a.yx; }
1419e5c31af7Sopenharmony_ci			vec3 func (vec3 a) { return a.xxx; }
1420e5c31af7Sopenharmony_ci			vec4 func (vec4 a) { return a.wwww; }
1421e5c31af7Sopenharmony_ci
1422e5c31af7Sopenharmony_ci			void main()
1423e5c31af7Sopenharmony_ci			{
1424e5c31af7Sopenharmony_ci				out0 = func(func(func(func(vec4(in0)).xyz).xy).x);
1425e5c31af7Sopenharmony_ci				${OUTPUT}
1426e5c31af7Sopenharmony_ci			}
1427e5c31af7Sopenharmony_ci		""
1428e5c31af7Sopenharmony_ci	end
1429e5c31af7Sopenharmony_ci
1430e5c31af7Sopenharmony_ci	case user_func_arg_int_types
1431e5c31af7Sopenharmony_ci		values
1432e5c31af7Sopenharmony_ci		{
1433e5c31af7Sopenharmony_ci			input int in0		= [ 0 | 1 | -2 | 6 ];
1434e5c31af7Sopenharmony_ci			output int out0		= [ 0 | -1 | 2 | -6 ];
1435e5c31af7Sopenharmony_ci		}
1436e5c31af7Sopenharmony_ci
1437e5c31af7Sopenharmony_ci		both ""
1438e5c31af7Sopenharmony_ci			precision mediump float;
1439e5c31af7Sopenharmony_ci			precision mediump int;
1440e5c31af7Sopenharmony_ci			${DECLARATIONS}
1441e5c31af7Sopenharmony_ci
1442e5c31af7Sopenharmony_ci			int func (int a) { return -a; }
1443e5c31af7Sopenharmony_ci			ivec2 func (ivec2 a) { return a.yx; }
1444e5c31af7Sopenharmony_ci			ivec3 func (ivec3 a) { return a.xxx; }
1445e5c31af7Sopenharmony_ci			ivec4 func (ivec4 a) { return a.wwww; }
1446e5c31af7Sopenharmony_ci
1447e5c31af7Sopenharmony_ci			void main()
1448e5c31af7Sopenharmony_ci			{
1449e5c31af7Sopenharmony_ci				${SETUP}
1450e5c31af7Sopenharmony_ci				out0 = func(func(func(func(ivec4(in0)).xyz).xy).x);
1451e5c31af7Sopenharmony_ci				${OUTPUT}
1452e5c31af7Sopenharmony_ci			}
1453e5c31af7Sopenharmony_ci		""
1454e5c31af7Sopenharmony_ci	end
1455e5c31af7Sopenharmony_ci
1456e5c31af7Sopenharmony_ci	case user_func_arg_bool_types
1457e5c31af7Sopenharmony_ci		values
1458e5c31af7Sopenharmony_ci		{
1459e5c31af7Sopenharmony_ci			input bool in0		= [ true | false ];
1460e5c31af7Sopenharmony_ci			output bool out0	= [ false | true ];
1461e5c31af7Sopenharmony_ci		}
1462e5c31af7Sopenharmony_ci
1463e5c31af7Sopenharmony_ci		both ""
1464e5c31af7Sopenharmony_ci			precision mediump float;
1465e5c31af7Sopenharmony_ci			${DECLARATIONS}
1466e5c31af7Sopenharmony_ci
1467e5c31af7Sopenharmony_ci			bool func (bool a) { return !a; }
1468e5c31af7Sopenharmony_ci			bvec2 func (bvec2 a) { return a.yx; }
1469e5c31af7Sopenharmony_ci			bvec3 func (bvec3 a) { return a.xxx; }
1470e5c31af7Sopenharmony_ci			bvec4 func (bvec4 a) { return a.wwww; }
1471e5c31af7Sopenharmony_ci
1472e5c31af7Sopenharmony_ci			void main()
1473e5c31af7Sopenharmony_ci			{
1474e5c31af7Sopenharmony_ci				${SETUP}
1475e5c31af7Sopenharmony_ci				out0 = func(func(func(func(bvec4(in0)).xyz).xy).x);
1476e5c31af7Sopenharmony_ci				${OUTPUT}
1477e5c31af7Sopenharmony_ci			}
1478e5c31af7Sopenharmony_ci		""
1479e5c31af7Sopenharmony_ci	end
1480e5c31af7Sopenharmony_ci
1481e5c31af7Sopenharmony_ci	case user_func_arg_basic_types
1482e5c31af7Sopenharmony_ci		values
1483e5c31af7Sopenharmony_ci		{
1484e5c31af7Sopenharmony_ci			input float in0		= [ 0.0 | 1.0 | -2.0 | 2.5 ];
1485e5c31af7Sopenharmony_ci			output float out0	= [ 0.0 | -1.0 | 2.0 | -2.5 ];
1486e5c31af7Sopenharmony_ci		}
1487e5c31af7Sopenharmony_ci
1488e5c31af7Sopenharmony_ci		both ""
1489e5c31af7Sopenharmony_ci			precision mediump float;
1490e5c31af7Sopenharmony_ci			precision mediump int;
1491e5c31af7Sopenharmony_ci			${DECLARATIONS}
1492e5c31af7Sopenharmony_ci
1493e5c31af7Sopenharmony_ci			float func (float a) { return -a; }
1494e5c31af7Sopenharmony_ci			vec2 func (vec2 a) { return a.yx; }
1495e5c31af7Sopenharmony_ci			vec3 func (vec3 a) { return a.xxx; }
1496e5c31af7Sopenharmony_ci			vec4 func (vec4 a) { return a.wwww; }
1497e5c31af7Sopenharmony_ci			int func (int a) { return -a; }
1498e5c31af7Sopenharmony_ci			ivec2 func (ivec2 a) { return a.yx; }
1499e5c31af7Sopenharmony_ci			ivec3 func (ivec3 a) { return a.xxx; }
1500e5c31af7Sopenharmony_ci			ivec4 func (ivec4 a) { return a.wwww; }
1501e5c31af7Sopenharmony_ci			bool func (bool a) { return !a; }
1502e5c31af7Sopenharmony_ci			bvec2 func (bvec2 a) { return a.yx; }
1503e5c31af7Sopenharmony_ci			bvec3 func (bvec3 a) { return a.xxx; }
1504e5c31af7Sopenharmony_ci			bvec4 func (bvec4 a) { return a.wwww; }
1505e5c31af7Sopenharmony_ci
1506e5c31af7Sopenharmony_ci			void main()
1507e5c31af7Sopenharmony_ci			{
1508e5c31af7Sopenharmony_ci				${SETUP}
1509e5c31af7Sopenharmony_ci				if (func(func(bvec4(false)).x))
1510e5c31af7Sopenharmony_ci					out0 = func(in0) * float(func(-1));
1511e5c31af7Sopenharmony_ci				else
1512e5c31af7Sopenharmony_ci					out0 = float(func(func(ivec4(func(func(func(vec4(0.5)).xyz).xy).xxxx)).xy).x);
1513e5c31af7Sopenharmony_ci				${OUTPUT}
1514e5c31af7Sopenharmony_ci			}
1515e5c31af7Sopenharmony_ci		""
1516e5c31af7Sopenharmony_ci	end
1517e5c31af7Sopenharmony_ci
1518e5c31af7Sopenharmony_ci	case user_func_arg_complex_types
1519e5c31af7Sopenharmony_ci		values
1520e5c31af7Sopenharmony_ci		{
1521e5c31af7Sopenharmony_ci			input float in0		= [ 0.0 | 1.0 | -2.0 | 2.5 ];
1522e5c31af7Sopenharmony_ci			output float out0	= [ 0.0 | -1.0 | 2.0 | -2.5 ];
1523e5c31af7Sopenharmony_ci		}
1524e5c31af7Sopenharmony_ci
1525e5c31af7Sopenharmony_ci		both ""
1526e5c31af7Sopenharmony_ci			precision mediump float;
1527e5c31af7Sopenharmony_ci			precision mediump int;
1528e5c31af7Sopenharmony_ci			${DECLARATIONS}
1529e5c31af7Sopenharmony_ci
1530e5c31af7Sopenharmony_ci			struct Pos { float a, b, c; };
1531e5c31af7Sopenharmony_ci			struct Line { Pos start, end; };
1532e5c31af7Sopenharmony_ci
1533e5c31af7Sopenharmony_ci			float func (float a) { return -a; }
1534e5c31af7Sopenharmony_ci			float func (float a[4]) { return a[0] + a[3]; }
1535e5c31af7Sopenharmony_ci			vec2 func (vec2 a) { return a.yx; }
1536e5c31af7Sopenharmony_ci			vec3 func (vec3 a) { return a.xxx; }
1537e5c31af7Sopenharmony_ci			vec4 func (vec4 a) { return a.wwww; }
1538e5c31af7Sopenharmony_ci			vec4 func (vec4 a[4]) { return a[1] + a[2]; }
1539e5c31af7Sopenharmony_ci			int func (int a) { return -a; }
1540e5c31af7Sopenharmony_ci			ivec2 func (ivec2 a) { return a.yx; }
1541e5c31af7Sopenharmony_ci			ivec3 func (ivec3 a) { return a.xxx; }
1542e5c31af7Sopenharmony_ci			ivec4 func (ivec4 a) { return a.wwww; }
1543e5c31af7Sopenharmony_ci			bool func (bool a) { return !a; }
1544e5c31af7Sopenharmony_ci			bvec2 func (bvec2 a) { return a.yx; }
1545e5c31af7Sopenharmony_ci			bvec3 func (bvec3 a) { return a.xxx; }
1546e5c31af7Sopenharmony_ci			bvec4 func (bvec4 a) { return a.wwww; }
1547e5c31af7Sopenharmony_ci			Pos func (Pos a) { return a; }
1548e5c31af7Sopenharmony_ci			Line func (Line a) { return Line(a.end, a.start); }
1549e5c31af7Sopenharmony_ci
1550e5c31af7Sopenharmony_ci			void main()
1551e5c31af7Sopenharmony_ci			{
1552e5c31af7Sopenharmony_ci				${SETUP}
1553e5c31af7Sopenharmony_ci				float arr[4];
1554e5c31af7Sopenharmony_ci				vec4 arr2[4];
1555e5c31af7Sopenharmony_ci				out0 = func(arr) + func(arr2).x;
1556e5c31af7Sopenharmony_ci				if (func(func(bvec4(false)).x))
1557e5c31af7Sopenharmony_ci					out0 = func(in0) * float(func(-1));
1558e5c31af7Sopenharmony_ci				else
1559e5c31af7Sopenharmony_ci					out0 = float(func(func(ivec4(func(func(func(vec4(0.5)).xyz).xy).xxxx)).xy).x);
1560e5c31af7Sopenharmony_ci				${OUTPUT}
1561e5c31af7Sopenharmony_ci			}
1562e5c31af7Sopenharmony_ci		""
1563e5c31af7Sopenharmony_ci	end
1564e5c31af7Sopenharmony_ci
1565e5c31af7Sopenharmony_ci	case user_func_arguments
1566e5c31af7Sopenharmony_ci		values
1567e5c31af7Sopenharmony_ci		{
1568e5c31af7Sopenharmony_ci			input float in0		= [ 0.0 | 1.0 | -2.0 | 2.5 ];
1569e5c31af7Sopenharmony_ci			output float out0	= [ 0.0 | -1.0 | 2.0 | -2.5 ];
1570e5c31af7Sopenharmony_ci		}
1571e5c31af7Sopenharmony_ci
1572e5c31af7Sopenharmony_ci		both ""
1573e5c31af7Sopenharmony_ci			precision mediump float;
1574e5c31af7Sopenharmony_ci			${DECLARATIONS}
1575e5c31af7Sopenharmony_ci
1576e5c31af7Sopenharmony_ci			float func (float a)
1577e5c31af7Sopenharmony_ci			{
1578e5c31af7Sopenharmony_ci				return -a;
1579e5c31af7Sopenharmony_ci			}
1580e5c31af7Sopenharmony_ci
1581e5c31af7Sopenharmony_ci			float func (float a, float b)
1582e5c31af7Sopenharmony_ci			{
1583e5c31af7Sopenharmony_ci				return a * b;
1584e5c31af7Sopenharmony_ci			}
1585e5c31af7Sopenharmony_ci
1586e5c31af7Sopenharmony_ci			void main()
1587e5c31af7Sopenharmony_ci			{
1588e5c31af7Sopenharmony_ci				out0 = func(in0) * func(-0.5, -2.0);
1589e5c31af7Sopenharmony_ci				${OUTPUT}
1590e5c31af7Sopenharmony_ci			}
1591e5c31af7Sopenharmony_ci		""
1592e5c31af7Sopenharmony_ci	end
1593e5c31af7Sopenharmony_ci
1594e5c31af7Sopenharmony_ci	case builtin_sin
1595e5c31af7Sopenharmony_ci		values
1596e5c31af7Sopenharmony_ci		{
1597e5c31af7Sopenharmony_ci			input int in0		= [ -1 | 0 | 1 | 4 ];
1598e5c31af7Sopenharmony_ci			output int out0		= [ 1 | 0 | -1 | -4 ];
1599e5c31af7Sopenharmony_ci		}
1600e5c31af7Sopenharmony_ci
1601e5c31af7Sopenharmony_ci		both ""
1602e5c31af7Sopenharmony_ci			precision mediump float;
1603e5c31af7Sopenharmony_ci			precision mediump int;
1604e5c31af7Sopenharmony_ci			${DECLARATIONS}
1605e5c31af7Sopenharmony_ci
1606e5c31af7Sopenharmony_ci			int sin(int a) { return -a; }
1607e5c31af7Sopenharmony_ci
1608e5c31af7Sopenharmony_ci			void main()
1609e5c31af7Sopenharmony_ci			{
1610e5c31af7Sopenharmony_ci				${SETUP}
1611e5c31af7Sopenharmony_ci				out0 = sin(in0);
1612e5c31af7Sopenharmony_ci				${OUTPUT}
1613e5c31af7Sopenharmony_ci			}
1614e5c31af7Sopenharmony_ci		""
1615e5c31af7Sopenharmony_ci	end
1616e5c31af7Sopenharmony_ci
1617e5c31af7Sopenharmony_ci	case builtin_step
1618e5c31af7Sopenharmony_ci		values
1619e5c31af7Sopenharmony_ci		{
1620e5c31af7Sopenharmony_ci			input int in0		= [ -1 | 0 | 1 | 4 ];
1621e5c31af7Sopenharmony_ci			output int out0		= [ 1 | 0 | -1 | -4 ];
1622e5c31af7Sopenharmony_ci		}
1623e5c31af7Sopenharmony_ci
1624e5c31af7Sopenharmony_ci		both ""
1625e5c31af7Sopenharmony_ci			precision mediump float;
1626e5c31af7Sopenharmony_ci			precision mediump int;
1627e5c31af7Sopenharmony_ci			${DECLARATIONS}
1628e5c31af7Sopenharmony_ci
1629e5c31af7Sopenharmony_ci			int step (float i, float j, int a) { return -a; }
1630e5c31af7Sopenharmony_ci
1631e5c31af7Sopenharmony_ci			void main()
1632e5c31af7Sopenharmony_ci			{
1633e5c31af7Sopenharmony_ci				${SETUP}
1634e5c31af7Sopenharmony_ci				out0 = step(0.0, 1.0, in0);
1635e5c31af7Sopenharmony_ci				${OUTPUT}
1636e5c31af7Sopenharmony_ci			}
1637e5c31af7Sopenharmony_ci		""
1638e5c31af7Sopenharmony_ci	end
1639e5c31af7Sopenharmony_ci
1640e5c31af7Sopenharmony_ci	case array_size
1641e5c31af7Sopenharmony_ci		values
1642e5c31af7Sopenharmony_ci		{
1643e5c31af7Sopenharmony_ci			output float out0	= [ 1.0 ];
1644e5c31af7Sopenharmony_ci		}
1645e5c31af7Sopenharmony_ci
1646e5c31af7Sopenharmony_ci		both ""
1647e5c31af7Sopenharmony_ci			precision mediump float;
1648e5c31af7Sopenharmony_ci			${DECLARATIONS}
1649e5c31af7Sopenharmony_ci
1650e5c31af7Sopenharmony_ci			float func (float f[3])
1651e5c31af7Sopenharmony_ci			{
1652e5c31af7Sopenharmony_ci				return f[0];
1653e5c31af7Sopenharmony_ci			}
1654e5c31af7Sopenharmony_ci
1655e5c31af7Sopenharmony_ci			float func (float f[4])
1656e5c31af7Sopenharmony_ci			{
1657e5c31af7Sopenharmony_ci				return f[1];
1658e5c31af7Sopenharmony_ci			}
1659e5c31af7Sopenharmony_ci
1660e5c31af7Sopenharmony_ci			void main ()
1661e5c31af7Sopenharmony_ci			{
1662e5c31af7Sopenharmony_ci				${SETUP}
1663e5c31af7Sopenharmony_ci				float x[4];
1664e5c31af7Sopenharmony_ci				x[0] = -1.0;
1665e5c31af7Sopenharmony_ci				x[1] = 1.0;
1666e5c31af7Sopenharmony_ci				x[2] = x[3] = 0.0;
1667e5c31af7Sopenharmony_ci				out0 = func(x);
1668e5c31af7Sopenharmony_ci				${OUTPUT}
1669e5c31af7Sopenharmony_ci			}
1670e5c31af7Sopenharmony_ci		""
1671e5c31af7Sopenharmony_ci	end
1672e5c31af7Sopenharmony_ci
1673e5c31af7Sopenharmony_ciend # overloading
1674e5c31af7Sopenharmony_ci
1675e5c31af7Sopenharmony_cigroup array_arguments "Arrays as Arguments"
1676e5c31af7Sopenharmony_ci
1677e5c31af7Sopenharmony_ci	case local_in_float
1678e5c31af7Sopenharmony_ci		values
1679e5c31af7Sopenharmony_ci		{
1680e5c31af7Sopenharmony_ci			input vec4 in0		= [ vec4(0.0, 1.0, 2.0, -4.0) | vec4(-7.5, 12.125, -0.25, 16.0) ];
1681e5c31af7Sopenharmony_ci			output vec4 out0	= [ vec4(0.0, -1.0, -2.0, 4.0) | vec4(7.5, -12.125, 0.25, -16.0) ];
1682e5c31af7Sopenharmony_ci		}
1683e5c31af7Sopenharmony_ci
1684e5c31af7Sopenharmony_ci		both ""
1685e5c31af7Sopenharmony_ci			precision mediump float;
1686e5c31af7Sopenharmony_ci			${DECLARATIONS}
1687e5c31af7Sopenharmony_ci
1688e5c31af7Sopenharmony_ci			float func (in float a[4])
1689e5c31af7Sopenharmony_ci			{
1690e5c31af7Sopenharmony_ci				a[0] = -1.0;
1691e5c31af7Sopenharmony_ci				a[2] = -4.0;
1692e5c31af7Sopenharmony_ci				a[3] = -3.0 * a[1];
1693e5c31af7Sopenharmony_ci				return a[0];
1694e5c31af7Sopenharmony_ci			}
1695e5c31af7Sopenharmony_ci
1696e5c31af7Sopenharmony_ci			void main()
1697e5c31af7Sopenharmony_ci			{
1698e5c31af7Sopenharmony_ci				float arr[4];
1699e5c31af7Sopenharmony_ci				arr[0] = in0.x;
1700e5c31af7Sopenharmony_ci				arr[1] = in0.y;
1701e5c31af7Sopenharmony_ci				arr[2] = in0.z;
1702e5c31af7Sopenharmony_ci				arr[3] = in0.w;
1703e5c31af7Sopenharmony_ci				float f = func(arr);
1704e5c31af7Sopenharmony_ci				out0 = f * vec4(arr[0], arr[1], arr[2], arr[3]);
1705e5c31af7Sopenharmony_ci				${OUTPUT}
1706e5c31af7Sopenharmony_ci			}
1707e5c31af7Sopenharmony_ci		""
1708e5c31af7Sopenharmony_ci	end
1709e5c31af7Sopenharmony_ci
1710e5c31af7Sopenharmony_ci	case global_in_float
1711e5c31af7Sopenharmony_ci		values
1712e5c31af7Sopenharmony_ci		{
1713e5c31af7Sopenharmony_ci			input vec4 in0		= [ vec4(0.0, 1.0, 2.0, -4.0) | vec4(-7.5, 12.125, -0.25, 16.0) ];
1714e5c31af7Sopenharmony_ci			output vec4 out0	= [ vec4(0.0, -1.0, -2.0, 4.0) | vec4(7.5, -12.125, 0.25, -16.0) ];
1715e5c31af7Sopenharmony_ci		}
1716e5c31af7Sopenharmony_ci
1717e5c31af7Sopenharmony_ci		both ""
1718e5c31af7Sopenharmony_ci			precision mediump float;
1719e5c31af7Sopenharmony_ci			${DECLARATIONS}
1720e5c31af7Sopenharmony_ci
1721e5c31af7Sopenharmony_ci			float func (in float a[4])
1722e5c31af7Sopenharmony_ci			{
1723e5c31af7Sopenharmony_ci				a[0] = -1.0;
1724e5c31af7Sopenharmony_ci				a[2] = -4.0;
1725e5c31af7Sopenharmony_ci				a[3] = -3.0 * a[1];
1726e5c31af7Sopenharmony_ci				return a[0];
1727e5c31af7Sopenharmony_ci			}
1728e5c31af7Sopenharmony_ci
1729e5c31af7Sopenharmony_ci			float arr[4];
1730e5c31af7Sopenharmony_ci
1731e5c31af7Sopenharmony_ci			void main()
1732e5c31af7Sopenharmony_ci			{
1733e5c31af7Sopenharmony_ci				arr[0] = in0.x;
1734e5c31af7Sopenharmony_ci				arr[1] = in0.y;
1735e5c31af7Sopenharmony_ci				arr[2] = in0.z;
1736e5c31af7Sopenharmony_ci				arr[3] = in0.w;
1737e5c31af7Sopenharmony_ci				float f = func(arr);
1738e5c31af7Sopenharmony_ci				out0 = f * vec4(arr[0], arr[1], arr[2], arr[3]);
1739e5c31af7Sopenharmony_ci				${OUTPUT}
1740e5c31af7Sopenharmony_ci			}
1741e5c31af7Sopenharmony_ci		""
1742e5c31af7Sopenharmony_ci	end
1743e5c31af7Sopenharmony_ci
1744e5c31af7Sopenharmony_ci	case local_in_int
1745e5c31af7Sopenharmony_ci		values
1746e5c31af7Sopenharmony_ci		{
1747e5c31af7Sopenharmony_ci			input ivec4 in0		= [ ivec4(0, 1, 2, -4) | ivec4(-7, -11, 13, 19) ];
1748e5c31af7Sopenharmony_ci			output ivec4 out0	= [ ivec4(0, -1, -2, 4) | ivec4(7, 11, -13, -19) ];
1749e5c31af7Sopenharmony_ci		}
1750e5c31af7Sopenharmony_ci
1751e5c31af7Sopenharmony_ci		both ""
1752e5c31af7Sopenharmony_ci			precision mediump float;
1753e5c31af7Sopenharmony_ci			precision mediump int;
1754e5c31af7Sopenharmony_ci			${DECLARATIONS}
1755e5c31af7Sopenharmony_ci
1756e5c31af7Sopenharmony_ci			int func (in int a[4])
1757e5c31af7Sopenharmony_ci			{
1758e5c31af7Sopenharmony_ci				a[0] = -1;
1759e5c31af7Sopenharmony_ci				a[2] = -4;
1760e5c31af7Sopenharmony_ci				a[3] = -3 * a[1];
1761e5c31af7Sopenharmony_ci				return a[0];
1762e5c31af7Sopenharmony_ci			}
1763e5c31af7Sopenharmony_ci
1764e5c31af7Sopenharmony_ci			void main()
1765e5c31af7Sopenharmony_ci			{
1766e5c31af7Sopenharmony_ci				${SETUP}
1767e5c31af7Sopenharmony_ci				int arr[4];
1768e5c31af7Sopenharmony_ci				arr[0] = in0.x;
1769e5c31af7Sopenharmony_ci				arr[1] = in0.y;
1770e5c31af7Sopenharmony_ci				arr[2] = in0.z;
1771e5c31af7Sopenharmony_ci				arr[3] = in0.w;
1772e5c31af7Sopenharmony_ci				int f = func(arr);
1773e5c31af7Sopenharmony_ci				out0 = f * ivec4(arr[0], arr[1], arr[2], arr[3]);
1774e5c31af7Sopenharmony_ci				${OUTPUT}
1775e5c31af7Sopenharmony_ci			}
1776e5c31af7Sopenharmony_ci		""
1777e5c31af7Sopenharmony_ci	end
1778e5c31af7Sopenharmony_ci
1779e5c31af7Sopenharmony_ci	case global_in_int
1780e5c31af7Sopenharmony_ci		values
1781e5c31af7Sopenharmony_ci		{
1782e5c31af7Sopenharmony_ci			input ivec4 in0		= [ ivec4(0, 1, 2, 4) | ivec4(-7, -11, 13, 19) ];
1783e5c31af7Sopenharmony_ci			output ivec4 out0	= [ ivec4(0, -1, -2, -4) | ivec4(7, 11, -13, -19) ];
1784e5c31af7Sopenharmony_ci		}
1785e5c31af7Sopenharmony_ci
1786e5c31af7Sopenharmony_ci		both ""
1787e5c31af7Sopenharmony_ci			precision mediump float;
1788e5c31af7Sopenharmony_ci			precision mediump int;
1789e5c31af7Sopenharmony_ci			${DECLARATIONS}
1790e5c31af7Sopenharmony_ci
1791e5c31af7Sopenharmony_ci			int func (in int a[4])
1792e5c31af7Sopenharmony_ci			{
1793e5c31af7Sopenharmony_ci				a[0] = -1;
1794e5c31af7Sopenharmony_ci				a[2] = -4;
1795e5c31af7Sopenharmony_ci				a[3] = -3 * a[1];
1796e5c31af7Sopenharmony_ci				return a[0];
1797e5c31af7Sopenharmony_ci			}
1798e5c31af7Sopenharmony_ci
1799e5c31af7Sopenharmony_ci			int arr[4];
1800e5c31af7Sopenharmony_ci
1801e5c31af7Sopenharmony_ci			void main()
1802e5c31af7Sopenharmony_ci			{
1803e5c31af7Sopenharmony_ci				${SETUP}
1804e5c31af7Sopenharmony_ci				arr[0] = in0.x;
1805e5c31af7Sopenharmony_ci				arr[1] = in0.y;
1806e5c31af7Sopenharmony_ci				arr[2] = in0.z;
1807e5c31af7Sopenharmony_ci				arr[3] = in0.w;
1808e5c31af7Sopenharmony_ci				int f = func(arr);
1809e5c31af7Sopenharmony_ci				out0 = f * ivec4(arr[0], arr[1], arr[2], arr[3]);
1810e5c31af7Sopenharmony_ci				${OUTPUT}
1811e5c31af7Sopenharmony_ci			}
1812e5c31af7Sopenharmony_ci
1813e5c31af7Sopenharmony_ci		""
1814e5c31af7Sopenharmony_ci	end
1815e5c31af7Sopenharmony_ci
1816e5c31af7Sopenharmony_ci	case local_in_bool
1817e5c31af7Sopenharmony_ci		values
1818e5c31af7Sopenharmony_ci		{
1819e5c31af7Sopenharmony_ci			input bvec4 in0		= [ bvec4(true, true, false, true) | bvec4(false, false, false, false) ];
1820e5c31af7Sopenharmony_ci			output bvec4 out0	= [ bvec4(false, false, true, false) | bvec4(true, true, true, true) ];
1821e5c31af7Sopenharmony_ci		}
1822e5c31af7Sopenharmony_ci
1823e5c31af7Sopenharmony_ci		both ""
1824e5c31af7Sopenharmony_ci			precision mediump float;
1825e5c31af7Sopenharmony_ci			${DECLARATIONS}
1826e5c31af7Sopenharmony_ci
1827e5c31af7Sopenharmony_ci			bool func (in bool a[4])
1828e5c31af7Sopenharmony_ci			{
1829e5c31af7Sopenharmony_ci				a[0] = false;
1830e5c31af7Sopenharmony_ci				a[2] = true;
1831e5c31af7Sopenharmony_ci				a[3] = !a[1];
1832e5c31af7Sopenharmony_ci				return a[0];
1833e5c31af7Sopenharmony_ci			}
1834e5c31af7Sopenharmony_ci
1835e5c31af7Sopenharmony_ci			void main()
1836e5c31af7Sopenharmony_ci			{
1837e5c31af7Sopenharmony_ci				${SETUP}
1838e5c31af7Sopenharmony_ci				bool arr[4];
1839e5c31af7Sopenharmony_ci				arr[0] = !in0.x;
1840e5c31af7Sopenharmony_ci				arr[1] = !in0.y;
1841e5c31af7Sopenharmony_ci				arr[2] = !in0.z;
1842e5c31af7Sopenharmony_ci				arr[3] = !in0.w;
1843e5c31af7Sopenharmony_ci				func(arr);
1844e5c31af7Sopenharmony_ci				out0 = bvec4(arr[0], arr[1], arr[2], arr[3]);
1845e5c31af7Sopenharmony_ci				${OUTPUT}
1846e5c31af7Sopenharmony_ci			}
1847e5c31af7Sopenharmony_ci		""
1848e5c31af7Sopenharmony_ci	end
1849e5c31af7Sopenharmony_ci
1850e5c31af7Sopenharmony_ci	case global_in_bool
1851e5c31af7Sopenharmony_ci		values
1852e5c31af7Sopenharmony_ci		{
1853e5c31af7Sopenharmony_ci			input bvec4 in0		= [ bvec4(true, true, false, true) | bvec4(false, false, false, false) ];
1854e5c31af7Sopenharmony_ci			output bvec4 out0	= [ bvec4(false, false, true, false) | bvec4(true, true, true, true) ];
1855e5c31af7Sopenharmony_ci		}
1856e5c31af7Sopenharmony_ci
1857e5c31af7Sopenharmony_ci		both ""
1858e5c31af7Sopenharmony_ci			precision mediump float;
1859e5c31af7Sopenharmony_ci			${DECLARATIONS}
1860e5c31af7Sopenharmony_ci
1861e5c31af7Sopenharmony_ci			bool func (in bool a[4])
1862e5c31af7Sopenharmony_ci			{
1863e5c31af7Sopenharmony_ci				a[0] = false;
1864e5c31af7Sopenharmony_ci				a[2] = true;
1865e5c31af7Sopenharmony_ci				a[3] = !a[1];
1866e5c31af7Sopenharmony_ci				return a[0];
1867e5c31af7Sopenharmony_ci			}
1868e5c31af7Sopenharmony_ci
1869e5c31af7Sopenharmony_ci			bool arr[4];
1870e5c31af7Sopenharmony_ci
1871e5c31af7Sopenharmony_ci			void main()
1872e5c31af7Sopenharmony_ci			{
1873e5c31af7Sopenharmony_ci				${SETUP}
1874e5c31af7Sopenharmony_ci				arr[0] = !in0.x;
1875e5c31af7Sopenharmony_ci				arr[1] = !in0.y;
1876e5c31af7Sopenharmony_ci				arr[2] = !in0.z;
1877e5c31af7Sopenharmony_ci				arr[3] = !in0.w;
1878e5c31af7Sopenharmony_ci				func(arr);
1879e5c31af7Sopenharmony_ci				out0 = bvec4(arr[0], arr[1], arr[2], arr[3]);
1880e5c31af7Sopenharmony_ci				${OUTPUT}
1881e5c31af7Sopenharmony_ci			}
1882e5c31af7Sopenharmony_ci		""
1883e5c31af7Sopenharmony_ci	end
1884e5c31af7Sopenharmony_ci
1885e5c31af7Sopenharmony_ci	case test_helpers
1886e5c31af7Sopenharmony_ci		desc "Check that helper functions are supported properly."
1887e5c31af7Sopenharmony_ci		values
1888e5c31af7Sopenharmony_ci		{
1889e5c31af7Sopenharmony_ci			input vec4 in0		= [ vec4(0.0, 1.0, 2.0, -4.0) | vec4(-7.5, 12.125, -0.25, 16.0) ];
1890e5c31af7Sopenharmony_ci			output float out0	= [ 1.0 | 1.0 ];
1891e5c31af7Sopenharmony_ci		}
1892e5c31af7Sopenharmony_ci
1893e5c31af7Sopenharmony_ci		both ""
1894e5c31af7Sopenharmony_ci			precision mediump float;
1895e5c31af7Sopenharmony_ci			${DECLARATIONS}
1896e5c31af7Sopenharmony_ci
1897e5c31af7Sopenharmony_ci			vec4 get (in float arr[4]);
1898e5c31af7Sopenharmony_ci			void set (out float arr[4], vec4 val);
1899e5c31af7Sopenharmony_ci			void negate (inout float arr[4]);
1900e5c31af7Sopenharmony_ci			bool test (in float arr[4], vec4 ref);
1901e5c31af7Sopenharmony_ci			bool isEqual (in float a[4], in float b[4]);
1902e5c31af7Sopenharmony_ci
1903e5c31af7Sopenharmony_ci			void main()
1904e5c31af7Sopenharmony_ci			{
1905e5c31af7Sopenharmony_ci				float arr[4];
1906e5c31af7Sopenharmony_ci				set(arr, in0);
1907e5c31af7Sopenharmony_ci				negate(arr);
1908e5c31af7Sopenharmony_ci				out0 = float(test(arr, -in0));
1909e5c31af7Sopenharmony_ci				${OUTPUT}
1910e5c31af7Sopenharmony_ci			}
1911e5c31af7Sopenharmony_ci
1912e5c31af7Sopenharmony_ci			float absDiff (vec4 a, vec4 b) { vec4 d = abs(a - b); return max(max(d.x, d.y), max(d.z, d.w)); }
1913e5c31af7Sopenharmony_ci			vec4 get (in float arr[4]) { return vec4(arr[0], arr[1], arr[2], arr[3]); }
1914e5c31af7Sopenharmony_ci			void set (out float arr[4], vec4 val) { arr[0] = val.x; arr[1] = val.y; arr[2] = val.z; arr[3] = val.w; }
1915e5c31af7Sopenharmony_ci			void negate (inout float arr[4]) { set(arr, -get(arr)); }
1916e5c31af7Sopenharmony_ci			bool test (in float arr[4], vec4 ref) { return (absDiff(get(arr), ref) < 0.1); }
1917e5c31af7Sopenharmony_ci			bool isEqual (in float a[4], in float b[4]) { return (absDiff(get(a), get(b)) < 0.1); }
1918e5c31af7Sopenharmony_ci		""
1919e5c31af7Sopenharmony_ci	end
1920e5c31af7Sopenharmony_ci
1921e5c31af7Sopenharmony_ci	case copy_local_in_on_call
1922e5c31af7Sopenharmony_ci		desc "Check that local 'in' arguments are copied on call and don't alias."
1923e5c31af7Sopenharmony_ci		values
1924e5c31af7Sopenharmony_ci		{
1925e5c31af7Sopenharmony_ci			input vec4 in0		= [ vec4(0.0, 1.0, 2.0, -4.0) | vec4(-7.5, 12.125, -0.25, 16.0) ];
1926e5c31af7Sopenharmony_ci			output vec4 out0	= [ vec4(0.0, -1.0, -2.0, 4.0) | vec4(7.5, -12.125, 0.25, -16.0) ];
1927e5c31af7Sopenharmony_ci		}
1928e5c31af7Sopenharmony_ci
1929e5c31af7Sopenharmony_ci		both ""
1930e5c31af7Sopenharmony_ci			precision mediump float;
1931e5c31af7Sopenharmony_ci			${DECLARATIONS}
1932e5c31af7Sopenharmony_ci
1933e5c31af7Sopenharmony_ci			vec4 get (in float arr[4]);
1934e5c31af7Sopenharmony_ci			void set (out float arr[4], vec4 val);
1935e5c31af7Sopenharmony_ci			void negate (inout float arr[4]);
1936e5c31af7Sopenharmony_ci			bool test (in float arr[4], vec4 ref);
1937e5c31af7Sopenharmony_ci			bool isEqual (in float a[4], in float b[4]);
1938e5c31af7Sopenharmony_ci
1939e5c31af7Sopenharmony_ci			float func (in float a[4], in float b[4])
1940e5c31af7Sopenharmony_ci			{
1941e5c31af7Sopenharmony_ci				a[0] = 2.123;
1942e5c31af7Sopenharmony_ci				a[2] = -4.123;
1943e5c31af7Sopenharmony_ci				return isEqual(a, b) ? 1.0 : -1.0;
1944e5c31af7Sopenharmony_ci			}
1945e5c31af7Sopenharmony_ci
1946e5c31af7Sopenharmony_ci			void main()
1947e5c31af7Sopenharmony_ci			{
1948e5c31af7Sopenharmony_ci				float arr[4];
1949e5c31af7Sopenharmony_ci				set(arr, in0);
1950e5c31af7Sopenharmony_ci				out0 = in0 * func(arr, arr);
1951e5c31af7Sopenharmony_ci				${OUTPUT}
1952e5c31af7Sopenharmony_ci			}
1953e5c31af7Sopenharmony_ci
1954e5c31af7Sopenharmony_ci			float absDiff (vec4 a, vec4 b) { vec4 d = abs(a - b); return max(max(d.x, d.y), max(d.z, d.w)); }
1955e5c31af7Sopenharmony_ci			vec4 get (in float arr[4]) { return vec4(arr[0], arr[1], arr[2], arr[3]); }
1956e5c31af7Sopenharmony_ci			void set (out float arr[4], vec4 val) { arr[0] = val.x; arr[1] = val.y; arr[2] = val.z; arr[3] = val.w; }
1957e5c31af7Sopenharmony_ci			void negate (inout float arr[4]) { set(arr, -get(arr)); }
1958e5c31af7Sopenharmony_ci			bool test (in float arr[4], vec4 ref) { return (absDiff(get(arr), ref) < 0.1); }
1959e5c31af7Sopenharmony_ci			bool isEqual (in float a[4], in float b[4]) { return (absDiff(get(a), get(b)) < 0.1); }
1960e5c31af7Sopenharmony_ci		""
1961e5c31af7Sopenharmony_ci	end
1962e5c31af7Sopenharmony_ci
1963e5c31af7Sopenharmony_ci	case copy_global_in_on_call
1964e5c31af7Sopenharmony_ci		desc "Check that global 'in' arguments are copied on call and don't alias."
1965e5c31af7Sopenharmony_ci		values
1966e5c31af7Sopenharmony_ci		{
1967e5c31af7Sopenharmony_ci			input vec4 in0		= [ vec4(0.0, 1.0, 2.0, -4.0) | vec4(-7.5, 12.125, -0.25, 16.0) ];
1968e5c31af7Sopenharmony_ci			output vec4 out0	= [ vec4(0.0, -1.0, -2.0, 4.0) | vec4(7.5, -12.125, 0.25, -16.0) ];
1969e5c31af7Sopenharmony_ci		}
1970e5c31af7Sopenharmony_ci
1971e5c31af7Sopenharmony_ci		both ""
1972e5c31af7Sopenharmony_ci			precision mediump float;
1973e5c31af7Sopenharmony_ci			${DECLARATIONS}
1974e5c31af7Sopenharmony_ci
1975e5c31af7Sopenharmony_ci			vec4 get (in float arr[4]);
1976e5c31af7Sopenharmony_ci			void set (out float arr[4], vec4 val);
1977e5c31af7Sopenharmony_ci			void negate (inout float arr[4]);
1978e5c31af7Sopenharmony_ci			bool test (in float arr[4], vec4 ref);
1979e5c31af7Sopenharmony_ci			bool isEqual (in float a[4], in float b[4]);
1980e5c31af7Sopenharmony_ci
1981e5c31af7Sopenharmony_ci			float func (in float a[4], in float b[4])
1982e5c31af7Sopenharmony_ci			{
1983e5c31af7Sopenharmony_ci				a[0] = 2.123;
1984e5c31af7Sopenharmony_ci				a[2] = -4.123;
1985e5c31af7Sopenharmony_ci				return isEqual(a, b) ? 1.0 : -1.0;
1986e5c31af7Sopenharmony_ci			}
1987e5c31af7Sopenharmony_ci
1988e5c31af7Sopenharmony_ci			float arr[4];
1989e5c31af7Sopenharmony_ci
1990e5c31af7Sopenharmony_ci			void main()
1991e5c31af7Sopenharmony_ci			{
1992e5c31af7Sopenharmony_ci				set(arr, in0);
1993e5c31af7Sopenharmony_ci				out0 = in0 * func(arr, arr);
1994e5c31af7Sopenharmony_ci				${OUTPUT}
1995e5c31af7Sopenharmony_ci			}
1996e5c31af7Sopenharmony_ci
1997e5c31af7Sopenharmony_ci			float absDiff (vec4 a, vec4 b) { vec4 d = abs(a - b); return max(max(d.x, d.y), max(d.z, d.w)); }
1998e5c31af7Sopenharmony_ci			vec4 get (in float arr[4]) { return vec4(arr[0], arr[1], arr[2], arr[3]); }
1999e5c31af7Sopenharmony_ci			void set (out float arr[4], vec4 val) { arr[0] = val.x; arr[1] = val.y; arr[2] = val.z; arr[3] = val.w; }
2000e5c31af7Sopenharmony_ci			void negate (inout float arr[4]) { set(arr, -get(arr)); }
2001e5c31af7Sopenharmony_ci			bool test (in float arr[4], vec4 ref) { return (absDiff(get(arr), ref) < 0.1); }
2002e5c31af7Sopenharmony_ci			bool isEqual (in float a[4], in float b[4]) { return (absDiff(get(a), get(b)) < 0.1); }
2003e5c31af7Sopenharmony_ci		""
2004e5c31af7Sopenharmony_ci	end
2005e5c31af7Sopenharmony_ci
2006e5c31af7Sopenharmony_ci	case copy_local_inout_on_call
2007e5c31af7Sopenharmony_ci		desc "Check that local 'in' arguments are copied on call and don't alias."
2008e5c31af7Sopenharmony_ci		values
2009e5c31af7Sopenharmony_ci		{
2010e5c31af7Sopenharmony_ci			input vec4 in0		= [ vec4(0.0, 1.0, 2.0, -4.0) | vec4(-7.5, 12.125, -0.25, 16.0) ];
2011e5c31af7Sopenharmony_ci			output vec4 out0	= [ vec4(0.0, -1.0, -2.0, 4.0) | vec4(7.5, -12.125, 0.25, -16.0) ];
2012e5c31af7Sopenharmony_ci		}
2013e5c31af7Sopenharmony_ci
2014e5c31af7Sopenharmony_ci		both ""
2015e5c31af7Sopenharmony_ci			precision mediump float;
2016e5c31af7Sopenharmony_ci			${DECLARATIONS}
2017e5c31af7Sopenharmony_ci
2018e5c31af7Sopenharmony_ci			vec4 get (in float arr[4]);
2019e5c31af7Sopenharmony_ci			void set (out float arr[4], vec4 val);
2020e5c31af7Sopenharmony_ci			void negate (inout float arr[4]);
2021e5c31af7Sopenharmony_ci			bool test (in float arr[4], vec4 ref);
2022e5c31af7Sopenharmony_ci			bool isEqual (in float a[4], in float b[4]);
2023e5c31af7Sopenharmony_ci
2024e5c31af7Sopenharmony_ci			float func (inout float a[4], inout float b[4])
2025e5c31af7Sopenharmony_ci			{
2026e5c31af7Sopenharmony_ci				negate(a);
2027e5c31af7Sopenharmony_ci				return isEqual(a, b) ? 1.0 : -1.0;
2028e5c31af7Sopenharmony_ci			}
2029e5c31af7Sopenharmony_ci
2030e5c31af7Sopenharmony_ci			void main()
2031e5c31af7Sopenharmony_ci			{
2032e5c31af7Sopenharmony_ci				float arr[4];
2033e5c31af7Sopenharmony_ci				set(arr, in0);
2034e5c31af7Sopenharmony_ci				float m = func(arr, arr); // returns -1.0
2035e5c31af7Sopenharmony_ci				float n = float(test(arr, in0) || test(arr, -in0));
2036e5c31af7Sopenharmony_ci				out0 = in0 * m * n;
2037e5c31af7Sopenharmony_ci				${OUTPUT}
2038e5c31af7Sopenharmony_ci			}
2039e5c31af7Sopenharmony_ci
2040e5c31af7Sopenharmony_ci			float absDiff (vec4 a, vec4 b) { vec4 d = abs(a - b); return max(max(d.x, d.y), max(d.z, d.w)); }
2041e5c31af7Sopenharmony_ci			vec4 get (in float arr[4]) { return vec4(arr[0], arr[1], arr[2], arr[3]); }
2042e5c31af7Sopenharmony_ci			void set (out float arr[4], vec4 val) { arr[0] = val.x; arr[1] = val.y; arr[2] = val.z; arr[3] = val.w; }
2043e5c31af7Sopenharmony_ci			void negate (inout float arr[4]) { set(arr, -get(arr)); }
2044e5c31af7Sopenharmony_ci			bool test (in float arr[4], vec4 ref) { return (absDiff(get(arr), ref) < 0.1); }
2045e5c31af7Sopenharmony_ci			bool isEqual (in float a[4], in float b[4]) { return (absDiff(get(a), get(b)) < 0.1); }
2046e5c31af7Sopenharmony_ci		""
2047e5c31af7Sopenharmony_ci	end
2048e5c31af7Sopenharmony_ci
2049e5c31af7Sopenharmony_ci	case copy_global_inout_on_call
2050e5c31af7Sopenharmony_ci		desc "Check that global 'in' arguments are copied on call and don't alias."
2051e5c31af7Sopenharmony_ci		values
2052e5c31af7Sopenharmony_ci		{
2053e5c31af7Sopenharmony_ci			input vec4 in0		= [ vec4(0.0, 1.0, 2.0, -4.0) | vec4(-7.5, 12.125, -0.25, 16.0) ];
2054e5c31af7Sopenharmony_ci			output vec4 out0	= [ vec4(0.0, -1.0, -2.0, 4.0) | vec4(7.5, -12.125, 0.25, -16.0) ];
2055e5c31af7Sopenharmony_ci		}
2056e5c31af7Sopenharmony_ci
2057e5c31af7Sopenharmony_ci		both ""
2058e5c31af7Sopenharmony_ci			precision mediump float;
2059e5c31af7Sopenharmony_ci			${DECLARATIONS}
2060e5c31af7Sopenharmony_ci
2061e5c31af7Sopenharmony_ci			vec4 get (in float arr[4]);
2062e5c31af7Sopenharmony_ci			void set (out float arr[4], vec4 val);
2063e5c31af7Sopenharmony_ci			void negate (inout float arr[4]);
2064e5c31af7Sopenharmony_ci			bool test (in float arr[4], vec4 ref);
2065e5c31af7Sopenharmony_ci			bool isEqual (in float a[4], in float b[4]);
2066e5c31af7Sopenharmony_ci
2067e5c31af7Sopenharmony_ci			float func (in float a[4], in float b[4])
2068e5c31af7Sopenharmony_ci			{
2069e5c31af7Sopenharmony_ci				negate(a);
2070e5c31af7Sopenharmony_ci				return isEqual(a, b) ? 1.0 : -1.0;
2071e5c31af7Sopenharmony_ci			}
2072e5c31af7Sopenharmony_ci
2073e5c31af7Sopenharmony_ci			float arr[4];
2074e5c31af7Sopenharmony_ci
2075e5c31af7Sopenharmony_ci			void main()
2076e5c31af7Sopenharmony_ci			{
2077e5c31af7Sopenharmony_ci				set(arr, in0);
2078e5c31af7Sopenharmony_ci				float m = func(arr, arr); // returns -1.0
2079e5c31af7Sopenharmony_ci				float n = float(test(arr, in0) || test(arr, -in0));
2080e5c31af7Sopenharmony_ci				out0 = in0 * m * n;
2081e5c31af7Sopenharmony_ci				${OUTPUT}
2082e5c31af7Sopenharmony_ci			}
2083e5c31af7Sopenharmony_ci
2084e5c31af7Sopenharmony_ci			float absDiff (vec4 a, vec4 b) { vec4 d = abs(a - b); return max(max(d.x, d.y), max(d.z, d.w)); }
2085e5c31af7Sopenharmony_ci			vec4 get (in float arr[4]) { return vec4(arr[0], arr[1], arr[2], arr[3]); }
2086e5c31af7Sopenharmony_ci			void set (out float arr[4], vec4 val) { arr[0] = val.x; arr[1] = val.y; arr[2] = val.z; arr[3] = val.w; }
2087e5c31af7Sopenharmony_ci			void negate (inout float arr[4]) { set(arr, -get(arr)); }
2088e5c31af7Sopenharmony_ci			bool test (in float arr[4], vec4 ref) { return (absDiff(get(arr), ref) < 0.1); }
2089e5c31af7Sopenharmony_ci			bool isEqual (in float a[4], in float b[4]) { return (absDiff(get(a), get(b)) < 0.1); }
2090e5c31af7Sopenharmony_ci		""
2091e5c31af7Sopenharmony_ci	end
2092e5c31af7Sopenharmony_ci
2093e5c31af7Sopenharmony_ci#			vec4 get (in float arr[4]);
2094e5c31af7Sopenharmony_ci#			void set (out float arr[4], vec4 val);
2095e5c31af7Sopenharmony_ci#			void negate (inout float arr[4]);
2096e5c31af7Sopenharmony_ci#			bool test (in float arr[4], vec4 ref);
2097e5c31af7Sopenharmony_ci#			bool isEqual (in float a[4], in float b[4]);
2098e5c31af7Sopenharmony_ci
2099e5c31af7Sopenharmony_ci#			float absDiff (vec4 a, vec4 b) { vec4 d = abs(a - b); return max(max(d.x, d.y), max(d.z, d.w)); }
2100e5c31af7Sopenharmony_ci#			vec4 get (in float arr[4]) { return vec4(arr[0], arr[1], arr[2], arr[3]); }
2101e5c31af7Sopenharmony_ci#			void set (out float arr[4], vec4 val) { arr[0] = val.x; arr[1] = val.y; arr[2] = val.z; arr[3] = val.w; }
2102e5c31af7Sopenharmony_ci#			void negate (inout float arr[4]) { set(arr, -get(arr)); }
2103e5c31af7Sopenharmony_ci#			bool test (in float arr[4], vec4 ref) { return (absDiff(get(arr), ref) < 0.1); }
2104e5c31af7Sopenharmony_ci#			bool isEqual (in float a[4], in float b[4]) { return (absDiff(get(a), get(b)) < 0.1); }
2105e5c31af7Sopenharmony_ci
2106e5c31af7Sopenharmony_ciend # array_arguments
2107e5c31af7Sopenharmony_ci
2108e5c31af7Sopenharmony_ci#group qualifiers "Function Parameter Qualifiers"
2109e5c31af7Sopenharmony_ci#
2110e5c31af7Sopenharmony_ci#end # qualifiers
2111e5c31af7Sopenharmony_ci
2112e5c31af7Sopenharmony_cigroup control_flow "Control Flow In Functions"
2113e5c31af7Sopenharmony_ci
2114e5c31af7Sopenharmony_ci	case simple_return
2115e5c31af7Sopenharmony_ci		values
2116e5c31af7Sopenharmony_ci		{
2117e5c31af7Sopenharmony_ci			input float in0		= [ -0.5 | 1.5 ];
2118e5c31af7Sopenharmony_ci			output float out0	= [ 0.5 | -1.5 ];
2119e5c31af7Sopenharmony_ci		}
2120e5c31af7Sopenharmony_ci
2121e5c31af7Sopenharmony_ci		both ""
2122e5c31af7Sopenharmony_ci			precision mediump float;
2123e5c31af7Sopenharmony_ci			${DECLARATIONS}
2124e5c31af7Sopenharmony_ci
2125e5c31af7Sopenharmony_ci			float func (float a)
2126e5c31af7Sopenharmony_ci			{
2127e5c31af7Sopenharmony_ci				return -a;
2128e5c31af7Sopenharmony_ci				a = a * -1.0;
2129e5c31af7Sopenharmony_ci				return 1.0;
2130e5c31af7Sopenharmony_ci			}
2131e5c31af7Sopenharmony_ci
2132e5c31af7Sopenharmony_ci			void main()
2133e5c31af7Sopenharmony_ci			{
2134e5c31af7Sopenharmony_ci				${SETUP}
2135e5c31af7Sopenharmony_ci				out0 = func(in0);
2136e5c31af7Sopenharmony_ci				${OUTPUT}
2137e5c31af7Sopenharmony_ci			}
2138e5c31af7Sopenharmony_ci		""
2139e5c31af7Sopenharmony_ci	end
2140e5c31af7Sopenharmony_ci
2141e5c31af7Sopenharmony_ci	case return_in_if
2142e5c31af7Sopenharmony_ci		values
2143e5c31af7Sopenharmony_ci		{
2144e5c31af7Sopenharmony_ci			input float in0		= [ -0.5 | 1.5 ];
2145e5c31af7Sopenharmony_ci			output float out0	= [ 0.5 | -1.5 ];
2146e5c31af7Sopenharmony_ci		}
2147e5c31af7Sopenharmony_ci
2148e5c31af7Sopenharmony_ci		both ""
2149e5c31af7Sopenharmony_ci			precision mediump float;
2150e5c31af7Sopenharmony_ci			${DECLARATIONS}
2151e5c31af7Sopenharmony_ci
2152e5c31af7Sopenharmony_ci			float func (float a)
2153e5c31af7Sopenharmony_ci			{
2154e5c31af7Sopenharmony_ci				if (a != 0.0)
2155e5c31af7Sopenharmony_ci					return -a;
2156e5c31af7Sopenharmony_ci				return 1.0;
2157e5c31af7Sopenharmony_ci			}
2158e5c31af7Sopenharmony_ci
2159e5c31af7Sopenharmony_ci			void main()
2160e5c31af7Sopenharmony_ci			{
2161e5c31af7Sopenharmony_ci				${SETUP}
2162e5c31af7Sopenharmony_ci				out0 = func(in0);
2163e5c31af7Sopenharmony_ci				${OUTPUT}
2164e5c31af7Sopenharmony_ci			}
2165e5c31af7Sopenharmony_ci		""
2166e5c31af7Sopenharmony_ci	end
2167e5c31af7Sopenharmony_ci
2168e5c31af7Sopenharmony_ci	case return_in_else
2169e5c31af7Sopenharmony_ci		values
2170e5c31af7Sopenharmony_ci		{
2171e5c31af7Sopenharmony_ci			input float in0		= [ -0.5 | 1.5 ];
2172e5c31af7Sopenharmony_ci			output float out0	= [ 0.5 | -1.5 ];
2173e5c31af7Sopenharmony_ci		}
2174e5c31af7Sopenharmony_ci
2175e5c31af7Sopenharmony_ci		both ""
2176e5c31af7Sopenharmony_ci			precision mediump float;
2177e5c31af7Sopenharmony_ci			${DECLARATIONS}
2178e5c31af7Sopenharmony_ci
2179e5c31af7Sopenharmony_ci			float func (float a)
2180e5c31af7Sopenharmony_ci			{
2181e5c31af7Sopenharmony_ci				if (a == 0.0)
2182e5c31af7Sopenharmony_ci					return 1.0;
2183e5c31af7Sopenharmony_ci				else
2184e5c31af7Sopenharmony_ci					return -a;
2185e5c31af7Sopenharmony_ci				return 1.0;
2186e5c31af7Sopenharmony_ci			}
2187e5c31af7Sopenharmony_ci
2188e5c31af7Sopenharmony_ci			void main()
2189e5c31af7Sopenharmony_ci			{
2190e5c31af7Sopenharmony_ci				${SETUP}
2191e5c31af7Sopenharmony_ci				out0 = func(in0);
2192e5c31af7Sopenharmony_ci				${OUTPUT}
2193e5c31af7Sopenharmony_ci			}
2194e5c31af7Sopenharmony_ci		""
2195e5c31af7Sopenharmony_ci	end
2196e5c31af7Sopenharmony_ci
2197e5c31af7Sopenharmony_ci	case return_in_loop
2198e5c31af7Sopenharmony_ci		values
2199e5c31af7Sopenharmony_ci		{
2200e5c31af7Sopenharmony_ci			input float in0		= [ -0.5 | 1.5 ];
2201e5c31af7Sopenharmony_ci			output float out0	= [ 0.5 | -1.5 ];
2202e5c31af7Sopenharmony_ci		}
2203e5c31af7Sopenharmony_ci
2204e5c31af7Sopenharmony_ci		both ""
2205e5c31af7Sopenharmony_ci			precision mediump float;
2206e5c31af7Sopenharmony_ci			${DECLARATIONS}
2207e5c31af7Sopenharmony_ci
2208e5c31af7Sopenharmony_ci			float func (float a)
2209e5c31af7Sopenharmony_ci			{
2210e5c31af7Sopenharmony_ci				for (int i = 0; i < 1; i++)
2211e5c31af7Sopenharmony_ci					return -a;
2212e5c31af7Sopenharmony_ci				return 1.0;
2213e5c31af7Sopenharmony_ci			}
2214e5c31af7Sopenharmony_ci
2215e5c31af7Sopenharmony_ci			void main()
2216e5c31af7Sopenharmony_ci			{
2217e5c31af7Sopenharmony_ci				${SETUP}
2218e5c31af7Sopenharmony_ci				out0 = func(in0);
2219e5c31af7Sopenharmony_ci				${OUTPUT}
2220e5c31af7Sopenharmony_ci			}
2221e5c31af7Sopenharmony_ci		""
2222e5c31af7Sopenharmony_ci	end
2223e5c31af7Sopenharmony_ci
2224e5c31af7Sopenharmony_ci	case return_in_loop_if
2225e5c31af7Sopenharmony_ci		values
2226e5c31af7Sopenharmony_ci		{
2227e5c31af7Sopenharmony_ci			input float in0		= [ -0.5 | 1.5 ];
2228e5c31af7Sopenharmony_ci			output float out0	= [ 0.5 | -1.5 ];
2229e5c31af7Sopenharmony_ci		}
2230e5c31af7Sopenharmony_ci
2231e5c31af7Sopenharmony_ci		both ""
2232e5c31af7Sopenharmony_ci			precision mediump float;
2233e5c31af7Sopenharmony_ci			${DECLARATIONS}
2234e5c31af7Sopenharmony_ci
2235e5c31af7Sopenharmony_ci			float func (float a)
2236e5c31af7Sopenharmony_ci			{
2237e5c31af7Sopenharmony_ci				for (int i = 0; i < 3; i++)
2238e5c31af7Sopenharmony_ci				{
2239e5c31af7Sopenharmony_ci					if (i == 1)
2240e5c31af7Sopenharmony_ci						return a;
2241e5c31af7Sopenharmony_ci					else if (i > 1)
2242e5c31af7Sopenharmony_ci						return -1.0;
2243e5c31af7Sopenharmony_ci					a = -a;
2244e5c31af7Sopenharmony_ci				}
2245e5c31af7Sopenharmony_ci				return 1.0;
2246e5c31af7Sopenharmony_ci			}
2247e5c31af7Sopenharmony_ci
2248e5c31af7Sopenharmony_ci			void main()
2249e5c31af7Sopenharmony_ci			{
2250e5c31af7Sopenharmony_ci				${SETUP}
2251e5c31af7Sopenharmony_ci				out0 = func(in0);
2252e5c31af7Sopenharmony_ci				${OUTPUT}
2253e5c31af7Sopenharmony_ci			}
2254e5c31af7Sopenharmony_ci		""
2255e5c31af7Sopenharmony_ci	end
2256e5c31af7Sopenharmony_ci
2257e5c31af7Sopenharmony_ci	case return_after_loop
2258e5c31af7Sopenharmony_ci		values
2259e5c31af7Sopenharmony_ci		{
2260e5c31af7Sopenharmony_ci			input float in0		= [ -0.5 | 1.5 ];
2261e5c31af7Sopenharmony_ci			output float out0	= [ 0.5 | -1.5 ];
2262e5c31af7Sopenharmony_ci		}
2263e5c31af7Sopenharmony_ci
2264e5c31af7Sopenharmony_ci		both ""
2265e5c31af7Sopenharmony_ci			precision mediump float;
2266e5c31af7Sopenharmony_ci			${DECLARATIONS}
2267e5c31af7Sopenharmony_ci
2268e5c31af7Sopenharmony_ci			float func (float a)
2269e5c31af7Sopenharmony_ci			{
2270e5c31af7Sopenharmony_ci				for (int i = 0; i < 5; i++)
2271e5c31af7Sopenharmony_ci					a = -a;
2272e5c31af7Sopenharmony_ci				return a;
2273e5c31af7Sopenharmony_ci			}
2274e5c31af7Sopenharmony_ci
2275e5c31af7Sopenharmony_ci			void main()
2276e5c31af7Sopenharmony_ci			{
2277e5c31af7Sopenharmony_ci				${SETUP}
2278e5c31af7Sopenharmony_ci				out0 = func(in0);
2279e5c31af7Sopenharmony_ci				${OUTPUT}
2280e5c31af7Sopenharmony_ci			}
2281e5c31af7Sopenharmony_ci		""
2282e5c31af7Sopenharmony_ci	end
2283e5c31af7Sopenharmony_ci
2284e5c31af7Sopenharmony_ci	case return_after_break
2285e5c31af7Sopenharmony_ci		values
2286e5c31af7Sopenharmony_ci		{
2287e5c31af7Sopenharmony_ci			input float in0		= [ -0.5 | 1.5 ];
2288e5c31af7Sopenharmony_ci			output float out0	= [ 0.5 | -1.5 ];
2289e5c31af7Sopenharmony_ci		}
2290e5c31af7Sopenharmony_ci
2291e5c31af7Sopenharmony_ci		both ""
2292e5c31af7Sopenharmony_ci			precision mediump float;
2293e5c31af7Sopenharmony_ci			${DECLARATIONS}
2294e5c31af7Sopenharmony_ci
2295e5c31af7Sopenharmony_ci			float func (float a)
2296e5c31af7Sopenharmony_ci			{
2297e5c31af7Sopenharmony_ci				for (int i = 0; i < 6; i++)
2298e5c31af7Sopenharmony_ci				{
2299e5c31af7Sopenharmony_ci					a = -a;
2300e5c31af7Sopenharmony_ci					if (i == 4)
2301e5c31af7Sopenharmony_ci						break;
2302e5c31af7Sopenharmony_ci				}
2303e5c31af7Sopenharmony_ci				return a;
2304e5c31af7Sopenharmony_ci			}
2305e5c31af7Sopenharmony_ci
2306e5c31af7Sopenharmony_ci			void main()
2307e5c31af7Sopenharmony_ci			{
2308e5c31af7Sopenharmony_ci				${SETUP}
2309e5c31af7Sopenharmony_ci				out0 = func(in0);
2310e5c31af7Sopenharmony_ci				${OUTPUT}
2311e5c31af7Sopenharmony_ci			}
2312e5c31af7Sopenharmony_ci		""
2313e5c31af7Sopenharmony_ci	end
2314e5c31af7Sopenharmony_ci
2315e5c31af7Sopenharmony_ci	case return_after_continue
2316e5c31af7Sopenharmony_ci		values
2317e5c31af7Sopenharmony_ci		{
2318e5c31af7Sopenharmony_ci			input float in0		= [ -0.5 | 1.5 ];
2319e5c31af7Sopenharmony_ci			output float out0	= [ 0.5 | -1.5 ];
2320e5c31af7Sopenharmony_ci		}
2321e5c31af7Sopenharmony_ci
2322e5c31af7Sopenharmony_ci		both ""
2323e5c31af7Sopenharmony_ci			precision mediump float;
2324e5c31af7Sopenharmony_ci			${DECLARATIONS}
2325e5c31af7Sopenharmony_ci
2326e5c31af7Sopenharmony_ci			float func (float a)
2327e5c31af7Sopenharmony_ci			{
2328e5c31af7Sopenharmony_ci				for (int i = 0; i < 6; i++)
2329e5c31af7Sopenharmony_ci				{
2330e5c31af7Sopenharmony_ci					if (i == 4)
2331e5c31af7Sopenharmony_ci						continue;
2332e5c31af7Sopenharmony_ci					a = -a;
2333e5c31af7Sopenharmony_ci				}
2334e5c31af7Sopenharmony_ci				return a;
2335e5c31af7Sopenharmony_ci			}
2336e5c31af7Sopenharmony_ci
2337e5c31af7Sopenharmony_ci			void main()
2338e5c31af7Sopenharmony_ci			{
2339e5c31af7Sopenharmony_ci				${SETUP}
2340e5c31af7Sopenharmony_ci				out0 = func(in0);
2341e5c31af7Sopenharmony_ci				${OUTPUT}
2342e5c31af7Sopenharmony_ci			}
2343e5c31af7Sopenharmony_ci		""
2344e5c31af7Sopenharmony_ci	end
2345e5c31af7Sopenharmony_ci
2346e5c31af7Sopenharmony_ci	case return_in_nested_loop
2347e5c31af7Sopenharmony_ci		values
2348e5c31af7Sopenharmony_ci		{
2349e5c31af7Sopenharmony_ci			input float in0		= [ -0.5 | 1.5 ];
2350e5c31af7Sopenharmony_ci			output float out0	= [ 0.5 | -1.5 ];
2351e5c31af7Sopenharmony_ci		}
2352e5c31af7Sopenharmony_ci
2353e5c31af7Sopenharmony_ci		both ""
2354e5c31af7Sopenharmony_ci			precision mediump float;
2355e5c31af7Sopenharmony_ci			${DECLARATIONS}
2356e5c31af7Sopenharmony_ci
2357e5c31af7Sopenharmony_ci			float func (float a)
2358e5c31af7Sopenharmony_ci			{
2359e5c31af7Sopenharmony_ci				for (int i = 0; i < 6; i++)
2360e5c31af7Sopenharmony_ci				{
2361e5c31af7Sopenharmony_ci					a = -a;
2362e5c31af7Sopenharmony_ci					for (int j = 0; j < 4; j++)
2363e5c31af7Sopenharmony_ci					{
2364e5c31af7Sopenharmony_ci						a = -a;
2365e5c31af7Sopenharmony_ci						if (i == 1)
2366e5c31af7Sopenharmony_ci							return a;
2367e5c31af7Sopenharmony_ci					}
2368e5c31af7Sopenharmony_ci					if (i == 4)
2369e5c31af7Sopenharmony_ci						return 1.0;
2370e5c31af7Sopenharmony_ci				}
2371e5c31af7Sopenharmony_ci				return 1.0;
2372e5c31af7Sopenharmony_ci			}
2373e5c31af7Sopenharmony_ci
2374e5c31af7Sopenharmony_ci			void main()
2375e5c31af7Sopenharmony_ci			{
2376e5c31af7Sopenharmony_ci				${SETUP}
2377e5c31af7Sopenharmony_ci				out0 = func(in0);
2378e5c31af7Sopenharmony_ci				${OUTPUT}
2379e5c31af7Sopenharmony_ci			}
2380e5c31af7Sopenharmony_ci		""
2381e5c31af7Sopenharmony_ci	end
2382e5c31af7Sopenharmony_ci
2383e5c31af7Sopenharmony_ci	case return_after_loop_sequence
2384e5c31af7Sopenharmony_ci		require full_glsl_es_100_support
2385e5c31af7Sopenharmony_ci
2386e5c31af7Sopenharmony_ci		values
2387e5c31af7Sopenharmony_ci		{
2388e5c31af7Sopenharmony_ci			input float in0		= [ -0.5 | 1.5 ];
2389e5c31af7Sopenharmony_ci			output float out0	= [ 0.5 | -1.5 ];
2390e5c31af7Sopenharmony_ci		}
2391e5c31af7Sopenharmony_ci
2392e5c31af7Sopenharmony_ci		both ""
2393e5c31af7Sopenharmony_ci			precision mediump float;
2394e5c31af7Sopenharmony_ci			${DECLARATIONS}
2395e5c31af7Sopenharmony_ci
2396e5c31af7Sopenharmony_ci			float func (float a)
2397e5c31af7Sopenharmony_ci			{
2398e5c31af7Sopenharmony_ci				int i;
2399e5c31af7Sopenharmony_ci				for (i = 0; i < 6; i++) // negate a
2400e5c31af7Sopenharmony_ci				{
2401e5c31af7Sopenharmony_ci					a = -a;
2402e5c31af7Sopenharmony_ci					if (i == 4)
2403e5c31af7Sopenharmony_ci						a = -a;
2404e5c31af7Sopenharmony_ci				}
2405e5c31af7Sopenharmony_ci
2406e5c31af7Sopenharmony_ci				for (; i < 10; i++) // keep a
2407e5c31af7Sopenharmony_ci				{
2408e5c31af7Sopenharmony_ci					if (i == 8)
2409e5c31af7Sopenharmony_ci						continue;
2410e5c31af7Sopenharmony_ci					else if (i == 9)
2411e5c31af7Sopenharmony_ci						break;
2412e5c31af7Sopenharmony_ci					a = -a;
2413e5c31af7Sopenharmony_ci				}
2414e5c31af7Sopenharmony_ci
2415e5c31af7Sopenharmony_ci				return a;
2416e5c31af7Sopenharmony_ci			}
2417e5c31af7Sopenharmony_ci
2418e5c31af7Sopenharmony_ci			void main()
2419e5c31af7Sopenharmony_ci			{
2420e5c31af7Sopenharmony_ci				${SETUP}
2421e5c31af7Sopenharmony_ci				out0 = func(in0);
2422e5c31af7Sopenharmony_ci				${OUTPUT}
2423e5c31af7Sopenharmony_ci			}
2424e5c31af7Sopenharmony_ci		""
2425e5c31af7Sopenharmony_ci	end
2426e5c31af7Sopenharmony_ci
2427e5c31af7Sopenharmony_ci	case mixed_return_break_continue
2428e5c31af7Sopenharmony_ci		values
2429e5c31af7Sopenharmony_ci		{
2430e5c31af7Sopenharmony_ci			input float in0		= [ -0.5 | 1.5 ];
2431e5c31af7Sopenharmony_ci			output float out0	= [ 0.5 | -1.5 ];
2432e5c31af7Sopenharmony_ci		}
2433e5c31af7Sopenharmony_ci
2434e5c31af7Sopenharmony_ci		both ""
2435e5c31af7Sopenharmony_ci			precision mediump float;
2436e5c31af7Sopenharmony_ci			${DECLARATIONS}
2437e5c31af7Sopenharmony_ci
2438e5c31af7Sopenharmony_ci			float func (float a)
2439e5c31af7Sopenharmony_ci			{
2440e5c31af7Sopenharmony_ci				for (int i = 0; i < 6; i++)
2441e5c31af7Sopenharmony_ci				{
2442e5c31af7Sopenharmony_ci					if (i == 0)
2443e5c31af7Sopenharmony_ci						continue;
2444e5c31af7Sopenharmony_ci					else if (i == 1)
2445e5c31af7Sopenharmony_ci					{
2446e5c31af7Sopenharmony_ci					}
2447e5c31af7Sopenharmony_ci					else if (i == 3)
2448e5c31af7Sopenharmony_ci						break;
2449e5c31af7Sopenharmony_ci					else
2450e5c31af7Sopenharmony_ci						return a;
2451e5c31af7Sopenharmony_ci					a = -a;
2452e5c31af7Sopenharmony_ci				}
2453e5c31af7Sopenharmony_ci
2454e5c31af7Sopenharmony_ci				return 1.0;
2455e5c31af7Sopenharmony_ci			}
2456e5c31af7Sopenharmony_ci
2457e5c31af7Sopenharmony_ci			void main()
2458e5c31af7Sopenharmony_ci			{
2459e5c31af7Sopenharmony_ci				${SETUP}
2460e5c31af7Sopenharmony_ci				out0 = func(in0);
2461e5c31af7Sopenharmony_ci				${OUTPUT}
2462e5c31af7Sopenharmony_ci			}
2463e5c31af7Sopenharmony_ci		""
2464e5c31af7Sopenharmony_ci	end
2465e5c31af7Sopenharmony_ci
2466e5c31af7Sopenharmony_ciend # control_flow
2467e5c31af7Sopenharmony_ci
2468e5c31af7Sopenharmony_cigroup misc "Miscellaneous"
2469e5c31af7Sopenharmony_ci
2470e5c31af7Sopenharmony_ci	case multi_arg_float
2471e5c31af7Sopenharmony_ci		values
2472e5c31af7Sopenharmony_ci		{
2473e5c31af7Sopenharmony_ci			input vec4 in0		= [ vec4(0.0, 1.0, -2.0, 0.5) | vec4(2.0, 2.5, 4.0, -7.0) ];
2474e5c31af7Sopenharmony_ci			output float out0	= [ 0.5 | -1.5 ]; # -sum(in0)
2475e5c31af7Sopenharmony_ci		}
2476e5c31af7Sopenharmony_ci
2477e5c31af7Sopenharmony_ci		both ""
2478e5c31af7Sopenharmony_ci			precision mediump float;
2479e5c31af7Sopenharmony_ci			${DECLARATIONS}
2480e5c31af7Sopenharmony_ci
2481e5c31af7Sopenharmony_ci			float sum(vec4 v) { return (v.x + v.y + v.z + v.w); }
2482e5c31af7Sopenharmony_ci
2483e5c31af7Sopenharmony_ci			float func (float a, vec3 b, vec2 c, vec2 d, vec4 e)
2484e5c31af7Sopenharmony_ci			{
2485e5c31af7Sopenharmony_ci				return -sum(vec4(a, b) + vec4(c, d)) + sum(e);
2486e5c31af7Sopenharmony_ci			}
2487e5c31af7Sopenharmony_ci
2488e5c31af7Sopenharmony_ci			void main()
2489e5c31af7Sopenharmony_ci			{
2490e5c31af7Sopenharmony_ci				${SETUP}
2491e5c31af7Sopenharmony_ci				out0 = func(in0.y, in0.xzw, in0.wz, in0.yx, in0);
2492e5c31af7Sopenharmony_ci				${OUTPUT}
2493e5c31af7Sopenharmony_ci			}
2494e5c31af7Sopenharmony_ci		""
2495e5c31af7Sopenharmony_ci	end
2496e5c31af7Sopenharmony_ci
2497e5c31af7Sopenharmony_ci	case multi_arg_int
2498e5c31af7Sopenharmony_ci		values
2499e5c31af7Sopenharmony_ci		{
2500e5c31af7Sopenharmony_ci			input ivec4 in0		= [ ivec4(-1, 0, 2, 2) | ivec4(1, 4, -8, 2) ];
2501e5c31af7Sopenharmony_ci			output int out0		= [ -3 | 1 ];
2502e5c31af7Sopenharmony_ci		}
2503e5c31af7Sopenharmony_ci
2504e5c31af7Sopenharmony_ci		both ""
2505e5c31af7Sopenharmony_ci			precision mediump float;
2506e5c31af7Sopenharmony_ci			precision mediump int;
2507e5c31af7Sopenharmony_ci			${DECLARATIONS}
2508e5c31af7Sopenharmony_ci
2509e5c31af7Sopenharmony_ci			int sum(ivec4 v) { return (v.x + v.y + v.z + v.w); }
2510e5c31af7Sopenharmony_ci
2511e5c31af7Sopenharmony_ci			int func (int a, ivec3 b, ivec2 c, ivec2 d, ivec4 e)
2512e5c31af7Sopenharmony_ci			{
2513e5c31af7Sopenharmony_ci				return -sum(ivec4(a, b) + ivec4(c, d)) + sum(e);
2514e5c31af7Sopenharmony_ci			}
2515e5c31af7Sopenharmony_ci
2516e5c31af7Sopenharmony_ci			void main()
2517e5c31af7Sopenharmony_ci			{
2518e5c31af7Sopenharmony_ci				${SETUP}
2519e5c31af7Sopenharmony_ci				out0 = func(in0.y, in0.xzw, in0.wz, in0.yx, in0);
2520e5c31af7Sopenharmony_ci				${OUTPUT}
2521e5c31af7Sopenharmony_ci			}
2522e5c31af7Sopenharmony_ci		""
2523e5c31af7Sopenharmony_ci	end
2524e5c31af7Sopenharmony_ci
2525e5c31af7Sopenharmony_ci	case argument_eval_order_1
2526e5c31af7Sopenharmony_ci		values
2527e5c31af7Sopenharmony_ci		{
2528e5c31af7Sopenharmony_ci			input int in0	= [  0 | 1 | 3 | 5 ];
2529e5c31af7Sopenharmony_ci			output int out0	= [ -1 | 5 | 11 | 17 ];
2530e5c31af7Sopenharmony_ci		}
2531e5c31af7Sopenharmony_ci
2532e5c31af7Sopenharmony_ci		both ""
2533e5c31af7Sopenharmony_ci			precision mediump float;
2534e5c31af7Sopenharmony_ci			${DECLARATIONS}
2535e5c31af7Sopenharmony_ci
2536e5c31af7Sopenharmony_ci			int func (float a, int b, bool c, int d)
2537e5c31af7Sopenharmony_ci			{
2538e5c31af7Sopenharmony_ci				if (c)
2539e5c31af7Sopenharmony_ci					return b + int(a) + d;
2540e5c31af7Sopenharmony_ci				else
2541e5c31af7Sopenharmony_ci					return -1;
2542e5c31af7Sopenharmony_ci			}
2543e5c31af7Sopenharmony_ci
2544e5c31af7Sopenharmony_ci			void main ()
2545e5c31af7Sopenharmony_ci			{
2546e5c31af7Sopenharmony_ci				${SETUP}
2547e5c31af7Sopenharmony_ci				float v0 = float(in0);
2548e5c31af7Sopenharmony_ci				int v1 = in0;
2549e5c31af7Sopenharmony_ci				out0 = func((v0 += 1.0), v1++, (v0 > 1.5), v1);
2550e5c31af7Sopenharmony_ci				${OUTPUT}
2551e5c31af7Sopenharmony_ci			}
2552e5c31af7Sopenharmony_ci		""
2553e5c31af7Sopenharmony_ci	end
2554e5c31af7Sopenharmony_ci
2555e5c31af7Sopenharmony_ci	case argument_eval_order_2
2556e5c31af7Sopenharmony_ci		values
2557e5c31af7Sopenharmony_ci		{
2558e5c31af7Sopenharmony_ci			input int in0	= [ 0 | -1 | 3 | 5 ];
2559e5c31af7Sopenharmony_ci			output int out0	= [ 3 | -1 | 9 | 13 ];
2560e5c31af7Sopenharmony_ci		}
2561e5c31af7Sopenharmony_ci
2562e5c31af7Sopenharmony_ci		both ""
2563e5c31af7Sopenharmony_ci			precision mediump float;
2564e5c31af7Sopenharmony_ci			${DECLARATIONS}
2565e5c31af7Sopenharmony_ci
2566e5c31af7Sopenharmony_ci			int g;
2567e5c31af7Sopenharmony_ci
2568e5c31af7Sopenharmony_ci			int modG (int v)
2569e5c31af7Sopenharmony_ci			{
2570e5c31af7Sopenharmony_ci				g += v;
2571e5c31af7Sopenharmony_ci				return v;
2572e5c31af7Sopenharmony_ci			}
2573e5c31af7Sopenharmony_ci
2574e5c31af7Sopenharmony_ci			int func (float a, int b, bool c, int d)
2575e5c31af7Sopenharmony_ci			{
2576e5c31af7Sopenharmony_ci				if (c)
2577e5c31af7Sopenharmony_ci					return b + int(a) + d;
2578e5c31af7Sopenharmony_ci				else
2579e5c31af7Sopenharmony_ci					return -1;
2580e5c31af7Sopenharmony_ci			}
2581e5c31af7Sopenharmony_ci
2582e5c31af7Sopenharmony_ci			void main ()
2583e5c31af7Sopenharmony_ci			{
2584e5c31af7Sopenharmony_ci				${SETUP}
2585e5c31af7Sopenharmony_ci				out0 = func(float(g = in0), modG(2), --g > 0, g);
2586e5c31af7Sopenharmony_ci				${OUTPUT}
2587e5c31af7Sopenharmony_ci			}
2588e5c31af7Sopenharmony_ci		""
2589e5c31af7Sopenharmony_ci	end
2590e5c31af7Sopenharmony_ci
2591e5c31af7Sopenharmony_ci	case missing_returns
2592e5c31af7Sopenharmony_ci		values
2593e5c31af7Sopenharmony_ci		{
2594e5c31af7Sopenharmony_ci			input float in0 = [ 1.0 | 2.0 | 3.0 ];
2595e5c31af7Sopenharmony_ci			output float out0 = [ -1.0 | -2.0 | -3.0 ];
2596e5c31af7Sopenharmony_ci		}
2597e5c31af7Sopenharmony_ci		both ""
2598e5c31af7Sopenharmony_ci			// Note specification says that returned value is undefined if no return
2599e5c31af7Sopenharmony_ci			// statement has been executed. In this case func() is called only with
2600e5c31af7Sopenharmony_ci			// positive values.
2601e5c31af7Sopenharmony_ci			precision mediump float;
2602e5c31af7Sopenharmony_ci			${DECLARATIONS}
2603e5c31af7Sopenharmony_ci
2604e5c31af7Sopenharmony_ci			float func (float f)
2605e5c31af7Sopenharmony_ci			{
2606e5c31af7Sopenharmony_ci				if (f > 0.0)
2607e5c31af7Sopenharmony_ci					return -f;
2608e5c31af7Sopenharmony_ci			}
2609e5c31af7Sopenharmony_ci
2610e5c31af7Sopenharmony_ci			void main ()
2611e5c31af7Sopenharmony_ci			{
2612e5c31af7Sopenharmony_ci				${SETUP}
2613e5c31af7Sopenharmony_ci				out0 = func(in0);
2614e5c31af7Sopenharmony_ci				${OUTPUT}
2615e5c31af7Sopenharmony_ci			}
2616e5c31af7Sopenharmony_ci		""
2617e5c31af7Sopenharmony_ci	end
2618e5c31af7Sopenharmony_ci
2619e5c31af7Sopenharmony_ciend # misc
2620e5c31af7Sopenharmony_ci
2621e5c31af7Sopenharmony_cigroup invalid "Invalid Functions"
2622e5c31af7Sopenharmony_ci	case break_in_body
2623e5c31af7Sopenharmony_ci		expect compile_fail
2624e5c31af7Sopenharmony_ci		both ""
2625e5c31af7Sopenharmony_ci			precision mediump float;
2626e5c31af7Sopenharmony_ci
2627e5c31af7Sopenharmony_ci			void func ()
2628e5c31af7Sopenharmony_ci			{
2629e5c31af7Sopenharmony_ci				break;
2630e5c31af7Sopenharmony_ci			}
2631e5c31af7Sopenharmony_ci
2632e5c31af7Sopenharmony_ci			void main ()
2633e5c31af7Sopenharmony_ci			{
2634e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
2635e5c31af7Sopenharmony_ci			}
2636e5c31af7Sopenharmony_ci		""
2637e5c31af7Sopenharmony_ci	end
2638e5c31af7Sopenharmony_ci
2639e5c31af7Sopenharmony_ci	case continue_in_body
2640e5c31af7Sopenharmony_ci		expect compile_fail
2641e5c31af7Sopenharmony_ci		both ""
2642e5c31af7Sopenharmony_ci			precision mediump float;
2643e5c31af7Sopenharmony_ci
2644e5c31af7Sopenharmony_ci			void func ()
2645e5c31af7Sopenharmony_ci			{
2646e5c31af7Sopenharmony_ci				continue;
2647e5c31af7Sopenharmony_ci			}
2648e5c31af7Sopenharmony_ci
2649e5c31af7Sopenharmony_ci			void main ()
2650e5c31af7Sopenharmony_ci			{
2651e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
2652e5c31af7Sopenharmony_ci			}
2653e5c31af7Sopenharmony_ci		""
2654e5c31af7Sopenharmony_ci	end
2655e5c31af7Sopenharmony_ci
2656e5c31af7Sopenharmony_ci	case return_value_from_void_function
2657e5c31af7Sopenharmony_ci		expect compile_fail
2658e5c31af7Sopenharmony_ci		both ""
2659e5c31af7Sopenharmony_ci			precision mediump float;
2660e5c31af7Sopenharmony_ci
2661e5c31af7Sopenharmony_ci			void func ()
2662e5c31af7Sopenharmony_ci			{
2663e5c31af7Sopenharmony_ci				return 1.0;
2664e5c31af7Sopenharmony_ci			}
2665e5c31af7Sopenharmony_ci
2666e5c31af7Sopenharmony_ci			void main ()
2667e5c31af7Sopenharmony_ci			{
2668e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
2669e5c31af7Sopenharmony_ci			}
2670e5c31af7Sopenharmony_ci		""
2671e5c31af7Sopenharmony_ci	end
2672e5c31af7Sopenharmony_ci
2673e5c31af7Sopenharmony_ci	case extra_arguments
2674e5c31af7Sopenharmony_ci		expect compile_fail
2675e5c31af7Sopenharmony_ci		both ""
2676e5c31af7Sopenharmony_ci			precision mediump float;
2677e5c31af7Sopenharmony_ci
2678e5c31af7Sopenharmony_ci			void func (float f)
2679e5c31af7Sopenharmony_ci			{
2680e5c31af7Sopenharmony_ci			}
2681e5c31af7Sopenharmony_ci
2682e5c31af7Sopenharmony_ci			void main ()
2683e5c31af7Sopenharmony_ci			{
2684e5c31af7Sopenharmony_ci				func(1.0, 2.0);
2685e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
2686e5c31af7Sopenharmony_ci			}
2687e5c31af7Sopenharmony_ci		""
2688e5c31af7Sopenharmony_ci	end
2689e5c31af7Sopenharmony_ci
2690e5c31af7Sopenharmony_ci	case missing_arguments
2691e5c31af7Sopenharmony_ci		expect compile_fail
2692e5c31af7Sopenharmony_ci		both ""
2693e5c31af7Sopenharmony_ci			precision mediump float;
2694e5c31af7Sopenharmony_ci
2695e5c31af7Sopenharmony_ci			void func (float f)
2696e5c31af7Sopenharmony_ci			{
2697e5c31af7Sopenharmony_ci			}
2698e5c31af7Sopenharmony_ci
2699e5c31af7Sopenharmony_ci			void main ()
2700e5c31af7Sopenharmony_ci			{
2701e5c31af7Sopenharmony_ci				func();
2702e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
2703e5c31af7Sopenharmony_ci			}
2704e5c31af7Sopenharmony_ci		""
2705e5c31af7Sopenharmony_ci	end
2706e5c31af7Sopenharmony_ci
2707e5c31af7Sopenharmony_ci	case missing_argument_type
2708e5c31af7Sopenharmony_ci		expect compile_fail
2709e5c31af7Sopenharmony_ci		both ""
2710e5c31af7Sopenharmony_ci			precision mediump float;
2711e5c31af7Sopenharmony_ci
2712e5c31af7Sopenharmony_ci			void func (in f)
2713e5c31af7Sopenharmony_ci			{
2714e5c31af7Sopenharmony_ci			}
2715e5c31af7Sopenharmony_ci
2716e5c31af7Sopenharmony_ci			void main ()
2717e5c31af7Sopenharmony_ci			{
2718e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
2719e5c31af7Sopenharmony_ci			}
2720e5c31af7Sopenharmony_ci		""
2721e5c31af7Sopenharmony_ci	end
2722e5c31af7Sopenharmony_ci
2723e5c31af7Sopenharmony_ci	case argument_basetype_mismatch
2724e5c31af7Sopenharmony_ci		expect compile_fail
2725e5c31af7Sopenharmony_ci		both ""
2726e5c31af7Sopenharmony_ci			precision mediump float;
2727e5c31af7Sopenharmony_ci			precision mediump int;
2728e5c31af7Sopenharmony_ci
2729e5c31af7Sopenharmony_ci			void func (float f)
2730e5c31af7Sopenharmony_ci			{
2731e5c31af7Sopenharmony_ci			}
2732e5c31af7Sopenharmony_ci
2733e5c31af7Sopenharmony_ci			void main ()
2734e5c31af7Sopenharmony_ci			{
2735e5c31af7Sopenharmony_ci				func(2);
2736e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
2737e5c31af7Sopenharmony_ci			}
2738e5c31af7Sopenharmony_ci		""
2739e5c31af7Sopenharmony_ci	end
2740e5c31af7Sopenharmony_ci
2741e5c31af7Sopenharmony_ci	case argument_scalar_vector_mismatch
2742e5c31af7Sopenharmony_ci		expect compile_fail
2743e5c31af7Sopenharmony_ci		both ""
2744e5c31af7Sopenharmony_ci			precision mediump float;
2745e5c31af7Sopenharmony_ci
2746e5c31af7Sopenharmony_ci			void func (vec2 f)
2747e5c31af7Sopenharmony_ci			{
2748e5c31af7Sopenharmony_ci			}
2749e5c31af7Sopenharmony_ci
2750e5c31af7Sopenharmony_ci			void main ()
2751e5c31af7Sopenharmony_ci			{
2752e5c31af7Sopenharmony_ci				func(2.0);
2753e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
2754e5c31af7Sopenharmony_ci			}
2755e5c31af7Sopenharmony_ci		""
2756e5c31af7Sopenharmony_ci	end
2757e5c31af7Sopenharmony_ci
2758e5c31af7Sopenharmony_ci	case argument_vector_size_mismatch
2759e5c31af7Sopenharmony_ci		expect compile_fail
2760e5c31af7Sopenharmony_ci		both ""
2761e5c31af7Sopenharmony_ci			precision mediump float;
2762e5c31af7Sopenharmony_ci
2763e5c31af7Sopenharmony_ci			void func (vec3 f)
2764e5c31af7Sopenharmony_ci			{
2765e5c31af7Sopenharmony_ci			}
2766e5c31af7Sopenharmony_ci
2767e5c31af7Sopenharmony_ci			void main ()
2768e5c31af7Sopenharmony_ci			{
2769e5c31af7Sopenharmony_ci				func(vec2(2.0));
2770e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
2771e5c31af7Sopenharmony_ci			}
2772e5c31af7Sopenharmony_ci		""
2773e5c31af7Sopenharmony_ci	end
2774e5c31af7Sopenharmony_ci
2775e5c31af7Sopenharmony_ci	case duplicate_function
2776e5c31af7Sopenharmony_ci		expect compile_fail
2777e5c31af7Sopenharmony_ci		both ""
2778e5c31af7Sopenharmony_ci			precision mediump float;
2779e5c31af7Sopenharmony_ci
2780e5c31af7Sopenharmony_ci			void func (vec3 f);
2781e5c31af7Sopenharmony_ci
2782e5c31af7Sopenharmony_ci			void func (vec3 f)
2783e5c31af7Sopenharmony_ci			{
2784e5c31af7Sopenharmony_ci			}
2785e5c31af7Sopenharmony_ci
2786e5c31af7Sopenharmony_ci			void func (vec3 f)
2787e5c31af7Sopenharmony_ci			{
2788e5c31af7Sopenharmony_ci			}
2789e5c31af7Sopenharmony_ci
2790e5c31af7Sopenharmony_ci			void main ()
2791e5c31af7Sopenharmony_ci			{
2792e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
2793e5c31af7Sopenharmony_ci			}
2794e5c31af7Sopenharmony_ci		""
2795e5c31af7Sopenharmony_ci	end
2796e5c31af7Sopenharmony_ci
2797e5c31af7Sopenharmony_ci	case prototype_mismatch_return_type
2798e5c31af7Sopenharmony_ci		expect compile_fail
2799e5c31af7Sopenharmony_ci		both ""
2800e5c31af7Sopenharmony_ci			precision mediump float;
2801e5c31af7Sopenharmony_ci
2802e5c31af7Sopenharmony_ci			void func (vec3 f);
2803e5c31af7Sopenharmony_ci
2804e5c31af7Sopenharmony_ci			void main ()
2805e5c31af7Sopenharmony_ci			{
2806e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
2807e5c31af7Sopenharmony_ci			}
2808e5c31af7Sopenharmony_ci
2809e5c31af7Sopenharmony_ci			float func (vec3 f)
2810e5c31af7Sopenharmony_ci			{
2811e5c31af7Sopenharmony_ci				return f.x;
2812e5c31af7Sopenharmony_ci			}
2813e5c31af7Sopenharmony_ci		""
2814e5c31af7Sopenharmony_ci	end
2815e5c31af7Sopenharmony_ci
2816e5c31af7Sopenharmony_ci	case prototype_unspecified_array_size
2817e5c31af7Sopenharmony_ci		expect compile_fail
2818e5c31af7Sopenharmony_ci		both ""
2819e5c31af7Sopenharmony_ci			precision mediump float;
2820e5c31af7Sopenharmony_ci
2821e5c31af7Sopenharmony_ci			void func (vec3 f[]);
2822e5c31af7Sopenharmony_ci
2823e5c31af7Sopenharmony_ci			void main ()
2824e5c31af7Sopenharmony_ci			{
2825e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
2826e5c31af7Sopenharmony_ci			}
2827e5c31af7Sopenharmony_ci		""
2828e5c31af7Sopenharmony_ci	end
2829e5c31af7Sopenharmony_ci
2830e5c31af7Sopenharmony_ci	case call_mismatch_argument_array_size
2831e5c31af7Sopenharmony_ci		expect compile_fail
2832e5c31af7Sopenharmony_ci		both ""
2833e5c31af7Sopenharmony_ci			precision mediump float;
2834e5c31af7Sopenharmony_ci
2835e5c31af7Sopenharmony_ci			void func (vec3 f[3]);
2836e5c31af7Sopenharmony_ci			void func (vec3 f[3])
2837e5c31af7Sopenharmony_ci			{
2838e5c31af7Sopenharmony_ci			}
2839e5c31af7Sopenharmony_ci
2840e5c31af7Sopenharmony_ci			void main ()
2841e5c31af7Sopenharmony_ci			{
2842e5c31af7Sopenharmony_ci				vec3 array[4];
2843e5c31af7Sopenharmony_ci				func(array);
2844e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
2845e5c31af7Sopenharmony_ci			}
2846e5c31af7Sopenharmony_ci		""
2847e5c31af7Sopenharmony_ci	end
2848e5c31af7Sopenharmony_ci
2849e5c31af7Sopenharmony_ci	case prototype_mismatch_argument_const
2850e5c31af7Sopenharmony_ci		expect compile_fail
2851e5c31af7Sopenharmony_ci		both ""
2852e5c31af7Sopenharmony_ci			precision mediump float;
2853e5c31af7Sopenharmony_ci
2854e5c31af7Sopenharmony_ci			void func (vec3 f);
2855e5c31af7Sopenharmony_ci			void func (const vec3 f)
2856e5c31af7Sopenharmony_ci			{
2857e5c31af7Sopenharmony_ci			}
2858e5c31af7Sopenharmony_ci
2859e5c31af7Sopenharmony_ci			void main ()
2860e5c31af7Sopenharmony_ci			{
2861e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
2862e5c31af7Sopenharmony_ci			}
2863e5c31af7Sopenharmony_ci		""
2864e5c31af7Sopenharmony_ci	end
2865e5c31af7Sopenharmony_ci
2866e5c31af7Sopenharmony_ci	case prototype_mismatch_argument_array_const
2867e5c31af7Sopenharmony_ci		expect compile_fail
2868e5c31af7Sopenharmony_ci		both ""
2869e5c31af7Sopenharmony_ci			precision mediump float;
2870e5c31af7Sopenharmony_ci
2871e5c31af7Sopenharmony_ci			void func (vec3 f[3]);
2872e5c31af7Sopenharmony_ci			void func (const vec3 f[3])
2873e5c31af7Sopenharmony_ci			{
2874e5c31af7Sopenharmony_ci			}
2875e5c31af7Sopenharmony_ci
2876e5c31af7Sopenharmony_ci			void main ()
2877e5c31af7Sopenharmony_ci			{
2878e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
2879e5c31af7Sopenharmony_ci			}
2880e5c31af7Sopenharmony_ci		""
2881e5c31af7Sopenharmony_ci	end
2882e5c31af7Sopenharmony_ci
2883e5c31af7Sopenharmony_ci	case prototype_mismatch_array_inout
2884e5c31af7Sopenharmony_ci		expect compile_fail
2885e5c31af7Sopenharmony_ci		both ""
2886e5c31af7Sopenharmony_ci			precision mediump float;
2887e5c31af7Sopenharmony_ci
2888e5c31af7Sopenharmony_ci			void func (out vec3 f);
2889e5c31af7Sopenharmony_ci			void func (inout vec3 f)
2890e5c31af7Sopenharmony_ci			{
2891e5c31af7Sopenharmony_ci			}
2892e5c31af7Sopenharmony_ci
2893e5c31af7Sopenharmony_ci			void main ()
2894e5c31af7Sopenharmony_ci			{
2895e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
2896e5c31af7Sopenharmony_ci			}
2897e5c31af7Sopenharmony_ci		""
2898e5c31af7Sopenharmony_ci	end
2899e5c31af7Sopenharmony_ci
2900e5c31af7Sopenharmony_ci	case missing_return_type
2901e5c31af7Sopenharmony_ci		expect compile_fail
2902e5c31af7Sopenharmony_ci		both ""
2903e5c31af7Sopenharmony_ci			precision mediump float;
2904e5c31af7Sopenharmony_ci
2905e5c31af7Sopenharmony_ci			func (float f);
2906e5c31af7Sopenharmony_ci			func (inout vec3 f[3])
2907e5c31af7Sopenharmony_ci			{
2908e5c31af7Sopenharmony_ci			}
2909e5c31af7Sopenharmony_ci
2910e5c31af7Sopenharmony_ci			void main ()
2911e5c31af7Sopenharmony_ci			{
2912e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
2913e5c31af7Sopenharmony_ci			}
2914e5c31af7Sopenharmony_ci		""
2915e5c31af7Sopenharmony_ci	end
2916e5c31af7Sopenharmony_ci
2917e5c31af7Sopenharmony_ci	case call_before_definition
2918e5c31af7Sopenharmony_ci		expect compile_fail
2919e5c31af7Sopenharmony_ci		both ""
2920e5c31af7Sopenharmony_ci			precision mediump float;
2921e5c31af7Sopenharmony_ci
2922e5c31af7Sopenharmony_ci			void main ()
2923e5c31af7Sopenharmony_ci			{
2924e5c31af7Sopenharmony_ci				func(1.0);
2925e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
2926e5c31af7Sopenharmony_ci			}
2927e5c31af7Sopenharmony_ci
2928e5c31af7Sopenharmony_ci			void func (float f)
2929e5c31af7Sopenharmony_ci			{
2930e5c31af7Sopenharmony_ci			}
2931e5c31af7Sopenharmony_ci
2932e5c31af7Sopenharmony_ci		""
2933e5c31af7Sopenharmony_ci	end
2934e5c31af7Sopenharmony_ci
2935e5c31af7Sopenharmony_ci	case return_array_in_struct
2936e5c31af7Sopenharmony_ci		expect compile_fail
2937e5c31af7Sopenharmony_ci		both ""
2938e5c31af7Sopenharmony_ci			precision mediump float;
2939e5c31af7Sopenharmony_ci
2940e5c31af7Sopenharmony_ci			struct Foo
2941e5c31af7Sopenharmony_ci			{
2942e5c31af7Sopenharmony_ci				float f;
2943e5c31af7Sopenharmony_ci				float arr[2];
2944e5c31af7Sopenharmony_ci			};
2945e5c31af7Sopenharmony_ci
2946e5c31af7Sopenharmony_ci			Foo func ()
2947e5c31af7Sopenharmony_ci			{
2948e5c31af7Sopenharmony_ci				Foo f;
2949e5c31af7Sopenharmony_ci				f.f = 1.0;
2950e5c31af7Sopenharmony_ci				f.arr[0] = 2.0;
2951e5c31af7Sopenharmony_ci				return f;
2952e5c31af7Sopenharmony_ci			}
2953e5c31af7Sopenharmony_ci
2954e5c31af7Sopenharmony_ci			void main ()
2955e5c31af7Sopenharmony_ci			{
2956e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
2957e5c31af7Sopenharmony_ci			}
2958e5c31af7Sopenharmony_ci		""
2959e5c31af7Sopenharmony_ci	end
2960e5c31af7Sopenharmony_ci
2961e5c31af7Sopenharmony_ci	case argument_precision_overload
2962e5c31af7Sopenharmony_ci		expect compile_fail
2963e5c31af7Sopenharmony_ci		both ""
2964e5c31af7Sopenharmony_ci			precision mediump float;
2965e5c31af7Sopenharmony_ci
2966e5c31af7Sopenharmony_ci			float func (lowp float f)
2967e5c31af7Sopenharmony_ci			{
2968e5c31af7Sopenharmony_ci				return f;
2969e5c31af7Sopenharmony_ci			}
2970e5c31af7Sopenharmony_ci
2971e5c31af7Sopenharmony_ci			float func (mediump float f)
2972e5c31af7Sopenharmony_ci			{
2973e5c31af7Sopenharmony_ci				return f;
2974e5c31af7Sopenharmony_ci			}
2975e5c31af7Sopenharmony_ci
2976e5c31af7Sopenharmony_ci			void main ()
2977e5c31af7Sopenharmony_ci			{
2978e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
2979e5c31af7Sopenharmony_ci			}
2980e5c31af7Sopenharmony_ci		""
2981e5c31af7Sopenharmony_ci	end
2982e5c31af7Sopenharmony_ci
2983e5c31af7Sopenharmony_ci	case argument_in_out_overload
2984e5c31af7Sopenharmony_ci		expect compile_fail
2985e5c31af7Sopenharmony_ci		both ""
2986e5c31af7Sopenharmony_ci			precision mediump float;
2987e5c31af7Sopenharmony_ci
2988e5c31af7Sopenharmony_ci			void func (in float f)
2989e5c31af7Sopenharmony_ci			{
2990e5c31af7Sopenharmony_ci			}
2991e5c31af7Sopenharmony_ci
2992e5c31af7Sopenharmony_ci			void func (out float f)
2993e5c31af7Sopenharmony_ci			{
2994e5c31af7Sopenharmony_ci				f = 1.0;
2995e5c31af7Sopenharmony_ci			}
2996e5c31af7Sopenharmony_ci
2997e5c31af7Sopenharmony_ci			void main ()
2998e5c31af7Sopenharmony_ci			{
2999e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
3000e5c31af7Sopenharmony_ci			}
3001e5c31af7Sopenharmony_ci		""
3002e5c31af7Sopenharmony_ci	end
3003e5c31af7Sopenharmony_ci
3004e5c31af7Sopenharmony_ci	case argument_in_inout_overload
3005e5c31af7Sopenharmony_ci		expect compile_fail
3006e5c31af7Sopenharmony_ci		both ""
3007e5c31af7Sopenharmony_ci			precision mediump float;
3008e5c31af7Sopenharmony_ci
3009e5c31af7Sopenharmony_ci			void func (in float f)
3010e5c31af7Sopenharmony_ci			{
3011e5c31af7Sopenharmony_ci			}
3012e5c31af7Sopenharmony_ci
3013e5c31af7Sopenharmony_ci			void func (inout float f)
3014e5c31af7Sopenharmony_ci			{
3015e5c31af7Sopenharmony_ci				f = -f;
3016e5c31af7Sopenharmony_ci			}
3017e5c31af7Sopenharmony_ci
3018e5c31af7Sopenharmony_ci			void main ()
3019e5c31af7Sopenharmony_ci			{
3020e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
3021e5c31af7Sopenharmony_ci			}
3022e5c31af7Sopenharmony_ci		""
3023e5c31af7Sopenharmony_ci	end
3024e5c31af7Sopenharmony_ci
3025e5c31af7Sopenharmony_ci	case argument_out_inout_overload
3026e5c31af7Sopenharmony_ci		expect compile_fail
3027e5c31af7Sopenharmony_ci		both ""
3028e5c31af7Sopenharmony_ci			precision mediump float;
3029e5c31af7Sopenharmony_ci
3030e5c31af7Sopenharmony_ci			void func (out float f)
3031e5c31af7Sopenharmony_ci			{
3032e5c31af7Sopenharmony_ci				f = -1.0;
3033e5c31af7Sopenharmony_ci			}
3034e5c31af7Sopenharmony_ci
3035e5c31af7Sopenharmony_ci			void func (inout float f)
3036e5c31af7Sopenharmony_ci			{
3037e5c31af7Sopenharmony_ci				f = -f;
3038e5c31af7Sopenharmony_ci			}
3039e5c31af7Sopenharmony_ci
3040e5c31af7Sopenharmony_ci			void main ()
3041e5c31af7Sopenharmony_ci			{
3042e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
3043e5c31af7Sopenharmony_ci			}
3044e5c31af7Sopenharmony_ci		""
3045e5c31af7Sopenharmony_ci	end
3046e5c31af7Sopenharmony_ci
3047e5c31af7Sopenharmony_ci	case return_type_overload
3048e5c31af7Sopenharmony_ci		expect compile_fail
3049e5c31af7Sopenharmony_ci		both ""
3050e5c31af7Sopenharmony_ci			precision mediump float;
3051e5c31af7Sopenharmony_ci
3052e5c31af7Sopenharmony_ci			float func (float f)
3053e5c31af7Sopenharmony_ci			{
3054e5c31af7Sopenharmony_ci				return f;
3055e5c31af7Sopenharmony_ci			}
3056e5c31af7Sopenharmony_ci
3057e5c31af7Sopenharmony_ci			int func (float f)
3058e5c31af7Sopenharmony_ci			{
3059e5c31af7Sopenharmony_ci				return int(f);
3060e5c31af7Sopenharmony_ci			}
3061e5c31af7Sopenharmony_ci
3062e5c31af7Sopenharmony_ci			void main ()
3063e5c31af7Sopenharmony_ci			{
3064e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
3065e5c31af7Sopenharmony_ci			}
3066e5c31af7Sopenharmony_ci		""
3067e5c31af7Sopenharmony_ci	end
3068e5c31af7Sopenharmony_ci
3069e5c31af7Sopenharmony_ci	case return_type_precision_overload
3070e5c31af7Sopenharmony_ci		expect compile_fail
3071e5c31af7Sopenharmony_ci		both ""
3072e5c31af7Sopenharmony_ci			precision mediump float;
3073e5c31af7Sopenharmony_ci
3074e5c31af7Sopenharmony_ci			lowp float func (float f)
3075e5c31af7Sopenharmony_ci			{
3076e5c31af7Sopenharmony_ci				return f;
3077e5c31af7Sopenharmony_ci			}
3078e5c31af7Sopenharmony_ci
3079e5c31af7Sopenharmony_ci			mediump float func (float f)
3080e5c31af7Sopenharmony_ci			{
3081e5c31af7Sopenharmony_ci				return f;
3082e5c31af7Sopenharmony_ci			}
3083e5c31af7Sopenharmony_ci
3084e5c31af7Sopenharmony_ci			void main ()
3085e5c31af7Sopenharmony_ci			{
3086e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
3087e5c31af7Sopenharmony_ci			}
3088e5c31af7Sopenharmony_ci		""
3089e5c31af7Sopenharmony_ci	end
3090e5c31af7Sopenharmony_ci
3091e5c31af7Sopenharmony_ci	case return_type_const_overload
3092e5c31af7Sopenharmony_ci		expect compile_fail
3093e5c31af7Sopenharmony_ci		both ""
3094e5c31af7Sopenharmony_ci			precision mediump float;
3095e5c31af7Sopenharmony_ci
3096e5c31af7Sopenharmony_ci			float func (float f)
3097e5c31af7Sopenharmony_ci			{
3098e5c31af7Sopenharmony_ci				return f;
3099e5c31af7Sopenharmony_ci			}
3100e5c31af7Sopenharmony_ci
3101e5c31af7Sopenharmony_ci			const float func (float f)
3102e5c31af7Sopenharmony_ci			{
3103e5c31af7Sopenharmony_ci				return f;
3104e5c31af7Sopenharmony_ci			}
3105e5c31af7Sopenharmony_ci
3106e5c31af7Sopenharmony_ci			void main ()
3107e5c31af7Sopenharmony_ci			{
3108e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
3109e5c31af7Sopenharmony_ci			}
3110e5c31af7Sopenharmony_ci		""
3111e5c31af7Sopenharmony_ci	end
3112e5c31af7Sopenharmony_ci
3113e5c31af7Sopenharmony_ci	case return_without_value
3114e5c31af7Sopenharmony_ci		expect compile_fail
3115e5c31af7Sopenharmony_ci		both ""
3116e5c31af7Sopenharmony_ci			precision mediump float;
3117e5c31af7Sopenharmony_ci
3118e5c31af7Sopenharmony_ci			float func (float f)
3119e5c31af7Sopenharmony_ci			{
3120e5c31af7Sopenharmony_ci				return;
3121e5c31af7Sopenharmony_ci				return 1.0;
3122e5c31af7Sopenharmony_ci			}
3123e5c31af7Sopenharmony_ci
3124e5c31af7Sopenharmony_ci			void main ()
3125e5c31af7Sopenharmony_ci			{
3126e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
3127e5c31af7Sopenharmony_ci			}
3128e5c31af7Sopenharmony_ci		""
3129e5c31af7Sopenharmony_ci	end
3130e5c31af7Sopenharmony_ci
3131e5c31af7Sopenharmony_ci	case local_function_prototype
3132e5c31af7Sopenharmony_ci		expect compile_fail
3133e5c31af7Sopenharmony_ci		both ""
3134e5c31af7Sopenharmony_ci			precision mediump float;
3135e5c31af7Sopenharmony_ci
3136e5c31af7Sopenharmony_ci			void main ()
3137e5c31af7Sopenharmony_ci			{
3138e5c31af7Sopenharmony_ci				float func (float f);
3139e5c31af7Sopenharmony_ci
3140e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
3141e5c31af7Sopenharmony_ci			}
3142e5c31af7Sopenharmony_ci		""
3143e5c31af7Sopenharmony_ci	end
3144e5c31af7Sopenharmony_ci
3145e5c31af7Sopenharmony_ci	case local_function_definition
3146e5c31af7Sopenharmony_ci		expect compile_fail
3147e5c31af7Sopenharmony_ci		both ""
3148e5c31af7Sopenharmony_ci			precision mediump float;
3149e5c31af7Sopenharmony_ci
3150e5c31af7Sopenharmony_ci			void main ()
3151e5c31af7Sopenharmony_ci			{
3152e5c31af7Sopenharmony_ci				float func (float f)
3153e5c31af7Sopenharmony_ci				{
3154e5c31af7Sopenharmony_ci					return 1.0;
3155e5c31af7Sopenharmony_ci				}
3156e5c31af7Sopenharmony_ci
3157e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
3158e5c31af7Sopenharmony_ci			}
3159e5c31af7Sopenharmony_ci		""
3160e5c31af7Sopenharmony_ci	end
3161e5c31af7Sopenharmony_ci
3162e5c31af7Sopenharmony_ci	case name_type_conflict
3163e5c31af7Sopenharmony_ci		expect compile_fail
3164e5c31af7Sopenharmony_ci		both ""
3165e5c31af7Sopenharmony_ci			precision mediump float;
3166e5c31af7Sopenharmony_ci
3167e5c31af7Sopenharmony_ci			struct foo { float a; }
3168e5c31af7Sopenharmony_ci
3169e5c31af7Sopenharmony_ci			float foo (float f)
3170e5c31af7Sopenharmony_ci			{
3171e5c31af7Sopenharmony_ci				return 1.0;
3172e5c31af7Sopenharmony_ci			}
3173e5c31af7Sopenharmony_ci
3174e5c31af7Sopenharmony_ci			void main ()
3175e5c31af7Sopenharmony_ci			{
3176e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
3177e5c31af7Sopenharmony_ci			}
3178e5c31af7Sopenharmony_ci		""
3179e5c31af7Sopenharmony_ci	end
3180e5c31af7Sopenharmony_ci
3181e5c31af7Sopenharmony_ci	case const_overload
3182e5c31af7Sopenharmony_ci		expect compile_fail
3183e5c31af7Sopenharmony_ci		both ""
3184e5c31af7Sopenharmony_ci			precision mediump float;
3185e5c31af7Sopenharmony_ci
3186e5c31af7Sopenharmony_ci			void func (vec3 f)
3187e5c31af7Sopenharmony_ci			{
3188e5c31af7Sopenharmony_ci			}
3189e5c31af7Sopenharmony_ci
3190e5c31af7Sopenharmony_ci			void func (const vec3 f)
3191e5c31af7Sopenharmony_ci			{
3192e5c31af7Sopenharmony_ci			}
3193e5c31af7Sopenharmony_ci
3194e5c31af7Sopenharmony_ci			void main ()
3195e5c31af7Sopenharmony_ci			{
3196e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
3197e5c31af7Sopenharmony_ci			}
3198e5c31af7Sopenharmony_ci		""
3199e5c31af7Sopenharmony_ci	end
3200e5c31af7Sopenharmony_ci
3201e5c31af7Sopenharmony_ci	case uniform_local
3202e5c31af7Sopenharmony_ci		expect compile_fail
3203e5c31af7Sopenharmony_ci		both ""
3204e5c31af7Sopenharmony_ci			precision mediump float;
3205e5c31af7Sopenharmony_ci
3206e5c31af7Sopenharmony_ci			void func (vec3 f)
3207e5c31af7Sopenharmony_ci			{
3208e5c31af7Sopenharmony_ci				uniform float u;
3209e5c31af7Sopenharmony_ci			}
3210e5c31af7Sopenharmony_ci
3211e5c31af7Sopenharmony_ci			void main ()
3212e5c31af7Sopenharmony_ci			{
3213e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
3214e5c31af7Sopenharmony_ci			}
3215e5c31af7Sopenharmony_ci		""
3216e5c31af7Sopenharmony_ci	end
3217e5c31af7Sopenharmony_ci
3218e5c31af7Sopenharmony_ci	case varying_local
3219e5c31af7Sopenharmony_ci		expect compile_fail
3220e5c31af7Sopenharmony_ci		both ""
3221e5c31af7Sopenharmony_ci			precision mediump float;
3222e5c31af7Sopenharmony_ci
3223e5c31af7Sopenharmony_ci			void func (vec3 f)
3224e5c31af7Sopenharmony_ci			{
3225e5c31af7Sopenharmony_ci				varying float v;
3226e5c31af7Sopenharmony_ci			}
3227e5c31af7Sopenharmony_ci
3228e5c31af7Sopenharmony_ci			void main ()
3229e5c31af7Sopenharmony_ci			{
3230e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
3231e5c31af7Sopenharmony_ci			}
3232e5c31af7Sopenharmony_ci		""
3233e5c31af7Sopenharmony_ci	end
3234e5c31af7Sopenharmony_ci
3235e5c31af7Sopenharmony_ci	case attribute_local
3236e5c31af7Sopenharmony_ci		expect compile_fail
3237e5c31af7Sopenharmony_ci		both ""
3238e5c31af7Sopenharmony_ci			precision mediump float;
3239e5c31af7Sopenharmony_ci
3240e5c31af7Sopenharmony_ci			void func (vec3 f)
3241e5c31af7Sopenharmony_ci			{
3242e5c31af7Sopenharmony_ci				attribute float a;
3243e5c31af7Sopenharmony_ci			}
3244e5c31af7Sopenharmony_ci
3245e5c31af7Sopenharmony_ci			void main ()
3246e5c31af7Sopenharmony_ci			{
3247e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
3248e5c31af7Sopenharmony_ci			}
3249e5c31af7Sopenharmony_ci		""
3250e5c31af7Sopenharmony_ci	end
3251e5c31af7Sopenharmony_ci
3252e5c31af7Sopenharmony_ci	case uniform_argument
3253e5c31af7Sopenharmony_ci		expect compile_fail
3254e5c31af7Sopenharmony_ci		both ""
3255e5c31af7Sopenharmony_ci			precision mediump float;
3256e5c31af7Sopenharmony_ci
3257e5c31af7Sopenharmony_ci			void func (uniform vec3 f)
3258e5c31af7Sopenharmony_ci			{
3259e5c31af7Sopenharmony_ci			}
3260e5c31af7Sopenharmony_ci
3261e5c31af7Sopenharmony_ci			void main ()
3262e5c31af7Sopenharmony_ci			{
3263e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
3264e5c31af7Sopenharmony_ci			}
3265e5c31af7Sopenharmony_ci		""
3266e5c31af7Sopenharmony_ci	end
3267e5c31af7Sopenharmony_ci
3268e5c31af7Sopenharmony_ci	case varying_argument
3269e5c31af7Sopenharmony_ci		expect compile_fail
3270e5c31af7Sopenharmony_ci		both ""
3271e5c31af7Sopenharmony_ci			precision mediump float;
3272e5c31af7Sopenharmony_ci
3273e5c31af7Sopenharmony_ci			void func (varying vec3 f)
3274e5c31af7Sopenharmony_ci			{
3275e5c31af7Sopenharmony_ci			}
3276e5c31af7Sopenharmony_ci
3277e5c31af7Sopenharmony_ci			void main ()
3278e5c31af7Sopenharmony_ci			{
3279e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
3280e5c31af7Sopenharmony_ci			}
3281e5c31af7Sopenharmony_ci		""
3282e5c31af7Sopenharmony_ci	end
3283e5c31af7Sopenharmony_ci
3284e5c31af7Sopenharmony_ci	case attribute_argument
3285e5c31af7Sopenharmony_ci		expect compile_fail
3286e5c31af7Sopenharmony_ci		both ""
3287e5c31af7Sopenharmony_ci			precision mediump float;
3288e5c31af7Sopenharmony_ci
3289e5c31af7Sopenharmony_ci			void func (attribute vec3 f)
3290e5c31af7Sopenharmony_ci			{
3291e5c31af7Sopenharmony_ci			}
3292e5c31af7Sopenharmony_ci
3293e5c31af7Sopenharmony_ci			void main ()
3294e5c31af7Sopenharmony_ci			{
3295e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
3296e5c31af7Sopenharmony_ci			}
3297e5c31af7Sopenharmony_ci		""
3298e5c31af7Sopenharmony_ci	end
3299e5c31af7Sopenharmony_ci
3300e5c31af7Sopenharmony_ci	case uniform_return_type
3301e5c31af7Sopenharmony_ci		expect compile_fail
3302e5c31af7Sopenharmony_ci		both ""
3303e5c31af7Sopenharmony_ci			precision mediump float;
3304e5c31af7Sopenharmony_ci
3305e5c31af7Sopenharmony_ci			uniform float func (vec3 f)
3306e5c31af7Sopenharmony_ci			{
3307e5c31af7Sopenharmony_ci				return f.x;
3308e5c31af7Sopenharmony_ci			}
3309e5c31af7Sopenharmony_ci
3310e5c31af7Sopenharmony_ci			void main ()
3311e5c31af7Sopenharmony_ci			{
3312e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
3313e5c31af7Sopenharmony_ci			}
3314e5c31af7Sopenharmony_ci		""
3315e5c31af7Sopenharmony_ci	end
3316e5c31af7Sopenharmony_ci
3317e5c31af7Sopenharmony_ci	case varying_return_type
3318e5c31af7Sopenharmony_ci		expect compile_fail
3319e5c31af7Sopenharmony_ci		both ""
3320e5c31af7Sopenharmony_ci			precision mediump float;
3321e5c31af7Sopenharmony_ci
3322e5c31af7Sopenharmony_ci			varying float func (vec3 f)
3323e5c31af7Sopenharmony_ci			{
3324e5c31af7Sopenharmony_ci				return f.x;
3325e5c31af7Sopenharmony_ci			}
3326e5c31af7Sopenharmony_ci
3327e5c31af7Sopenharmony_ci			void main ()
3328e5c31af7Sopenharmony_ci			{
3329e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
3330e5c31af7Sopenharmony_ci			}
3331e5c31af7Sopenharmony_ci		""
3332e5c31af7Sopenharmony_ci	end
3333e5c31af7Sopenharmony_ci
3334e5c31af7Sopenharmony_ci	case attribute_return_type
3335e5c31af7Sopenharmony_ci		expect compile_fail
3336e5c31af7Sopenharmony_ci		both ""
3337e5c31af7Sopenharmony_ci			precision mediump float;
3338e5c31af7Sopenharmony_ci
3339e5c31af7Sopenharmony_ci			attribute float func (vec3 f)
3340e5c31af7Sopenharmony_ci			{
3341e5c31af7Sopenharmony_ci				return f.x;
3342e5c31af7Sopenharmony_ci			}
3343e5c31af7Sopenharmony_ci
3344e5c31af7Sopenharmony_ci			void main ()
3345e5c31af7Sopenharmony_ci			{
3346e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
3347e5c31af7Sopenharmony_ci			}
3348e5c31af7Sopenharmony_ci		""
3349e5c31af7Sopenharmony_ci	end
3350e5c31af7Sopenharmony_ci
3351e5c31af7Sopenharmony_ci	case main_invalid_return_type
3352e5c31af7Sopenharmony_ci		expect compile_fail
3353e5c31af7Sopenharmony_ci		both ""
3354e5c31af7Sopenharmony_ci			precision mediump float;
3355e5c31af7Sopenharmony_ci
3356e5c31af7Sopenharmony_ci			float main ()
3357e5c31af7Sopenharmony_ci			{
3358e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
3359e5c31af7Sopenharmony_ci			}
3360e5c31af7Sopenharmony_ci		""
3361e5c31af7Sopenharmony_ci	end
3362e5c31af7Sopenharmony_ci
3363e5c31af7Sopenharmony_ci	case main_has_arguments
3364e5c31af7Sopenharmony_ci		expect compile_fail
3365e5c31af7Sopenharmony_ci		both ""
3366e5c31af7Sopenharmony_ci			precision mediump float;
3367e5c31af7Sopenharmony_ci
3368e5c31af7Sopenharmony_ci			void main (float f)
3369e5c31af7Sopenharmony_ci			{
3370e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
3371e5c31af7Sopenharmony_ci			}
3372e5c31af7Sopenharmony_ci		""
3373e5c31af7Sopenharmony_ci	end
3374e5c31af7Sopenharmony_ci
3375e5c31af7Sopenharmony_ci	case main_missing_return_type
3376e5c31af7Sopenharmony_ci		expect compile_fail
3377e5c31af7Sopenharmony_ci		both ""
3378e5c31af7Sopenharmony_ci			precision mediump float;
3379e5c31af7Sopenharmony_ci
3380e5c31af7Sopenharmony_ci			main ()
3381e5c31af7Sopenharmony_ci			{
3382e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
3383e5c31af7Sopenharmony_ci			}
3384e5c31af7Sopenharmony_ci		""
3385e5c31af7Sopenharmony_ci	end
3386e5c31af7Sopenharmony_ci
3387e5c31af7Sopenharmony_ci	case write_const_arg
3388e5c31af7Sopenharmony_ci		expect compile_fail
3389e5c31af7Sopenharmony_ci		both ""
3390e5c31af7Sopenharmony_ci			precision mediump float;
3391e5c31af7Sopenharmony_ci
3392e5c31af7Sopenharmony_ci			func (const float f)
3393e5c31af7Sopenharmony_ci			{
3394e5c31af7Sopenharmony_ci				f = 1.0;
3395e5c31af7Sopenharmony_ci			}
3396e5c31af7Sopenharmony_ci
3397e5c31af7Sopenharmony_ci			main ()
3398e5c31af7Sopenharmony_ci			{
3399e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
3400e5c31af7Sopenharmony_ci			}
3401e5c31af7Sopenharmony_ci		""
3402e5c31af7Sopenharmony_ci	end
3403e5c31af7Sopenharmony_ci
3404e5c31af7Sopenharmony_ci	case write_const_array_arg
3405e5c31af7Sopenharmony_ci		expect compile_fail
3406e5c31af7Sopenharmony_ci		both ""
3407e5c31af7Sopenharmony_ci			precision mediump float;
3408e5c31af7Sopenharmony_ci
3409e5c31af7Sopenharmony_ci			func (const float f[3])
3410e5c31af7Sopenharmony_ci			{
3411e5c31af7Sopenharmony_ci				f[0] = 1.0;
3412e5c31af7Sopenharmony_ci			}
3413e5c31af7Sopenharmony_ci
3414e5c31af7Sopenharmony_ci			main ()
3415e5c31af7Sopenharmony_ci			{
3416e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(1.0);
3417e5c31af7Sopenharmony_ci			}
3418e5c31af7Sopenharmony_ci		""
3419e5c31af7Sopenharmony_ci	end
3420e5c31af7Sopenharmony_ci
3421e5c31af7Sopenharmony_ci	case modify_const_arg
3422e5c31af7Sopenharmony_ci		expect compile_fail
3423e5c31af7Sopenharmony_ci		both ""
3424e5c31af7Sopenharmony_ci			precision mediump float;
3425e5c31af7Sopenharmony_ci			precision mediump int;
3426e5c31af7Sopenharmony_ci			${DECLARATIONS}
3427e5c31af7Sopenharmony_ci
3428e5c31af7Sopenharmony_ci			int func (const int a)
3429e5c31af7Sopenharmony_ci			{
3430e5c31af7Sopenharmony_ci				a = -a;
3431e5c31af7Sopenharmony_ci				return 2 * a;
3432e5c31af7Sopenharmony_ci			}
3433e5c31af7Sopenharmony_ci
3434e5c31af7Sopenharmony_ci			void main()
3435e5c31af7Sopenharmony_ci			{
3436e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(func(3));
3437e5c31af7Sopenharmony_ci			}
3438e5c31af7Sopenharmony_ci		""
3439e5c31af7Sopenharmony_ci	end
3440e5c31af7Sopenharmony_ci
3441e5c31af7Sopenharmony_ci	case init_const_local_from_const_arg
3442e5c31af7Sopenharmony_ci		expect compile_fail
3443e5c31af7Sopenharmony_ci		both ""
3444e5c31af7Sopenharmony_ci			precision mediump float;
3445e5c31af7Sopenharmony_ci			precision mediump int;
3446e5c31af7Sopenharmony_ci			${DECLARATIONS}
3447e5c31af7Sopenharmony_ci
3448e5c31af7Sopenharmony_ci			int func (const int a)
3449e5c31af7Sopenharmony_ci			{
3450e5c31af7Sopenharmony_ci				const int b = -a;
3451e5c31af7Sopenharmony_ci				return 2 * b;
3452e5c31af7Sopenharmony_ci			}
3453e5c31af7Sopenharmony_ci
3454e5c31af7Sopenharmony_ci			void main()
3455e5c31af7Sopenharmony_ci			{
3456e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(func(3));
3457e5c31af7Sopenharmony_ci			}
3458e5c31af7Sopenharmony_ci		""
3459e5c31af7Sopenharmony_ci	end
3460e5c31af7Sopenharmony_ci
3461e5c31af7Sopenharmony_ci	case array_size_from_const_arg
3462e5c31af7Sopenharmony_ci		expect compile_fail
3463e5c31af7Sopenharmony_ci		both ""
3464e5c31af7Sopenharmony_ci			precision mediump float;
3465e5c31af7Sopenharmony_ci			precision mediump int;
3466e5c31af7Sopenharmony_ci			${DECLARATIONS}
3467e5c31af7Sopenharmony_ci
3468e5c31af7Sopenharmony_ci			int func (const int a)
3469e5c31af7Sopenharmony_ci			{
3470e5c31af7Sopenharmony_ci				int arr[a];
3471e5c31af7Sopenharmony_ci				arr[1] = 3;
3472e5c31af7Sopenharmony_ci				return arr[1];
3473e5c31af7Sopenharmony_ci			}
3474e5c31af7Sopenharmony_ci
3475e5c31af7Sopenharmony_ci			void main()
3476e5c31af7Sopenharmony_ci			{
3477e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(func(3));
3478e5c31af7Sopenharmony_ci			}
3479e5c31af7Sopenharmony_ci		""
3480e5c31af7Sopenharmony_ci	end
3481e5c31af7Sopenharmony_ci
3482e5c31af7Sopenharmony_ci	case double_declare
3483e5c31af7Sopenharmony_ci		expect compile_fail
3484e5c31af7Sopenharmony_ci		both ""
3485e5c31af7Sopenharmony_ci			precision mediump float;
3486e5c31af7Sopenharmony_ci			${DECLARATIONS}
3487e5c31af7Sopenharmony_ci
3488e5c31af7Sopenharmony_ci			float func (float f);
3489e5c31af7Sopenharmony_ci			float func (float f);
3490e5c31af7Sopenharmony_ci
3491e5c31af7Sopenharmony_ci			float func (float f)
3492e5c31af7Sopenharmony_ci			{
3493e5c31af7Sopenharmony_ci				return -f;
3494e5c31af7Sopenharmony_ci			}
3495e5c31af7Sopenharmony_ci
3496e5c31af7Sopenharmony_ci			void main()
3497e5c31af7Sopenharmony_ci			{
3498e5c31af7Sopenharmony_ci				${POSITION_FRAG_COLOR} = vec4(func(1.0));
3499e5c31af7Sopenharmony_ci			}
3500e5c31af7Sopenharmony_ci		""
3501e5c31af7Sopenharmony_ci	end
3502e5c31af7Sopenharmony_ci
3503e5c31af7Sopenharmony_ciend # invalid
3504