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