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