uniform half4 colorRed, colorGreen;
uniform half  unknownInput;

bool test_half() {
    bool ok = true;

    // Vector op scalar
    half4 x = half4(half2(1), half2(2, 3)) + 5;
    ok = ok && (x == half4(6, 6, 7, 8));
    x = half4(8, half3(10)) - 1;
    ok = ok && (x == half4(7, 9, 9, 9));
    x = half4(half2(8), half2(9)) + 1;
    ok = ok && (x == half4(9, 9, 10, 10));
    x.xyz = half3(2) * 3;
    ok = ok && (x == half4(6, 6, 6, 10));
    x.xy = half2(12) / 4;
    ok = ok && (x == half4(3, 3, 6, 10));

    // (Vector op scalar).swizzle
    x = (half4(12) / 2).yxwz;
    ok = ok && (x == half4(6));

    // Scalar op vector
    x = 5 + half4(half2(1), half2(2, 3));
    ok = ok && (x == half4(6, 6, 7, 8));
    x = 1 - half4(8, half3(10));
    ok = ok && (x == half4(-7, -9, -9, -9));
    x = 1 + half4(half2(8), half2(9));
    ok = ok && (x == half4(9, 9, 10, 10));
    x.xyz = 3 * half3(2);
    ok = ok && (x == half4(6, 6, 6, 10));
    x.xy = 4 / half2(0.5);
    ok = ok && (x == half4(8, 8, 6, 10));
    x = 20 / half4(10, 20, 40, 80);
    ok = ok && (x == half4(2, 1, 0.5, 0.25));

    // (Scalar op vector).swizzle
    x = (12 / half4(2)).yxwz;
    ok = ok && (x == half4(6));

    // Vector op unknown scalar
    half  unknown = unknownInput;
    x = half4(0) + unknown;
    ok = ok && (x == half4(unknown));
    x = half4(0) * unknown;
    ok = ok && (x == half4(0));
    x = half4(0) / unknown;
    ok = ok && (x == half4(0));
    x = half4(1) * unknown;
    ok = ok && (x == half4(unknown));

    // Unknown scalar op vector
    x = unknown * half4(1);
    ok = ok && (x == half4(unknown));
    x = unknown + half4(0);
    ok = ok && (x == half4(unknown));
    x = unknown - half4(0);
    ok = ok && (x == half4(unknown));
    x = unknown / half4(1);
    ok = ok && (x == half4(unknown));

    // Scalar op unknown vector
    x = 0 + half4(unknown);
    ok = ok && (x == half4(unknown));
    x = 0 * half4(unknown);
    ok = ok && (x == half4(0));
    x = 0 / half4(unknown);  // this should NOT optimize away
    ok = ok && (x == half4(0));
    x = 1 * half4(unknown);
    ok = ok && (x == half4(unknown));

    // X = Unknown op scalar
    x = half4(unknown) + 0;
    ok = ok && (x == half4(unknown));
    x = half4(unknown) * 0;
    ok = ok && (x == half4(0));
    x = half4(unknown) * 1;
    ok = ok && (x == half4(unknown));
    x = half4(unknown) - 0;
    ok = ok && (x == half4(unknown));

    // X op= scalar.
    x = half4(unknown);
    x += 1;
    x += 0;
    x -= 1;
    x -= 0;
    x *= 1;
    x /= 1;
    ok = ok && (x == half4(unknown));

    // X = X op scalar.
    x = half4(unknown);
    x = x + 1;
    x = x + 0;
    x = x - 1;
    x = x - 0;
    x = x * 1;
    x = x / 1;
    ok = ok && (x == half4(unknown));

    return ok;
}

bool test_int() {
    bool ok = true;

    // Vector op scalar
    int4 x = int4(int2(1), int2(2, 3)) + 5;
    ok = ok && (x == int4(6, 6, 7, 8));
    x = int4(8, int3(10)) - 1;
    ok = ok && (x == int4(7, 9, 9, 9));
    x = int4(int2(8), int2(9)) + 1;
    ok = ok && (x == int4(9, 9, 10, 10));
    x.xyz = int3(2) * 3;
    ok = ok && (x == int4(6, 6, 6, 10));
    x.xy = int2(12) / 4;
    ok = ok && (x == int4(3, 3, 6, 10));

    // (Vector op scalar).swizzle
    x = (int4(12) / 2).yxwz;
    ok = ok && (x == int4(6));

    // Scalar op vector
    x = 5 + int4(int2(1), int2(2, 3));
    ok = ok && (x == int4(6, 6, 7, 8));
    x = 1 - int4(8, int3(10));
    ok = ok && (x == int4(-7, -9, -9, -9));
    x = 1 + int4(int2(8), int2(9));
    ok = ok && (x == int4(9, 9, 10, 10));
    x.xyz = 3 * int3(2);
    ok = ok && (x == int4(6, 6, 6, 10));
    x.xy = 16 / int2(2);
    ok = ok && (x == int4(8, 8, 6, 10));
    x = 2000 / int4(10, 20, 40, 80);
    ok = ok && (x == int4(200, 100, 50, 25));

    // (Scalar op vector).swizzle
    x = (12 / int4(2)).yxwz;
    ok = ok && (x == int4(6));

    // Vector op unknown scalar
    int  unknown = int(unknownInput);
    x = int4(0) + unknown;
    ok = ok && (x == int4(unknown));
    x = int4(0) * unknown;
    ok = ok && (x == int4(0));
    x = int4(0) / unknown;
    ok = ok && (x == int4(0));
    x = int4(1) * unknown;
    ok = ok && (x == int4(unknown));

    // Unknown scalar op vector
    x = unknown * int4(1);
    ok = ok && (x == int4(unknown));
    x = unknown + int4(0);
    ok = ok && (x == int4(unknown));
    x = unknown - int4(0);
    ok = ok && (x == int4(unknown));
    x = unknown / int4(1);
    ok = ok && (x == int4(unknown));

    // Scalar op unknown vector
    x = 0 + int4(unknown);
    ok = ok && (x == int4(unknown));
    x = 0 * int4(unknown);
    ok = ok && (x == int4(0));
    x = 0 / int4(unknown);
    ok = ok && (x == int4(0));
    x = 1 * int4(unknown);
    ok = ok && (x == int4(unknown));

    // Unknown vector op scalar
    x = int4(unknown) + 0;
    ok = ok && (x == int4(unknown));
    x = int4(unknown) * 0;
    ok = ok && (x == int4(0));
    x = int4(unknown) * 1;
    ok = ok && (x == int4(unknown));
    x = int4(unknown) - 0;
    ok = ok && (x == int4(unknown));

    // X op= scalar.
    x = int4(unknown);
    x += 1;
    x += 0;
    x -= 1;
    x -= 0;
    x *= 1;
    x /= 1;
    ok = ok && (x == int4(unknown));

    // X = X op scalar.
    x = int4(unknown);
    x = x + 1;
    x = x + 0;
    x = x - 1;
    x = x - 0;
    x = x * 1;
    x = x / 1;
    ok = ok && (x == int4(unknown));

    return ok;
}

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