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