uniform half4 colorGreen, colorRed;

bool test_float() {
    bool ok = true;

    float2x3 m23 = float2x3(2);
    ok = ok && (m23 == float2x3(2, 0, 0,
                                0, 2, 0));
    float2x4 m24 = float2x4(3);
    ok = ok && (m24 == float2x4(3, 0, 0, 0,
                                0, 3, 0, 0));
    float3x2 m32 = float3x2(4);
    ok = ok && (m32 == float3x2(4, 0,
                                0, 4,
                                0, 0));
    float3x4 m34 = float3x4(5);
    ok = ok && (m34 == float3x4(5, 0, 0, 0,
                                0, 5, 0, 0,
                                0, 0, 5, 0));
    float4x2 m42 = float4x2(6);
    ok = ok && (m42 == float4x2(6, 0,
                                0, 6,
                                0, 0,
                                0, 0));
    float4x3 m43 = float4x3(7);
    ok = ok && (m43 == float4x3(7, 0, 0,
                                0, 7, 0,
                                0, 0, 7,
                                0, 0, 0));
    float2x2 m22 = m32 * m23;
    ok = ok && (m22 == float2x2(2 * 4));
    float3x3 m33 = m43 * m34;
    ok = ok && (m33 == float3x3(7 * 5));
    float4x4 m44 = m24 * m42;

    m23 += 1;
    ok = ok && (m23 == float2x3(3, 1, 1,
                                1, 3, 1));
    m32 -= 2;
    ok = ok && (m32 == float3x2(2, -2,
                                -2, 2,
                                -2, -2));
    m24 /= 4;
    ok = ok && (m24 == float2x4(0.75, 0, 0, 0,
                                0, 0.75, 0, 0));
    return ok;
}

bool test_half() {
    bool ok = true;

    half2x3 m23 = half2x3(2);
    ok = ok && (m23 == half2x3(2, 0, 0,
                               0, 2, 0));
    half2x4 m24 = half2x4(3);
    ok = ok && (m24 == half2x4(3, 0, 0, 0,
                               0, 3, 0, 0));
    half3x2 m32 = half3x2(4);
    ok = ok && (m32 == half3x2(4, 0,
                               0, 4,
                               0, 0));
    half3x4 m34 = half3x4(5);
    ok = ok && (m34 == half3x4(5, 0, 0, 0,
                               0, 5, 0, 0,
                               0, 0, 5, 0));
    half4x2 m42 = half4x2(6);
    ok = ok && (m42 == half4x2(6, 0,
                               0, 6,
                               0, 0,
                               0, 0));
    half4x3 m43 = half4x3(7);
    ok = ok && (m43 == half4x3(7, 0, 0,
                               0, 7, 0,
                               0, 0, 7,
                               0, 0, 0));
    half2x2 m22 = m32 * m23;
    ok = ok && (m22 == half2x2(2 * 4));
    half3x3 m33 = m43 * m34;
    ok = ok && (m33 == half3x3(7 * 5));
    half4x4 m44 = m24 * m42;

    m23 += 1;
    ok = ok && (m23 == half2x3(3, 1, 1,
                               1, 3, 1));
    m32 -= 2;
    ok = ok && (m32 == half3x2(2, -2,
                               -2, 2,
                               -2, -2));
    m24 /= 4;
    ok = ok && (m24 == half2x4(0.75, 0, 0, 0,
                               0, 0.75, 0, 0));
    return ok;
}

half4 main(float2 coords) {
    return test_float() && test_half() ? colorGreen : colorRed;
}
