/*#pragma settings SkVMDebugTrace NoES2Restrictions NoTraceVarInSkVMDebugTrace*/
// We use bitwise ops below, which SkVM supports but ES2 technically does not.

uniform half4 colorGreen, colorRed;
uniform int a, b;
uniform float c, d;

half4 main(float2 xy) {
    bool ok = true;

    int a_and_b = a & b;
    int b_and_a = b & a;
    ok = ok && (a_and_b == b_and_a);

    int a_or_b = a | b;
    int b_or_a = b | a;
    ok = ok && (a_or_b == b_or_a);

    int a_xor_b = a ^ b;
    int b_xor_a = b ^ a;
    ok = ok && (a_xor_b == b_xor_a);

    bool a_eq_b = a == b;
    bool b_eq_a = b == a;
    ok = ok && (a_eq_b == b_eq_a);

    bool a_neq_b = a != b;
    bool b_neq_a = b != a;
    ok = ok && (a_neq_b == b_neq_a);

    int a_add_b = a + b;
    int b_add_a = b + a;
    ok = ok && (a_add_b == b_add_a);

    float c_add_d = c + d;
    float d_add_c = d + c;
    ok = ok && (c_add_d == d_add_c);

    int a_mul_b = a * b;
    int b_mul_a = b * a;
    ok = ok && (a_mul_b == b_mul_a);

    float c_mul_d = c * d;
    float d_mul_c = d * c;
    ok = ok && (c_mul_d == d_mul_c);

    return ok ? colorGreen : colorRed;
}
