1e5c31af7Sopenharmony_ci#X1. Type:					float[5]								// An array type with 5 elements
2e5c31af7Sopenharmony_ci#X2. Return value:			float[5] func() { ... }					// Function with a 5-element array return value
3e5c31af7Sopenharmony_ci#X3. Array constructor:		float[3] (1.0, 2.0, 5.5)				// 3-element array with given elements
4e5c31af7Sopenharmony_ci#																	// Fails with array of matrices!
5e5c31af7Sopenharmony_ci#X4. As unnamed parameter:	void func(float[5]);
6e5c31af7Sopenharmony_ci#X5. Variable declaration:	float[5] a;								// Equivalent to float a[5]; (?)
7e5c31af7Sopenharmony_ci#X6. Empty brackets:		float x[] = float[] (1.0, 2.0, 3.0);	// Size of x is 3
8e5c31af7Sopenharmony_ci#							float y[] = float[3] (1.0, 2.0, 3.0);	// Size of y is 3 (equivalent)
9e5c31af7Sopenharmony_ci#							float z[] = y;							// Size of z is 3
10e5c31af7Sopenharmony_ci#X7. Testing that 2-dimensional arrays don't work:	float a[5][3];	// Illegal
11e5c31af7Sopenharmony_ci#													float[5] a[3];	// Illegal
12e5c31af7Sopenharmony_ci#X8. Testing that array declaration with dynamic variables as array size won't work.
13e5c31af7Sopenharmony_ci#X9. Testing length() operator:	z.length();							// Returns 3 for z defined before
14e5c31af7Sopenharmony_ci#X10. Test C/C++ style {}-constructor
15e5c31af7Sopenharmony_ci#X11. Test struct arrays
16e5c31af7Sopenharmony_ci#X12. Test array element access at initialization with const/dynamic values
17e5c31af7Sopenharmony_ci
18e5c31af7Sopenharmony_cigroup constructor "Array constructors"
19e5c31af7Sopenharmony_ci
20e5c31af7Sopenharmony_ci	case float3
21e5c31af7Sopenharmony_ci		version 310 es
22e5c31af7Sopenharmony_ci		values
23e5c31af7Sopenharmony_ci		{
24e5c31af7Sopenharmony_ci			input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(7.4, -1.0, 2.0) | vec3(3.0, 1.6, -2.0) ];
25e5c31af7Sopenharmony_ci			output vec3 out0 = [ vec3(2.0, 0.5, 1.0) | vec3(2.0, 7.4, -1.0) | vec3(-2.0, 3.0, 1.6) ];
26e5c31af7Sopenharmony_ci		}
27e5c31af7Sopenharmony_ci
28e5c31af7Sopenharmony_ci		both ""
29e5c31af7Sopenharmony_ci			#version 310 es
30e5c31af7Sopenharmony_ci			precision highp float;
31e5c31af7Sopenharmony_ci			${DECLARATIONS}
32e5c31af7Sopenharmony_ci
33e5c31af7Sopenharmony_ci			void main()
34e5c31af7Sopenharmony_ci			{
35e5c31af7Sopenharmony_ci				${SETUP}
36e5c31af7Sopenharmony_ci				float[3] x;
37e5c31af7Sopenharmony_ci				x = float[3] (in0.z, in0.x, in0.y);
38e5c31af7Sopenharmony_ci				out0 = vec3(x[0], x[1], x[2]);
39e5c31af7Sopenharmony_ci				${OUTPUT}
40e5c31af7Sopenharmony_ci			}
41e5c31af7Sopenharmony_ci		""
42e5c31af7Sopenharmony_ci	end
43e5c31af7Sopenharmony_ci
44e5c31af7Sopenharmony_ci	case float4
45e5c31af7Sopenharmony_ci		version 310 es
46e5c31af7Sopenharmony_ci		values
47e5c31af7Sopenharmony_ci		{
48e5c31af7Sopenharmony_ci			input vec4 in0 = [ vec4(0.5, 1.0, 2.0, 0.2) | vec4(7.4, -1.0, 2.0, -1.3) | vec4(3.0, 1.6, -2.0, 0.5) ];
49e5c31af7Sopenharmony_ci			output vec4 out0 = [ vec4(2.0, 0.5, 0.2, 1.0) | vec4(2.0, 7.4, -1.3, -1.0) | vec4(-2.0, 3.0, 0.5, 1.6) ];
50e5c31af7Sopenharmony_ci		}
51e5c31af7Sopenharmony_ci
52e5c31af7Sopenharmony_ci		both ""
53e5c31af7Sopenharmony_ci			#version 310 es
54e5c31af7Sopenharmony_ci			precision highp float;
55e5c31af7Sopenharmony_ci			${DECLARATIONS}
56e5c31af7Sopenharmony_ci
57e5c31af7Sopenharmony_ci			void main()
58e5c31af7Sopenharmony_ci			{
59e5c31af7Sopenharmony_ci				${SETUP}
60e5c31af7Sopenharmony_ci				float[4] x;
61e5c31af7Sopenharmony_ci				x = float[4] (in0.z, in0.x, in0.w, in0.y);
62e5c31af7Sopenharmony_ci				out0 = vec4(x[0], x[1], x[2], x[3]);
63e5c31af7Sopenharmony_ci				${OUTPUT}
64e5c31af7Sopenharmony_ci			}
65e5c31af7Sopenharmony_ci		""
66e5c31af7Sopenharmony_ci	end
67e5c31af7Sopenharmony_ci
68e5c31af7Sopenharmony_ci	case int3
69e5c31af7Sopenharmony_ci		version 310 es
70e5c31af7Sopenharmony_ci		values
71e5c31af7Sopenharmony_ci		{
72e5c31af7Sopenharmony_ci			input ivec3 in0 = [ ivec3(0, 1, 2) | ivec3(7, -1, 2) | ivec3(3, 1, -2) ];
73e5c31af7Sopenharmony_ci			output ivec3 out0 = [ ivec3(2, 0, 1) | ivec3(2, 7, -1) | ivec3(-2, 3, 1) ];
74e5c31af7Sopenharmony_ci		}
75e5c31af7Sopenharmony_ci
76e5c31af7Sopenharmony_ci		both ""
77e5c31af7Sopenharmony_ci			#version 310 es
78e5c31af7Sopenharmony_ci			precision highp int;
79e5c31af7Sopenharmony_ci			precision highp float;
80e5c31af7Sopenharmony_ci			${DECLARATIONS}
81e5c31af7Sopenharmony_ci
82e5c31af7Sopenharmony_ci			void main()
83e5c31af7Sopenharmony_ci			{
84e5c31af7Sopenharmony_ci				${SETUP}
85e5c31af7Sopenharmony_ci				int[3] x;
86e5c31af7Sopenharmony_ci				x = int[3] (in0.z, in0.x, in0.y);
87e5c31af7Sopenharmony_ci				out0 = ivec3(x[0], x[1], x[2]);
88e5c31af7Sopenharmony_ci				${OUTPUT}
89e5c31af7Sopenharmony_ci			}
90e5c31af7Sopenharmony_ci		""
91e5c31af7Sopenharmony_ci	end
92e5c31af7Sopenharmony_ci
93e5c31af7Sopenharmony_ci	case int4
94e5c31af7Sopenharmony_ci		version 310 es
95e5c31af7Sopenharmony_ci		values
96e5c31af7Sopenharmony_ci		{
97e5c31af7Sopenharmony_ci			input ivec4 in0 = [ ivec4(0, 1, 2, 0) | ivec4(7, -1, 2, -1) | ivec4(3, 1, -2, 0) ];
98e5c31af7Sopenharmony_ci			output ivec4 out0 = [ ivec4(2, 0, 0, 1) | ivec4(2, 7, -1, -1) | ivec4(-2, 3, 0, 1) ];
99e5c31af7Sopenharmony_ci		}
100e5c31af7Sopenharmony_ci
101e5c31af7Sopenharmony_ci		both ""
102e5c31af7Sopenharmony_ci			#version 310 es
103e5c31af7Sopenharmony_ci			precision highp int;
104e5c31af7Sopenharmony_ci			precision highp float;
105e5c31af7Sopenharmony_ci			${DECLARATIONS}
106e5c31af7Sopenharmony_ci
107e5c31af7Sopenharmony_ci			void main()
108e5c31af7Sopenharmony_ci			{
109e5c31af7Sopenharmony_ci				${SETUP}
110e5c31af7Sopenharmony_ci				int[4] x;
111e5c31af7Sopenharmony_ci				x = int[4] (in0.z, in0.x, in0.w, in0.y);
112e5c31af7Sopenharmony_ci				out0 = ivec4(x[0], x[1], x[2], x[3]);
113e5c31af7Sopenharmony_ci				${OUTPUT}
114e5c31af7Sopenharmony_ci			}
115e5c31af7Sopenharmony_ci		""
116e5c31af7Sopenharmony_ci	end
117e5c31af7Sopenharmony_ci
118e5c31af7Sopenharmony_ci	case bool3
119e5c31af7Sopenharmony_ci		version 310 es
120e5c31af7Sopenharmony_ci		values
121e5c31af7Sopenharmony_ci		{
122e5c31af7Sopenharmony_ci			input bvec3 in0 = [ bvec3(true, true, false) ];
123e5c31af7Sopenharmony_ci			output bvec3 out0 = [ bvec3(false, true, true) ];
124e5c31af7Sopenharmony_ci		}
125e5c31af7Sopenharmony_ci
126e5c31af7Sopenharmony_ci		both ""
127e5c31af7Sopenharmony_ci			#version 310 es
128e5c31af7Sopenharmony_ci			precision highp int;
129e5c31af7Sopenharmony_ci			precision highp float;
130e5c31af7Sopenharmony_ci			${DECLARATIONS}
131e5c31af7Sopenharmony_ci
132e5c31af7Sopenharmony_ci			void main()
133e5c31af7Sopenharmony_ci			{
134e5c31af7Sopenharmony_ci				${SETUP}
135e5c31af7Sopenharmony_ci				bool[3] x;
136e5c31af7Sopenharmony_ci				x = bool[3] (in0.z, in0.x, in0.y);
137e5c31af7Sopenharmony_ci				out0 = bvec3(x[0], x[1], x[2]);
138e5c31af7Sopenharmony_ci				${OUTPUT}
139e5c31af7Sopenharmony_ci			}
140e5c31af7Sopenharmony_ci		""
141e5c31af7Sopenharmony_ci	end
142e5c31af7Sopenharmony_ci
143e5c31af7Sopenharmony_ci	case bool4
144e5c31af7Sopenharmony_ci		version 310 es
145e5c31af7Sopenharmony_ci		values
146e5c31af7Sopenharmony_ci		{
147e5c31af7Sopenharmony_ci			input bvec4 in0 = [ bvec4(true, true, false, false) ];
148e5c31af7Sopenharmony_ci			output bvec4 out0 = [ bvec4(false, true, true, false) ];
149e5c31af7Sopenharmony_ci		}
150e5c31af7Sopenharmony_ci
151e5c31af7Sopenharmony_ci		both ""
152e5c31af7Sopenharmony_ci			#version 310 es
153e5c31af7Sopenharmony_ci			precision highp int;
154e5c31af7Sopenharmony_ci			precision highp float;
155e5c31af7Sopenharmony_ci			${DECLARATIONS}
156e5c31af7Sopenharmony_ci
157e5c31af7Sopenharmony_ci			void main()
158e5c31af7Sopenharmony_ci			{
159e5c31af7Sopenharmony_ci				${SETUP}
160e5c31af7Sopenharmony_ci				bool[4] x;
161e5c31af7Sopenharmony_ci				x = bool[4] (in0.z, in0.x, in0.y, in0.w);
162e5c31af7Sopenharmony_ci				out0 = bvec4(x[0], x[1], x[2], x[3]);
163e5c31af7Sopenharmony_ci				${OUTPUT}
164e5c31af7Sopenharmony_ci			}
165e5c31af7Sopenharmony_ci		""
166e5c31af7Sopenharmony_ci	end
167e5c31af7Sopenharmony_ci
168e5c31af7Sopenharmony_ci	case struct3
169e5c31af7Sopenharmony_ci		version 310 es
170e5c31af7Sopenharmony_ci		values
171e5c31af7Sopenharmony_ci		{
172e5c31af7Sopenharmony_ci			input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ];
173e5c31af7Sopenharmony_ci			output vec3 out0 = [ vec3(2.0, -0.5, -1.0) ];
174e5c31af7Sopenharmony_ci		}
175e5c31af7Sopenharmony_ci
176e5c31af7Sopenharmony_ci		both ""
177e5c31af7Sopenharmony_ci			#version 310 es
178e5c31af7Sopenharmony_ci			precision highp float;
179e5c31af7Sopenharmony_ci			${DECLARATIONS}
180e5c31af7Sopenharmony_ci
181e5c31af7Sopenharmony_ci
182e5c31af7Sopenharmony_ci
183e5c31af7Sopenharmony_ci			void main()
184e5c31af7Sopenharmony_ci			{
185e5c31af7Sopenharmony_ci				${SETUP}
186e5c31af7Sopenharmony_ci
187e5c31af7Sopenharmony_ci				struct test
188e5c31af7Sopenharmony_ci				{
189e5c31af7Sopenharmony_ci					float f;
190e5c31af7Sopenharmony_ci					vec3 v;
191e5c31af7Sopenharmony_ci				};
192e5c31af7Sopenharmony_ci
193e5c31af7Sopenharmony_ci				test a = test(in0.z, vec3(in0.x, in0.y, in0.z));
194e5c31af7Sopenharmony_ci				test b = test(in0.y, vec3(-in0.z, -in0.x, -in0.y));
195e5c31af7Sopenharmony_ci				test c = test(in0.x, vec3(-in0.y, in0.z, -in0.x));
196e5c31af7Sopenharmony_ci
197e5c31af7Sopenharmony_ci				test[3] x = test[3] (a, b, c);
198e5c31af7Sopenharmony_ci
199e5c31af7Sopenharmony_ci				out0 = vec3(x[0].f, x[1].v.y, x[2].v.x);
200e5c31af7Sopenharmony_ci				${OUTPUT}
201e5c31af7Sopenharmony_ci			}
202e5c31af7Sopenharmony_ci		""
203e5c31af7Sopenharmony_ci	end
204e5c31af7Sopenharmony_ci
205e5c31af7Sopenharmony_ci	case struct4
206e5c31af7Sopenharmony_ci		version 310 es
207e5c31af7Sopenharmony_ci		values
208e5c31af7Sopenharmony_ci		{
209e5c31af7Sopenharmony_ci			input vec4 in0 = [ vec4(0.5, 1.0, 2.0, 1.5) ];
210e5c31af7Sopenharmony_ci			output vec4 out0 = [ vec4(2.0, -0.5, -1.0, -1.5) ];
211e5c31af7Sopenharmony_ci		}
212e5c31af7Sopenharmony_ci
213e5c31af7Sopenharmony_ci		both ""
214e5c31af7Sopenharmony_ci			#version 310 es
215e5c31af7Sopenharmony_ci			precision highp float;
216e5c31af7Sopenharmony_ci			${DECLARATIONS}
217e5c31af7Sopenharmony_ci
218e5c31af7Sopenharmony_ci
219e5c31af7Sopenharmony_ci			void main()
220e5c31af7Sopenharmony_ci			{
221e5c31af7Sopenharmony_ci				${SETUP}
222e5c31af7Sopenharmony_ci
223e5c31af7Sopenharmony_ci
224e5c31af7Sopenharmony_ci				struct test
225e5c31af7Sopenharmony_ci				{
226e5c31af7Sopenharmony_ci					float f;
227e5c31af7Sopenharmony_ci					vec3 v;
228e5c31af7Sopenharmony_ci				};
229e5c31af7Sopenharmony_ci
230e5c31af7Sopenharmony_ci				test a = test(in0.z, vec3(in0.x, in0.y, in0.z));
231e5c31af7Sopenharmony_ci				test b = test(in0.y, vec3(-in0.z, -in0.x, -in0.y));
232e5c31af7Sopenharmony_ci				test c = test(in0.x, vec3(-in0.y, in0.z, -in0.x));
233e5c31af7Sopenharmony_ci				test d = test(-in0.w, vec3(-in0.w, -in0.x, -in0.z));
234e5c31af7Sopenharmony_ci
235e5c31af7Sopenharmony_ci				test[4] x = test[4] (a, b, c, d);
236e5c31af7Sopenharmony_ci
237e5c31af7Sopenharmony_ci				out0 = vec4(x[0].f, x[1].v.y, x[2].v.x, x[3].v.x);
238e5c31af7Sopenharmony_ci				${OUTPUT}
239e5c31af7Sopenharmony_ci			}
240e5c31af7Sopenharmony_ci		""
241e5c31af7Sopenharmony_ci	end
242e5c31af7Sopenharmony_ci
243e5c31af7Sopenharmony_ci
244e5c31af7Sopenharmony_ci	case float_vec3
245e5c31af7Sopenharmony_ci		version 310 es
246e5c31af7Sopenharmony_ci		values
247e5c31af7Sopenharmony_ci		{
248e5c31af7Sopenharmony_ci			input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(7.4, -1.0, 2.0) | vec3(3.0, 1.6, -2.0) ];
249e5c31af7Sopenharmony_ci			output vec3 out0 = [ vec3(0.5, -2.0, 1.0) | vec3(7.4, -2.0, -1.0) | vec3(3.0, 2.0, 1.6) ];
250e5c31af7Sopenharmony_ci		}
251e5c31af7Sopenharmony_ci
252e5c31af7Sopenharmony_ci		both ""
253e5c31af7Sopenharmony_ci			#version 310 es
254e5c31af7Sopenharmony_ci			precision highp float;
255e5c31af7Sopenharmony_ci			${DECLARATIONS}
256e5c31af7Sopenharmony_ci
257e5c31af7Sopenharmony_ci			void main()
258e5c31af7Sopenharmony_ci			{
259e5c31af7Sopenharmony_ci				${SETUP}
260e5c31af7Sopenharmony_ci
261e5c31af7Sopenharmony_ci				vec3[3] x;
262e5c31af7Sopenharmony_ci				x = vec3[3] (	vec3(in0.x, in0.y, in0.z)	,
263e5c31af7Sopenharmony_ci								vec3(-in0.y, -in0.z, -in0.x),
264e5c31af7Sopenharmony_ci								vec3(in0.z, in0.x, in0.y)	);
265e5c31af7Sopenharmony_ci				out0 = vec3(x[0].x, x[1].y, x[2].z);
266e5c31af7Sopenharmony_ci				${OUTPUT}
267e5c31af7Sopenharmony_ci			}
268e5c31af7Sopenharmony_ci		""
269e5c31af7Sopenharmony_ci	end
270e5c31af7Sopenharmony_ci
271e5c31af7Sopenharmony_ci	case int_vec3
272e5c31af7Sopenharmony_ci		version 310 es
273e5c31af7Sopenharmony_ci		values
274e5c31af7Sopenharmony_ci		{
275e5c31af7Sopenharmony_ci			input ivec3 in0 = [ ivec3(5, 1, 2) | ivec3(7, -1, 2) | ivec3(3, 1, -2) ];
276e5c31af7Sopenharmony_ci			output ivec3 out0 = [ ivec3(5, -2, 1) | ivec3(7, -2, -1) | ivec3(3, 2, 1) ];
277e5c31af7Sopenharmony_ci		}
278e5c31af7Sopenharmony_ci
279e5c31af7Sopenharmony_ci		both ""
280e5c31af7Sopenharmony_ci			#version 310 es
281e5c31af7Sopenharmony_ci			precision highp int;
282e5c31af7Sopenharmony_ci			precision highp float;
283e5c31af7Sopenharmony_ci			${DECLARATIONS}
284e5c31af7Sopenharmony_ci
285e5c31af7Sopenharmony_ci			void main()
286e5c31af7Sopenharmony_ci			{
287e5c31af7Sopenharmony_ci				${SETUP}
288e5c31af7Sopenharmony_ci
289e5c31af7Sopenharmony_ci				ivec3[3] x;
290e5c31af7Sopenharmony_ci				x = ivec3[3] (	ivec3(in0.x, in0.y, in0.z)	,
291e5c31af7Sopenharmony_ci								ivec3(-in0.y, -in0.z, -in0.x),
292e5c31af7Sopenharmony_ci								ivec3(in0.z, in0.x, in0.y)	);
293e5c31af7Sopenharmony_ci				out0 = ivec3(x[0].x, x[1].y, x[2].z);
294e5c31af7Sopenharmony_ci				${OUTPUT}
295e5c31af7Sopenharmony_ci			}
296e5c31af7Sopenharmony_ci		""
297e5c31af7Sopenharmony_ci	end
298e5c31af7Sopenharmony_ci
299e5c31af7Sopenharmony_ci	case bool_vec3
300e5c31af7Sopenharmony_ci		version 310 es
301e5c31af7Sopenharmony_ci		values
302e5c31af7Sopenharmony_ci		{
303e5c31af7Sopenharmony_ci			input bvec3 in0 = [ bvec3(true, false, true) ];
304e5c31af7Sopenharmony_ci			output bvec3 out0 = [ bvec3(true, true, false) ];
305e5c31af7Sopenharmony_ci		}
306e5c31af7Sopenharmony_ci
307e5c31af7Sopenharmony_ci		both ""
308e5c31af7Sopenharmony_ci			#version 310 es
309e5c31af7Sopenharmony_ci			precision highp int;
310e5c31af7Sopenharmony_ci			precision highp float;
311e5c31af7Sopenharmony_ci			${DECLARATIONS}
312e5c31af7Sopenharmony_ci
313e5c31af7Sopenharmony_ci			void main()
314e5c31af7Sopenharmony_ci			{
315e5c31af7Sopenharmony_ci				${SETUP}
316e5c31af7Sopenharmony_ci
317e5c31af7Sopenharmony_ci				bvec3[3] x;
318e5c31af7Sopenharmony_ci				x = bvec3[3] (	bvec3(in0.x, in0.y, in0.z)	,
319e5c31af7Sopenharmony_ci								bvec3(in0.y, in0.z, in0.x),
320e5c31af7Sopenharmony_ci								bvec3(in0.z, in0.x, in0.y)	);
321e5c31af7Sopenharmony_ci				out0 = bvec3(x[0].x, x[1].y, x[2].z);
322e5c31af7Sopenharmony_ci				${OUTPUT}
323e5c31af7Sopenharmony_ci			}
324e5c31af7Sopenharmony_ci		""
325e5c31af7Sopenharmony_ci	end
326e5c31af7Sopenharmony_ci
327e5c31af7Sopenharmony_ci	case float_mat3
328e5c31af7Sopenharmony_ci		version 310 es
329e5c31af7Sopenharmony_ci		values
330e5c31af7Sopenharmony_ci		{
331e5c31af7Sopenharmony_ci			input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(-1.5, 0.0, -2.3) ];
332e5c31af7Sopenharmony_ci			output vec3 out0 = [ vec3(0.5, -1.0, 1.0) | vec3(-1.5, 0.0, 0.0) ];
333e5c31af7Sopenharmony_ci		}
334e5c31af7Sopenharmony_ci
335e5c31af7Sopenharmony_ci		both ""
336e5c31af7Sopenharmony_ci			#version 310 es
337e5c31af7Sopenharmony_ci			precision highp float;
338e5c31af7Sopenharmony_ci			${DECLARATIONS}
339e5c31af7Sopenharmony_ci
340e5c31af7Sopenharmony_ci			void main()
341e5c31af7Sopenharmony_ci			{
342e5c31af7Sopenharmony_ci				${SETUP}
343e5c31af7Sopenharmony_ci				mat3[3] a = mat3[3] (	mat3(	in0.x, in0.y, in0.z,
344e5c31af7Sopenharmony_ci												in0.x, in0.y, in0.z,
345e5c31af7Sopenharmony_ci												in0.x, in0.y, in0.z)	,
346e5c31af7Sopenharmony_ci										mat3(	in0.z, in0.x, -in0.y,
347e5c31af7Sopenharmony_ci												in0.z, in0.x, -in0.y,
348e5c31af7Sopenharmony_ci												in0.z, in0.x, -in0.y)	,
349e5c31af7Sopenharmony_ci										mat3(	-in0.z, -in0.z, in0.z,
350e5c31af7Sopenharmony_ci												-in0.y, -in0.y, in0.y,
351e5c31af7Sopenharmony_ci												-in0.x, -in0.x, in0.x)	);
352e5c31af7Sopenharmony_ci
353e5c31af7Sopenharmony_ci				mat3 a0 = a[0];
354e5c31af7Sopenharmony_ci				mat3 a1 = a[1];
355e5c31af7Sopenharmony_ci				mat3 a2 = a[2];
356e5c31af7Sopenharmony_ci
357e5c31af7Sopenharmony_ci				float ret0 = a0[2][0];
358e5c31af7Sopenharmony_ci				float ret1 = a1[0][2];
359e5c31af7Sopenharmony_ci				float ret2 = a2[1][2];
360e5c31af7Sopenharmony_ci
361e5c31af7Sopenharmony_ci				out0 = vec3(ret0, ret1, ret2);
362e5c31af7Sopenharmony_ci				${OUTPUT}
363e5c31af7Sopenharmony_ci			}
364e5c31af7Sopenharmony_ci		""
365e5c31af7Sopenharmony_ci	end
366e5c31af7Sopenharmony_ci
367e5c31af7Sopenharmony_ci	case int_mat3
368e5c31af7Sopenharmony_ci		version 310 es
369e5c31af7Sopenharmony_ci		values
370e5c31af7Sopenharmony_ci		{
371e5c31af7Sopenharmony_ci			input ivec3 in0 = [ ivec3(0, 1, 2) | ivec3(-1, 0, -2) ];
372e5c31af7Sopenharmony_ci			output ivec3 out0 = [ ivec3(0, -1, 1) | ivec3(-1, 0, 0) ];
373e5c31af7Sopenharmony_ci		}
374e5c31af7Sopenharmony_ci
375e5c31af7Sopenharmony_ci		both ""
376e5c31af7Sopenharmony_ci			#version 310 es
377e5c31af7Sopenharmony_ci			precision highp int;
378e5c31af7Sopenharmony_ci			precision highp float;
379e5c31af7Sopenharmony_ci			${DECLARATIONS}
380e5c31af7Sopenharmony_ci
381e5c31af7Sopenharmony_ci			void main()
382e5c31af7Sopenharmony_ci			{
383e5c31af7Sopenharmony_ci				${SETUP}
384e5c31af7Sopenharmony_ci				mat3[3] a = mat3[3] (	mat3(	in0.x, in0.y, in0.z,
385e5c31af7Sopenharmony_ci												in0.x, in0.y, in0.z,
386e5c31af7Sopenharmony_ci												in0.x, in0.y, in0.z)	,
387e5c31af7Sopenharmony_ci										mat3(	in0.z, in0.x, -in0.y,
388e5c31af7Sopenharmony_ci												in0.z, in0.x, -in0.y,
389e5c31af7Sopenharmony_ci												in0.z, in0.x, -in0.y)	,
390e5c31af7Sopenharmony_ci										mat3(	-in0.z, -in0.z, in0.z,
391e5c31af7Sopenharmony_ci												-in0.y, -in0.y, in0.y,
392e5c31af7Sopenharmony_ci												-in0.x, -in0.x, in0.x)	);
393e5c31af7Sopenharmony_ci
394e5c31af7Sopenharmony_ci				mat3 a0 = a[0];
395e5c31af7Sopenharmony_ci				mat3 a1 = a[1];
396e5c31af7Sopenharmony_ci				mat3 a2 = a[2];
397e5c31af7Sopenharmony_ci
398e5c31af7Sopenharmony_ci				float ret0 = a0[2][0];
399e5c31af7Sopenharmony_ci				float ret1 = a1[0][2];
400e5c31af7Sopenharmony_ci				float ret2 = a2[1][2];
401e5c31af7Sopenharmony_ci
402e5c31af7Sopenharmony_ci				out0 = ivec3(ret0, ret1, ret2);
403e5c31af7Sopenharmony_ci				${OUTPUT}
404e5c31af7Sopenharmony_ci			}
405e5c31af7Sopenharmony_ci		""
406e5c31af7Sopenharmony_ci	end
407e5c31af7Sopenharmony_ci
408e5c31af7Sopenharmony_ci	case bool_mat3
409e5c31af7Sopenharmony_ci		version 310 es
410e5c31af7Sopenharmony_ci		values
411e5c31af7Sopenharmony_ci		{
412e5c31af7Sopenharmony_ci			input bvec3 in0 = [ bvec3(true, false, true) ];
413e5c31af7Sopenharmony_ci			output bvec3 out0 = [ bvec3(true, false, false) ];
414e5c31af7Sopenharmony_ci		}
415e5c31af7Sopenharmony_ci
416e5c31af7Sopenharmony_ci		both ""
417e5c31af7Sopenharmony_ci			#version 310 es
418e5c31af7Sopenharmony_ci			precision highp int;
419e5c31af7Sopenharmony_ci			precision highp float;
420e5c31af7Sopenharmony_ci			${DECLARATIONS}
421e5c31af7Sopenharmony_ci
422e5c31af7Sopenharmony_ci			void main()
423e5c31af7Sopenharmony_ci			{
424e5c31af7Sopenharmony_ci				${SETUP}
425e5c31af7Sopenharmony_ci				mat3[3] a = mat3[3] (	mat3(	in0.x, in0.y, in0.z,
426e5c31af7Sopenharmony_ci												in0.x, in0.y, in0.z,
427e5c31af7Sopenharmony_ci												in0.x, in0.y, in0.z)	,
428e5c31af7Sopenharmony_ci										mat3(	in0.z, in0.x, in0.y,
429e5c31af7Sopenharmony_ci												in0.z, in0.x, in0.y,
430e5c31af7Sopenharmony_ci												in0.z, in0.x, in0.y)	,
431e5c31af7Sopenharmony_ci										mat3(	in0.z, in0.z, in0.z,
432e5c31af7Sopenharmony_ci												in0.y, in0.y, in0.y,
433e5c31af7Sopenharmony_ci												in0.x, in0.x, in0.x)	);
434e5c31af7Sopenharmony_ci
435e5c31af7Sopenharmony_ci				mat3 a0 = a[0];
436e5c31af7Sopenharmony_ci				mat3 a1 = a[1];
437e5c31af7Sopenharmony_ci				mat3 a2 = a[2];
438e5c31af7Sopenharmony_ci
439e5c31af7Sopenharmony_ci				float ret0 = a0[2][0];
440e5c31af7Sopenharmony_ci				float ret1 = a1[0][2];
441e5c31af7Sopenharmony_ci				float ret2 = a2[1][2];
442e5c31af7Sopenharmony_ci
443e5c31af7Sopenharmony_ci				out0 = bvec3(ret0, ret1, ret2);
444e5c31af7Sopenharmony_ci				${OUTPUT}
445e5c31af7Sopenharmony_ci			}
446e5c31af7Sopenharmony_ci		""
447e5c31af7Sopenharmony_ci	end
448e5c31af7Sopenharmony_ci
449e5c31af7Sopenharmony_ciend # type
450e5c31af7Sopenharmony_ci
451e5c31af7Sopenharmony_cigroup return "Arrays as return value"
452e5c31af7Sopenharmony_ci
453e5c31af7Sopenharmony_ci	case float
454e5c31af7Sopenharmony_ci		version 310 es
455e5c31af7Sopenharmony_ci		values
456e5c31af7Sopenharmony_ci		{
457e5c31af7Sopenharmony_ci			input vec3 in0 =	[ vec3(0.5, 1.0, 2.0) | vec3(7.4, -1.0, 2.0) | vec3(3.0, 1.6, -2.0) ];
458e5c31af7Sopenharmony_ci			output vec3 out0 = [ vec3(2.0, -0.5, 1.0) | vec3(2.0, -7.4, -1.0) | vec3(-2.0, -3.0, 1.6) ];
459e5c31af7Sopenharmony_ci		}
460e5c31af7Sopenharmony_ci
461e5c31af7Sopenharmony_ci		both ""
462e5c31af7Sopenharmony_ci			#version 310 es
463e5c31af7Sopenharmony_ci			precision highp float;
464e5c31af7Sopenharmony_ci			${DECLARATIONS}
465e5c31af7Sopenharmony_ci
466e5c31af7Sopenharmony_ci			float[3] func(vec3 a)
467e5c31af7Sopenharmony_ci			{
468e5c31af7Sopenharmony_ci				return float[3] (a.z, -a.x, a.y);
469e5c31af7Sopenharmony_ci			}
470e5c31af7Sopenharmony_ci
471e5c31af7Sopenharmony_ci			void main()
472e5c31af7Sopenharmony_ci			{
473e5c31af7Sopenharmony_ci				${SETUP}
474e5c31af7Sopenharmony_ci				float[3] x = func(in0);
475e5c31af7Sopenharmony_ci				out0 = vec3(x[0], x[1], x[2]);
476e5c31af7Sopenharmony_ci				${OUTPUT}
477e5c31af7Sopenharmony_ci			}
478e5c31af7Sopenharmony_ci		""
479e5c31af7Sopenharmony_ci	end
480e5c31af7Sopenharmony_ci
481e5c31af7Sopenharmony_ci	case int
482e5c31af7Sopenharmony_ci		version 310 es
483e5c31af7Sopenharmony_ci		values
484e5c31af7Sopenharmony_ci		{
485e5c31af7Sopenharmony_ci			input ivec3 in0 = [ ivec3(4, 1, 2) | ivec3(7, -1, 2) | ivec3(3, 1, -2) ];
486e5c31af7Sopenharmony_ci			output ivec3 out0 =	[ ivec3(2, -4, 1) | ivec3(2, -7, -1) | ivec3(-2, -3, 1) ];
487e5c31af7Sopenharmony_ci		}
488e5c31af7Sopenharmony_ci
489e5c31af7Sopenharmony_ci		both ""
490e5c31af7Sopenharmony_ci			#version 310 es
491e5c31af7Sopenharmony_ci			precision highp int;
492e5c31af7Sopenharmony_ci			precision highp float;
493e5c31af7Sopenharmony_ci			${DECLARATIONS}
494e5c31af7Sopenharmony_ci
495e5c31af7Sopenharmony_ci			int[3] func(ivec3 a)
496e5c31af7Sopenharmony_ci			{
497e5c31af7Sopenharmony_ci				return int[3] (a.z, -a.x, a.y);
498e5c31af7Sopenharmony_ci			}
499e5c31af7Sopenharmony_ci
500e5c31af7Sopenharmony_ci			void main()
501e5c31af7Sopenharmony_ci			{
502e5c31af7Sopenharmony_ci				${SETUP}
503e5c31af7Sopenharmony_ci				int[3] x = func(in0);
504e5c31af7Sopenharmony_ci				out0 = ivec3(x[0], x[1], x[2]);
505e5c31af7Sopenharmony_ci				${OUTPUT}
506e5c31af7Sopenharmony_ci			}
507e5c31af7Sopenharmony_ci		""
508e5c31af7Sopenharmony_ci	end
509e5c31af7Sopenharmony_ci
510e5c31af7Sopenharmony_ci	case bool
511e5c31af7Sopenharmony_ci		version 310 es
512e5c31af7Sopenharmony_ci		values
513e5c31af7Sopenharmony_ci		{
514e5c31af7Sopenharmony_ci			input bvec3 in0 =	[ bvec3(false, true, true) ];
515e5c31af7Sopenharmony_ci			output bvec3 out0 = [ bvec3(true, false, true) ];
516e5c31af7Sopenharmony_ci		}
517e5c31af7Sopenharmony_ci
518e5c31af7Sopenharmony_ci		both ""
519e5c31af7Sopenharmony_ci			#version 310 es
520e5c31af7Sopenharmony_ci			precision highp int;
521e5c31af7Sopenharmony_ci			precision highp float;
522e5c31af7Sopenharmony_ci			${DECLARATIONS}
523e5c31af7Sopenharmony_ci
524e5c31af7Sopenharmony_ci			bool[3] func(bvec3 a)
525e5c31af7Sopenharmony_ci			{
526e5c31af7Sopenharmony_ci				return bool[3] (a.z, a.x, a.y);
527e5c31af7Sopenharmony_ci			}
528e5c31af7Sopenharmony_ci
529e5c31af7Sopenharmony_ci			void main()
530e5c31af7Sopenharmony_ci			{
531e5c31af7Sopenharmony_ci				${SETUP}
532e5c31af7Sopenharmony_ci				bool[3] x = func(in0);
533e5c31af7Sopenharmony_ci				out0 = bvec3(x[0], x[1], x[2]);
534e5c31af7Sopenharmony_ci				${OUTPUT}
535e5c31af7Sopenharmony_ci			}
536e5c31af7Sopenharmony_ci		""
537e5c31af7Sopenharmony_ci	end
538e5c31af7Sopenharmony_ci
539e5c31af7Sopenharmony_ci
540e5c31af7Sopenharmony_ci
541e5c31af7Sopenharmony_ci	case float_vec3
542e5c31af7Sopenharmony_ci		version 310 es
543e5c31af7Sopenharmony_ci		values
544e5c31af7Sopenharmony_ci		{
545e5c31af7Sopenharmony_ci			input vec3 in0 =	[ vec3(0.5, 1.0, 2.0) | vec3(-0.5, 11.2, -1.0) ];
546e5c31af7Sopenharmony_ci			output vec3 out0 = [ vec3(1.0, 0.5, -2.0) | vec3(11.2, -0.5, 1.0) ];
547e5c31af7Sopenharmony_ci		}
548e5c31af7Sopenharmony_ci
549e5c31af7Sopenharmony_ci		both ""
550e5c31af7Sopenharmony_ci			#version 310 es
551e5c31af7Sopenharmony_ci			precision highp float;
552e5c31af7Sopenharmony_ci			${DECLARATIONS}
553e5c31af7Sopenharmony_ci
554e5c31af7Sopenharmony_ci			vec3[3] func(vec3[3] a)
555e5c31af7Sopenharmony_ci			{
556e5c31af7Sopenharmony_ci				return vec3[3] (a[1], a[2], a[0]);
557e5c31af7Sopenharmony_ci			}
558e5c31af7Sopenharmony_ci
559e5c31af7Sopenharmony_ci			void main()
560e5c31af7Sopenharmony_ci			{
561e5c31af7Sopenharmony_ci				${SETUP}
562e5c31af7Sopenharmony_ci				vec3[3] x = vec3[3](vec3(in0.x, in0.y, -in0.z)	,
563e5c31af7Sopenharmony_ci									vec3(in0.y, -in0.z, in0.x)	,
564e5c31af7Sopenharmony_ci									vec3(-in0.z, in0.x, in0.y)	);
565e5c31af7Sopenharmony_ci				x = func(x);
566e5c31af7Sopenharmony_ci				out0 = vec3(x[0].x, x[1].y, x[2].z);
567e5c31af7Sopenharmony_ci				${OUTPUT}
568e5c31af7Sopenharmony_ci			}
569e5c31af7Sopenharmony_ci		""
570e5c31af7Sopenharmony_ci	end
571e5c31af7Sopenharmony_ci
572e5c31af7Sopenharmony_ci	case struct
573e5c31af7Sopenharmony_ci		version 310 es
574e5c31af7Sopenharmony_ci		values
575e5c31af7Sopenharmony_ci		{
576e5c31af7Sopenharmony_ci			input vec3 in0 =	[ vec3(0.5, 1.0, 2.0) ];
577e5c31af7Sopenharmony_ci			output vec3 out0 = [ vec3(-1.0, 2.0, 0.5) ];
578e5c31af7Sopenharmony_ci		}
579e5c31af7Sopenharmony_ci
580e5c31af7Sopenharmony_ci		both ""
581e5c31af7Sopenharmony_ci			#version 310 es
582e5c31af7Sopenharmony_ci			precision highp float;
583e5c31af7Sopenharmony_ci			${DECLARATIONS}
584e5c31af7Sopenharmony_ci
585e5c31af7Sopenharmony_ci			struct test
586e5c31af7Sopenharmony_ci			{
587e5c31af7Sopenharmony_ci				float f;
588e5c31af7Sopenharmony_ci				vec3 v;
589e5c31af7Sopenharmony_ci			};
590e5c31af7Sopenharmony_ci
591e5c31af7Sopenharmony_ci			test[3] func(test[3] a)
592e5c31af7Sopenharmony_ci			{
593e5c31af7Sopenharmony_ci				return test[3] (a[1], a[2], a[0]);
594e5c31af7Sopenharmony_ci			}
595e5c31af7Sopenharmony_ci
596e5c31af7Sopenharmony_ci			void main()
597e5c31af7Sopenharmony_ci			{
598e5c31af7Sopenharmony_ci				${SETUP}
599e5c31af7Sopenharmony_ci
600e5c31af7Sopenharmony_ci				test a = test(in0.z, vec3(in0.x, in0.y, in0.z));
601e5c31af7Sopenharmony_ci				test b = test(in0.y, vec3(-in0.z, -in0.x, -in0.y));
602e5c31af7Sopenharmony_ci				test c = test(in0.x, vec3(-in0.y, in0.z, -in0.x));
603e5c31af7Sopenharmony_ci
604e5c31af7Sopenharmony_ci				test[3] t = test[3] (a, b, c);
605e5c31af7Sopenharmony_ci				test[3] x = func(t);
606e5c31af7Sopenharmony_ci
607e5c31af7Sopenharmony_ci				out0 = vec3(x[0].v.z, x[1].v.y, x[2].v.x);
608e5c31af7Sopenharmony_ci				${OUTPUT}
609e5c31af7Sopenharmony_ci			}
610e5c31af7Sopenharmony_ci		""
611e5c31af7Sopenharmony_ci	end
612e5c31af7Sopenharmony_ci
613e5c31af7Sopenharmony_ci	case int_vec3
614e5c31af7Sopenharmony_ci		version 310 es
615e5c31af7Sopenharmony_ci		values
616e5c31af7Sopenharmony_ci		{
617e5c31af7Sopenharmony_ci			input ivec3 in0 =	[ ivec3(5, 1, 2) | ivec3(-5, 11, -1) ];
618e5c31af7Sopenharmony_ci			output ivec3 out0 = [ ivec3(1, 5, -2) | ivec3(11, -5, 1) ];
619e5c31af7Sopenharmony_ci		}
620e5c31af7Sopenharmony_ci
621e5c31af7Sopenharmony_ci		both ""
622e5c31af7Sopenharmony_ci			#version 310 es
623e5c31af7Sopenharmony_ci			precision highp int;
624e5c31af7Sopenharmony_ci			precision highp float;
625e5c31af7Sopenharmony_ci			${DECLARATIONS}
626e5c31af7Sopenharmony_ci
627e5c31af7Sopenharmony_ci			ivec3[3] func(ivec3[3] a)
628e5c31af7Sopenharmony_ci			{
629e5c31af7Sopenharmony_ci				return ivec3[3] (a[1], a[2], a[0]);
630e5c31af7Sopenharmony_ci			}
631e5c31af7Sopenharmony_ci
632e5c31af7Sopenharmony_ci			void main()
633e5c31af7Sopenharmony_ci			{
634e5c31af7Sopenharmony_ci				${SETUP}
635e5c31af7Sopenharmony_ci				ivec3[3] x = ivec3[3](	ivec3(in0.x, in0.y, -in0.z)	,
636e5c31af7Sopenharmony_ci										ivec3(in0.y, -in0.z, in0.x)	,
637e5c31af7Sopenharmony_ci										ivec3(-in0.z, in0.x, in0.y)	);
638e5c31af7Sopenharmony_ci				x = func(x);
639e5c31af7Sopenharmony_ci				out0 = ivec3(x[0].x, x[1].y, x[2].z);
640e5c31af7Sopenharmony_ci				${OUTPUT}
641e5c31af7Sopenharmony_ci			}
642e5c31af7Sopenharmony_ci		""
643e5c31af7Sopenharmony_ci	end
644e5c31af7Sopenharmony_ci
645e5c31af7Sopenharmony_ci	case bool_vec3
646e5c31af7Sopenharmony_ci		version 310 es
647e5c31af7Sopenharmony_ci		values
648e5c31af7Sopenharmony_ci		{
649e5c31af7Sopenharmony_ci			input bvec3 in0 =	[ bvec3(true, false, false) ];
650e5c31af7Sopenharmony_ci			output bvec3 out0 = [ bvec3(false, true, false) ];
651e5c31af7Sopenharmony_ci		}
652e5c31af7Sopenharmony_ci
653e5c31af7Sopenharmony_ci		both ""
654e5c31af7Sopenharmony_ci			#version 310 es
655e5c31af7Sopenharmony_ci			precision highp int;
656e5c31af7Sopenharmony_ci			precision highp float;
657e5c31af7Sopenharmony_ci			${DECLARATIONS}
658e5c31af7Sopenharmony_ci
659e5c31af7Sopenharmony_ci			bvec3[3] func(bvec3[3] a)
660e5c31af7Sopenharmony_ci			{
661e5c31af7Sopenharmony_ci				return bvec3[3] (a[1], a[2], a[0]);
662e5c31af7Sopenharmony_ci			}
663e5c31af7Sopenharmony_ci
664e5c31af7Sopenharmony_ci			void main()
665e5c31af7Sopenharmony_ci			{
666e5c31af7Sopenharmony_ci				${SETUP}
667e5c31af7Sopenharmony_ci				bvec3[3] x = bvec3[3](	bvec3(in0.x, in0.y, in0.z)	,
668e5c31af7Sopenharmony_ci										bvec3(in0.y, in0.z, in0.x)	,
669e5c31af7Sopenharmony_ci										bvec3(in0.z, in0.x, in0.y)	);
670e5c31af7Sopenharmony_ci				x = func(x);
671e5c31af7Sopenharmony_ci				out0 = bvec3(x[0].x, x[1].y, x[2].z);
672e5c31af7Sopenharmony_ci				${OUTPUT}
673e5c31af7Sopenharmony_ci			}
674e5c31af7Sopenharmony_ci		""
675e5c31af7Sopenharmony_ci	end
676e5c31af7Sopenharmony_ci
677e5c31af7Sopenharmony_ci	case float_mat3
678e5c31af7Sopenharmony_ci		version 310 es
679e5c31af7Sopenharmony_ci		values
680e5c31af7Sopenharmony_ci		{
681e5c31af7Sopenharmony_ci			input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(-1.5, 0.0, -2.3) ];
682e5c31af7Sopenharmony_ci			output vec3 out0 = [ vec3(2.0, -1.0, 2.0) | vec3(-2.3, 0.0, -2.3) ];
683e5c31af7Sopenharmony_ci		}
684e5c31af7Sopenharmony_ci
685e5c31af7Sopenharmony_ci		both ""
686e5c31af7Sopenharmony_ci			#version 310 es
687e5c31af7Sopenharmony_ci			precision highp float;
688e5c31af7Sopenharmony_ci			${DECLARATIONS}
689e5c31af7Sopenharmony_ci
690e5c31af7Sopenharmony_ci			mat3[3] func(mat3[3] x)
691e5c31af7Sopenharmony_ci			{
692e5c31af7Sopenharmony_ci				mat3[3] r;
693e5c31af7Sopenharmony_ci				r[0] = x[1];
694e5c31af7Sopenharmony_ci				r[1] = x[2];
695e5c31af7Sopenharmony_ci				r[2] = x[0];
696e5c31af7Sopenharmony_ci				return r;
697e5c31af7Sopenharmony_ci			}
698e5c31af7Sopenharmony_ci
699e5c31af7Sopenharmony_ci			void main()
700e5c31af7Sopenharmony_ci			{
701e5c31af7Sopenharmony_ci				${SETUP}
702e5c31af7Sopenharmony_ci				mat3[3] a, b;
703e5c31af7Sopenharmony_ci				a[0] = mat3(in0.x, in0.y, in0.z,
704e5c31af7Sopenharmony_ci							in0.x, in0.y, in0.z,
705e5c31af7Sopenharmony_ci							in0.x, in0.y, in0.z);
706e5c31af7Sopenharmony_ci				a[1] = mat3(in0.z, in0.x, -in0.y,
707e5c31af7Sopenharmony_ci							in0.z, in0.x, -in0.y,
708e5c31af7Sopenharmony_ci							in0.z, in0.x, -in0.y);
709e5c31af7Sopenharmony_ci				a[2] = mat3(-in0.z, -in0.z, in0.z,
710e5c31af7Sopenharmony_ci							-in0.y, -in0.y, in0.y,
711e5c31af7Sopenharmony_ci							-in0.x, -in0.x, in0.x);
712e5c31af7Sopenharmony_ci
713e5c31af7Sopenharmony_ci				b = func(a);
714e5c31af7Sopenharmony_ci
715e5c31af7Sopenharmony_ci				mat3 b0 = b[0];
716e5c31af7Sopenharmony_ci				mat3 b1 = b[1];
717e5c31af7Sopenharmony_ci				mat3 b2 = b[2];
718e5c31af7Sopenharmony_ci
719e5c31af7Sopenharmony_ci				float ret0 = b0[0][0];
720e5c31af7Sopenharmony_ci				float ret1 = b1[1][1];
721e5c31af7Sopenharmony_ci				float ret2 = b2[2][2];
722e5c31af7Sopenharmony_ci
723e5c31af7Sopenharmony_ci				out0 = vec3(ret0, ret1, ret2);
724e5c31af7Sopenharmony_ci				${OUTPUT}
725e5c31af7Sopenharmony_ci			}
726e5c31af7Sopenharmony_ci		""
727e5c31af7Sopenharmony_ci	end
728e5c31af7Sopenharmony_ci
729e5c31af7Sopenharmony_ci	case int_mat3
730e5c31af7Sopenharmony_ci		version 310 es
731e5c31af7Sopenharmony_ci		values
732e5c31af7Sopenharmony_ci		{
733e5c31af7Sopenharmony_ci			input ivec3 in0 = [ ivec3(5, 1, 2) | ivec3(-1, 0, -2) ];
734e5c31af7Sopenharmony_ci			output ivec3 out0 = [ ivec3(2, -1, 2) | ivec3(-2, 0, -2) ];
735e5c31af7Sopenharmony_ci		}
736e5c31af7Sopenharmony_ci
737e5c31af7Sopenharmony_ci		both ""
738e5c31af7Sopenharmony_ci			#version 310 es
739e5c31af7Sopenharmony_ci			precision highp int;
740e5c31af7Sopenharmony_ci			precision highp float;
741e5c31af7Sopenharmony_ci			${DECLARATIONS}
742e5c31af7Sopenharmony_ci
743e5c31af7Sopenharmony_ci			mat3[3] func(mat3[3] x)
744e5c31af7Sopenharmony_ci			{
745e5c31af7Sopenharmony_ci				mat3[3] r;
746e5c31af7Sopenharmony_ci				r[0] = x[1];
747e5c31af7Sopenharmony_ci				r[1] = x[2];
748e5c31af7Sopenharmony_ci				r[2] = x[0];
749e5c31af7Sopenharmony_ci				return r;
750e5c31af7Sopenharmony_ci			}
751e5c31af7Sopenharmony_ci
752e5c31af7Sopenharmony_ci			void main()
753e5c31af7Sopenharmony_ci			{
754e5c31af7Sopenharmony_ci				${SETUP}
755e5c31af7Sopenharmony_ci				mat3[3] a, b;
756e5c31af7Sopenharmony_ci				a[0] = mat3(in0.x, in0.y, in0.z,
757e5c31af7Sopenharmony_ci							in0.x, in0.y, in0.z,
758e5c31af7Sopenharmony_ci							in0.x, in0.y, in0.z);
759e5c31af7Sopenharmony_ci				a[1] = mat3(in0.z, in0.x, -in0.y,
760e5c31af7Sopenharmony_ci							in0.z, in0.x, -in0.y,
761e5c31af7Sopenharmony_ci							in0.z, in0.x, -in0.y);
762e5c31af7Sopenharmony_ci				a[2] = mat3(-in0.z, -in0.z, in0.z,
763e5c31af7Sopenharmony_ci							-in0.y, -in0.y, in0.y,
764e5c31af7Sopenharmony_ci							-in0.x, -in0.x, in0.x);
765e5c31af7Sopenharmony_ci
766e5c31af7Sopenharmony_ci				b = func(a);
767e5c31af7Sopenharmony_ci
768e5c31af7Sopenharmony_ci				mat3 b0 = b[0];
769e5c31af7Sopenharmony_ci				mat3 b1 = b[1];
770e5c31af7Sopenharmony_ci				mat3 b2 = b[2];
771e5c31af7Sopenharmony_ci
772e5c31af7Sopenharmony_ci				float ret0 = b0[0][0];
773e5c31af7Sopenharmony_ci				float ret1 = b1[1][1];
774e5c31af7Sopenharmony_ci				float ret2 = b2[2][2];
775e5c31af7Sopenharmony_ci
776e5c31af7Sopenharmony_ci				out0 = ivec3(ret0, ret1, ret2);
777e5c31af7Sopenharmony_ci				${OUTPUT}
778e5c31af7Sopenharmony_ci			}
779e5c31af7Sopenharmony_ci		""
780e5c31af7Sopenharmony_ci	end
781e5c31af7Sopenharmony_ci
782e5c31af7Sopenharmony_ci	case bool_mat3
783e5c31af7Sopenharmony_ci		version 310 es
784e5c31af7Sopenharmony_ci		values
785e5c31af7Sopenharmony_ci		{
786e5c31af7Sopenharmony_ci			input bvec3 in0 = [ bvec3(true, false, true) | bvec3(true, true, false) ];
787e5c31af7Sopenharmony_ci			output bvec3 out0 = [ bvec3(true, false, true) | bvec3(false, true, false) ];
788e5c31af7Sopenharmony_ci		}
789e5c31af7Sopenharmony_ci
790e5c31af7Sopenharmony_ci		both ""
791e5c31af7Sopenharmony_ci			#version 310 es
792e5c31af7Sopenharmony_ci			precision highp int;
793e5c31af7Sopenharmony_ci			precision highp float;
794e5c31af7Sopenharmony_ci			${DECLARATIONS}
795e5c31af7Sopenharmony_ci
796e5c31af7Sopenharmony_ci			mat3[3] func(mat3[3] x)
797e5c31af7Sopenharmony_ci			{
798e5c31af7Sopenharmony_ci				mat3[3] r;
799e5c31af7Sopenharmony_ci				r[0] = x[1];
800e5c31af7Sopenharmony_ci				r[1] = x[2];
801e5c31af7Sopenharmony_ci				r[2] = x[0];
802e5c31af7Sopenharmony_ci				return r;
803e5c31af7Sopenharmony_ci			}
804e5c31af7Sopenharmony_ci
805e5c31af7Sopenharmony_ci			void main()
806e5c31af7Sopenharmony_ci			{
807e5c31af7Sopenharmony_ci				${SETUP}
808e5c31af7Sopenharmony_ci				mat3[3] a, b;
809e5c31af7Sopenharmony_ci				a[0] = mat3(in0.x, in0.y, in0.z,
810e5c31af7Sopenharmony_ci							in0.x, in0.y, in0.z,
811e5c31af7Sopenharmony_ci							in0.x, in0.y, in0.z);
812e5c31af7Sopenharmony_ci				a[1] = mat3(in0.z, in0.x, in0.y,
813e5c31af7Sopenharmony_ci							in0.z, in0.x, in0.y,
814e5c31af7Sopenharmony_ci							in0.z, in0.x, in0.y);
815e5c31af7Sopenharmony_ci				a[2] = mat3(in0.z, in0.z, in0.z,
816e5c31af7Sopenharmony_ci							in0.y, in0.y, in0.y,
817e5c31af7Sopenharmony_ci							in0.x, in0.x, in0.x);
818e5c31af7Sopenharmony_ci
819e5c31af7Sopenharmony_ci				b = func(a);
820e5c31af7Sopenharmony_ci
821e5c31af7Sopenharmony_ci				mat3 b0 = b[0];
822e5c31af7Sopenharmony_ci				mat3 b1 = b[1];
823e5c31af7Sopenharmony_ci				mat3 b2 = b[2];
824e5c31af7Sopenharmony_ci
825e5c31af7Sopenharmony_ci				float ret0 = b0[0][0];
826e5c31af7Sopenharmony_ci				float ret1 = b1[1][1];
827e5c31af7Sopenharmony_ci				float ret2 = b2[2][2];
828e5c31af7Sopenharmony_ci
829e5c31af7Sopenharmony_ci				out0 = bvec3(ret0, ret1, ret2);
830e5c31af7Sopenharmony_ci				${OUTPUT}
831e5c31af7Sopenharmony_ci			}
832e5c31af7Sopenharmony_ci		""
833e5c31af7Sopenharmony_ci	end
834e5c31af7Sopenharmony_ci
835e5c31af7Sopenharmony_ciend # return
836e5c31af7Sopenharmony_ci
837e5c31af7Sopenharmony_cigroup unnamed_parameter "Array type as unnamed parameter of a function prototype"
838e5c31af7Sopenharmony_ci
839e5c31af7Sopenharmony_ci	case float
840e5c31af7Sopenharmony_ci		version 310 es
841e5c31af7Sopenharmony_ci		values
842e5c31af7Sopenharmony_ci		{
843e5c31af7Sopenharmony_ci			input vec3 in0 =	[ vec3(0.5, 1.0, 2.0) | vec3(7.4, -1.0, 2.0) | vec3(3.0, 1.6, -2.0) ];
844e5c31af7Sopenharmony_ci			output vec3 out0 = [ vec3(2.0, 0.5, 1.0) | vec3(2.0, 7.4, -1.0) | vec3(-2.0, 3.0, 1.6) ];
845e5c31af7Sopenharmony_ci		}
846e5c31af7Sopenharmony_ci
847e5c31af7Sopenharmony_ci		both ""
848e5c31af7Sopenharmony_ci			#version 310 es
849e5c31af7Sopenharmony_ci			precision highp float;
850e5c31af7Sopenharmony_ci			${DECLARATIONS}
851e5c31af7Sopenharmony_ci
852e5c31af7Sopenharmony_ci			float[3] func(float[3]);
853e5c31af7Sopenharmony_ci
854e5c31af7Sopenharmony_ci			void main()
855e5c31af7Sopenharmony_ci			{
856e5c31af7Sopenharmony_ci				${SETUP}
857e5c31af7Sopenharmony_ci				float[3] a = float[3] (in0.x, in0.y, in0.z);
858e5c31af7Sopenharmony_ci				float[3] b = func(a);
859e5c31af7Sopenharmony_ci				out0 = vec3(b[0], b[1], b[2]);
860e5c31af7Sopenharmony_ci				${OUTPUT}
861e5c31af7Sopenharmony_ci			}
862e5c31af7Sopenharmony_ci
863e5c31af7Sopenharmony_ci			float[3] func(float[3] a)
864e5c31af7Sopenharmony_ci			{
865e5c31af7Sopenharmony_ci				return float[3] (a[2], a[0], a[1]);
866e5c31af7Sopenharmony_ci			}
867e5c31af7Sopenharmony_ci
868e5c31af7Sopenharmony_ci		""
869e5c31af7Sopenharmony_ci	end
870e5c31af7Sopenharmony_ci
871e5c31af7Sopenharmony_ci	case int
872e5c31af7Sopenharmony_ci		version 310 es
873e5c31af7Sopenharmony_ci		values
874e5c31af7Sopenharmony_ci		{
875e5c31af7Sopenharmony_ci			input ivec3 in0 =	[ ivec3(0, 1, 2) | ivec3(7, -1, 2) | ivec3(3, 1, -2) ];
876e5c31af7Sopenharmony_ci			output ivec3 out0 = [ ivec3(2, 0, 1) | ivec3(2, 7, -1) | ivec3(-2, 3, 1) ];
877e5c31af7Sopenharmony_ci		}
878e5c31af7Sopenharmony_ci
879e5c31af7Sopenharmony_ci		both ""
880e5c31af7Sopenharmony_ci			#version 310 es
881e5c31af7Sopenharmony_ci			precision highp int;
882e5c31af7Sopenharmony_ci			precision highp float;
883e5c31af7Sopenharmony_ci			${DECLARATIONS}
884e5c31af7Sopenharmony_ci
885e5c31af7Sopenharmony_ci			int[3] func(int[3]);
886e5c31af7Sopenharmony_ci
887e5c31af7Sopenharmony_ci			void main()
888e5c31af7Sopenharmony_ci			{
889e5c31af7Sopenharmony_ci				${SETUP}
890e5c31af7Sopenharmony_ci				int[3] a = int[3] (in0.x, in0.y, in0.z);
891e5c31af7Sopenharmony_ci				int[3] b = func(a);
892e5c31af7Sopenharmony_ci				out0 = ivec3(b[0], b[1], b[2]);
893e5c31af7Sopenharmony_ci				${OUTPUT}
894e5c31af7Sopenharmony_ci			}
895e5c31af7Sopenharmony_ci
896e5c31af7Sopenharmony_ci			int[3] func(int[3] a)
897e5c31af7Sopenharmony_ci			{
898e5c31af7Sopenharmony_ci				return int[3] (a[2], a[0], a[1]);
899e5c31af7Sopenharmony_ci			}
900e5c31af7Sopenharmony_ci
901e5c31af7Sopenharmony_ci		""
902e5c31af7Sopenharmony_ci	end
903e5c31af7Sopenharmony_ci
904e5c31af7Sopenharmony_ci	case bool
905e5c31af7Sopenharmony_ci		version 310 es
906e5c31af7Sopenharmony_ci		values
907e5c31af7Sopenharmony_ci		{
908e5c31af7Sopenharmony_ci			input bvec3 in0 =	[ bvec3(false, true, true) ];
909e5c31af7Sopenharmony_ci			output bvec3 out0 = [ bvec3(true, false, true) ];
910e5c31af7Sopenharmony_ci		}
911e5c31af7Sopenharmony_ci
912e5c31af7Sopenharmony_ci		both ""
913e5c31af7Sopenharmony_ci			#version 310 es
914e5c31af7Sopenharmony_ci			precision highp int;
915e5c31af7Sopenharmony_ci			precision highp float;
916e5c31af7Sopenharmony_ci			${DECLARATIONS}
917e5c31af7Sopenharmony_ci
918e5c31af7Sopenharmony_ci			bool[3] func(bool[3]);
919e5c31af7Sopenharmony_ci
920e5c31af7Sopenharmony_ci			void main()
921e5c31af7Sopenharmony_ci			{
922e5c31af7Sopenharmony_ci				${SETUP}
923e5c31af7Sopenharmony_ci				bool[3] a = bool[3] (in0.x, in0.y, in0.z);
924e5c31af7Sopenharmony_ci				bool[3] b = func(a);
925e5c31af7Sopenharmony_ci				out0 = bvec3(b[0], b[1], b[2]);
926e5c31af7Sopenharmony_ci				${OUTPUT}
927e5c31af7Sopenharmony_ci			}
928e5c31af7Sopenharmony_ci
929e5c31af7Sopenharmony_ci			bool[3] func(bool[3] a)
930e5c31af7Sopenharmony_ci			{
931e5c31af7Sopenharmony_ci				return bool[3] (a[2], a[0], a[1]);
932e5c31af7Sopenharmony_ci			}
933e5c31af7Sopenharmony_ci
934e5c31af7Sopenharmony_ci		""
935e5c31af7Sopenharmony_ci	end
936e5c31af7Sopenharmony_ci
937e5c31af7Sopenharmony_ci	case struct
938e5c31af7Sopenharmony_ci		version 310 es
939e5c31af7Sopenharmony_ci		values
940e5c31af7Sopenharmony_ci		{
941e5c31af7Sopenharmony_ci			input vec3 in0 =	[ vec3(0.5, 1.0, 2.0) ];
942e5c31af7Sopenharmony_ci			output vec3 out0 = [ vec3(-1.0, 2.0, 0.5) ];
943e5c31af7Sopenharmony_ci		}
944e5c31af7Sopenharmony_ci
945e5c31af7Sopenharmony_ci		both ""
946e5c31af7Sopenharmony_ci			#version 310 es
947e5c31af7Sopenharmony_ci			precision highp float;
948e5c31af7Sopenharmony_ci			${DECLARATIONS}
949e5c31af7Sopenharmony_ci
950e5c31af7Sopenharmony_ci			struct test
951e5c31af7Sopenharmony_ci			{
952e5c31af7Sopenharmony_ci				float f;
953e5c31af7Sopenharmony_ci				vec3 v;
954e5c31af7Sopenharmony_ci			};
955e5c31af7Sopenharmony_ci
956e5c31af7Sopenharmony_ci			test[3] func(test[3]);
957e5c31af7Sopenharmony_ci
958e5c31af7Sopenharmony_ci			void main()
959e5c31af7Sopenharmony_ci			{
960e5c31af7Sopenharmony_ci				${SETUP}
961e5c31af7Sopenharmony_ci
962e5c31af7Sopenharmony_ci				test a = test(in0.z, vec3(in0.x, in0.y, in0.z));
963e5c31af7Sopenharmony_ci				test b = test(in0.y, vec3(-in0.z, -in0.x, -in0.y));
964e5c31af7Sopenharmony_ci				test c = test(in0.x, vec3(-in0.y, in0.z, -in0.x));
965e5c31af7Sopenharmony_ci
966e5c31af7Sopenharmony_ci				test[3] t = test[3] (a, b, c);
967e5c31af7Sopenharmony_ci				test[3] x = func(t);
968e5c31af7Sopenharmony_ci				out0 = vec3(x[0].v.z, x[1].v.y, x[2].v.x);
969e5c31af7Sopenharmony_ci				${OUTPUT}
970e5c31af7Sopenharmony_ci			}
971e5c31af7Sopenharmony_ci
972e5c31af7Sopenharmony_ci			test[3] func(test[3] a)
973e5c31af7Sopenharmony_ci			{
974e5c31af7Sopenharmony_ci				return test[3] (a[1], a[2], a[0]);
975e5c31af7Sopenharmony_ci			}
976e5c31af7Sopenharmony_ci
977e5c31af7Sopenharmony_ci		""
978e5c31af7Sopenharmony_ci	end
979e5c31af7Sopenharmony_ci
980e5c31af7Sopenharmony_ci	case float_vec3
981e5c31af7Sopenharmony_ci		version 310 es
982e5c31af7Sopenharmony_ci		values
983e5c31af7Sopenharmony_ci		{
984e5c31af7Sopenharmony_ci			input vec3 in0 =	[ vec3(0.5, 1.0, 2.0) | vec3(-0.5, 11.2, -1.0) ];
985e5c31af7Sopenharmony_ci			output vec3 out0 = [ vec3(1.0, 0.5, -2.0) | vec3(11.2, -0.5, 1.0) ];
986e5c31af7Sopenharmony_ci		}
987e5c31af7Sopenharmony_ci
988e5c31af7Sopenharmony_ci		both ""
989e5c31af7Sopenharmony_ci			#version 310 es
990e5c31af7Sopenharmony_ci			precision highp float;
991e5c31af7Sopenharmony_ci			${DECLARATIONS}
992e5c31af7Sopenharmony_ci
993e5c31af7Sopenharmony_ci			vec3[3] func(vec3[3]);
994e5c31af7Sopenharmony_ci
995e5c31af7Sopenharmony_ci			void main()
996e5c31af7Sopenharmony_ci			{
997e5c31af7Sopenharmony_ci				${SETUP}
998e5c31af7Sopenharmony_ci				vec3[3] x = vec3[3](vec3(in0.x, in0.y, -in0.z)	,
999e5c31af7Sopenharmony_ci									vec3(in0.y, -in0.z, in0.x)	,
1000e5c31af7Sopenharmony_ci									vec3(-in0.z, in0.x, in0.y)	);
1001e5c31af7Sopenharmony_ci				x = func(x);
1002e5c31af7Sopenharmony_ci				out0 = vec3(x[0].x, x[1].y, x[2].z);
1003e5c31af7Sopenharmony_ci				${OUTPUT}
1004e5c31af7Sopenharmony_ci			}
1005e5c31af7Sopenharmony_ci
1006e5c31af7Sopenharmony_ci			vec3[3] func(vec3[3] a)
1007e5c31af7Sopenharmony_ci			{
1008e5c31af7Sopenharmony_ci				return vec3[3] (a[1], a[2], a[0]);
1009e5c31af7Sopenharmony_ci			}
1010e5c31af7Sopenharmony_ci		""
1011e5c31af7Sopenharmony_ci	end
1012e5c31af7Sopenharmony_ci
1013e5c31af7Sopenharmony_ci	case int_vec3
1014e5c31af7Sopenharmony_ci		version 310 es
1015e5c31af7Sopenharmony_ci		values
1016e5c31af7Sopenharmony_ci		{
1017e5c31af7Sopenharmony_ci			input ivec3 in0 =	[ ivec3(5, 1, 2) | ivec3(-5, 11, -1) ];
1018e5c31af7Sopenharmony_ci			output ivec3 out0 = [ ivec3(1, 5, -2) | ivec3(11, -5, 1) ];
1019e5c31af7Sopenharmony_ci		}
1020e5c31af7Sopenharmony_ci
1021e5c31af7Sopenharmony_ci		both ""
1022e5c31af7Sopenharmony_ci			#version 310 es
1023e5c31af7Sopenharmony_ci			precision highp int;
1024e5c31af7Sopenharmony_ci			precision highp float;
1025e5c31af7Sopenharmony_ci			${DECLARATIONS}
1026e5c31af7Sopenharmony_ci
1027e5c31af7Sopenharmony_ci			ivec3[3] func(ivec3[3]);
1028e5c31af7Sopenharmony_ci
1029e5c31af7Sopenharmony_ci			void main()
1030e5c31af7Sopenharmony_ci			{
1031e5c31af7Sopenharmony_ci				${SETUP}
1032e5c31af7Sopenharmony_ci				ivec3[3] x = ivec3[3](	ivec3(in0.x, in0.y, -in0.z)	,
1033e5c31af7Sopenharmony_ci										ivec3(in0.y, -in0.z, in0.x)	,
1034e5c31af7Sopenharmony_ci										ivec3(-in0.z, in0.x, in0.y)	);
1035e5c31af7Sopenharmony_ci				x = func(x);
1036e5c31af7Sopenharmony_ci				out0 = ivec3(x[0].x, x[1].y, x[2].z);
1037e5c31af7Sopenharmony_ci				${OUTPUT}
1038e5c31af7Sopenharmony_ci			}
1039e5c31af7Sopenharmony_ci
1040e5c31af7Sopenharmony_ci			ivec3[3] func(ivec3[3] a)
1041e5c31af7Sopenharmony_ci			{
1042e5c31af7Sopenharmony_ci				return ivec3[3] (a[1], a[2], a[0]);
1043e5c31af7Sopenharmony_ci			}
1044e5c31af7Sopenharmony_ci		""
1045e5c31af7Sopenharmony_ci	end
1046e5c31af7Sopenharmony_ci
1047e5c31af7Sopenharmony_ci	case bool_vec3
1048e5c31af7Sopenharmony_ci		version 310 es
1049e5c31af7Sopenharmony_ci		values
1050e5c31af7Sopenharmony_ci		{
1051e5c31af7Sopenharmony_ci			input bvec3 in0 =	[ bvec3(true, false, false) ];
1052e5c31af7Sopenharmony_ci			output bvec3 out0 = [ bvec3(false, true, false) ];
1053e5c31af7Sopenharmony_ci		}
1054e5c31af7Sopenharmony_ci
1055e5c31af7Sopenharmony_ci		both ""
1056e5c31af7Sopenharmony_ci			#version 310 es
1057e5c31af7Sopenharmony_ci			precision highp int;
1058e5c31af7Sopenharmony_ci			precision highp float;
1059e5c31af7Sopenharmony_ci			${DECLARATIONS}
1060e5c31af7Sopenharmony_ci
1061e5c31af7Sopenharmony_ci			bvec3[3] func(bvec3[3]);
1062e5c31af7Sopenharmony_ci
1063e5c31af7Sopenharmony_ci			void main()
1064e5c31af7Sopenharmony_ci			{
1065e5c31af7Sopenharmony_ci				${SETUP}
1066e5c31af7Sopenharmony_ci				bvec3[3] x = bvec3[3](	bvec3(in0.x, in0.y, in0.z)	,
1067e5c31af7Sopenharmony_ci										bvec3(in0.y, in0.z, in0.x)	,
1068e5c31af7Sopenharmony_ci										bvec3(in0.z, in0.x, in0.y)	);
1069e5c31af7Sopenharmony_ci				x = func(x);
1070e5c31af7Sopenharmony_ci				out0 = bvec3(x[0].x, x[1].y, x[2].z);
1071e5c31af7Sopenharmony_ci				${OUTPUT}
1072e5c31af7Sopenharmony_ci			}
1073e5c31af7Sopenharmony_ci
1074e5c31af7Sopenharmony_ci			bvec3[3] func(bvec3[3] a)
1075e5c31af7Sopenharmony_ci			{
1076e5c31af7Sopenharmony_ci				return bvec3[3] (a[1], a[2], a[0]);
1077e5c31af7Sopenharmony_ci			}
1078e5c31af7Sopenharmony_ci
1079e5c31af7Sopenharmony_ci		""
1080e5c31af7Sopenharmony_ci	end
1081e5c31af7Sopenharmony_ci
1082e5c31af7Sopenharmony_ci	case float_mat3
1083e5c31af7Sopenharmony_ci		version 310 es
1084e5c31af7Sopenharmony_ci		values
1085e5c31af7Sopenharmony_ci		{
1086e5c31af7Sopenharmony_ci			input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(-1.5, 0.0, -2.3) ];
1087e5c31af7Sopenharmony_ci			output vec3 out0 = [ vec3(2.0, -1.0, 2.0) | vec3(-2.3, 0.0, -2.3) ];
1088e5c31af7Sopenharmony_ci		}
1089e5c31af7Sopenharmony_ci
1090e5c31af7Sopenharmony_ci		both ""
1091e5c31af7Sopenharmony_ci			#version 310 es
1092e5c31af7Sopenharmony_ci			precision highp float;
1093e5c31af7Sopenharmony_ci			${DECLARATIONS}
1094e5c31af7Sopenharmony_ci
1095e5c31af7Sopenharmony_ci			mat3[3] func(mat3[3]);
1096e5c31af7Sopenharmony_ci
1097e5c31af7Sopenharmony_ci			void main()
1098e5c31af7Sopenharmony_ci			{
1099e5c31af7Sopenharmony_ci				${SETUP}
1100e5c31af7Sopenharmony_ci				mat3[3] a, b;
1101e5c31af7Sopenharmony_ci				a[0] = mat3(in0.x, in0.y, in0.z,
1102e5c31af7Sopenharmony_ci							in0.x, in0.y, in0.z,
1103e5c31af7Sopenharmony_ci							in0.x, in0.y, in0.z);
1104e5c31af7Sopenharmony_ci				a[1] = mat3(in0.z, in0.x, -in0.y,
1105e5c31af7Sopenharmony_ci							in0.z, in0.x, -in0.y,
1106e5c31af7Sopenharmony_ci							in0.z, in0.x, -in0.y);
1107e5c31af7Sopenharmony_ci				a[2] = mat3(-in0.z, -in0.z, in0.z,
1108e5c31af7Sopenharmony_ci							-in0.y, -in0.y, in0.y,
1109e5c31af7Sopenharmony_ci							-in0.x, -in0.x, in0.x);
1110e5c31af7Sopenharmony_ci
1111e5c31af7Sopenharmony_ci				b = func(a);
1112e5c31af7Sopenharmony_ci
1113e5c31af7Sopenharmony_ci				mat3 b0 = b[0];
1114e5c31af7Sopenharmony_ci				mat3 b1 = b[1];
1115e5c31af7Sopenharmony_ci				mat3 b2 = b[2];
1116e5c31af7Sopenharmony_ci
1117e5c31af7Sopenharmony_ci				float ret0 = b0[0][0];
1118e5c31af7Sopenharmony_ci				float ret1 = b1[1][1];
1119e5c31af7Sopenharmony_ci				float ret2 = b2[2][2];
1120e5c31af7Sopenharmony_ci
1121e5c31af7Sopenharmony_ci				out0 = vec3(ret0, ret1, ret2);
1122e5c31af7Sopenharmony_ci				${OUTPUT}
1123e5c31af7Sopenharmony_ci			}
1124e5c31af7Sopenharmony_ci
1125e5c31af7Sopenharmony_ci			mat3[3] func(mat3[3] x)
1126e5c31af7Sopenharmony_ci			{
1127e5c31af7Sopenharmony_ci				mat3[3] r;
1128e5c31af7Sopenharmony_ci				r[0] = x[1];
1129e5c31af7Sopenharmony_ci				r[1] = x[2];
1130e5c31af7Sopenharmony_ci				r[2] = x[0];
1131e5c31af7Sopenharmony_ci				return r;
1132e5c31af7Sopenharmony_ci			}
1133e5c31af7Sopenharmony_ci		""
1134e5c31af7Sopenharmony_ci	end
1135e5c31af7Sopenharmony_ci
1136e5c31af7Sopenharmony_ci	case int_mat3
1137e5c31af7Sopenharmony_ci		version 310 es
1138e5c31af7Sopenharmony_ci		values
1139e5c31af7Sopenharmony_ci		{
1140e5c31af7Sopenharmony_ci			input ivec3 in0 = [ ivec3(5, 1, 2) | ivec3(-1, 0, -2) ];
1141e5c31af7Sopenharmony_ci			output ivec3 out0 = [ ivec3(2, -1, 2) | ivec3(-2, 0, -2) ];
1142e5c31af7Sopenharmony_ci		}
1143e5c31af7Sopenharmony_ci
1144e5c31af7Sopenharmony_ci		both ""
1145e5c31af7Sopenharmony_ci			#version 310 es
1146e5c31af7Sopenharmony_ci			precision highp int;
1147e5c31af7Sopenharmony_ci			precision highp float;
1148e5c31af7Sopenharmony_ci			${DECLARATIONS}
1149e5c31af7Sopenharmony_ci
1150e5c31af7Sopenharmony_ci			mat3[3] func(mat3[3]);
1151e5c31af7Sopenharmony_ci
1152e5c31af7Sopenharmony_ci			void main()
1153e5c31af7Sopenharmony_ci			{
1154e5c31af7Sopenharmony_ci				${SETUP}
1155e5c31af7Sopenharmony_ci				mat3[3] a, b;
1156e5c31af7Sopenharmony_ci				a[0] = mat3(in0.x, in0.y, in0.z,
1157e5c31af7Sopenharmony_ci							in0.x, in0.y, in0.z,
1158e5c31af7Sopenharmony_ci							in0.x, in0.y, in0.z);
1159e5c31af7Sopenharmony_ci				a[1] = mat3(in0.z, in0.x, -in0.y,
1160e5c31af7Sopenharmony_ci							in0.z, in0.x, -in0.y,
1161e5c31af7Sopenharmony_ci							in0.z, in0.x, -in0.y);
1162e5c31af7Sopenharmony_ci				a[2] = mat3(-in0.z, -in0.z, in0.z,
1163e5c31af7Sopenharmony_ci							-in0.y, -in0.y, in0.y,
1164e5c31af7Sopenharmony_ci							-in0.x, -in0.x, in0.x);
1165e5c31af7Sopenharmony_ci
1166e5c31af7Sopenharmony_ci				b = func(a);
1167e5c31af7Sopenharmony_ci
1168e5c31af7Sopenharmony_ci				mat3 b0 = b[0];
1169e5c31af7Sopenharmony_ci				mat3 b1 = b[1];
1170e5c31af7Sopenharmony_ci				mat3 b2 = b[2];
1171e5c31af7Sopenharmony_ci
1172e5c31af7Sopenharmony_ci				float ret0 = b0[0][0];
1173e5c31af7Sopenharmony_ci				float ret1 = b1[1][1];
1174e5c31af7Sopenharmony_ci				float ret2 = b2[2][2];
1175e5c31af7Sopenharmony_ci
1176e5c31af7Sopenharmony_ci				out0 = ivec3(ret0, ret1, ret2);
1177e5c31af7Sopenharmony_ci				${OUTPUT}
1178e5c31af7Sopenharmony_ci			}
1179e5c31af7Sopenharmony_ci
1180e5c31af7Sopenharmony_ci			mat3[3] func(mat3[3] x)
1181e5c31af7Sopenharmony_ci			{
1182e5c31af7Sopenharmony_ci				mat3[3] r;
1183e5c31af7Sopenharmony_ci				r[0] = x[1];
1184e5c31af7Sopenharmony_ci				r[1] = x[2];
1185e5c31af7Sopenharmony_ci				r[2] = x[0];
1186e5c31af7Sopenharmony_ci				return r;
1187e5c31af7Sopenharmony_ci			}
1188e5c31af7Sopenharmony_ci		""
1189e5c31af7Sopenharmony_ci	end
1190e5c31af7Sopenharmony_ci
1191e5c31af7Sopenharmony_ci	case bool_mat3
1192e5c31af7Sopenharmony_ci		version 310 es
1193e5c31af7Sopenharmony_ci		values
1194e5c31af7Sopenharmony_ci		{
1195e5c31af7Sopenharmony_ci			input bvec3 in0 = [ bvec3(true, false, true) | bvec3(true, true, false) ];
1196e5c31af7Sopenharmony_ci			output bvec3 out0 = [ bvec3(true, false, true) | bvec3(false, true, false) ];
1197e5c31af7Sopenharmony_ci		}
1198e5c31af7Sopenharmony_ci
1199e5c31af7Sopenharmony_ci		both ""
1200e5c31af7Sopenharmony_ci			#version 310 es
1201e5c31af7Sopenharmony_ci			precision highp int;
1202e5c31af7Sopenharmony_ci			precision highp float;
1203e5c31af7Sopenharmony_ci			${DECLARATIONS}
1204e5c31af7Sopenharmony_ci
1205e5c31af7Sopenharmony_ci			mat3[3] func(mat3[3]);
1206e5c31af7Sopenharmony_ci			void main()
1207e5c31af7Sopenharmony_ci			{
1208e5c31af7Sopenharmony_ci				${SETUP}
1209e5c31af7Sopenharmony_ci				mat3[3] a, b;
1210e5c31af7Sopenharmony_ci				a[0] = mat3(in0.x, in0.y, in0.z,
1211e5c31af7Sopenharmony_ci							in0.x, in0.y, in0.z,
1212e5c31af7Sopenharmony_ci							in0.x, in0.y, in0.z);
1213e5c31af7Sopenharmony_ci				a[1] = mat3(in0.z, in0.x, in0.y,
1214e5c31af7Sopenharmony_ci							in0.z, in0.x, in0.y,
1215e5c31af7Sopenharmony_ci							in0.z, in0.x, in0.y);
1216e5c31af7Sopenharmony_ci				a[2] = mat3(in0.z, in0.z, in0.z,
1217e5c31af7Sopenharmony_ci							in0.y, in0.y, in0.y,
1218e5c31af7Sopenharmony_ci							in0.x, in0.x, in0.x);
1219e5c31af7Sopenharmony_ci
1220e5c31af7Sopenharmony_ci				b = func(a);
1221e5c31af7Sopenharmony_ci
1222e5c31af7Sopenharmony_ci				mat3 b0 = b[0];
1223e5c31af7Sopenharmony_ci				mat3 b1 = b[1];
1224e5c31af7Sopenharmony_ci				mat3 b2 = b[2];
1225e5c31af7Sopenharmony_ci
1226e5c31af7Sopenharmony_ci				float ret0 = b0[0][0];
1227e5c31af7Sopenharmony_ci				float ret1 = b1[1][1];
1228e5c31af7Sopenharmony_ci				float ret2 = b2[2][2];
1229e5c31af7Sopenharmony_ci
1230e5c31af7Sopenharmony_ci				out0 = bvec3(ret0, ret1, ret2);
1231e5c31af7Sopenharmony_ci				${OUTPUT}
1232e5c31af7Sopenharmony_ci			}
1233e5c31af7Sopenharmony_ci
1234e5c31af7Sopenharmony_ci			mat3[3] func(mat3[3] x)
1235e5c31af7Sopenharmony_ci			{
1236e5c31af7Sopenharmony_ci				mat3[3] r;
1237e5c31af7Sopenharmony_ci				r[0] = x[1];
1238e5c31af7Sopenharmony_ci				r[1] = x[2];
1239e5c31af7Sopenharmony_ci				r[2] = x[0];
1240e5c31af7Sopenharmony_ci				return r;
1241e5c31af7Sopenharmony_ci			}
1242e5c31af7Sopenharmony_ci		""
1243e5c31af7Sopenharmony_ci	end
1244e5c31af7Sopenharmony_ci
1245e5c31af7Sopenharmony_ciend # unnamed_parameter
1246e5c31af7Sopenharmony_ci
1247e5c31af7Sopenharmony_cigroup declaration "Declaring arrays"
1248e5c31af7Sopenharmony_ci
1249e5c31af7Sopenharmony_ci	case implicit_size_float
1250e5c31af7Sopenharmony_ci		version 310 es
1251e5c31af7Sopenharmony_ci		values
1252e5c31af7Sopenharmony_ci		{
1253e5c31af7Sopenharmony_ci			input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(7.4, -1.0, 2.0) | vec3(3.0, 1.6, -2.0) ];
1254e5c31af7Sopenharmony_ci			output vec3 out0 = [ vec3(2.0, 0.5, 1.0) | vec3(2.0, 7.4, -1.0) | vec3(-2.0, 3.0, 1.6) ];
1255e5c31af7Sopenharmony_ci		}
1256e5c31af7Sopenharmony_ci
1257e5c31af7Sopenharmony_ci		both ""
1258e5c31af7Sopenharmony_ci			#version 310 es
1259e5c31af7Sopenharmony_ci			precision highp float;
1260e5c31af7Sopenharmony_ci			${DECLARATIONS}
1261e5c31af7Sopenharmony_ci
1262e5c31af7Sopenharmony_ci			void main()
1263e5c31af7Sopenharmony_ci			{
1264e5c31af7Sopenharmony_ci				${SETUP}
1265e5c31af7Sopenharmony_ci				float[] x = float[] (in0.z, in0.x, in0.y);
1266e5c31af7Sopenharmony_ci				float[] y = x;
1267e5c31af7Sopenharmony_ci
1268e5c31af7Sopenharmony_ci				out0 = vec3(y[0], y[1], y[2]);
1269e5c31af7Sopenharmony_ci				${OUTPUT}
1270e5c31af7Sopenharmony_ci			}
1271e5c31af7Sopenharmony_ci		""
1272e5c31af7Sopenharmony_ci	end
1273e5c31af7Sopenharmony_ci
1274e5c31af7Sopenharmony_ci	case implicit_size_int
1275e5c31af7Sopenharmony_ci		version 310 es
1276e5c31af7Sopenharmony_ci		values
1277e5c31af7Sopenharmony_ci		{
1278e5c31af7Sopenharmony_ci			input ivec3 in0 = [ ivec3(0, 1, 2) | ivec3(7, -1, 2) | ivec3(3, 1, -2) ];
1279e5c31af7Sopenharmony_ci			output ivec3 out0 = [ ivec3(2, 0, 1) | ivec3(2, 7, -1) | ivec3(-2, 3, 1) ];
1280e5c31af7Sopenharmony_ci		}
1281e5c31af7Sopenharmony_ci
1282e5c31af7Sopenharmony_ci		both ""
1283e5c31af7Sopenharmony_ci			#version 310 es
1284e5c31af7Sopenharmony_ci			precision highp int;
1285e5c31af7Sopenharmony_ci			precision highp float;
1286e5c31af7Sopenharmony_ci			${DECLARATIONS}
1287e5c31af7Sopenharmony_ci
1288e5c31af7Sopenharmony_ci			void main()
1289e5c31af7Sopenharmony_ci			{
1290e5c31af7Sopenharmony_ci				${SETUP}
1291e5c31af7Sopenharmony_ci				int[] x = int[] (in0.z, in0.x, in0.y);
1292e5c31af7Sopenharmony_ci				int[] y = x;
1293e5c31af7Sopenharmony_ci
1294e5c31af7Sopenharmony_ci				out0 = ivec3(y[0], y[1], y[2]);
1295e5c31af7Sopenharmony_ci				${OUTPUT}
1296e5c31af7Sopenharmony_ci			}
1297e5c31af7Sopenharmony_ci		""
1298e5c31af7Sopenharmony_ci	end
1299e5c31af7Sopenharmony_ci
1300e5c31af7Sopenharmony_ci	case implicit_size_bool
1301e5c31af7Sopenharmony_ci		version 310 es
1302e5c31af7Sopenharmony_ci		values
1303e5c31af7Sopenharmony_ci		{
1304e5c31af7Sopenharmony_ci			input bvec3 in0 = [ bvec3(false, true, true) ];
1305e5c31af7Sopenharmony_ci			output bvec3 out0 = [ bvec3(true, false, true) ];
1306e5c31af7Sopenharmony_ci		}
1307e5c31af7Sopenharmony_ci
1308e5c31af7Sopenharmony_ci		both ""
1309e5c31af7Sopenharmony_ci			#version 310 es
1310e5c31af7Sopenharmony_ci			precision highp int;
1311e5c31af7Sopenharmony_ci			precision highp float;
1312e5c31af7Sopenharmony_ci			${DECLARATIONS}
1313e5c31af7Sopenharmony_ci
1314e5c31af7Sopenharmony_ci			void main()
1315e5c31af7Sopenharmony_ci			{
1316e5c31af7Sopenharmony_ci				${SETUP}
1317e5c31af7Sopenharmony_ci				bool[] x = bool[] (in0.z, in0.x, in0.y);
1318e5c31af7Sopenharmony_ci				bool[] y = x;
1319e5c31af7Sopenharmony_ci
1320e5c31af7Sopenharmony_ci				out0 = bvec3(y[0], y[1], y[2]);
1321e5c31af7Sopenharmony_ci				${OUTPUT}
1322e5c31af7Sopenharmony_ci			}
1323e5c31af7Sopenharmony_ci		""
1324e5c31af7Sopenharmony_ci	end
1325e5c31af7Sopenharmony_ci
1326e5c31af7Sopenharmony_ci	case implicit_size_struct
1327e5c31af7Sopenharmony_ci		version 310 es
1328e5c31af7Sopenharmony_ci		values
1329e5c31af7Sopenharmony_ci		{
1330e5c31af7Sopenharmony_ci			input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ];
1331e5c31af7Sopenharmony_ci			output vec3 out0 = [ vec3(-1.0, -0.5, 2.0) ];
1332e5c31af7Sopenharmony_ci		}
1333e5c31af7Sopenharmony_ci
1334e5c31af7Sopenharmony_ci		both ""
1335e5c31af7Sopenharmony_ci			#version 310 es
1336e5c31af7Sopenharmony_ci			precision highp float;
1337e5c31af7Sopenharmony_ci			${DECLARATIONS}
1338e5c31af7Sopenharmony_ci
1339e5c31af7Sopenharmony_ci			struct test
1340e5c31af7Sopenharmony_ci			{
1341e5c31af7Sopenharmony_ci				float f;
1342e5c31af7Sopenharmony_ci				vec3 v;
1343e5c31af7Sopenharmony_ci			};
1344e5c31af7Sopenharmony_ci
1345e5c31af7Sopenharmony_ci			void main()
1346e5c31af7Sopenharmony_ci			{
1347e5c31af7Sopenharmony_ci				${SETUP}
1348e5c31af7Sopenharmony_ci
1349e5c31af7Sopenharmony_ci				test a = test(in0.z, vec3(in0.x, in0.y, in0.z));
1350e5c31af7Sopenharmony_ci				test b = test(in0.y, vec3(-in0.z, -in0.x, -in0.y));
1351e5c31af7Sopenharmony_ci				test c = test(in0.x, vec3(-in0.y, in0.z, -in0.x));
1352e5c31af7Sopenharmony_ci
1353e5c31af7Sopenharmony_ci				test[] x = test[] (c, b, a);
1354e5c31af7Sopenharmony_ci				test[] y = x;
1355e5c31af7Sopenharmony_ci
1356e5c31af7Sopenharmony_ci				out0 = vec3(y[0].v.x, y[1].v.y, y[2].v.z);
1357e5c31af7Sopenharmony_ci				${OUTPUT}
1358e5c31af7Sopenharmony_ci			}
1359e5c31af7Sopenharmony_ci		""
1360e5c31af7Sopenharmony_ci	end
1361e5c31af7Sopenharmony_ci
1362e5c31af7Sopenharmony_ci	case implicit_size_float_vec3
1363e5c31af7Sopenharmony_ci		version 310 es
1364e5c31af7Sopenharmony_ci		values
1365e5c31af7Sopenharmony_ci		{
1366e5c31af7Sopenharmony_ci			input vec3 in0 =	[ vec3(0.5, 1.0, 2.0) | vec3(-0.5, 11.2, -1.0) ];
1367e5c31af7Sopenharmony_ci			output vec3 out0 = [ vec3(0.5, -2.0, 1.0) | vec3(-0.5, 1.0, 11.2) ];
1368e5c31af7Sopenharmony_ci		}
1369e5c31af7Sopenharmony_ci
1370e5c31af7Sopenharmony_ci		both ""
1371e5c31af7Sopenharmony_ci			#version 310 es
1372e5c31af7Sopenharmony_ci			precision highp float;
1373e5c31af7Sopenharmony_ci			${DECLARATIONS}
1374e5c31af7Sopenharmony_ci
1375e5c31af7Sopenharmony_ci			void main()
1376e5c31af7Sopenharmony_ci			{
1377e5c31af7Sopenharmony_ci				${SETUP}
1378e5c31af7Sopenharmony_ci				vec3[] x = vec3[] (	vec3(in0.x, in0.y, -in0.z)	,
1379e5c31af7Sopenharmony_ci									vec3(in0.y, -in0.z, in0.x)	,
1380e5c31af7Sopenharmony_ci									vec3(-in0.z, in0.x, in0.y)	);
1381e5c31af7Sopenharmony_ci				vec3[] y = x;
1382e5c31af7Sopenharmony_ci				out0 = vec3(y[0].x, y[1].y, y[2].z);
1383e5c31af7Sopenharmony_ci				${OUTPUT}
1384e5c31af7Sopenharmony_ci			}
1385e5c31af7Sopenharmony_ci		""
1386e5c31af7Sopenharmony_ci	end
1387e5c31af7Sopenharmony_ci
1388e5c31af7Sopenharmony_ci	case implicit_size_int_ivec3
1389e5c31af7Sopenharmony_ci		version 310 es
1390e5c31af7Sopenharmony_ci		values
1391e5c31af7Sopenharmony_ci		{
1392e5c31af7Sopenharmony_ci			input ivec3 in0 =	[ ivec3(0, 1, 2) | ivec3(5, 11, -1) ];
1393e5c31af7Sopenharmony_ci			output ivec3 out0 = [ ivec3(0, -2, 1) | ivec3(5, 1, 11) ];
1394e5c31af7Sopenharmony_ci		}
1395e5c31af7Sopenharmony_ci
1396e5c31af7Sopenharmony_ci		both ""
1397e5c31af7Sopenharmony_ci			#version 310 es
1398e5c31af7Sopenharmony_ci			precision highp int;
1399e5c31af7Sopenharmony_ci			precision highp float;
1400e5c31af7Sopenharmony_ci			${DECLARATIONS}
1401e5c31af7Sopenharmony_ci
1402e5c31af7Sopenharmony_ci			void main()
1403e5c31af7Sopenharmony_ci			{
1404e5c31af7Sopenharmony_ci				${SETUP}
1405e5c31af7Sopenharmony_ci				ivec3[] x = ivec3[] (	ivec3(in0.x, in0.y, -in0.z)	,
1406e5c31af7Sopenharmony_ci										ivec3(in0.y, -in0.z, in0.x)	,
1407e5c31af7Sopenharmony_ci										ivec3(-in0.z, in0.x, in0.y)	);
1408e5c31af7Sopenharmony_ci				ivec3[] y = x;
1409e5c31af7Sopenharmony_ci				out0 = ivec3(y[0].x, y[1].y, y[2].z);
1410e5c31af7Sopenharmony_ci				${OUTPUT}
1411e5c31af7Sopenharmony_ci			}
1412e5c31af7Sopenharmony_ci		""
1413e5c31af7Sopenharmony_ci	end
1414e5c31af7Sopenharmony_ci
1415e5c31af7Sopenharmony_ci	case implicit_size_bool_bvec3
1416e5c31af7Sopenharmony_ci		version 310 es
1417e5c31af7Sopenharmony_ci		values
1418e5c31af7Sopenharmony_ci		{
1419e5c31af7Sopenharmony_ci			input bvec3 in0 =	[ bvec3(true, false, true) ];
1420e5c31af7Sopenharmony_ci			output bvec3 out0 = [ bvec3(true, true, false) ];
1421e5c31af7Sopenharmony_ci		}
1422e5c31af7Sopenharmony_ci
1423e5c31af7Sopenharmony_ci		both ""
1424e5c31af7Sopenharmony_ci			#version 310 es
1425e5c31af7Sopenharmony_ci			precision highp int;
1426e5c31af7Sopenharmony_ci			precision highp float;
1427e5c31af7Sopenharmony_ci			${DECLARATIONS}
1428e5c31af7Sopenharmony_ci
1429e5c31af7Sopenharmony_ci			void main()
1430e5c31af7Sopenharmony_ci			{
1431e5c31af7Sopenharmony_ci				${SETUP}
1432e5c31af7Sopenharmony_ci				bvec3[] x = bvec3[] (	bvec3(in0.x, in0.y, in0.z)	,
1433e5c31af7Sopenharmony_ci										bvec3(in0.y, in0.z, in0.x)	,
1434e5c31af7Sopenharmony_ci										bvec3(in0.z, in0.x, in0.y)	);
1435e5c31af7Sopenharmony_ci				bvec3[] y = x;
1436e5c31af7Sopenharmony_ci				out0 = bvec3(y[0].x, y[1].y, y[2].z);
1437e5c31af7Sopenharmony_ci				${OUTPUT}
1438e5c31af7Sopenharmony_ci			}
1439e5c31af7Sopenharmony_ci		""
1440e5c31af7Sopenharmony_ci	end
1441e5c31af7Sopenharmony_ci
1442e5c31af7Sopenharmony_ci	case implicit_size_float_mat3
1443e5c31af7Sopenharmony_ci		version 310 es
1444e5c31af7Sopenharmony_ci		values
1445e5c31af7Sopenharmony_ci		{
1446e5c31af7Sopenharmony_ci			input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(-1.5, 0.0, -2.3) ];
1447e5c31af7Sopenharmony_ci			output vec3 out0 = [ vec3(0.5, -1.0, 1.0) | vec3(-1.5, 0.0, 0.0) ];
1448e5c31af7Sopenharmony_ci		}
1449e5c31af7Sopenharmony_ci
1450e5c31af7Sopenharmony_ci		both ""
1451e5c31af7Sopenharmony_ci			#version 310 es
1452e5c31af7Sopenharmony_ci			precision highp float;
1453e5c31af7Sopenharmony_ci			${DECLARATIONS}
1454e5c31af7Sopenharmony_ci
1455e5c31af7Sopenharmony_ci			void main()
1456e5c31af7Sopenharmony_ci			{
1457e5c31af7Sopenharmony_ci				${SETUP}
1458e5c31af7Sopenharmony_ci				mat3[] a = mat3[] (	mat3(	in0.x, in0.y, in0.z,
1459e5c31af7Sopenharmony_ci											in0.x, in0.y, in0.z,
1460e5c31af7Sopenharmony_ci											in0.x, in0.y, in0.z)	,
1461e5c31af7Sopenharmony_ci									mat3(	in0.z, in0.x, -in0.y,
1462e5c31af7Sopenharmony_ci											in0.z, in0.x, -in0.y,
1463e5c31af7Sopenharmony_ci											in0.z, in0.x, -in0.y)	,
1464e5c31af7Sopenharmony_ci									mat3(	-in0.z, -in0.z, in0.z,
1465e5c31af7Sopenharmony_ci											-in0.y, -in0.y, in0.y,
1466e5c31af7Sopenharmony_ci											-in0.x, -in0.x, in0.x)	);
1467e5c31af7Sopenharmony_ci
1468e5c31af7Sopenharmony_ci				mat3 a0 = a[0];
1469e5c31af7Sopenharmony_ci				mat3 a1 = a[1];
1470e5c31af7Sopenharmony_ci				mat3 a2 = a[2];
1471e5c31af7Sopenharmony_ci
1472e5c31af7Sopenharmony_ci				float ret0 = a0[2][0];
1473e5c31af7Sopenharmony_ci				float ret1 = a1[0][2];
1474e5c31af7Sopenharmony_ci				float ret2 = a2[1][2];
1475e5c31af7Sopenharmony_ci
1476e5c31af7Sopenharmony_ci				out0 = vec3(ret0, ret1, ret2);
1477e5c31af7Sopenharmony_ci				${OUTPUT}
1478e5c31af7Sopenharmony_ci			}
1479e5c31af7Sopenharmony_ci		""
1480e5c31af7Sopenharmony_ci	end
1481e5c31af7Sopenharmony_ci
1482e5c31af7Sopenharmony_ci	case implicit_size_int_mat3
1483e5c31af7Sopenharmony_ci		version 310 es
1484e5c31af7Sopenharmony_ci		values
1485e5c31af7Sopenharmony_ci		{
1486e5c31af7Sopenharmony_ci			input ivec3 in0 = [ ivec3(0, 1, 2) | ivec3(-1, 0, -2) ];
1487e5c31af7Sopenharmony_ci			output ivec3 out0 = [ ivec3(0, -1, 1) | ivec3(-1, 0, 0) ];
1488e5c31af7Sopenharmony_ci		}
1489e5c31af7Sopenharmony_ci
1490e5c31af7Sopenharmony_ci		both ""
1491e5c31af7Sopenharmony_ci			#version 310 es
1492e5c31af7Sopenharmony_ci			precision highp int;
1493e5c31af7Sopenharmony_ci			precision highp float;
1494e5c31af7Sopenharmony_ci			${DECLARATIONS}
1495e5c31af7Sopenharmony_ci
1496e5c31af7Sopenharmony_ci			void main()
1497e5c31af7Sopenharmony_ci			{
1498e5c31af7Sopenharmony_ci				${SETUP}
1499e5c31af7Sopenharmony_ci				mat3[] a = mat3[] (	mat3(	in0.x, in0.y, in0.z,
1500e5c31af7Sopenharmony_ci											in0.x, in0.y, in0.z,
1501e5c31af7Sopenharmony_ci											in0.x, in0.y, in0.z)	,
1502e5c31af7Sopenharmony_ci									mat3(	in0.z, in0.x, -in0.y,
1503e5c31af7Sopenharmony_ci											in0.z, in0.x, -in0.y,
1504e5c31af7Sopenharmony_ci											in0.z, in0.x, -in0.y)	,
1505e5c31af7Sopenharmony_ci									mat3(	-in0.z, -in0.z, in0.z,
1506e5c31af7Sopenharmony_ci											-in0.y, -in0.y, in0.y,
1507e5c31af7Sopenharmony_ci											-in0.x, -in0.x, in0.x)	);
1508e5c31af7Sopenharmony_ci
1509e5c31af7Sopenharmony_ci				mat3 a0 = a[0];
1510e5c31af7Sopenharmony_ci				mat3 a1 = a[1];
1511e5c31af7Sopenharmony_ci				mat3 a2 = a[2];
1512e5c31af7Sopenharmony_ci
1513e5c31af7Sopenharmony_ci				float ret0 = a0[2][0];
1514e5c31af7Sopenharmony_ci				float ret1 = a1[0][2];
1515e5c31af7Sopenharmony_ci				float ret2 = a2[1][2];
1516e5c31af7Sopenharmony_ci
1517e5c31af7Sopenharmony_ci				out0 = ivec3(ret0, ret1, ret2);
1518e5c31af7Sopenharmony_ci				${OUTPUT}
1519e5c31af7Sopenharmony_ci			}
1520e5c31af7Sopenharmony_ci		""
1521e5c31af7Sopenharmony_ci	end
1522e5c31af7Sopenharmony_ci
1523e5c31af7Sopenharmony_ci	case implicit_size_bool_mat3
1524e5c31af7Sopenharmony_ci		version 310 es
1525e5c31af7Sopenharmony_ci		values
1526e5c31af7Sopenharmony_ci		{
1527e5c31af7Sopenharmony_ci			input bvec3 in0 = [ bvec3(true, false, true) ];
1528e5c31af7Sopenharmony_ci			output bvec3 out0 = [ bvec3(true, false, false) ];
1529e5c31af7Sopenharmony_ci		}
1530e5c31af7Sopenharmony_ci
1531e5c31af7Sopenharmony_ci		both ""
1532e5c31af7Sopenharmony_ci			#version 310 es
1533e5c31af7Sopenharmony_ci			precision highp int;
1534e5c31af7Sopenharmony_ci			precision highp float;
1535e5c31af7Sopenharmony_ci			${DECLARATIONS}
1536e5c31af7Sopenharmony_ci
1537e5c31af7Sopenharmony_ci			void main()
1538e5c31af7Sopenharmony_ci			{
1539e5c31af7Sopenharmony_ci				${SETUP}
1540e5c31af7Sopenharmony_ci				mat3[] a = mat3[] (	mat3(	in0.x, in0.y, in0.z,
1541e5c31af7Sopenharmony_ci											in0.x, in0.y, in0.z,
1542e5c31af7Sopenharmony_ci											in0.x, in0.y, in0.z)	,
1543e5c31af7Sopenharmony_ci									mat3(	in0.z, in0.x, in0.y,
1544e5c31af7Sopenharmony_ci											in0.z, in0.x, in0.y,
1545e5c31af7Sopenharmony_ci											in0.z, in0.x, in0.y)	,
1546e5c31af7Sopenharmony_ci									mat3(	in0.z, in0.z, in0.z,
1547e5c31af7Sopenharmony_ci											in0.y, in0.y, in0.y,
1548e5c31af7Sopenharmony_ci											in0.x, in0.x, in0.x)	);
1549e5c31af7Sopenharmony_ci
1550e5c31af7Sopenharmony_ci				mat3 a0 = a[0];
1551e5c31af7Sopenharmony_ci				mat3 a1 = a[1];
1552e5c31af7Sopenharmony_ci				mat3 a2 = a[2];
1553e5c31af7Sopenharmony_ci
1554e5c31af7Sopenharmony_ci				float ret0 = a0[2][0];
1555e5c31af7Sopenharmony_ci				float ret1 = a1[0][2];
1556e5c31af7Sopenharmony_ci				float ret2 = a2[1][2];
1557e5c31af7Sopenharmony_ci
1558e5c31af7Sopenharmony_ci				out0 = bvec3(ret0, ret1, ret2);
1559e5c31af7Sopenharmony_ci				${OUTPUT}
1560e5c31af7Sopenharmony_ci			}
1561e5c31af7Sopenharmony_ci		""
1562e5c31af7Sopenharmony_ci	end
1563e5c31af7Sopenharmony_ci
1564e5c31af7Sopenharmony_ci
1565e5c31af7Sopenharmony_ci	case constant_expression_array_size
1566e5c31af7Sopenharmony_ci		version 310 es
1567e5c31af7Sopenharmony_ci
1568e5c31af7Sopenharmony_ci		both ""
1569e5c31af7Sopenharmony_ci			#version 310 es
1570e5c31af7Sopenharmony_ci			precision highp float;
1571e5c31af7Sopenharmony_ci			${DECLARATIONS}
1572e5c31af7Sopenharmony_ci
1573e5c31af7Sopenharmony_ci			const int a = 4;
1574e5c31af7Sopenharmony_ci
1575e5c31af7Sopenharmony_ci			void main ()
1576e5c31af7Sopenharmony_ci			{
1577e5c31af7Sopenharmony_ci				const int b = 5;
1578e5c31af7Sopenharmony_ci				float[a] array1;
1579e5c31af7Sopenharmony_ci				float[b] array2;
1580e5c31af7Sopenharmony_ci				float[array1.length()] array3;
1581e5c31af7Sopenharmony_ci				float[a+b] array4;
1582e5c31af7Sopenharmony_ci				${OUTPUT}
1583e5c31af7Sopenharmony_ci			}
1584e5c31af7Sopenharmony_ci		""
1585e5c31af7Sopenharmony_ci	end
1586e5c31af7Sopenharmony_ci
1587e5c31af7Sopenharmony_ci	case constant_expression_array_access
1588e5c31af7Sopenharmony_ci		version 310 es
1589e5c31af7Sopenharmony_ci		values
1590e5c31af7Sopenharmony_ci		{
1591e5c31af7Sopenharmony_ci			input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ];
1592e5c31af7Sopenharmony_ci			output vec3 out0 = [ vec3(-2.0, -1.0, -0.5) ];
1593e5c31af7Sopenharmony_ci		}
1594e5c31af7Sopenharmony_ci
1595e5c31af7Sopenharmony_ci		both ""
1596e5c31af7Sopenharmony_ci			#version 310 es
1597e5c31af7Sopenharmony_ci			precision highp float;
1598e5c31af7Sopenharmony_ci			${DECLARATIONS}
1599e5c31af7Sopenharmony_ci
1600e5c31af7Sopenharmony_ci			const int a = 3;
1601e5c31af7Sopenharmony_ci
1602e5c31af7Sopenharmony_ci			void main ()
1603e5c31af7Sopenharmony_ci			{
1604e5c31af7Sopenharmony_ci				${SETUP}
1605e5c31af7Sopenharmony_ci				const int b = 2;
1606e5c31af7Sopenharmony_ci				float x = float[] (in0.x, in0.y, in0.z, -in0.z, -in0.y, -in0.x) [a];
1607e5c31af7Sopenharmony_ci				float y = float[] (in0.x, in0.y, in0.z, -in0.z, -in0.y, -in0.x) [b+2];
1608e5c31af7Sopenharmony_ci				float z = float[] (in0.x, in0.y, in0.z, -in0.z, -in0.y, -in0.x) [5];
1609e5c31af7Sopenharmony_ci				out0 = vec3(x, y, z);
1610e5c31af7Sopenharmony_ci				${OUTPUT}
1611e5c31af7Sopenharmony_ci			}
1612e5c31af7Sopenharmony_ci		""
1613e5c31af7Sopenharmony_ci	end
1614e5c31af7Sopenharmony_ci
1615e5c31af7Sopenharmony_ci	case dynamic_expression_array_access
1616e5c31af7Sopenharmony_ci		version 310 es
1617e5c31af7Sopenharmony_ci		values
1618e5c31af7Sopenharmony_ci		{
1619e5c31af7Sopenharmony_ci			input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ];
1620e5c31af7Sopenharmony_ci			input ivec2 in1 = ivec2(3, 2);
1621e5c31af7Sopenharmony_ci			output vec3 out0 = [ vec3(-2.0, -1.0, -0.5) ];
1622e5c31af7Sopenharmony_ci		}
1623e5c31af7Sopenharmony_ci
1624e5c31af7Sopenharmony_ci		both ""
1625e5c31af7Sopenharmony_ci			#version 310 es
1626e5c31af7Sopenharmony_ci			precision highp int;
1627e5c31af7Sopenharmony_ci			precision highp float;
1628e5c31af7Sopenharmony_ci			${DECLARATIONS}
1629e5c31af7Sopenharmony_ci
1630e5c31af7Sopenharmony_ci			void main ()
1631e5c31af7Sopenharmony_ci			{
1632e5c31af7Sopenharmony_ci				${SETUP}
1633e5c31af7Sopenharmony_ci				float x = float[] (in0.x, in0.y, in0.z, -in0.z, -in0.y, -in0.x) [in1.x];
1634e5c31af7Sopenharmony_ci				float y = float[] (in0.x, in0.y, in0.z, -in0.z, -in0.y, -in0.x) [in1.y+2];
1635e5c31af7Sopenharmony_ci				float z = float[] (in0.x, in0.y, in0.z, -in0.z, -in0.y, -in0.x) [in1.x+in1.y];
1636e5c31af7Sopenharmony_ci				out0 = vec3(x, y, z);
1637e5c31af7Sopenharmony_ci				${OUTPUT}
1638e5c31af7Sopenharmony_ci			}
1639e5c31af7Sopenharmony_ci		""
1640e5c31af7Sopenharmony_ci	end
1641e5c31af7Sopenharmony_ci
1642e5c31af7Sopenharmony_ci	case multiple_declarations_single_statement_explicit
1643e5c31af7Sopenharmony_ci		version 310 es
1644e5c31af7Sopenharmony_ci		values
1645e5c31af7Sopenharmony_ci		{
1646e5c31af7Sopenharmony_ci			input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ];
1647e5c31af7Sopenharmony_ci			output vec3 out0 = [ vec3(2.0, -1.0, 0.5) ];
1648e5c31af7Sopenharmony_ci		}
1649e5c31af7Sopenharmony_ci
1650e5c31af7Sopenharmony_ci		both ""
1651e5c31af7Sopenharmony_ci			#version 310 es
1652e5c31af7Sopenharmony_ci			precision highp float;
1653e5c31af7Sopenharmony_ci			${DECLARATIONS}
1654e5c31af7Sopenharmony_ci
1655e5c31af7Sopenharmony_ci			void main ()
1656e5c31af7Sopenharmony_ci			{
1657e5c31af7Sopenharmony_ci				${SETUP}
1658e5c31af7Sopenharmony_ci				float[] x = float[6] (in0.x, in0.y, in0.z, -in0.z, -in0.y, -in0.x),
1659e5c31af7Sopenharmony_ci						y = float[2] (in0.x, -in0.y);
1660e5c31af7Sopenharmony_ci				out0 = vec3(x[2], y[1], x[0]);
1661e5c31af7Sopenharmony_ci				${OUTPUT}
1662e5c31af7Sopenharmony_ci			}
1663e5c31af7Sopenharmony_ci		""
1664e5c31af7Sopenharmony_ci	end
1665e5c31af7Sopenharmony_ci
1666e5c31af7Sopenharmony_ci	case multiple_declarations_single_statement_implicit
1667e5c31af7Sopenharmony_ci		version 310 es
1668e5c31af7Sopenharmony_ci		values
1669e5c31af7Sopenharmony_ci		{
1670e5c31af7Sopenharmony_ci			input ivec3 in0 = [ ivec3(5, 1, 2) ];
1671e5c31af7Sopenharmony_ci			output ivec3 out0 = [ ivec3(2, -1, 5) ];
1672e5c31af7Sopenharmony_ci		}
1673e5c31af7Sopenharmony_ci
1674e5c31af7Sopenharmony_ci		both ""
1675e5c31af7Sopenharmony_ci			#version 310 es
1676e5c31af7Sopenharmony_ci			precision highp int;
1677e5c31af7Sopenharmony_ci			precision highp float;
1678e5c31af7Sopenharmony_ci			${DECLARATIONS}
1679e5c31af7Sopenharmony_ci
1680e5c31af7Sopenharmony_ci			void main ()
1681e5c31af7Sopenharmony_ci			{
1682e5c31af7Sopenharmony_ci				${SETUP}
1683e5c31af7Sopenharmony_ci				int[] x = int[] (in0.x, in0.y, in0.z, -in0.z, -in0.y, -in0.x),
1684e5c31af7Sopenharmony_ci					  y = int[] (in0.x, -in0.y);
1685e5c31af7Sopenharmony_ci				out0 = ivec3(x[2], y[1], x[0]);
1686e5c31af7Sopenharmony_ci				${OUTPUT}
1687e5c31af7Sopenharmony_ci			}
1688e5c31af7Sopenharmony_ci		""
1689e5c31af7Sopenharmony_ci	end
1690e5c31af7Sopenharmony_ci
1691e5c31af7Sopenharmony_ciend # declaration
1692e5c31af7Sopenharmony_ci
1693e5c31af7Sopenharmony_cigroup length "Array length method"
1694e5c31af7Sopenharmony_ci
1695e5c31af7Sopenharmony_ci	case float
1696e5c31af7Sopenharmony_ci		version 310 es
1697e5c31af7Sopenharmony_ci		values
1698e5c31af7Sopenharmony_ci		{
1699e5c31af7Sopenharmony_ci			input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ];
1700e5c31af7Sopenharmony_ci			output ivec3 out0 = [ ivec3(3, 5, 13) ];
1701e5c31af7Sopenharmony_ci		}
1702e5c31af7Sopenharmony_ci
1703e5c31af7Sopenharmony_ci		both ""
1704e5c31af7Sopenharmony_ci			#version 310 es
1705e5c31af7Sopenharmony_ci			precision highp float;
1706e5c31af7Sopenharmony_ci			${DECLARATIONS}
1707e5c31af7Sopenharmony_ci
1708e5c31af7Sopenharmony_ci			void main()
1709e5c31af7Sopenharmony_ci			{
1710e5c31af7Sopenharmony_ci				${SETUP}
1711e5c31af7Sopenharmony_ci				float[] x = float[3] (in0.z, in0.x, in0.y);
1712e5c31af7Sopenharmony_ci				float[] y = float[] (in0.z, in0.x, in0.y, in0.x, in0.y);
1713e5c31af7Sopenharmony_ci				float[13] z;
1714e5c31af7Sopenharmony_ci
1715e5c31af7Sopenharmony_ci				out0 = ivec3(x.length(), y.length(), z.length());
1716e5c31af7Sopenharmony_ci				${OUTPUT}
1717e5c31af7Sopenharmony_ci			}
1718e5c31af7Sopenharmony_ci		""
1719e5c31af7Sopenharmony_ci	end
1720e5c31af7Sopenharmony_ci
1721e5c31af7Sopenharmony_ci	case int
1722e5c31af7Sopenharmony_ci		version 310 es
1723e5c31af7Sopenharmony_ci		values
1724e5c31af7Sopenharmony_ci		{
1725e5c31af7Sopenharmony_ci			input ivec3 in0 = [ ivec3(0, 1, 2) ];
1726e5c31af7Sopenharmony_ci			output ivec3 out0 = [ ivec3(3, 5, 13) ];
1727e5c31af7Sopenharmony_ci		}
1728e5c31af7Sopenharmony_ci
1729e5c31af7Sopenharmony_ci		both ""
1730e5c31af7Sopenharmony_ci			#version 310 es
1731e5c31af7Sopenharmony_ci			precision highp int;
1732e5c31af7Sopenharmony_ci			precision highp float;
1733e5c31af7Sopenharmony_ci			${DECLARATIONS}
1734e5c31af7Sopenharmony_ci
1735e5c31af7Sopenharmony_ci			void main()
1736e5c31af7Sopenharmony_ci			{
1737e5c31af7Sopenharmony_ci				${SETUP}
1738e5c31af7Sopenharmony_ci				int[] x = int[3] (in0.z, in0.x, in0.y);
1739e5c31af7Sopenharmony_ci				int[] y = int[] (in0.z, in0.x, in0.y, in0.x, in0.y);
1740e5c31af7Sopenharmony_ci				int[13] z;
1741e5c31af7Sopenharmony_ci
1742e5c31af7Sopenharmony_ci				out0 = ivec3(x.length(), y.length(), z.length());
1743e5c31af7Sopenharmony_ci				${OUTPUT}
1744e5c31af7Sopenharmony_ci			}
1745e5c31af7Sopenharmony_ci		""
1746e5c31af7Sopenharmony_ci	end
1747e5c31af7Sopenharmony_ci
1748e5c31af7Sopenharmony_ci	case bool
1749e5c31af7Sopenharmony_ci		version 310 es
1750e5c31af7Sopenharmony_ci		values
1751e5c31af7Sopenharmony_ci		{
1752e5c31af7Sopenharmony_ci			input bvec3 in0 = [ bvec3(true, false, true) ];
1753e5c31af7Sopenharmony_ci			output ivec3 out0 = [ ivec3(3, 5, 13) ];
1754e5c31af7Sopenharmony_ci		}
1755e5c31af7Sopenharmony_ci
1756e5c31af7Sopenharmony_ci		both ""
1757e5c31af7Sopenharmony_ci			#version 310 es
1758e5c31af7Sopenharmony_ci			precision highp int;
1759e5c31af7Sopenharmony_ci			precision highp float;
1760e5c31af7Sopenharmony_ci			${DECLARATIONS}
1761e5c31af7Sopenharmony_ci
1762e5c31af7Sopenharmony_ci			void main()
1763e5c31af7Sopenharmony_ci			{
1764e5c31af7Sopenharmony_ci				${SETUP}
1765e5c31af7Sopenharmony_ci				bool[] x = bool[3] (in0.z, in0.x, in0.y);
1766e5c31af7Sopenharmony_ci				bool[] y = bool[] (in0.z, in0.x, in0.y, in0.x, in0.y);
1767e5c31af7Sopenharmony_ci				bool[13] z;
1768e5c31af7Sopenharmony_ci
1769e5c31af7Sopenharmony_ci				out0 = ivec3(x.length(), y.length(), z.length());
1770e5c31af7Sopenharmony_ci				${OUTPUT}
1771e5c31af7Sopenharmony_ci			}
1772e5c31af7Sopenharmony_ci		""
1773e5c31af7Sopenharmony_ci	end
1774e5c31af7Sopenharmony_ci
1775e5c31af7Sopenharmony_ci	case struct
1776e5c31af7Sopenharmony_ci		version 310 es
1777e5c31af7Sopenharmony_ci		values
1778e5c31af7Sopenharmony_ci		{
1779e5c31af7Sopenharmony_ci			input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ];
1780e5c31af7Sopenharmony_ci			output ivec3 out0 = [ ivec3(3, 5, 13) ];
1781e5c31af7Sopenharmony_ci		}
1782e5c31af7Sopenharmony_ci
1783e5c31af7Sopenharmony_ci		both ""
1784e5c31af7Sopenharmony_ci			#version 310 es
1785e5c31af7Sopenharmony_ci			precision highp float;
1786e5c31af7Sopenharmony_ci			${DECLARATIONS}
1787e5c31af7Sopenharmony_ci
1788e5c31af7Sopenharmony_ci			struct test
1789e5c31af7Sopenharmony_ci			{
1790e5c31af7Sopenharmony_ci				float f;
1791e5c31af7Sopenharmony_ci				vec3 v;
1792e5c31af7Sopenharmony_ci			};
1793e5c31af7Sopenharmony_ci
1794e5c31af7Sopenharmony_ci			void main()
1795e5c31af7Sopenharmony_ci			{
1796e5c31af7Sopenharmony_ci				${SETUP}
1797e5c31af7Sopenharmony_ci
1798e5c31af7Sopenharmony_ci				test a = test(in0.z, vec3(in0.x, in0.y, in0.z));
1799e5c31af7Sopenharmony_ci				test b = test(in0.y, vec3(-in0.z, -in0.x, -in0.y));
1800e5c31af7Sopenharmony_ci				test c = test(in0.x, vec3(-in0.y, in0.z, -in0.x));
1801e5c31af7Sopenharmony_ci
1802e5c31af7Sopenharmony_ci				test[] x = test[3] (a, b, c);
1803e5c31af7Sopenharmony_ci				test[] y = test[] (c, a, b, b, a);
1804e5c31af7Sopenharmony_ci				test[13] z;
1805e5c31af7Sopenharmony_ci
1806e5c31af7Sopenharmony_ci				out0 = ivec3(x.length(), y.length(), z.length());
1807e5c31af7Sopenharmony_ci				${OUTPUT}
1808e5c31af7Sopenharmony_ci			}
1809e5c31af7Sopenharmony_ci		""
1810e5c31af7Sopenharmony_ci	end
1811e5c31af7Sopenharmony_ci
1812e5c31af7Sopenharmony_ciend # length
1813