blob: d5a38ee6ba60d67ce2a37e1cb8fc4dd93b5e5a39 [file] [log] [blame]
/*#pragma settings SkVMDebugTrace*/
uniform half4 colorRed, colorGreen;
// Should return 5
const float kZero = 0;
float return_loop(float five) {
for (float i = kZero; i < 10; ++i) {
if (i == five) { return i; }
}
return 0;
}
// Should return 35
const float kTen = kZero + 10;
float continue_loop(float five) {
float sum = 0;
for (float i = 0; i < kTen; ++i) {
if (i < five) { continue; }
sum += i;
}
return sum;
}
// Should return 15
float break_loop(float five) {
float sum = 0;
const float kOne = 1;
for (float i = 0; i < 10; i += kOne) {
if (i > five) { break; }
sum += i;
}
return sum;
}
// Should return a value close to zero
float float_loop() {
float sum = 0;
for (float i = 0.123; i < 0.6; i += 0.111) {
sum += i;
}
return sum - 1.725;
}
bool loop_operator_le() {
// These loops are inside-out and execute zero times.
for (float i = 3; i <= 1; ++i) { return false; }
for (float i = 3; i <= 1; --i) { return false; }
float4 result = float4(9);
for (float i = 1; i <= 3; ++i) {
result = float4(result.yzw, i);
}
return result == float4(9, 1, 2, 3);
}
bool loop_operator_lt() {
// These loops are inside-out and execute zero times.
for (float i = 4; i < 1; ++i) { return false; }
for (float i = 4; i < 1; --i) { return false; }
float4 result = float4(9);
for (float i = 1; i < 4; ++i) {
result = float4(result.yzw, i);
}
return result == float4(9, 1, 2, 3);
}
bool loop_operator_ge() {
// These loops are inside-out and execute zero times.
for (float i = 1; i >= 3; ++i) { return false; }
for (float i = 1; i >= 3; --i) { return false; }
float4 result = float4(9);
for (float i = 3; i >= 1; --i) {
result = float4(result.yzw, i);
}
return result == float4(9, 3, 2, 1);
}
bool loop_operator_gt() {
// These loops are inside-out and execute zero times.
for (float i = 0; i > 3; ++i) { return false; }
for (float i = 0; i > 3; --i) { return false; }
float4 result = float4(9);
for (float i = 3; i > 0; --i) {
result = float4(result.yzw, i);
}
return result == float4(9, 3, 2, 1);
}
bool loop_operator_ne() {
// This loop executes zero times.
for (int i = 1; i != 1; ++i) { return false; }
float4 result = float4(9);
for (float i = 1; i != 4; ++i) {
result = float4(result.yzw, i);
}
return result == float4(9, 1, 2, 3);
}
bool loop_operator_eq() {
// This loops mismatches and executes zero times.
for (float i = 1; i == 2; ++i) { return false; }
float4 result = float4(9);
for (float i = 1; i == 1; ++i) {
result = float4(result.yzw, i);
}
return result == float4(9, 9, 9, 1);
}
half4 main(float2 pos) {
float five = clamp(pos.x, colorGreen.g, colorGreen.a) * 5.0;
return (return_loop(five) == 5 && continue_loop(five) == 35 &&
break_loop(five) == 15 && abs(float_loop()) < 0.025 &&
loop_operator_le() && loop_operator_lt() &&
loop_operator_ge() && loop_operator_gt() &&
loop_operator_eq() && loop_operator_ne()) ? colorGreen : colorRed;
}