1cb93a386Sopenharmony_ciuniform half4 colorGreen, colorRed;
2cb93a386Sopenharmony_ci
3cb93a386Sopenharmony_cibool test_float() {
4cb93a386Sopenharmony_ci    bool ok = true;
5cb93a386Sopenharmony_ci
6cb93a386Sopenharmony_ci    float2x2 m1 = float2x2(float4(1, 2, 3, 4));
7cb93a386Sopenharmony_ci    ok = ok && (m1 == float2x2(1, 2, 3, 4));
8cb93a386Sopenharmony_ci
9cb93a386Sopenharmony_ci    // This generates {5, 0, 0, 5} on some Radeon GPUs.
10cb93a386Sopenharmony_ci//    float2x2 m2 = float2x2(float4(5));
11cb93a386Sopenharmony_ci//    ok = ok && (m2 == float2x2(5, 5, 5, 5));
12cb93a386Sopenharmony_ci
13cb93a386Sopenharmony_ci    float2x2 m3 = float2x2(m1);
14cb93a386Sopenharmony_ci    ok = ok && (m3 == float2x2(1, 2, 3, 4));
15cb93a386Sopenharmony_ci
16cb93a386Sopenharmony_ci    float2x2 m4 = float2x2(6);
17cb93a386Sopenharmony_ci    ok = ok && (m4 == float2x2(6, 0, 0, 6));
18cb93a386Sopenharmony_ci
19cb93a386Sopenharmony_ci    m3 *= m4;
20cb93a386Sopenharmony_ci    ok = ok && (m3 == float2x2(6, 12, 18, 24));
21cb93a386Sopenharmony_ci
22cb93a386Sopenharmony_ci    float2x2 m5 = float2x2(m1[1][1]);
23cb93a386Sopenharmony_ci    ok = ok && (m5 == float2x2(4, 0, 0, 4));
24cb93a386Sopenharmony_ci
25cb93a386Sopenharmony_ci    m1 += m5;
26cb93a386Sopenharmony_ci    ok = ok && (m1 == float2x2(5, 2, 3, 8));
27cb93a386Sopenharmony_ci
28cb93a386Sopenharmony_ci    float2x2 m7 = float2x2(5, float3(6, 7, 8));
29cb93a386Sopenharmony_ci    ok = ok && (m7 == float2x2(5, 6, 7, 8));
30cb93a386Sopenharmony_ci
31cb93a386Sopenharmony_ci    float3x3 m9 = float3x3(9);
32cb93a386Sopenharmony_ci    ok = ok && (m9 == float3x3(9, 0, 0, 0, 9, 0, 0, 0, 9));
33cb93a386Sopenharmony_ci
34cb93a386Sopenharmony_ci    float4x4 m10 = float4x4(11);
35cb93a386Sopenharmony_ci    ok = ok && (m10 == float4x4(11, 0, 0, 0, 0, 11, 0, 0, 0, 0, 11, 0, 0, 0, 0, 11));
36cb93a386Sopenharmony_ci
37cb93a386Sopenharmony_ci    float4x4 m11 = float4x4(20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20);
38cb93a386Sopenharmony_ci    m11 -= m10;
39cb93a386Sopenharmony_ci    ok = ok && (m11 == float4x4(9, 20, 20, 20, 20, 9, 20, 20, 20, 20, 9, 20, 20, 20, 20, 9));
40cb93a386Sopenharmony_ci
41cb93a386Sopenharmony_ci    return ok;
42cb93a386Sopenharmony_ci}
43cb93a386Sopenharmony_ci
44cb93a386Sopenharmony_cibool test_half() {
45cb93a386Sopenharmony_ci    bool ok = true;
46cb93a386Sopenharmony_ci
47cb93a386Sopenharmony_ci    half2x2 m1 = half2x2(half4(1, 2, 3, 4));
48cb93a386Sopenharmony_ci    ok = ok && (m1 == half2x2(1, 2, 3, 4));
49cb93a386Sopenharmony_ci
50cb93a386Sopenharmony_ci    // This generates {5, 0, 0, 5} on some Radeon GPUs.
51cb93a386Sopenharmony_ci//    half2x2 m2 = half2x2(half4(5));
52cb93a386Sopenharmony_ci//    ok = ok && (m2 == half2x2(5, 5, 5, 5));
53cb93a386Sopenharmony_ci
54cb93a386Sopenharmony_ci    half2x2 m3 = half2x2(m1);
55cb93a386Sopenharmony_ci    ok = ok && (m3 == half2x2(1, 2, 3, 4));
56cb93a386Sopenharmony_ci
57cb93a386Sopenharmony_ci    half2x2 m4 = half2x2(6);
58cb93a386Sopenharmony_ci    ok = ok && (m4 == half2x2(6, 0, 0, 6));
59cb93a386Sopenharmony_ci
60cb93a386Sopenharmony_ci    m3 *= m4;
61cb93a386Sopenharmony_ci    ok = ok && (m3 == half2x2(6, 12, 18, 24));
62cb93a386Sopenharmony_ci
63cb93a386Sopenharmony_ci    half2x2 m5 = half2x2(m1[1][1]);
64cb93a386Sopenharmony_ci    ok = ok && (m5 == half2x2(4, 0, 0, 4));
65cb93a386Sopenharmony_ci
66cb93a386Sopenharmony_ci    m1 += m5;
67cb93a386Sopenharmony_ci    ok = ok && (m1 == half2x2(5, 2, 3, 8));
68cb93a386Sopenharmony_ci
69cb93a386Sopenharmony_ci    half2x2 m7 = half2x2(5, half3(6, 7, 8));
70cb93a386Sopenharmony_ci    ok = ok && (m7 == half2x2(5, 6, 7, 8));
71cb93a386Sopenharmony_ci
72cb93a386Sopenharmony_ci    half3x3 m9 = half3x3(9);
73cb93a386Sopenharmony_ci    ok = ok && (m9 == half3x3(9, 0, 0, 0, 9, 0, 0, 0, 9));
74cb93a386Sopenharmony_ci
75cb93a386Sopenharmony_ci    half4x4 m10 = half4x4(11);
76cb93a386Sopenharmony_ci    ok = ok && (m10 == half4x4(11, 0, 0, 0, 0, 11, 0, 0, 0, 0, 11, 0, 0, 0, 0, 11));
77cb93a386Sopenharmony_ci
78cb93a386Sopenharmony_ci    half4x4 m11 = half4x4(20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20);
79cb93a386Sopenharmony_ci    m11 -= m10;
80cb93a386Sopenharmony_ci    ok = ok && (m11 == half4x4(9, 20, 20, 20, 20, 9, 20, 20, 20, 20, 9, 20, 20, 20, 20, 9));
81cb93a386Sopenharmony_ci
82cb93a386Sopenharmony_ci    return ok;
83cb93a386Sopenharmony_ci}
84cb93a386Sopenharmony_ci
85cb93a386Sopenharmony_cibool test_comma() {
86cb93a386Sopenharmony_ci    float2x2 x, y;
87cb93a386Sopenharmony_ci    return (x = float2x2(1, 2, 3, 4),
88cb93a386Sopenharmony_ci            y = 0.5 * float2x2(2, 4, 6, 8),
89cb93a386Sopenharmony_ci            x == y);
90cb93a386Sopenharmony_ci}
91cb93a386Sopenharmony_ci
92cb93a386Sopenharmony_cihalf4 main(float2 coords) {
93cb93a386Sopenharmony_ci    return test_float() && test_half() && test_comma() ? colorGreen : colorRed;
94cb93a386Sopenharmony_ci}
95