#version 300

uniform half4 colorGreen, colorRed;

bool test_same_arrays(bool eq, float f1, float f2, float f3) {
    float one = colorGreen.r + 1;
    float a[3]; a[0] = f1;       a[1] = f2;       a[2] = f3;
    float b[3]; b[0] = f1 * one; b[1] = f2 * one; b[2] = f3 * one;
    return eq ? a == b : a != b;
}

bool test_diff_arrays(bool eq, float f1, float f2, float f3) {
    float two = colorGreen.r + 2;
    float a[3]; a[0] = f1;       a[1] = f2;       a[2] = f3;
    float b[3]; b[0] = f1 * two; b[1] = f2 * two; b[2] = f3;
    return eq ? a == b : a != b;
}

vec4 main(vec2 coords) {

    float NAN1 = colorGreen.r/colorGreen.b;
    float NAN2 = colorGreen.b/colorGreen.r;
    float ZP = +colorGreen.r*colorGreen.b;
    float ZM = -colorGreen.r*colorGreen.b;
    float F42 = colorGreen.g * 42.0;
    float F43 = colorGreen.g * 43.0;
    float F44 = colorGreen.g * 44.0;

    bool EQ = true;     // Tests for ==
    bool NE = false;    // Tests for !=

    return  true
            && test_same_arrays(EQ, F42, ZM, ZP)      // equal, including -0 and +0 values
            && !test_same_arrays(NE, F42, ZM, ZP)     // not (not equal)
            && test_same_arrays(NE, F42, NAN1, NAN2)  // NA values always not equal
            && !test_same_arrays(EQ, F42, NAN1, NAN2)
            && test_diff_arrays(NE, F42, F43, F44)    // one of the normal values not equal
            && !test_diff_arrays(EQ, F42, F43, F44)
            && test_diff_arrays(NE, NAN1, ZM, ZP)     // one of the normal values not equal
            && !test_diff_arrays(EQ, NAN1, ZM, ZP)
           ? colorGreen : colorRed;
}
