1cb93a386Sopenharmony_ciuniform half4 colorRed, colorGreen;
2cb93a386Sopenharmony_ciuniform float unknownInput;
3cb93a386Sopenharmony_ci
4cb93a386Sopenharmony_cibool test() {
5cb93a386Sopenharmony_ci    half unknown = half(unknownInput);
6cb93a386Sopenharmony_ci
7cb93a386Sopenharmony_ci    bool ok = true;
8cb93a386Sopenharmony_ci    half x = 32.0 + 2.0;
9cb93a386Sopenharmony_ci    ok = ok && (x == 34);
10cb93a386Sopenharmony_ci    x = 32.0 - 2.0;
11cb93a386Sopenharmony_ci    ok = ok && (x == 30);
12cb93a386Sopenharmony_ci    x = 32.0 * 2.0;
13cb93a386Sopenharmony_ci    ok = ok && (x == 64);
14cb93a386Sopenharmony_ci    x = 32.0 / 2.0;
15cb93a386Sopenharmony_ci    ok = ok && (x == 16);
16cb93a386Sopenharmony_ci    x = (12 > 2.0) ? (10 * 2 / 5 + 18 - 3) : 0;
17cb93a386Sopenharmony_ci    ok = ok && (x == 19);
18cb93a386Sopenharmony_ci    x = 0.0 == 0.0 ? 1 : -1;
19cb93a386Sopenharmony_ci    ok = ok && (x == 1);
20cb93a386Sopenharmony_ci    x = 0.0 == 1.0 ? 2 : -2;
21cb93a386Sopenharmony_ci    ok = ok && (x == -2);
22cb93a386Sopenharmony_ci    x = 0.0 != 1.0 ? 3 : -3;
23cb93a386Sopenharmony_ci    ok = ok && (x == 3);
24cb93a386Sopenharmony_ci    x = 0.0 != 0.0 ? 4 : -4;
25cb93a386Sopenharmony_ci    ok = ok && (x == -4);
26cb93a386Sopenharmony_ci    x = 6.0 > 5.0 ? 5 : -5;
27cb93a386Sopenharmony_ci    ok = ok && (x == 5);
28cb93a386Sopenharmony_ci    x = 6.0 > 6.0 ? 6 : -6;
29cb93a386Sopenharmony_ci    ok = ok && (x == -6);
30cb93a386Sopenharmony_ci    x = 6.0 >= 6.0 ? 7 : -7;
31cb93a386Sopenharmony_ci    ok = ok && (x == 7);
32cb93a386Sopenharmony_ci    x = 6.0 >= 7.0 ? 8 : -8;
33cb93a386Sopenharmony_ci    ok = ok && (x == -8);
34cb93a386Sopenharmony_ci    x = 5.0 < 6.0 ? 9 : -9;
35cb93a386Sopenharmony_ci    ok = ok && (x == 9);
36cb93a386Sopenharmony_ci    x = 6.0 < 6.0 ? 10 : -10;
37cb93a386Sopenharmony_ci    ok = ok && (x == -10);
38cb93a386Sopenharmony_ci    x = 6.0 <= 6.0 ? 11 : -11;
39cb93a386Sopenharmony_ci    ok = ok && (x == 11);
40cb93a386Sopenharmony_ci    x = 6.0 <= 5.0 ? 12 : -12;
41cb93a386Sopenharmony_ci    ok = ok && (x == -12);
42cb93a386Sopenharmony_ci
43cb93a386Sopenharmony_ci    x = half(unknown + 0);
44cb93a386Sopenharmony_ci    ok = ok && (x == unknown);
45cb93a386Sopenharmony_ci    x = half(0 + unknown);
46cb93a386Sopenharmony_ci    ok = ok && (x == unknown);
47cb93a386Sopenharmony_ci    x = half(unknown - 0);
48cb93a386Sopenharmony_ci    ok = ok && (x == unknown);
49cb93a386Sopenharmony_ci    x = half(unknown * 0);
50cb93a386Sopenharmony_ci    ok = ok && (x == 0);
51cb93a386Sopenharmony_ci    x = half(unknown * 1);
52cb93a386Sopenharmony_ci    ok = ok && (x == unknown);
53cb93a386Sopenharmony_ci    x = half(1 * unknown);
54cb93a386Sopenharmony_ci    ok = ok && (x == unknown);
55cb93a386Sopenharmony_ci    x = half(0 * unknown);
56cb93a386Sopenharmony_ci    ok = ok && (x == 0);
57cb93a386Sopenharmony_ci    x = half(unknown / 1);
58cb93a386Sopenharmony_ci    ok = ok && (x == unknown);
59cb93a386Sopenharmony_ci    x = half(0 / unknown);  // this should NOT optimize away
60cb93a386Sopenharmony_ci    ok = ok && (x == 0);
61cb93a386Sopenharmony_ci    x += 1;
62cb93a386Sopenharmony_ci    ok = ok && (x == 1);
63cb93a386Sopenharmony_ci    x += 0;
64cb93a386Sopenharmony_ci    ok = ok && (x == 1);
65cb93a386Sopenharmony_ci    x -= 2;
66cb93a386Sopenharmony_ci    ok = ok && (x == -1);
67cb93a386Sopenharmony_ci    x -= 0;
68cb93a386Sopenharmony_ci    ok = ok && (x == -1);
69cb93a386Sopenharmony_ci    x *= 1;
70cb93a386Sopenharmony_ci    ok = ok && (x == -1);
71cb93a386Sopenharmony_ci    x *= 2;
72cb93a386Sopenharmony_ci    ok = ok && (x == -2);
73cb93a386Sopenharmony_ci    x /= 1;
74cb93a386Sopenharmony_ci    ok = ok && (x == -2);
75cb93a386Sopenharmony_ci    x /= 2;
76cb93a386Sopenharmony_ci    ok = ok && (x == -1);
77cb93a386Sopenharmony_ci    return ok;
78cb93a386Sopenharmony_ci}
79cb93a386Sopenharmony_ci
80cb93a386Sopenharmony_cihalf4 main(float2 coords) {
81cb93a386Sopenharmony_ci    return test() ? colorGreen : colorRed;
82cb93a386Sopenharmony_ci}
83