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