1cb93a386Sopenharmony_ciuniform half4 colorGreen, colorRed;
2cb93a386Sopenharmony_ci
3cb93a386Sopenharmony_cibool test_fvec() {
4cb93a386Sopenharmony_ci    const float one = 1;
5cb93a386Sopenharmony_ci    float two = 2;
6cb93a386Sopenharmony_ci    const half4 one_splat = half4(1);
7cb93a386Sopenharmony_ci    const half4 one_compound = half4(1, 1, 1, 1);
8cb93a386Sopenharmony_ci
9cb93a386Sopenharmony_ci    bool ok = true;
10cb93a386Sopenharmony_ci    ok = ok && (half4(-1) == -one_splat);
11cb93a386Sopenharmony_ci    ok = ok && (half4(-1, -1, -1, -1) == -one_splat);
12cb93a386Sopenharmony_ci    ok = ok && (half4(-1) == -one_compound);
13cb93a386Sopenharmony_ci    ok = ok && (half4(-1, -1, -1, -1) == -one_compound);
14cb93a386Sopenharmony_ci    ok = ok && (-half4(1) == -one_splat);
15cb93a386Sopenharmony_ci    ok = ok && (-half4(1, 1, 1, 1) == -one_splat);
16cb93a386Sopenharmony_ci    ok = ok && (-half4(1) == -one_compound);
17cb93a386Sopenharmony_ci    ok = ok && (-half4(1, 1, 1, 1) == -one_compound);
18cb93a386Sopenharmony_ci    ok = ok && (half4(-1) == -one_compound);
19cb93a386Sopenharmony_ci    ok = ok && (half4(-1) == -half4(-half2(-1), half2(1)));
20cb93a386Sopenharmony_ci    ok = ok && (half4(1) != -half4(1));
21cb93a386Sopenharmony_ci    ok = ok && (-half4(two) == half4(-two, half3(-two)));
22cb93a386Sopenharmony_ci    ok = ok && (-half2(-one, one + one) == -half2(one - two, two));
23cb93a386Sopenharmony_ci    return ok;
24cb93a386Sopenharmony_ci}
25cb93a386Sopenharmony_ci
26cb93a386Sopenharmony_cibool test_ivec() {
27cb93a386Sopenharmony_ci    int one = 1;
28cb93a386Sopenharmony_ci    const int two = 2;
29cb93a386Sopenharmony_ci    const int4 one_splat = int4(1);
30cb93a386Sopenharmony_ci    const int4 one_compound = int4(1, 1, 1, 1);
31cb93a386Sopenharmony_ci
32cb93a386Sopenharmony_ci    bool ok = true;
33cb93a386Sopenharmony_ci    ok = ok && (int4(-1) == -one_splat);
34cb93a386Sopenharmony_ci    ok = ok && (int4(-1, -1, -1, -1) == -one_splat);
35cb93a386Sopenharmony_ci    ok = ok && (int4(-1) == -one_compound);
36cb93a386Sopenharmony_ci    ok = ok && (int4(-1, -1, -1, -1) == -one_compound);
37cb93a386Sopenharmony_ci    ok = ok && (-int4(1) == -one_splat);
38cb93a386Sopenharmony_ci    ok = ok && (-int4(1, 1, 1, 1) == -one_splat);
39cb93a386Sopenharmony_ci    ok = ok && (-int4(1) == -one_compound);
40cb93a386Sopenharmony_ci    ok = ok && (-int4(1, 1, 1, 1) == -one_compound);
41cb93a386Sopenharmony_ci    ok = ok && (int4(-1) == -int4(-int2(-1), int2(1)));
42cb93a386Sopenharmony_ci    ok = ok && (int4(1) != -int4(1));
43cb93a386Sopenharmony_ci    ok = ok && (-int4(two) == int4(-two, int3(-two)));
44cb93a386Sopenharmony_ci    ok = ok && (-int2(-one, one + one) == -int2(one - two, two));
45cb93a386Sopenharmony_ci    return ok;
46cb93a386Sopenharmony_ci}
47cb93a386Sopenharmony_ci
48cb93a386Sopenharmony_cibool test_mat() {
49cb93a386Sopenharmony_ci    const float3x3 one_diagonal = float3x3(1);
50cb93a386Sopenharmony_ci    const float3x3 one_compound = float3x3(1, 0, 0,
51cb93a386Sopenharmony_ci                                           0, 1, 0,
52cb93a386Sopenharmony_ci                                           0, 0, 1);
53cb93a386Sopenharmony_ci    bool ok = true;
54cb93a386Sopenharmony_ci    ok = ok && (float3x3(-1) == -one_diagonal);
55cb93a386Sopenharmony_ci    ok = ok && (float3x3(-1, 0, 0, 0, -1, 0, 0, 0, -1) == -one_diagonal);
56cb93a386Sopenharmony_ci    ok = ok && (float3x3(-1) == -one_compound);
57cb93a386Sopenharmony_ci    ok = ok && (float3x3(-1, 0, 0, 0, -1, 0, 0, 0, -1) == -one_compound);
58cb93a386Sopenharmony_ci    ok = ok && (-float3x3(1) == -one_diagonal);
59cb93a386Sopenharmony_ci    ok = ok && (-float3x3(1, 0, 0, 0, 1, 0, 0, 0, 1) == -one_diagonal);
60cb93a386Sopenharmony_ci    ok = ok && (-float3x3(1) == -one_compound);
61cb93a386Sopenharmony_ci    ok = ok && (-float3x3(1, 0, 0, 0, 1, 0, 0, 0, 1) == -one_compound);
62cb93a386Sopenharmony_ci    return ok;
63cb93a386Sopenharmony_ci}
64cb93a386Sopenharmony_ci
65cb93a386Sopenharmony_cihalf4 main(float2 coords) {
66cb93a386Sopenharmony_ci    return test_fvec() && test_ivec() && test_mat() ? colorGreen : colorRed;
67cb93a386Sopenharmony_ci}
68