1cb93a386Sopenharmony_ci/*#pragma settings SkVMDebugTrace*/ 2cb93a386Sopenharmony_ci 3cb93a386Sopenharmony_ciuniform half4 colorRed, colorGreen; 4cb93a386Sopenharmony_ci 5cb93a386Sopenharmony_ci// Should return 5 6cb93a386Sopenharmony_ciconst float kZero = 0; 7cb93a386Sopenharmony_cifloat return_loop(float five) { 8cb93a386Sopenharmony_ci for (float i = kZero; i < 10; ++i) { 9cb93a386Sopenharmony_ci if (i == five) { return i; } 10cb93a386Sopenharmony_ci } 11cb93a386Sopenharmony_ci return 0; 12cb93a386Sopenharmony_ci} 13cb93a386Sopenharmony_ci 14cb93a386Sopenharmony_ci// Should return 35 15cb93a386Sopenharmony_ciconst float kTen = kZero + 10; 16cb93a386Sopenharmony_cifloat continue_loop(float five) { 17cb93a386Sopenharmony_ci float sum = 0; 18cb93a386Sopenharmony_ci for (float i = 0; i < kTen; ++i) { 19cb93a386Sopenharmony_ci if (i < five) { continue; } 20cb93a386Sopenharmony_ci sum += i; 21cb93a386Sopenharmony_ci } 22cb93a386Sopenharmony_ci return sum; 23cb93a386Sopenharmony_ci} 24cb93a386Sopenharmony_ci 25cb93a386Sopenharmony_ci// Should return 15 26cb93a386Sopenharmony_cifloat break_loop(float five) { 27cb93a386Sopenharmony_ci float sum = 0; 28cb93a386Sopenharmony_ci const float kOne = 1; 29cb93a386Sopenharmony_ci for (float i = 0; i < 10; i += kOne) { 30cb93a386Sopenharmony_ci if (i > five) { break; } 31cb93a386Sopenharmony_ci sum += i; 32cb93a386Sopenharmony_ci } 33cb93a386Sopenharmony_ci return sum; 34cb93a386Sopenharmony_ci} 35cb93a386Sopenharmony_ci 36cb93a386Sopenharmony_ci// Should return a value close to zero 37cb93a386Sopenharmony_cifloat float_loop() { 38cb93a386Sopenharmony_ci float sum = 0; 39cb93a386Sopenharmony_ci for (float i = 0.123; i < 0.6; i += 0.111) { 40cb93a386Sopenharmony_ci sum += i; 41cb93a386Sopenharmony_ci } 42cb93a386Sopenharmony_ci return sum - 1.725; 43cb93a386Sopenharmony_ci} 44cb93a386Sopenharmony_ci 45cb93a386Sopenharmony_cibool loop_operator_le() { 46cb93a386Sopenharmony_ci // These loops are inside-out and execute zero times. 47cb93a386Sopenharmony_ci for (float i = 3; i <= 1; ++i) { return false; } 48cb93a386Sopenharmony_ci for (float i = 3; i <= 1; --i) { return false; } 49cb93a386Sopenharmony_ci 50cb93a386Sopenharmony_ci float4 result = float4(9); 51cb93a386Sopenharmony_ci for (float i = 1; i <= 3; ++i) { 52cb93a386Sopenharmony_ci result = float4(result.yzw, i); 53cb93a386Sopenharmony_ci } 54cb93a386Sopenharmony_ci return result == float4(9, 1, 2, 3); 55cb93a386Sopenharmony_ci} 56cb93a386Sopenharmony_ci 57cb93a386Sopenharmony_cibool loop_operator_lt() { 58cb93a386Sopenharmony_ci // These loops are inside-out and execute zero times. 59cb93a386Sopenharmony_ci for (float i = 4; i < 1; ++i) { return false; } 60cb93a386Sopenharmony_ci for (float i = 4; i < 1; --i) { return false; } 61cb93a386Sopenharmony_ci 62cb93a386Sopenharmony_ci float4 result = float4(9); 63cb93a386Sopenharmony_ci for (float i = 1; i < 4; ++i) { 64cb93a386Sopenharmony_ci result = float4(result.yzw, i); 65cb93a386Sopenharmony_ci } 66cb93a386Sopenharmony_ci return result == float4(9, 1, 2, 3); 67cb93a386Sopenharmony_ci} 68cb93a386Sopenharmony_ci 69cb93a386Sopenharmony_cibool loop_operator_ge() { 70cb93a386Sopenharmony_ci // These loops are inside-out and execute zero times. 71cb93a386Sopenharmony_ci for (float i = 1; i >= 3; ++i) { return false; } 72cb93a386Sopenharmony_ci for (float i = 1; i >= 3; --i) { return false; } 73cb93a386Sopenharmony_ci 74cb93a386Sopenharmony_ci float4 result = float4(9); 75cb93a386Sopenharmony_ci for (float i = 3; i >= 1; --i) { 76cb93a386Sopenharmony_ci result = float4(result.yzw, i); 77cb93a386Sopenharmony_ci } 78cb93a386Sopenharmony_ci return result == float4(9, 3, 2, 1); 79cb93a386Sopenharmony_ci} 80cb93a386Sopenharmony_ci 81cb93a386Sopenharmony_cibool loop_operator_gt() { 82cb93a386Sopenharmony_ci // These loops are inside-out and execute zero times. 83cb93a386Sopenharmony_ci for (float i = 0; i > 3; ++i) { return false; } 84cb93a386Sopenharmony_ci for (float i = 0; i > 3; --i) { return false; } 85cb93a386Sopenharmony_ci 86cb93a386Sopenharmony_ci float4 result = float4(9); 87cb93a386Sopenharmony_ci for (float i = 3; i > 0; --i) { 88cb93a386Sopenharmony_ci result = float4(result.yzw, i); 89cb93a386Sopenharmony_ci } 90cb93a386Sopenharmony_ci return result == float4(9, 3, 2, 1); 91cb93a386Sopenharmony_ci} 92cb93a386Sopenharmony_ci 93cb93a386Sopenharmony_cibool loop_operator_ne() { 94cb93a386Sopenharmony_ci // This loop executes zero times. 95cb93a386Sopenharmony_ci for (int i = 1; i != 1; ++i) { return false; } 96cb93a386Sopenharmony_ci 97cb93a386Sopenharmony_ci float4 result = float4(9); 98cb93a386Sopenharmony_ci for (float i = 1; i != 4; ++i) { 99cb93a386Sopenharmony_ci result = float4(result.yzw, i); 100cb93a386Sopenharmony_ci } 101cb93a386Sopenharmony_ci return result == float4(9, 1, 2, 3); 102cb93a386Sopenharmony_ci} 103cb93a386Sopenharmony_ci 104cb93a386Sopenharmony_cibool loop_operator_eq() { 105cb93a386Sopenharmony_ci // This loops mismatches and executes zero times. 106cb93a386Sopenharmony_ci for (float i = 1; i == 2; ++i) { return false; } 107cb93a386Sopenharmony_ci 108cb93a386Sopenharmony_ci float4 result = float4(9); 109cb93a386Sopenharmony_ci for (float i = 1; i == 1; ++i) { 110cb93a386Sopenharmony_ci result = float4(result.yzw, i); 111cb93a386Sopenharmony_ci } 112cb93a386Sopenharmony_ci return result == float4(9, 9, 9, 1); 113cb93a386Sopenharmony_ci} 114cb93a386Sopenharmony_ci 115cb93a386Sopenharmony_cihalf4 main(float2 pos) { 116cb93a386Sopenharmony_ci float five = clamp(pos.x, colorGreen.g, colorGreen.a) * 5.0; 117cb93a386Sopenharmony_ci return (return_loop(five) == 5 && continue_loop(five) == 35 && 118cb93a386Sopenharmony_ci break_loop(five) == 15 && abs(float_loop()) < 0.025 && 119cb93a386Sopenharmony_ci loop_operator_le() && loop_operator_lt() && 120cb93a386Sopenharmony_ci loop_operator_ge() && loop_operator_gt() && 121cb93a386Sopenharmony_ci loop_operator_eq() && loop_operator_ne()) ? colorGreen : colorRed; 122cb93a386Sopenharmony_ci} 123