uniform half4 colorGreen, colorRed;

bool test_float() {
    const float one = 1;
    float two = 2;

    float4 result;
    result.r = (half4(-1) == -half4(-half2(-1), half2(1))) ? 1 : 0;
    result.g = (half4(1) != -half4(1)) ? 1 : 0;
    result.b = (-half4(two) == half4(-two, half3(-two))) ? 1 : 0;
    result.a = (-half2(-one, one + one) == -half2(one - two, two)) ? 1 : 0;

    return bool(result.r * result.g * result.b * -(-result.a));
}

bool test_int() {
    int one = 1;
    const int two = 2;

    int4 result;
    result.r = (int4(-1) == -int4(-int2(-1), int2(1))) ? 1 : 0;
    result.g = (int4(1) != -int4(1)) ? 1 : 0;
    result.b = (-int4(two) == int4(-two, int3(-two))) ? 1 : 0;
    result.a = (-int2(-one, one + one) == -int2(one - two, two)) ? 1 : 0;

    return bool(-(-result.r) * result.g * result.b * result.a);
}

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