1cb93a386Sopenharmony_ciuniform half4 colorRed, colorGreen;
2cb93a386Sopenharmony_ci
3cb93a386Sopenharmony_cibool test() {
4cb93a386Sopenharmony_ci    const float floatOne = 1;
5cb93a386Sopenharmony_ci    const int intOne = 1;
6cb93a386Sopenharmony_ci    const half4 half4One = half4(1);
7cb93a386Sopenharmony_ci    const int4 int4One = int4(1);
8cb93a386Sopenharmony_ci
9cb93a386Sopenharmony_ci    bool ok = true;
10cb93a386Sopenharmony_ci
11cb93a386Sopenharmony_ci    // Typecasting a constant scalar variable should fold away.
12cb93a386Sopenharmony_ci    ok = ok && (int(floatOne) == intOne);
13cb93a386Sopenharmony_ci    ok = ok && (float(intOne) == floatOne);
14cb93a386Sopenharmony_ci
15cb93a386Sopenharmony_ci    // Typecasting a constant vector variable should fold away.
16cb93a386Sopenharmony_ci    ok = ok && (int4(half4One) == int4One);
17cb93a386Sopenharmony_ci    ok = ok && (half4(int4One) == half4One);
18cb93a386Sopenharmony_ci
19cb93a386Sopenharmony_ci    // More complex cases should also fold.
20cb93a386Sopenharmony_ci    ok = ok && (int4(half4One) == int4(intOne));            // cast(vector) == splat(scalar)
21cb93a386Sopenharmony_ci    ok = ok && (half4(int4One) == half4(half(floatOne)));   // cast(vector) == splat(cast(scalar))
22cb93a386Sopenharmony_ci    ok = ok && (half4(intOne) == half4(float4(floatOne)));  // splatcast(sclr) == cast(splat(sclr))
23cb93a386Sopenharmony_ci
24cb93a386Sopenharmony_ci    return ok;
25cb93a386Sopenharmony_ci}
26cb93a386Sopenharmony_ci
27cb93a386Sopenharmony_cihalf4 main(float2 coords) {
28cb93a386Sopenharmony_ci    return test() ? colorGreen : colorRed;
29cb93a386Sopenharmony_ci}
30