1cb93a386Sopenharmony_ciuniform half  unknownInput;
2cb93a386Sopenharmony_ciuniform half4 colorRed, colorGreen;
3cb93a386Sopenharmony_ci
4cb93a386Sopenharmony_cibool test_half() {
5cb93a386Sopenharmony_ci    half unknown = unknownInput;
6cb93a386Sopenharmony_ci
7cb93a386Sopenharmony_ci    bool ok = true;
8cb93a386Sopenharmony_ci    ok = ok &&  (half4(half2(1), half2(2, 3)) + half4(5, 6, 7, 8)) == half4(6, 7, 9, 11);
9cb93a386Sopenharmony_ci    ok = ok &&  (half4(8, half3(10)) - half4(1))                   == half4(7, 9, 9, 9);
10cb93a386Sopenharmony_ci    ok = ok &&  (half4(2) * half4(1, 2, 3, 4))                     == half4(2, 4, 6, 8);
11cb93a386Sopenharmony_ci    ok = ok &&  (half4(12) / half4(1, 2, 3, 4))                    == half4(12, 6, 4, 3);
12cb93a386Sopenharmony_ci    ok = ok && !(half4(1) == half4(2));
13cb93a386Sopenharmony_ci    ok = ok &&  (half2(1) == half2(1, 1));
14cb93a386Sopenharmony_ci    ok = ok &&  (half2(1, 1) == half2(1, 1));
15cb93a386Sopenharmony_ci    ok = ok && !(half2(1) == half2(1, 0));
16cb93a386Sopenharmony_ci    ok = ok &&  (half4(1) == half4(half2(1), half2(1)));
17cb93a386Sopenharmony_ci    ok = ok &&  (half4(half3(1), 1) == half4(half2(1), half2(1)));
18cb93a386Sopenharmony_ci    ok = ok && !(half4(half3(1), 1) == half4(half2(1), 1, 0));
19cb93a386Sopenharmony_ci    ok = ok &&  (half2(1) != half2(1, 0));
20cb93a386Sopenharmony_ci    ok = ok && !(half4(1) != half4(half2(1), half2(1)));
21cb93a386Sopenharmony_ci    ok = ok &&  ( half4(1) ==  half4(1));
22cb93a386Sopenharmony_ci    ok = ok &&  (-half4(1) == -half4(1));
23cb93a386Sopenharmony_ci    ok = ok &&  ( half4(1) != -half4(1));
24cb93a386Sopenharmony_ci    ok = ok &&  (-half4(1) !=  half4(1));
25cb93a386Sopenharmony_ci    ok = ok &&  ( half4(0) != -half4(1));
26cb93a386Sopenharmony_ci    ok = ok &&  (-half4(0) !=  half4(1));
27cb93a386Sopenharmony_ci    ok = ok &&  (-half4(0) != -half4(1));
28cb93a386Sopenharmony_ci    ok = ok && !(-half4(1) ==  half4(1));
29cb93a386Sopenharmony_ci    ok = ok && !( half4(1) == -half4(1));
30cb93a386Sopenharmony_ci    ok = ok && !( half4(0) ==  half4(1));
31cb93a386Sopenharmony_ci    ok = ok && !( half4(0) == -half4(1));
32cb93a386Sopenharmony_ci    ok = ok && !(-half4(0) ==  half4(1));
33cb93a386Sopenharmony_ci    ok = ok && !(-half4(0) == -half4(1));
34cb93a386Sopenharmony_ci    ok = ok && !(-half4(1) != -half4(1));
35cb93a386Sopenharmony_ci    ok = ok &&  (half4(unknown) * half4(1) == half4(unknown));
36cb93a386Sopenharmony_ci    ok = ok &&  (half4(1) * half4(unknown) == half4(unknown));
37cb93a386Sopenharmony_ci    ok = ok &&  (half4(unknown) * half4(0) == half4(0));
38cb93a386Sopenharmony_ci    ok = ok &&  (half4(0) * half4(unknown) == half4(0));
39cb93a386Sopenharmony_ci    ok = ok &&  (half4(0) / half4(unknown) == half4(0));  // this should NOT optimize away
40cb93a386Sopenharmony_ci    ok = ok &&  (half4(unknown) + half4(0) == half4(unknown));
41cb93a386Sopenharmony_ci    ok = ok &&  (half4(0) + half4(unknown) == half4(unknown));
42cb93a386Sopenharmony_ci    ok = ok &&  (half4(unknown) - half4(0) == half4(unknown));
43cb93a386Sopenharmony_ci
44cb93a386Sopenharmony_ci    half4 val = half4(unknown);
45cb93a386Sopenharmony_ci    val += half4(1);
46cb93a386Sopenharmony_ci    val += half4(0);
47cb93a386Sopenharmony_ci    val -= half4(1);
48cb93a386Sopenharmony_ci    val -= half4(0);
49cb93a386Sopenharmony_ci    val = val + half4(1);
50cb93a386Sopenharmony_ci    val = val + half4(0);
51cb93a386Sopenharmony_ci    val = val - half4(1);
52cb93a386Sopenharmony_ci    val = val - half4(0);
53cb93a386Sopenharmony_ci    ok = ok && (val == half4(unknown));
54cb93a386Sopenharmony_ci    val *= half4(1);
55cb93a386Sopenharmony_ci    val *= half4(2);
56cb93a386Sopenharmony_ci    val /= half4(1);
57cb93a386Sopenharmony_ci    val /= half4(2);
58cb93a386Sopenharmony_ci    val = val * half4(1);
59cb93a386Sopenharmony_ci    val = val * half4(2);
60cb93a386Sopenharmony_ci    val = val / half4(1);
61cb93a386Sopenharmony_ci    val = val / half4(2);
62cb93a386Sopenharmony_ci    ok = ok && (val == half4(unknown));
63cb93a386Sopenharmony_ci
64cb93a386Sopenharmony_ci    return ok;
65cb93a386Sopenharmony_ci}
66cb93a386Sopenharmony_ci
67cb93a386Sopenharmony_cibool test_int() {
68cb93a386Sopenharmony_ci    int unknown = int(unknownInput);
69cb93a386Sopenharmony_ci
70cb93a386Sopenharmony_ci    bool ok = true;
71cb93a386Sopenharmony_ci    ok = ok &&  (int4(int2(1), int2(2, 3)) + int4(5, 6, 7, 8)) == int4(6, 7, 9, 11);
72cb93a386Sopenharmony_ci    ok = ok &&  (int4(8, int3(10)) - int4(1))                  == int4(7, 9, 9, 9);
73cb93a386Sopenharmony_ci    ok = ok &&  (int4(2) * int4(1, 2, 3, 4))                   == int4(2, 4, 6, 8);
74cb93a386Sopenharmony_ci    ok = ok &&  (int4(12) / int4(1, 2, 3, 4))                  == int4(12, 6, 4, 3);
75cb93a386Sopenharmony_ci    ok = ok && !(int4(1) == int4(2));
76cb93a386Sopenharmony_ci    ok = ok &&  (int2(1) == int2(1, 1));
77cb93a386Sopenharmony_ci    ok = ok &&  (int2(1, 1) == int2(1, 1));
78cb93a386Sopenharmony_ci    ok = ok && !(int2(1) == int2(1, 0));
79cb93a386Sopenharmony_ci    ok = ok &&  (int4(1) == int4(int2(1), int2(1)));
80cb93a386Sopenharmony_ci    ok = ok &&  (int4(int3(1), 1) == int4(int2(1), int2(1)));
81cb93a386Sopenharmony_ci    ok = ok && !(int4(int3(1), 1) == int4(int2(1), 1, 0));
82cb93a386Sopenharmony_ci    ok = ok &&  (int2(1) != int2(1, 0));
83cb93a386Sopenharmony_ci    ok = ok && !(int4(1) != int4(int2(1), int2(1)));
84cb93a386Sopenharmony_ci    ok = ok &&  ( int4(1) ==  int4(1));
85cb93a386Sopenharmony_ci    ok = ok &&  (-int4(1) == -int4(1));
86cb93a386Sopenharmony_ci    ok = ok &&  ( int4(1) != -int4(1));
87cb93a386Sopenharmony_ci    ok = ok &&  (-int4(1) !=  int4(1));
88cb93a386Sopenharmony_ci    ok = ok &&  ( int4(0) != -int4(1));
89cb93a386Sopenharmony_ci    ok = ok &&  (-int4(0) !=  int4(1));
90cb93a386Sopenharmony_ci    ok = ok &&  (-int4(0) != -int4(1));
91cb93a386Sopenharmony_ci    ok = ok && !(-int4(1) ==  int4(1));
92cb93a386Sopenharmony_ci    ok = ok && !( int4(1) == -int4(1));
93cb93a386Sopenharmony_ci    ok = ok && !( int4(0) ==  int4(1));
94cb93a386Sopenharmony_ci    ok = ok && !( int4(0) == -int4(1));
95cb93a386Sopenharmony_ci    ok = ok && !(-int4(0) ==  int4(1));
96cb93a386Sopenharmony_ci    ok = ok && !(-int4(0) == -int4(1));
97cb93a386Sopenharmony_ci    ok = ok && !(-int4(1) != -int4(1));
98cb93a386Sopenharmony_ci    ok = ok &&  (int4(unknown) * int4(1) == int4(unknown));
99cb93a386Sopenharmony_ci    ok = ok &&  (int4(1) * int4(unknown) == int4(unknown));
100cb93a386Sopenharmony_ci    ok = ok &&  (int4(unknown) * int4(0) == int4(0));
101cb93a386Sopenharmony_ci    ok = ok &&  (int4(0) * int4(unknown) == int4(0));
102cb93a386Sopenharmony_ci    ok = ok &&  (int4(0) / int4(unknown) == int4(0));
103cb93a386Sopenharmony_ci    ok = ok &&  (int4(unknown) + int4(0) == int4(unknown));
104cb93a386Sopenharmony_ci    ok = ok &&  (int4(0) + int4(unknown) == int4(unknown));
105cb93a386Sopenharmony_ci    ok = ok &&  (int4(unknown) - int4(0) == int4(unknown));
106cb93a386Sopenharmony_ci
107cb93a386Sopenharmony_ci    int4 val = int4(unknown);
108cb93a386Sopenharmony_ci    val += int4(1);
109cb93a386Sopenharmony_ci    val += int4(0);
110cb93a386Sopenharmony_ci    val -= int4(1);
111cb93a386Sopenharmony_ci    val -= int4(0);
112cb93a386Sopenharmony_ci    val = val + int4(1);
113cb93a386Sopenharmony_ci    val = val + int4(0);
114cb93a386Sopenharmony_ci    val = val - int4(1);
115cb93a386Sopenharmony_ci    val = val - int4(0);
116cb93a386Sopenharmony_ci    ok = ok && (val == int4(unknown));
117cb93a386Sopenharmony_ci    val *= int4(1);
118cb93a386Sopenharmony_ci    val *= int4(2);
119cb93a386Sopenharmony_ci    val /= int4(1);
120cb93a386Sopenharmony_ci    val /= int4(2);
121cb93a386Sopenharmony_ci    val = val * int4(1);
122cb93a386Sopenharmony_ci    val = val * int4(2);
123cb93a386Sopenharmony_ci    val = val / int4(1);
124cb93a386Sopenharmony_ci    val = val / int4(2);
125cb93a386Sopenharmony_ci    ok = ok && (val == int4(unknown));
126cb93a386Sopenharmony_ci
127cb93a386Sopenharmony_ci    return ok;
128cb93a386Sopenharmony_ci}
129cb93a386Sopenharmony_ci
130cb93a386Sopenharmony_cihalf4 main(float2 coords) {
131cb93a386Sopenharmony_ci    return test_half() && test_int() ? colorGreen : colorRed;
132cb93a386Sopenharmony_ci}
133