1cb93a386Sopenharmony_ci/*#pragma settings SkVMDebugTrace*/ 2cb93a386Sopenharmony_ci 3cb93a386Sopenharmony_ciuniform half4 colorRed, colorGreen; 4cb93a386Sopenharmony_ci 5cb93a386Sopenharmony_ci// Should return 5 6cb93a386Sopenharmony_ciconst int kZero = 0; 7cb93a386Sopenharmony_ciint return_loop(int five) { 8cb93a386Sopenharmony_ci for (int 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 int kTen = kZero + 10; 16cb93a386Sopenharmony_ciint continue_loop(int five) { 17cb93a386Sopenharmony_ci int sum = 0; 18cb93a386Sopenharmony_ci for (int 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_ciint break_loop(int five) { 27cb93a386Sopenharmony_ci int sum = 0; 28cb93a386Sopenharmony_ci const int kOne = 1; 29cb93a386Sopenharmony_ci for (int 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_cibool loop_operator_le() { 37cb93a386Sopenharmony_ci // These loops are inside-out and execute zero times. 38cb93a386Sopenharmony_ci for (int i = 3; i <= 1; ++i) { return false; } 39cb93a386Sopenharmony_ci for (int i = 3; i <= 1; --i) { return false; } 40cb93a386Sopenharmony_ci 41cb93a386Sopenharmony_ci int4 result = int4(9); 42cb93a386Sopenharmony_ci for (int i = 1; i <= 3; ++i) { 43cb93a386Sopenharmony_ci result = int4(result.yzw, i); 44cb93a386Sopenharmony_ci } 45cb93a386Sopenharmony_ci return result == int4(9, 1, 2, 3); 46cb93a386Sopenharmony_ci} 47cb93a386Sopenharmony_ci 48cb93a386Sopenharmony_cibool loop_operator_lt() { 49cb93a386Sopenharmony_ci // These loops are inside-out and execute zero times. 50cb93a386Sopenharmony_ci for (int i = 4; i < 1; ++i) { return false; } 51cb93a386Sopenharmony_ci for (int i = 4; i < 1; --i) { return false; } 52cb93a386Sopenharmony_ci 53cb93a386Sopenharmony_ci int4 result = int4(9); 54cb93a386Sopenharmony_ci for (int i = 1; i < 4; ++i) { 55cb93a386Sopenharmony_ci result = int4(result.yzw, i); 56cb93a386Sopenharmony_ci } 57cb93a386Sopenharmony_ci return result == int4(9, 1, 2, 3); 58cb93a386Sopenharmony_ci} 59cb93a386Sopenharmony_ci 60cb93a386Sopenharmony_cibool loop_operator_ge() { 61cb93a386Sopenharmony_ci // These loops are inside-out and execute zero times. 62cb93a386Sopenharmony_ci for (int i = 1; i >= 3; ++i) { return false; } 63cb93a386Sopenharmony_ci for (int i = 1; i >= 3; --i) { return false; } 64cb93a386Sopenharmony_ci 65cb93a386Sopenharmony_ci int4 result = int4(9); 66cb93a386Sopenharmony_ci for (int i = 3; i >= 1; --i) { 67cb93a386Sopenharmony_ci result = int4(result.yzw, i); 68cb93a386Sopenharmony_ci } 69cb93a386Sopenharmony_ci return result == int4(9, 3, 2, 1); 70cb93a386Sopenharmony_ci} 71cb93a386Sopenharmony_ci 72cb93a386Sopenharmony_cibool loop_operator_gt() { 73cb93a386Sopenharmony_ci // These loops are inside-out and execute zero times. 74cb93a386Sopenharmony_ci for (int i = 0; i > 3; ++i) { return false; } 75cb93a386Sopenharmony_ci for (int i = 0; i > 3; --i) { return false; } 76cb93a386Sopenharmony_ci 77cb93a386Sopenharmony_ci int4 result = int4(9); 78cb93a386Sopenharmony_ci for (int i = 3; i > 0; --i) { 79cb93a386Sopenharmony_ci result = int4(result.yzw, i); 80cb93a386Sopenharmony_ci } 81cb93a386Sopenharmony_ci return result == int4(9, 3, 2, 1); 82cb93a386Sopenharmony_ci} 83cb93a386Sopenharmony_ci 84cb93a386Sopenharmony_cibool loop_operator_ne() { 85cb93a386Sopenharmony_ci // This loop executes zero times. 86cb93a386Sopenharmony_ci for (int i = 1; i != 1; ++i) { return false; } 87cb93a386Sopenharmony_ci 88cb93a386Sopenharmony_ci int4 result = int4(9); 89cb93a386Sopenharmony_ci for (int i = 1; i != 4; ++i) { 90cb93a386Sopenharmony_ci result = int4(result.yzw, i); 91cb93a386Sopenharmony_ci } 92cb93a386Sopenharmony_ci return result == int4(9, 1, 2, 3); 93cb93a386Sopenharmony_ci} 94cb93a386Sopenharmony_ci 95cb93a386Sopenharmony_cibool loop_operator_eq() { 96cb93a386Sopenharmony_ci // This loop executes zero times. 97cb93a386Sopenharmony_ci for (int i = 1; i == 2; ++i) { return false; } 98cb93a386Sopenharmony_ci 99cb93a386Sopenharmony_ci int4 result = int4(9); 100cb93a386Sopenharmony_ci for (int i = 1; i == 1; ++i) { 101cb93a386Sopenharmony_ci result = int4(result.yzw, i); 102cb93a386Sopenharmony_ci } 103cb93a386Sopenharmony_ci return result == int4(9, 9, 9, 1); 104cb93a386Sopenharmony_ci} 105cb93a386Sopenharmony_ci 106cb93a386Sopenharmony_cihalf4 main(float2 pos) { 107cb93a386Sopenharmony_ci int five = int(clamp(pos.x, colorGreen.g, colorGreen.a)) * 5; 108cb93a386Sopenharmony_ci return (return_loop(five) == 5 && continue_loop(five) == 35 && break_loop(five) == 15 && 109cb93a386Sopenharmony_ci loop_operator_le() && loop_operator_lt() && 110cb93a386Sopenharmony_ci loop_operator_ge() && loop_operator_gt() && 111cb93a386Sopenharmony_ci loop_operator_eq() && loop_operator_ne()) ? colorGreen : colorRed; 112cb93a386Sopenharmony_ci} 113