uniform half4 testInputs;
uniform half4 colorGreen, colorRed;

half4 main(float2 coords) {
    int4 intValues       = int4(testInputs * 100);

    int4 expectedA       = int4(-100,     0,  75, 100);

    const int4 clampLow  = int4(-100, -200, -200, 100);
    const int4 constVal  = int4(-125,    0,   75, 225);
    int4 expectedB       = int4(-100,    0,   50, 225);
    const int4 clampHigh = int4( 100,  200,   50, 300);

    return (clamp(intValues.x,    -100, 100)                      == expectedA.x     &&
            clamp(intValues.xy,   -100, 100)                      == expectedA.xy    &&
            clamp(intValues.xyz,  -100, 100)                      == expectedA.xyz   &&
            clamp(intValues.xyzw, -100, 100)                      == expectedA.xyzw  &&
            clamp(constVal.x,     -100, 100)                      == expectedA.x     &&
            clamp(constVal.xy,    -100, 100)                      == expectedA.xy    &&
            clamp(constVal.xyz,   -100, 100)                      == expectedA.xyz   &&
            clamp(constVal.xyzw,  -100, 100)                      == expectedA.xyzw  &&
            clamp(intValues.x,     clampLow.x,    clampHigh.x   ) == expectedB.x     &&
            clamp(intValues.xy,    clampLow.xy,   clampHigh.xy  ) == expectedB.xy    &&
            clamp(intValues.xyz,   clampLow.xyz,  clampHigh.xyz ) == expectedB.xyz   &&
            clamp(intValues.xyzw,  clampLow.xyzw, clampHigh.xyzw) == expectedB.xyzw  &&
            clamp(constVal.x,      clampLow.x,    clampHigh.x   ) == expectedB.x     &&
            clamp(constVal.xy,     clampLow.xy,   clampHigh.xy  ) == expectedB.xy    &&
            clamp(constVal.xyz,    clampLow.xyz,  clampHigh.xyz ) == expectedB.xyz   &&
            clamp(constVal.xyzw,   clampLow.xyzw, clampHigh.xyzw) == expectedB.xyzw) ? colorGreen
                                                                                     : colorRed;
}
