uniform half4 testInputs, colorGreen, colorRed;

half4 constant_swizzle() {
    half4 v = testInputs;
    half x = v[0];
    half y = v[1];
    half z = v[2];
    half w = v[3];
    return half4(x, y, z, w); // -1.25, 0, 0.75, 2.25
}

half4 foldable_index() {
    const int ZERO = 0, ONE = 1, TWO = 2, THREE = 3;
    half x = testInputs[ZERO];
    half y = testInputs[ONE];
    half z = testInputs[TWO];
    half w = testInputs[THREE];
    return half4(x, y, z, w); // -1.25, 0, 0.75, 2.25
}

half4 foldable() {
    half4 v = half4(0, 1, 2, 3);
    half x = v[0];
    half y = v[1];
    half z = v[2];
    half w = v[3];
    return half4(x, y, z, w); // 0, 1, 2, 3
}

half4 main(float2 coords) {
    half4 a = constant_swizzle();
    half4 b = foldable_index();
    half4 c = foldable();

    return a == half4(-1.25, 0, 0.75, 2.25)   &&
           b == half4(-1.25, 0, 0.75, 2.25)   &&
           c == half4(0, 1, 2, 3)             ? colorGreen : colorRed;
}
