
out vec4 sk_FragColor;
uniform vec4 colorRed;
uniform vec4 colorGreen;
bool test_matrix_op_matrix_half_b() {
    bool ok = true;
    {
        const mat3x2 splat_4 = mat3x2(4.0, 4.0, 4.0, 4.0, 4.0, 4.0);
        mat3x2 m;
        m = mat3x2(2.0);
        m += splat_4;
        ok = ok && m == mat3x2(6.0, 4.0, 4.0, 6.0, 4.0, 4.0);
        m = mat3x2(2.0);
        m -= splat_4;
        ok = ok && m == mat3x2(-2.0, -4.0, -4.0, -2.0, -4.0, -4.0);
        m = mat3x2(2.0);
        m /= splat_4;
        ok = ok && m == mat3x2(0.5);
    }
    {
        const mat2x3 splat_4 = mat2x3(4.0, 4.0, 4.0, 4.0, 4.0, 4.0);
        mat2x3 m;
        m = splat_4;
        m += mat2x3(2.0);
        ok = ok && m == mat2x3(6.0, 4.0, 4.0, 4.0, 6.0, 4.0);
        m = splat_4;
        m -= mat2x3(2.0);
        ok = ok && m == mat2x3(2.0, 4.0, 4.0, 4.0, 2.0, 4.0);
        m = splat_4;
        m /= mat2x3(2.0, 2.0, 2.0, 2.0, 2.0, 2.0);
        ok = ok && m == mat2x3(2.0, 2.0, 2.0, 2.0, 2.0, 2.0);
    }
    {
        mat4x3 m = mat4x3(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0);
        m += mat4x3(16.0, 15.0, 14.0, 13.0, 12.0, 11.0, 10.0, 9.0, 8.0, 7.0, 6.0, 5.0);
        ok = ok && m == mat4x3(17.0, 17.0, 17.0, 17.0, 17.0, 17.0, 17.0, 17.0, 17.0, 17.0, 17.0, 17.0);
    }
    {
        mat4x2 m = mat4x2(10.0, 20.0, 30.0, 40.0, 50.0, 60.0, 70.0, 80.0);
        m -= mat4x2(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0);
        ok = ok && m == mat4x2(9.0, 18.0, 27.0, 36.0, 45.0, 54.0, 63.0, 72.0);
    }
    {
        mat2x4 m = mat2x4(10.0, 20.0, 30.0, 40.0, 10.0, 20.0, 30.0, 40.0);
        m /= mat2x4(10.0, 10.0, 10.0, 10.0, 5.0, 5.0, 5.0, 5.0);
        ok = ok && m == mat2x4(1.0, 2.0, 3.0, 4.0, 2.0, 4.0, 6.0, 8.0);
    }
    {
        mat2x3 m = mat2x3(7.0, 9.0, 11.0, 8.0, 10.0, 12.0);
        m *= mat2(1.0, 4.0, 2.0, 5.0);
        ok = ok && m == mat2x3(39.0, 49.0, 59.0, 54.0, 68.0, 82.0);
    }
    return ok;
}
vec4 main() {
    bool _0_ok = true;
    {
        const mat3x2 _1_splat_4 = mat3x2(4.0, 4.0, 4.0, 4.0, 4.0, 4.0);
        mat3x2 _2_m;
        _2_m = mat3x2(2.0);
        _2_m += _1_splat_4;
        _0_ok = _0_ok && _2_m == mat3x2(6.0, 4.0, 4.0, 6.0, 4.0, 4.0);
        _2_m = mat3x2(2.0);
        _2_m -= _1_splat_4;
        _0_ok = _0_ok && _2_m == mat3x2(-2.0, -4.0, -4.0, -2.0, -4.0, -4.0);
        _2_m = mat3x2(2.0);
        _2_m /= _1_splat_4;
        _0_ok = _0_ok && _2_m == mat3x2(0.5);
    }
    {
        const mat2x3 _3_splat_4 = mat2x3(4.0, 4.0, 4.0, 4.0, 4.0, 4.0);
        mat2x3 _4_m;
        _4_m = _3_splat_4;
        _4_m += mat2x3(2.0);
        _0_ok = _0_ok && _4_m == mat2x3(6.0, 4.0, 4.0, 4.0, 6.0, 4.0);
        _4_m = _3_splat_4;
        _4_m -= mat2x3(2.0);
        _0_ok = _0_ok && _4_m == mat2x3(2.0, 4.0, 4.0, 4.0, 2.0, 4.0);
        _4_m = _3_splat_4;
        _4_m /= mat2x3(2.0, 2.0, 2.0, 2.0, 2.0, 2.0);
        _0_ok = _0_ok && _4_m == mat2x3(2.0, 2.0, 2.0, 2.0, 2.0, 2.0);
    }
    {
        mat4x3 _5_m = mat4x3(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0);
        _5_m += mat4x3(16.0, 15.0, 14.0, 13.0, 12.0, 11.0, 10.0, 9.0, 8.0, 7.0, 6.0, 5.0);
        _0_ok = _0_ok && _5_m == mat4x3(17.0, 17.0, 17.0, 17.0, 17.0, 17.0, 17.0, 17.0, 17.0, 17.0, 17.0, 17.0);
    }
    {
        mat4x2 _6_m = mat4x2(10.0, 20.0, 30.0, 40.0, 50.0, 60.0, 70.0, 80.0);
        _6_m -= mat4x2(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0);
        _0_ok = _0_ok && _6_m == mat4x2(9.0, 18.0, 27.0, 36.0, 45.0, 54.0, 63.0, 72.0);
    }
    {
        mat2x4 _7_m = mat2x4(10.0, 20.0, 30.0, 40.0, 10.0, 20.0, 30.0, 40.0);
        _7_m /= mat2x4(10.0, 10.0, 10.0, 10.0, 5.0, 5.0, 5.0, 5.0);
        _0_ok = _0_ok && _7_m == mat2x4(1.0, 2.0, 3.0, 4.0, 2.0, 4.0, 6.0, 8.0);
    }
    {
        mat2x3 _8_m = mat2x3(7.0, 9.0, 11.0, 8.0, 10.0, 12.0);
        _8_m *= mat2(1.0, 4.0, 2.0, 5.0);
        _0_ok = _0_ok && _8_m == mat2x3(39.0, 49.0, 59.0, 54.0, 68.0, 82.0);
    }
    return _0_ok && test_matrix_op_matrix_half_b() ? colorGreen : colorRed;
}
