1cb93a386Sopenharmony_ciuniform half4 colorGreen, colorRed;
2cb93a386Sopenharmony_ci
3cb93a386Sopenharmony_cibool test_float() {
4cb93a386Sopenharmony_ci    bool ok = true;
5cb93a386Sopenharmony_ci
6cb93a386Sopenharmony_ci    float2x3 m23 = float2x3(2);
7cb93a386Sopenharmony_ci    ok = ok && (m23 == float2x3(2, 0, 0,
8cb93a386Sopenharmony_ci                                0, 2, 0));
9cb93a386Sopenharmony_ci    float2x4 m24 = float2x4(3);
10cb93a386Sopenharmony_ci    ok = ok && (m24 == float2x4(3, 0, 0, 0,
11cb93a386Sopenharmony_ci                                0, 3, 0, 0));
12cb93a386Sopenharmony_ci    float3x2 m32 = float3x2(4);
13cb93a386Sopenharmony_ci    ok = ok && (m32 == float3x2(4, 0,
14cb93a386Sopenharmony_ci                                0, 4,
15cb93a386Sopenharmony_ci                                0, 0));
16cb93a386Sopenharmony_ci    float3x4 m34 = float3x4(5);
17cb93a386Sopenharmony_ci    ok = ok && (m34 == float3x4(5, 0, 0, 0,
18cb93a386Sopenharmony_ci                                0, 5, 0, 0,
19cb93a386Sopenharmony_ci                                0, 0, 5, 0));
20cb93a386Sopenharmony_ci    float4x2 m42 = float4x2(6);
21cb93a386Sopenharmony_ci    ok = ok && (m42 == float4x2(6, 0,
22cb93a386Sopenharmony_ci                                0, 6,
23cb93a386Sopenharmony_ci                                0, 0,
24cb93a386Sopenharmony_ci                                0, 0));
25cb93a386Sopenharmony_ci    float4x3 m43 = float4x3(7);
26cb93a386Sopenharmony_ci    ok = ok && (m43 == float4x3(7, 0, 0,
27cb93a386Sopenharmony_ci                                0, 7, 0,
28cb93a386Sopenharmony_ci                                0, 0, 7,
29cb93a386Sopenharmony_ci                                0, 0, 0));
30cb93a386Sopenharmony_ci    float2x2 m22 = m32 * m23;
31cb93a386Sopenharmony_ci    ok = ok && (m22 == float2x2(2 * 4));
32cb93a386Sopenharmony_ci    float3x3 m33 = m43 * m34;
33cb93a386Sopenharmony_ci    ok = ok && (m33 == float3x3(7 * 5));
34cb93a386Sopenharmony_ci    float4x4 m44 = m24 * m42;
35cb93a386Sopenharmony_ci
36cb93a386Sopenharmony_ci    m23 += 1;
37cb93a386Sopenharmony_ci    ok = ok && (m23 == float2x3(3, 1, 1,
38cb93a386Sopenharmony_ci                                1, 3, 1));
39cb93a386Sopenharmony_ci    m32 -= 2;
40cb93a386Sopenharmony_ci    ok = ok && (m32 == float3x2(2, -2,
41cb93a386Sopenharmony_ci                                -2, 2,
42cb93a386Sopenharmony_ci                                -2, -2));
43cb93a386Sopenharmony_ci    m24 /= 4;
44cb93a386Sopenharmony_ci    ok = ok && (m24 == float2x4(0.75, 0, 0, 0,
45cb93a386Sopenharmony_ci                                0, 0.75, 0, 0));
46cb93a386Sopenharmony_ci    return ok;
47cb93a386Sopenharmony_ci}
48cb93a386Sopenharmony_ci
49cb93a386Sopenharmony_cibool test_half() {
50cb93a386Sopenharmony_ci    bool ok = true;
51cb93a386Sopenharmony_ci
52cb93a386Sopenharmony_ci    half2x3 m23 = half2x3(2);
53cb93a386Sopenharmony_ci    ok = ok && (m23 == half2x3(2, 0, 0,
54cb93a386Sopenharmony_ci                               0, 2, 0));
55cb93a386Sopenharmony_ci    half2x4 m24 = half2x4(3);
56cb93a386Sopenharmony_ci    ok = ok && (m24 == half2x4(3, 0, 0, 0,
57cb93a386Sopenharmony_ci                               0, 3, 0, 0));
58cb93a386Sopenharmony_ci    half3x2 m32 = half3x2(4);
59cb93a386Sopenharmony_ci    ok = ok && (m32 == half3x2(4, 0,
60cb93a386Sopenharmony_ci                               0, 4,
61cb93a386Sopenharmony_ci                               0, 0));
62cb93a386Sopenharmony_ci    half3x4 m34 = half3x4(5);
63cb93a386Sopenharmony_ci    ok = ok && (m34 == half3x4(5, 0, 0, 0,
64cb93a386Sopenharmony_ci                               0, 5, 0, 0,
65cb93a386Sopenharmony_ci                               0, 0, 5, 0));
66cb93a386Sopenharmony_ci    half4x2 m42 = half4x2(6);
67cb93a386Sopenharmony_ci    ok = ok && (m42 == half4x2(6, 0,
68cb93a386Sopenharmony_ci                               0, 6,
69cb93a386Sopenharmony_ci                               0, 0,
70cb93a386Sopenharmony_ci                               0, 0));
71cb93a386Sopenharmony_ci    half4x3 m43 = half4x3(7);
72cb93a386Sopenharmony_ci    ok = ok && (m43 == half4x3(7, 0, 0,
73cb93a386Sopenharmony_ci                               0, 7, 0,
74cb93a386Sopenharmony_ci                               0, 0, 7,
75cb93a386Sopenharmony_ci                               0, 0, 0));
76cb93a386Sopenharmony_ci    half2x2 m22 = m32 * m23;
77cb93a386Sopenharmony_ci    ok = ok && (m22 == half2x2(2 * 4));
78cb93a386Sopenharmony_ci    half3x3 m33 = m43 * m34;
79cb93a386Sopenharmony_ci    ok = ok && (m33 == half3x3(7 * 5));
80cb93a386Sopenharmony_ci    half4x4 m44 = m24 * m42;
81cb93a386Sopenharmony_ci
82cb93a386Sopenharmony_ci    m23 += 1;
83cb93a386Sopenharmony_ci    ok = ok && (m23 == half2x3(3, 1, 1,
84cb93a386Sopenharmony_ci                               1, 3, 1));
85cb93a386Sopenharmony_ci    m32 -= 2;
86cb93a386Sopenharmony_ci    ok = ok && (m32 == half3x2(2, -2,
87cb93a386Sopenharmony_ci                               -2, 2,
88cb93a386Sopenharmony_ci                               -2, -2));
89cb93a386Sopenharmony_ci    m24 /= 4;
90cb93a386Sopenharmony_ci    ok = ok && (m24 == half2x4(0.75, 0, 0, 0,
91cb93a386Sopenharmony_ci                               0, 0.75, 0, 0));
92cb93a386Sopenharmony_ci    return ok;
93cb93a386Sopenharmony_ci}
94cb93a386Sopenharmony_ci
95cb93a386Sopenharmony_cihalf4 main(float2 coords) {
96cb93a386Sopenharmony_ci    return test_float() && test_half() ? colorGreen : colorRed;
97cb93a386Sopenharmony_ci}
98