1e5c31af7Sopenharmony_cigroup trivial "Trivial expressions"
2e5c31af7Sopenharmony_ci
3e5c31af7Sopenharmony_ci	case float
4e5c31af7Sopenharmony_ci		values { output float out0 = 5.0; }
5e5c31af7Sopenharmony_ci		both ""
6e5c31af7Sopenharmony_ci
7e5c31af7Sopenharmony_ci			precision highp float;
8e5c31af7Sopenharmony_ci			${DECLARATIONS}
9e5c31af7Sopenharmony_ci
10e5c31af7Sopenharmony_ci			void main()
11e5c31af7Sopenharmony_ci			{
12e5c31af7Sopenharmony_ci				const float a = 5.0;
13e5c31af7Sopenharmony_ci				out0 = a;
14e5c31af7Sopenharmony_ci				${OUTPUT}
15e5c31af7Sopenharmony_ci			}
16e5c31af7Sopenharmony_ci		""
17e5c31af7Sopenharmony_ci	end
18e5c31af7Sopenharmony_ci
19e5c31af7Sopenharmony_ci	case int
20e5c31af7Sopenharmony_ci		values { output int out0 = 5; }
21e5c31af7Sopenharmony_ci		both ""
22e5c31af7Sopenharmony_ci			precision highp float;
23e5c31af7Sopenharmony_ci			${DECLARATIONS}
24e5c31af7Sopenharmony_ci
25e5c31af7Sopenharmony_ci			void main()
26e5c31af7Sopenharmony_ci			{
27e5c31af7Sopenharmony_ci				const int a = 5;
28e5c31af7Sopenharmony_ci				out0 = a;
29e5c31af7Sopenharmony_ci				${OUTPUT}
30e5c31af7Sopenharmony_ci			}
31e5c31af7Sopenharmony_ci		""
32e5c31af7Sopenharmony_ci	end
33e5c31af7Sopenharmony_ci
34e5c31af7Sopenharmony_ci	case bool
35e5c31af7Sopenharmony_ci		values { output bool out0 = true; }
36e5c31af7Sopenharmony_ci		both ""
37e5c31af7Sopenharmony_ci			precision highp float;
38e5c31af7Sopenharmony_ci			${DECLARATIONS}
39e5c31af7Sopenharmony_ci
40e5c31af7Sopenharmony_ci			void main()
41e5c31af7Sopenharmony_ci			{
42e5c31af7Sopenharmony_ci				const bool a = true;
43e5c31af7Sopenharmony_ci				out0 = a;
44e5c31af7Sopenharmony_ci				${OUTPUT}
45e5c31af7Sopenharmony_ci			}
46e5c31af7Sopenharmony_ci		""
47e5c31af7Sopenharmony_ci	end
48e5c31af7Sopenharmony_ci
49e5c31af7Sopenharmony_ci	case cast
50e5c31af7Sopenharmony_ci		values { output float out0 = 1.0; }
51e5c31af7Sopenharmony_ci		both ""
52e5c31af7Sopenharmony_ci			precision highp float;
53e5c31af7Sopenharmony_ci			${DECLARATIONS}
54e5c31af7Sopenharmony_ci
55e5c31af7Sopenharmony_ci			void main()
56e5c31af7Sopenharmony_ci			{
57e5c31af7Sopenharmony_ci				const float a = float(int(bool(true)));
58e5c31af7Sopenharmony_ci				out0 = a;
59e5c31af7Sopenharmony_ci				${OUTPUT}
60e5c31af7Sopenharmony_ci			}
61e5c31af7Sopenharmony_ci		""
62e5c31af7Sopenharmony_ci	end
63e5c31af7Sopenharmony_ci
64e5c31af7Sopenharmony_ciend # trivial
65e5c31af7Sopenharmony_ci
66e5c31af7Sopenharmony_cigroup operators "Operators"
67e5c31af7Sopenharmony_ci
68e5c31af7Sopenharmony_ci	case math_float
69e5c31af7Sopenharmony_ci		values { output float out0 = 2.19; }
70e5c31af7Sopenharmony_ci		both ""
71e5c31af7Sopenharmony_ci			precision highp float;
72e5c31af7Sopenharmony_ci			${DECLARATIONS}
73e5c31af7Sopenharmony_ci
74e5c31af7Sopenharmony_ci			void main()
75e5c31af7Sopenharmony_ci			{
76e5c31af7Sopenharmony_ci				const float a = 6.0/3.5 + 1.8*2.6 - 4.2;
77e5c31af7Sopenharmony_ci				out0 = a;
78e5c31af7Sopenharmony_ci				${OUTPUT}
79e5c31af7Sopenharmony_ci			}
80e5c31af7Sopenharmony_ci		""
81e5c31af7Sopenharmony_ci	end
82e5c31af7Sopenharmony_ci
83e5c31af7Sopenharmony_ci	case math_vec
84e5c31af7Sopenharmony_ci		values { output float out0 = 15.0; }
85e5c31af7Sopenharmony_ci		both ""
86e5c31af7Sopenharmony_ci			precision highp float;
87e5c31af7Sopenharmony_ci			${DECLARATIONS}
88e5c31af7Sopenharmony_ci
89e5c31af7Sopenharmony_ci			void main()
90e5c31af7Sopenharmony_ci			{
91e5c31af7Sopenharmony_ci				const vec3 a = (vec4(1.0, 2.0, 3.0, 4.0).zyx * vec3(1.0, 1.5, 3.0).xyz).xzy + (vec2(5.0)/vec2(2.5)).xxy;
92e5c31af7Sopenharmony_ci				out0 = a.x + a.y + a.z;
93e5c31af7Sopenharmony_ci				${OUTPUT}
94e5c31af7Sopenharmony_ci			}
95e5c31af7Sopenharmony_ci		""
96e5c31af7Sopenharmony_ci	end
97e5c31af7Sopenharmony_ci
98e5c31af7Sopenharmony_ci	case math_int
99e5c31af7Sopenharmony_ci		values { output int out0 = 7; }
100e5c31af7Sopenharmony_ci		both ""
101e5c31af7Sopenharmony_ci			precision highp int;
102e5c31af7Sopenharmony_ci			${DECLARATIONS}
103e5c31af7Sopenharmony_ci
104e5c31af7Sopenharmony_ci			void main()
105e5c31af7Sopenharmony_ci			{
106e5c31af7Sopenharmony_ci				const int a = 5-1 + 2*3 - 9/3;
107e5c31af7Sopenharmony_ci				out0 = a;
108e5c31af7Sopenharmony_ci				${OUTPUT}
109e5c31af7Sopenharmony_ci			}
110e5c31af7Sopenharmony_ci		""
111e5c31af7Sopenharmony_ci	end
112e5c31af7Sopenharmony_ci
113e5c31af7Sopenharmony_ci	case math_ivec
114e5c31af7Sopenharmony_ci		values { output int out0 = 21; }
115e5c31af7Sopenharmony_ci		both ""
116e5c31af7Sopenharmony_ci			precision highp int;
117e5c31af7Sopenharmony_ci			${DECLARATIONS}
118e5c31af7Sopenharmony_ci
119e5c31af7Sopenharmony_ci			void main()
120e5c31af7Sopenharmony_ci			{
121e5c31af7Sopenharmony_ci				const ivec3 a = ivec2(5-1, 4).xxy + ivec4(1*3, 9/3, 1+2, 8/4).xyz;
122e5c31af7Sopenharmony_ci				out0 = a.x + a.y + a.z;
123e5c31af7Sopenharmony_ci				${OUTPUT}
124e5c31af7Sopenharmony_ci			}
125e5c31af7Sopenharmony_ci		""
126e5c31af7Sopenharmony_ci	end
127e5c31af7Sopenharmony_ci
128e5c31af7Sopenharmony_ci	case math_mat
129e5c31af7Sopenharmony_ci		values { output float out0 = 8.0; }
130e5c31af7Sopenharmony_ci		both ""
131e5c31af7Sopenharmony_ci			precision highp float;
132e5c31af7Sopenharmony_ci			${DECLARATIONS}
133e5c31af7Sopenharmony_ci
134e5c31af7Sopenharmony_ci			void main()
135e5c31af7Sopenharmony_ci			{
136e5c31af7Sopenharmony_ci				const mat3 a = mat3(3.0) * mat3(4.0);
137e5c31af7Sopenharmony_ci				const mat4 b = mat4(a[1][1])*2.0;
138e5c31af7Sopenharmony_ci				const mat2 c = mat2(b[0][0]) / 3.0;
139e5c31af7Sopenharmony_ci				out0 = c[0][0]+c[1][0];
140e5c31af7Sopenharmony_ci				${OUTPUT}
141e5c31af7Sopenharmony_ci			}
142e5c31af7Sopenharmony_ci		""
143e5c31af7Sopenharmony_ci	end
144e5c31af7Sopenharmony_ci
145e5c31af7Sopenharmony_ci	case logical
146e5c31af7Sopenharmony_ci		values { output bool out0 = true; }
147e5c31af7Sopenharmony_ci		both ""
148e5c31af7Sopenharmony_ci			precision highp int;
149e5c31af7Sopenharmony_ci			${DECLARATIONS}
150e5c31af7Sopenharmony_ci
151e5c31af7Sopenharmony_ci			void main()
152e5c31af7Sopenharmony_ci			{
153e5c31af7Sopenharmony_ci				const bool a = (!false || false) && (true ^^ false);
154e5c31af7Sopenharmony_ci				out0 = a;
155e5c31af7Sopenharmony_ci				${OUTPUT}
156e5c31af7Sopenharmony_ci			}
157e5c31af7Sopenharmony_ci		""
158e5c31af7Sopenharmony_ci	end
159e5c31af7Sopenharmony_ci
160e5c31af7Sopenharmony_ci	case compare
161e5c31af7Sopenharmony_ci		values { output bool out0 = true; }
162e5c31af7Sopenharmony_ci		both ""
163e5c31af7Sopenharmony_ci			precision highp int;
164e5c31af7Sopenharmony_ci			${DECLARATIONS}
165e5c31af7Sopenharmony_ci
166e5c31af7Sopenharmony_ci			void main()
167e5c31af7Sopenharmony_ci			{
168e5c31af7Sopenharmony_ci				const bool a = (false == false) && (true != false) && (1 < 2) && (3 <= 3) && ((1 > 1) != (1 >= 1));
169e5c31af7Sopenharmony_ci				out0 = a;
170e5c31af7Sopenharmony_ci				${OUTPUT}
171e5c31af7Sopenharmony_ci			}
172e5c31af7Sopenharmony_ci		""
173e5c31af7Sopenharmony_ci	end
174e5c31af7Sopenharmony_ci
175e5c31af7Sopenharmony_ci	case selection
176e5c31af7Sopenharmony_ci		values { output float out0 = 5.3; }
177e5c31af7Sopenharmony_ci		both ""
178e5c31af7Sopenharmony_ci			precision highp float;
179e5c31af7Sopenharmony_ci			${DECLARATIONS}
180e5c31af7Sopenharmony_ci
181e5c31af7Sopenharmony_ci			void main()
182e5c31af7Sopenharmony_ci			{
183e5c31af7Sopenharmony_ci				const float a = false ? 0.0 : (true ? 5.3 : 1.0);
184e5c31af7Sopenharmony_ci				out0 = a;
185e5c31af7Sopenharmony_ci				${OUTPUT}
186e5c31af7Sopenharmony_ci			}
187e5c31af7Sopenharmony_ci		""
188e5c31af7Sopenharmony_ci	end
189e5c31af7Sopenharmony_ci
190e5c31af7Sopenharmony_ciend # operators
191e5c31af7Sopenharmony_ci
192e5c31af7Sopenharmony_cigroup complex_types "Arrays, structs & nested calls"
193e5c31af7Sopenharmony_ci
194e5c31af7Sopenharmony_ci	case struct
195e5c31af7Sopenharmony_ci		values { output float out0 = 260.922; }
196e5c31af7Sopenharmony_ci		both ""
197e5c31af7Sopenharmony_ci			precision highp float;
198e5c31af7Sopenharmony_ci			${DECLARATIONS}
199e5c31af7Sopenharmony_ci
200e5c31af7Sopenharmony_ci			struct S
201e5c31af7Sopenharmony_ci			{
202e5c31af7Sopenharmony_ci				vec4 a;
203e5c31af7Sopenharmony_ci				int  b;
204e5c31af7Sopenharmony_ci			};
205e5c31af7Sopenharmony_ci
206e5c31af7Sopenharmony_ci			void main()
207e5c31af7Sopenharmony_ci			{
208e5c31af7Sopenharmony_ci				const S s = S(vec4(1.5), 123);
209e5c31af7Sopenharmony_ci				out0 = length(s.a.xy)*float(s.b);
210e5c31af7Sopenharmony_ci				${OUTPUT}
211e5c31af7Sopenharmony_ci			}
212e5c31af7Sopenharmony_ci		""
213e5c31af7Sopenharmony_ci	end
214e5c31af7Sopenharmony_ci
215e5c31af7Sopenharmony_ci	case nested_struct
216e5c31af7Sopenharmony_ci		values { output float out0 = 965.9; }
217e5c31af7Sopenharmony_ci		both ""
218e5c31af7Sopenharmony_ci			precision highp float;
219e5c31af7Sopenharmony_ci			${DECLARATIONS}
220e5c31af7Sopenharmony_ci
221e5c31af7Sopenharmony_ci			struct S
222e5c31af7Sopenharmony_ci			{
223e5c31af7Sopenharmony_ci				vec4 v;
224e5c31af7Sopenharmony_ci				int  i;
225e5c31af7Sopenharmony_ci			};
226e5c31af7Sopenharmony_ci
227e5c31af7Sopenharmony_ci			struct T
228e5c31af7Sopenharmony_ci			{
229e5c31af7Sopenharmony_ci				S s;
230e5c31af7Sopenharmony_ci				bool b;
231e5c31af7Sopenharmony_ci				int i;
232e5c31af7Sopenharmony_ci			};
233e5c31af7Sopenharmony_ci
234e5c31af7Sopenharmony_ci			struct U
235e5c31af7Sopenharmony_ci			{
236e5c31af7Sopenharmony_ci				S s;
237e5c31af7Sopenharmony_ci				T t;
238e5c31af7Sopenharmony_ci			};
239e5c31af7Sopenharmony_ci
240e5c31af7Sopenharmony_ci			void main()
241e5c31af7Sopenharmony_ci			{
242e5c31af7Sopenharmony_ci				const S s = S(vec4(1.5), 123);
243e5c31af7Sopenharmony_ci				const T t = T(s, false, 3);
244e5c31af7Sopenharmony_ci				const U u = U(s, t);
245e5c31af7Sopenharmony_ci				const U v = U(S(vec4(1.3), 4), T(S(vec4(2.0), 5), true, 6));
246e5c31af7Sopenharmony_ci				out0 = float(u.s.i*v.t.i + v.t.s.i)*v.s.v.x; // float(123*6 + 5)*1.3
247e5c31af7Sopenharmony_ci				${OUTPUT}
248e5c31af7Sopenharmony_ci			}
249e5c31af7Sopenharmony_ci		""
250e5c31af7Sopenharmony_ci	end
251e5c31af7Sopenharmony_ci
252e5c31af7Sopenharmony_ci	case array
253e5c31af7Sopenharmony_ci		values
254e5c31af7Sopenharmony_ci		{
255e5c31af7Sopenharmony_ci			input float in0 = [ 0.0 | 1.0];
256e5c31af7Sopenharmony_ci			output float out0 = [0.0 | 1.0];
257e5c31af7Sopenharmony_ci		}
258e5c31af7Sopenharmony_ci		both ""
259e5c31af7Sopenharmony_ci			precision highp float;
260e5c31af7Sopenharmony_ci			${DECLARATIONS}
261e5c31af7Sopenharmony_ci
262e5c31af7Sopenharmony_ci			void main()
263e5c31af7Sopenharmony_ci			{
264e5c31af7Sopenharmony_ci				float a[int(max(-1.0, 2.0))];
265e5c31af7Sopenharmony_ci				a[0] = -1.0;
266e5c31af7Sopenharmony_ci				a[1] = in0;
267e5c31af7Sopenharmony_ci				out0 = a[int(min(1.0, 2.0))];
268e5c31af7Sopenharmony_ci				${OUTPUT}
269e5c31af7Sopenharmony_ci			}
270e5c31af7Sopenharmony_ci		""
271e5c31af7Sopenharmony_ci	end
272e5c31af7Sopenharmony_ci
273e5c31af7Sopenharmony_ci	case nested_builtin_funcs
274e5c31af7Sopenharmony_ci		values { output float out0 = 3.05; }
275e5c31af7Sopenharmony_ci		both ""
276e5c31af7Sopenharmony_ci			precision highp float;
277e5c31af7Sopenharmony_ci			${DECLARATIONS}
278e5c31af7Sopenharmony_ci
279e5c31af7Sopenharmony_ci			void main()
280e5c31af7Sopenharmony_ci			{
281e5c31af7Sopenharmony_ci				const float a = sqrt( atan(sin(1.5)/cos(1.5)) /*1.5*/ * log2(exp2(log(exp(6.2) + 0.1)) + 0.1) /*~6.2*/);
282e5c31af7Sopenharmony_ci				out0 = a;
283e5c31af7Sopenharmony_ci				${OUTPUT}
284e5c31af7Sopenharmony_ci			}
285e5c31af7Sopenharmony_ci		""
286e5c31af7Sopenharmony_ci	end
287e5c31af7Sopenharmony_ci
288e5c31af7Sopenharmony_ciend # complex_types
289