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