1cb93a386Sopenharmony_ciuniform half4 colorGreen, colorRed; 2cb93a386Sopenharmony_ci 3cb93a386Sopenharmony_cibool test_fvec() { 4cb93a386Sopenharmony_ci const float one = 1; 5cb93a386Sopenharmony_ci float two = 2; 6cb93a386Sopenharmony_ci const half4 one_splat = half4(1); 7cb93a386Sopenharmony_ci const half4 one_compound = half4(1, 1, 1, 1); 8cb93a386Sopenharmony_ci 9cb93a386Sopenharmony_ci bool ok = true; 10cb93a386Sopenharmony_ci ok = ok && (half4(-1) == -one_splat); 11cb93a386Sopenharmony_ci ok = ok && (half4(-1, -1, -1, -1) == -one_splat); 12cb93a386Sopenharmony_ci ok = ok && (half4(-1) == -one_compound); 13cb93a386Sopenharmony_ci ok = ok && (half4(-1, -1, -1, -1) == -one_compound); 14cb93a386Sopenharmony_ci ok = ok && (-half4(1) == -one_splat); 15cb93a386Sopenharmony_ci ok = ok && (-half4(1, 1, 1, 1) == -one_splat); 16cb93a386Sopenharmony_ci ok = ok && (-half4(1) == -one_compound); 17cb93a386Sopenharmony_ci ok = ok && (-half4(1, 1, 1, 1) == -one_compound); 18cb93a386Sopenharmony_ci ok = ok && (half4(-1) == -one_compound); 19cb93a386Sopenharmony_ci ok = ok && (half4(-1) == -half4(-half2(-1), half2(1))); 20cb93a386Sopenharmony_ci ok = ok && (half4(1) != -half4(1)); 21cb93a386Sopenharmony_ci ok = ok && (-half4(two) == half4(-two, half3(-two))); 22cb93a386Sopenharmony_ci ok = ok && (-half2(-one, one + one) == -half2(one - two, two)); 23cb93a386Sopenharmony_ci return ok; 24cb93a386Sopenharmony_ci} 25cb93a386Sopenharmony_ci 26cb93a386Sopenharmony_cibool test_ivec() { 27cb93a386Sopenharmony_ci int one = 1; 28cb93a386Sopenharmony_ci const int two = 2; 29cb93a386Sopenharmony_ci const int4 one_splat = int4(1); 30cb93a386Sopenharmony_ci const int4 one_compound = int4(1, 1, 1, 1); 31cb93a386Sopenharmony_ci 32cb93a386Sopenharmony_ci bool ok = true; 33cb93a386Sopenharmony_ci ok = ok && (int4(-1) == -one_splat); 34cb93a386Sopenharmony_ci ok = ok && (int4(-1, -1, -1, -1) == -one_splat); 35cb93a386Sopenharmony_ci ok = ok && (int4(-1) == -one_compound); 36cb93a386Sopenharmony_ci ok = ok && (int4(-1, -1, -1, -1) == -one_compound); 37cb93a386Sopenharmony_ci ok = ok && (-int4(1) == -one_splat); 38cb93a386Sopenharmony_ci ok = ok && (-int4(1, 1, 1, 1) == -one_splat); 39cb93a386Sopenharmony_ci ok = ok && (-int4(1) == -one_compound); 40cb93a386Sopenharmony_ci ok = ok && (-int4(1, 1, 1, 1) == -one_compound); 41cb93a386Sopenharmony_ci ok = ok && (int4(-1) == -int4(-int2(-1), int2(1))); 42cb93a386Sopenharmony_ci ok = ok && (int4(1) != -int4(1)); 43cb93a386Sopenharmony_ci ok = ok && (-int4(two) == int4(-two, int3(-two))); 44cb93a386Sopenharmony_ci ok = ok && (-int2(-one, one + one) == -int2(one - two, two)); 45cb93a386Sopenharmony_ci return ok; 46cb93a386Sopenharmony_ci} 47cb93a386Sopenharmony_ci 48cb93a386Sopenharmony_cibool test_mat() { 49cb93a386Sopenharmony_ci const float3x3 one_diagonal = float3x3(1); 50cb93a386Sopenharmony_ci const float3x3 one_compound = float3x3(1, 0, 0, 51cb93a386Sopenharmony_ci 0, 1, 0, 52cb93a386Sopenharmony_ci 0, 0, 1); 53cb93a386Sopenharmony_ci bool ok = true; 54cb93a386Sopenharmony_ci ok = ok && (float3x3(-1) == -one_diagonal); 55cb93a386Sopenharmony_ci ok = ok && (float3x3(-1, 0, 0, 0, -1, 0, 0, 0, -1) == -one_diagonal); 56cb93a386Sopenharmony_ci ok = ok && (float3x3(-1) == -one_compound); 57cb93a386Sopenharmony_ci ok = ok && (float3x3(-1, 0, 0, 0, -1, 0, 0, 0, -1) == -one_compound); 58cb93a386Sopenharmony_ci ok = ok && (-float3x3(1) == -one_diagonal); 59cb93a386Sopenharmony_ci ok = ok && (-float3x3(1, 0, 0, 0, 1, 0, 0, 0, 1) == -one_diagonal); 60cb93a386Sopenharmony_ci ok = ok && (-float3x3(1) == -one_compound); 61cb93a386Sopenharmony_ci ok = ok && (-float3x3(1, 0, 0, 0, 1, 0, 0, 0, 1) == -one_compound); 62cb93a386Sopenharmony_ci return ok; 63cb93a386Sopenharmony_ci} 64cb93a386Sopenharmony_ci 65cb93a386Sopenharmony_cihalf4 main(float2 coords) { 66cb93a386Sopenharmony_ci return test_fvec() && test_ivec() && test_mat() ? colorGreen : colorRed; 67cb93a386Sopenharmony_ci} 68