1uniform half4 colorRed, colorGreen; 2uniform float unknownInput; 3 4bool test() { 5 half unknown = half(unknownInput); 6 7 bool ok = true; 8 half x = 32.0 + 2.0; 9 ok = ok && (x == 34); 10 x = 32.0 - 2.0; 11 ok = ok && (x == 30); 12 x = 32.0 * 2.0; 13 ok = ok && (x == 64); 14 x = 32.0 / 2.0; 15 ok = ok && (x == 16); 16 x = (12 > 2.0) ? (10 * 2 / 5 + 18 - 3) : 0; 17 ok = ok && (x == 19); 18 x = 0.0 == 0.0 ? 1 : -1; 19 ok = ok && (x == 1); 20 x = 0.0 == 1.0 ? 2 : -2; 21 ok = ok && (x == -2); 22 x = 0.0 != 1.0 ? 3 : -3; 23 ok = ok && (x == 3); 24 x = 0.0 != 0.0 ? 4 : -4; 25 ok = ok && (x == -4); 26 x = 6.0 > 5.0 ? 5 : -5; 27 ok = ok && (x == 5); 28 x = 6.0 > 6.0 ? 6 : -6; 29 ok = ok && (x == -6); 30 x = 6.0 >= 6.0 ? 7 : -7; 31 ok = ok && (x == 7); 32 x = 6.0 >= 7.0 ? 8 : -8; 33 ok = ok && (x == -8); 34 x = 5.0 < 6.0 ? 9 : -9; 35 ok = ok && (x == 9); 36 x = 6.0 < 6.0 ? 10 : -10; 37 ok = ok && (x == -10); 38 x = 6.0 <= 6.0 ? 11 : -11; 39 ok = ok && (x == 11); 40 x = 6.0 <= 5.0 ? 12 : -12; 41 ok = ok && (x == -12); 42 43 x = half(unknown + 0); 44 ok = ok && (x == unknown); 45 x = half(0 + unknown); 46 ok = ok && (x == unknown); 47 x = half(unknown - 0); 48 ok = ok && (x == unknown); 49 x = half(unknown * 0); 50 ok = ok && (x == 0); 51 x = half(unknown * 1); 52 ok = ok && (x == unknown); 53 x = half(1 * unknown); 54 ok = ok && (x == unknown); 55 x = half(0 * unknown); 56 ok = ok && (x == 0); 57 x = half(unknown / 1); 58 ok = ok && (x == unknown); 59 x = half(0 / unknown); // this should NOT optimize away 60 ok = ok && (x == 0); 61 x += 1; 62 ok = ok && (x == 1); 63 x += 0; 64 ok = ok && (x == 1); 65 x -= 2; 66 ok = ok && (x == -1); 67 x -= 0; 68 ok = ok && (x == -1); 69 x *= 1; 70 ok = ok && (x == -1); 71 x *= 2; 72 ok = ok && (x == -2); 73 x /= 1; 74 ok = ok && (x == -2); 75 x /= 2; 76 ok = ok && (x == -1); 77 return ok; 78} 79 80half4 main(float2 coords) { 81 return test() ? colorGreen : colorRed; 82} 83