1cb93a386Sopenharmony_ciuniform half unknownInput; 2cb93a386Sopenharmony_ciuniform half4 colorRed, colorGreen; 3cb93a386Sopenharmony_ci 4cb93a386Sopenharmony_cibool test_half() { 5cb93a386Sopenharmony_ci half unknown = unknownInput; 6cb93a386Sopenharmony_ci 7cb93a386Sopenharmony_ci bool ok = true; 8cb93a386Sopenharmony_ci ok = ok && (half4(half2(1), half2(2, 3)) + half4(5, 6, 7, 8)) == half4(6, 7, 9, 11); 9cb93a386Sopenharmony_ci ok = ok && (half4(8, half3(10)) - half4(1)) == half4(7, 9, 9, 9); 10cb93a386Sopenharmony_ci ok = ok && (half4(2) * half4(1, 2, 3, 4)) == half4(2, 4, 6, 8); 11cb93a386Sopenharmony_ci ok = ok && (half4(12) / half4(1, 2, 3, 4)) == half4(12, 6, 4, 3); 12cb93a386Sopenharmony_ci ok = ok && !(half4(1) == half4(2)); 13cb93a386Sopenharmony_ci ok = ok && (half2(1) == half2(1, 1)); 14cb93a386Sopenharmony_ci ok = ok && (half2(1, 1) == half2(1, 1)); 15cb93a386Sopenharmony_ci ok = ok && !(half2(1) == half2(1, 0)); 16cb93a386Sopenharmony_ci ok = ok && (half4(1) == half4(half2(1), half2(1))); 17cb93a386Sopenharmony_ci ok = ok && (half4(half3(1), 1) == half4(half2(1), half2(1))); 18cb93a386Sopenharmony_ci ok = ok && !(half4(half3(1), 1) == half4(half2(1), 1, 0)); 19cb93a386Sopenharmony_ci ok = ok && (half2(1) != half2(1, 0)); 20cb93a386Sopenharmony_ci ok = ok && !(half4(1) != half4(half2(1), half2(1))); 21cb93a386Sopenharmony_ci ok = ok && ( half4(1) == half4(1)); 22cb93a386Sopenharmony_ci ok = ok && (-half4(1) == -half4(1)); 23cb93a386Sopenharmony_ci ok = ok && ( half4(1) != -half4(1)); 24cb93a386Sopenharmony_ci ok = ok && (-half4(1) != half4(1)); 25cb93a386Sopenharmony_ci ok = ok && ( half4(0) != -half4(1)); 26cb93a386Sopenharmony_ci ok = ok && (-half4(0) != half4(1)); 27cb93a386Sopenharmony_ci ok = ok && (-half4(0) != -half4(1)); 28cb93a386Sopenharmony_ci ok = ok && !(-half4(1) == half4(1)); 29cb93a386Sopenharmony_ci ok = ok && !( half4(1) == -half4(1)); 30cb93a386Sopenharmony_ci ok = ok && !( half4(0) == half4(1)); 31cb93a386Sopenharmony_ci ok = ok && !( half4(0) == -half4(1)); 32cb93a386Sopenharmony_ci ok = ok && !(-half4(0) == half4(1)); 33cb93a386Sopenharmony_ci ok = ok && !(-half4(0) == -half4(1)); 34cb93a386Sopenharmony_ci ok = ok && !(-half4(1) != -half4(1)); 35cb93a386Sopenharmony_ci ok = ok && (half4(unknown) * half4(1) == half4(unknown)); 36cb93a386Sopenharmony_ci ok = ok && (half4(1) * half4(unknown) == half4(unknown)); 37cb93a386Sopenharmony_ci ok = ok && (half4(unknown) * half4(0) == half4(0)); 38cb93a386Sopenharmony_ci ok = ok && (half4(0) * half4(unknown) == half4(0)); 39cb93a386Sopenharmony_ci ok = ok && (half4(0) / half4(unknown) == half4(0)); // this should NOT optimize away 40cb93a386Sopenharmony_ci ok = ok && (half4(unknown) + half4(0) == half4(unknown)); 41cb93a386Sopenharmony_ci ok = ok && (half4(0) + half4(unknown) == half4(unknown)); 42cb93a386Sopenharmony_ci ok = ok && (half4(unknown) - half4(0) == half4(unknown)); 43cb93a386Sopenharmony_ci 44cb93a386Sopenharmony_ci half4 val = half4(unknown); 45cb93a386Sopenharmony_ci val += half4(1); 46cb93a386Sopenharmony_ci val += half4(0); 47cb93a386Sopenharmony_ci val -= half4(1); 48cb93a386Sopenharmony_ci val -= half4(0); 49cb93a386Sopenharmony_ci val = val + half4(1); 50cb93a386Sopenharmony_ci val = val + half4(0); 51cb93a386Sopenharmony_ci val = val - half4(1); 52cb93a386Sopenharmony_ci val = val - half4(0); 53cb93a386Sopenharmony_ci ok = ok && (val == half4(unknown)); 54cb93a386Sopenharmony_ci val *= half4(1); 55cb93a386Sopenharmony_ci val *= half4(2); 56cb93a386Sopenharmony_ci val /= half4(1); 57cb93a386Sopenharmony_ci val /= half4(2); 58cb93a386Sopenharmony_ci val = val * half4(1); 59cb93a386Sopenharmony_ci val = val * half4(2); 60cb93a386Sopenharmony_ci val = val / half4(1); 61cb93a386Sopenharmony_ci val = val / half4(2); 62cb93a386Sopenharmony_ci ok = ok && (val == half4(unknown)); 63cb93a386Sopenharmony_ci 64cb93a386Sopenharmony_ci return ok; 65cb93a386Sopenharmony_ci} 66cb93a386Sopenharmony_ci 67cb93a386Sopenharmony_cibool test_int() { 68cb93a386Sopenharmony_ci int unknown = int(unknownInput); 69cb93a386Sopenharmony_ci 70cb93a386Sopenharmony_ci bool ok = true; 71cb93a386Sopenharmony_ci ok = ok && (int4(int2(1), int2(2, 3)) + int4(5, 6, 7, 8)) == int4(6, 7, 9, 11); 72cb93a386Sopenharmony_ci ok = ok && (int4(8, int3(10)) - int4(1)) == int4(7, 9, 9, 9); 73cb93a386Sopenharmony_ci ok = ok && (int4(2) * int4(1, 2, 3, 4)) == int4(2, 4, 6, 8); 74cb93a386Sopenharmony_ci ok = ok && (int4(12) / int4(1, 2, 3, 4)) == int4(12, 6, 4, 3); 75cb93a386Sopenharmony_ci ok = ok && !(int4(1) == int4(2)); 76cb93a386Sopenharmony_ci ok = ok && (int2(1) == int2(1, 1)); 77cb93a386Sopenharmony_ci ok = ok && (int2(1, 1) == int2(1, 1)); 78cb93a386Sopenharmony_ci ok = ok && !(int2(1) == int2(1, 0)); 79cb93a386Sopenharmony_ci ok = ok && (int4(1) == int4(int2(1), int2(1))); 80cb93a386Sopenharmony_ci ok = ok && (int4(int3(1), 1) == int4(int2(1), int2(1))); 81cb93a386Sopenharmony_ci ok = ok && !(int4(int3(1), 1) == int4(int2(1), 1, 0)); 82cb93a386Sopenharmony_ci ok = ok && (int2(1) != int2(1, 0)); 83cb93a386Sopenharmony_ci ok = ok && !(int4(1) != int4(int2(1), int2(1))); 84cb93a386Sopenharmony_ci ok = ok && ( int4(1) == int4(1)); 85cb93a386Sopenharmony_ci ok = ok && (-int4(1) == -int4(1)); 86cb93a386Sopenharmony_ci ok = ok && ( int4(1) != -int4(1)); 87cb93a386Sopenharmony_ci ok = ok && (-int4(1) != int4(1)); 88cb93a386Sopenharmony_ci ok = ok && ( int4(0) != -int4(1)); 89cb93a386Sopenharmony_ci ok = ok && (-int4(0) != int4(1)); 90cb93a386Sopenharmony_ci ok = ok && (-int4(0) != -int4(1)); 91cb93a386Sopenharmony_ci ok = ok && !(-int4(1) == int4(1)); 92cb93a386Sopenharmony_ci ok = ok && !( int4(1) == -int4(1)); 93cb93a386Sopenharmony_ci ok = ok && !( int4(0) == int4(1)); 94cb93a386Sopenharmony_ci ok = ok && !( int4(0) == -int4(1)); 95cb93a386Sopenharmony_ci ok = ok && !(-int4(0) == int4(1)); 96cb93a386Sopenharmony_ci ok = ok && !(-int4(0) == -int4(1)); 97cb93a386Sopenharmony_ci ok = ok && !(-int4(1) != -int4(1)); 98cb93a386Sopenharmony_ci ok = ok && (int4(unknown) * int4(1) == int4(unknown)); 99cb93a386Sopenharmony_ci ok = ok && (int4(1) * int4(unknown) == int4(unknown)); 100cb93a386Sopenharmony_ci ok = ok && (int4(unknown) * int4(0) == int4(0)); 101cb93a386Sopenharmony_ci ok = ok && (int4(0) * int4(unknown) == int4(0)); 102cb93a386Sopenharmony_ci ok = ok && (int4(0) / int4(unknown) == int4(0)); 103cb93a386Sopenharmony_ci ok = ok && (int4(unknown) + int4(0) == int4(unknown)); 104cb93a386Sopenharmony_ci ok = ok && (int4(0) + int4(unknown) == int4(unknown)); 105cb93a386Sopenharmony_ci ok = ok && (int4(unknown) - int4(0) == int4(unknown)); 106cb93a386Sopenharmony_ci 107cb93a386Sopenharmony_ci int4 val = int4(unknown); 108cb93a386Sopenharmony_ci val += int4(1); 109cb93a386Sopenharmony_ci val += int4(0); 110cb93a386Sopenharmony_ci val -= int4(1); 111cb93a386Sopenharmony_ci val -= int4(0); 112cb93a386Sopenharmony_ci val = val + int4(1); 113cb93a386Sopenharmony_ci val = val + int4(0); 114cb93a386Sopenharmony_ci val = val - int4(1); 115cb93a386Sopenharmony_ci val = val - int4(0); 116cb93a386Sopenharmony_ci ok = ok && (val == int4(unknown)); 117cb93a386Sopenharmony_ci val *= int4(1); 118cb93a386Sopenharmony_ci val *= int4(2); 119cb93a386Sopenharmony_ci val /= int4(1); 120cb93a386Sopenharmony_ci val /= int4(2); 121cb93a386Sopenharmony_ci val = val * int4(1); 122cb93a386Sopenharmony_ci val = val * int4(2); 123cb93a386Sopenharmony_ci val = val / int4(1); 124cb93a386Sopenharmony_ci val = val / int4(2); 125cb93a386Sopenharmony_ci ok = ok && (val == int4(unknown)); 126cb93a386Sopenharmony_ci 127cb93a386Sopenharmony_ci return ok; 128cb93a386Sopenharmony_ci} 129cb93a386Sopenharmony_ci 130cb93a386Sopenharmony_cihalf4 main(float2 coords) { 131cb93a386Sopenharmony_ci return test_half() && test_int() ? colorGreen : colorRed; 132cb93a386Sopenharmony_ci} 133