uniform half4 testInputs;
uniform half4 colorGreen, colorRed;

half4 main(float2 coords) {
    half4 expectedA       = half4(-1,     0,  0.75, 1);

    const half4 clampLow  = half4(-1,    -2, -2,    1);
    const half4 constVal  = half4(-1.25,  0,  0.75, 2.25);
    half4 expectedB       = half4(-1,     0,  0.5,  2.25);
    const half4 clampHigh = half4( 1,     2,  0.5,  3);

    return (clamp(testInputs.x,    -1, 1)                         == expectedA.x     &&
            clamp(testInputs.xy,   -1, 1)                         == expectedA.xy    &&
            clamp(testInputs.xyz,  -1, 1)                         == expectedA.xyz   &&
            clamp(testInputs.xyzw, -1, 1)                         == expectedA.xyzw  &&
            clamp(testInputs.x,    clampLow.x,    clampHigh.x   ) == expectedB.x     &&
            clamp(testInputs.xy,   clampLow.xy,   clampHigh.xy  ) == expectedB.xy    &&
            clamp(testInputs.xyz,  clampLow.xyz,  clampHigh.xyz ) == expectedB.xyz   &&
            clamp(testInputs.xyzw, clampLow.xyzw, clampHigh.xyzw) == expectedB.xyzw  &&
            clamp(constVal.x,      -1, 1)                         == expectedA.x     &&
            clamp(constVal.xy,     -1, 1)                         == expectedA.xy    &&
            clamp(constVal.xyz,    -1, 1)                         == expectedA.xyz   &&
            clamp(constVal.xyzw,   -1, 1)                         == expectedA.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;
}
