Skip to content

Commit 1c623f4

Browse files
committed
Add test cases
1 parent a013388 commit 1c623f4

File tree

1 file changed

+147
-0
lines changed

1 file changed

+147
-0
lines changed
Lines changed: 147 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,147 @@
1+
void f(int &x) {} // Function that takes a non-const integer reference
2+
void g(int *x) {} // Function that takes a non-const integer pointer
3+
4+
int main() {
5+
int j = 5;
6+
7+
/* ========== 1. Type of the initialized counter variable ========== */
8+
9+
for (int i = 0; i < 10; i++) { // COMPLIANT: `i` has an integer type
10+
}
11+
12+
for (float i = 0.0; i < 10;
13+
i++) { // NON_COMPLIANT: `i` has a non-integer type
14+
}
15+
16+
/* ========== 2. Termination condition ========== */
17+
18+
for (int i = 0; i < 10; i++) { // COMPLIANT: `<` is a relational operator
19+
}
20+
21+
for (int i = 0; i == 10;
22+
i++) { // NON_COMPLIANT: `==` is not a relational operator
23+
}
24+
25+
for (int i = 0; j < 10; i++) { // NON_COMPLIANT: `j` is not the loop counter
26+
j++;
27+
}
28+
29+
/* ========== 3. Updating expression ========== */
30+
31+
for (int i = 0; i < 10;
32+
++i) { // COMPLIANT: Pre-increment operator used as the update expression
33+
}
34+
35+
for (int i = 0; i < 10; i++) { // COMPLIANT: Post-increment operator used as
36+
// the update expression
37+
}
38+
39+
for (int i = 0; i < 10; i += 3) { // COMPLIANT: Add-and-assign operator used
40+
// as the update expression with loop step 3
41+
}
42+
43+
for (int i = 0; i < 10;
44+
i *= 2) { // NON_COMPLIANT: Mutiplication is not incrementing
45+
}
46+
47+
/* ========== 4. Type of the loop counter and the loop bound ========== */
48+
49+
for (int i = 0; i < 10; i++) { // COMPLIANT: 0 and 10 are of same type
50+
}
51+
52+
for (unsigned long long int i = 0; i < 10;
53+
i++) { // COMPLIANT: The loop counter has type bigger than that of the
54+
// loop bound
55+
}
56+
57+
for (int i = 0; i < 10ull;
58+
i++) { // NON_COMPLIANT: The type of the loop counter is not bigger
59+
// than that of the loop bound
60+
}
61+
62+
for (int i = 0; i < j;
63+
i++) { // NON_COMPLIANT: The loop bound is not a constant
64+
}
65+
66+
/* ========== 5. Immutability of the loop bound and the loop step ==========
67+
*/
68+
69+
for (int i = 0; i < 10;
70+
i++) { // COMPLIANT: The update expression is an post-increment operation
71+
// and its loop step is always 1
72+
}
73+
74+
for (int i = 0; i < 10; i += 2) { // COMPLIANT: The loop step is always 2
75+
}
76+
77+
for (int i = 0; i < 10;
78+
i +=
79+
j) { // COMPLIANT: The loop step `j` is not mutated anywhere in the loop
80+
}
81+
82+
for (int i = 0; i < 10;
83+
i += j) { // NON_COMPLIANT: The loop step `j` is mutated in the loop
84+
j++;
85+
}
86+
87+
for (int i = 0; i < 10;
88+
i += j, j++) { // NON_COMPLIANT: The loop step `j` is mutated in the loop
89+
}
90+
91+
for (int i = 0; i < j; i++) { // COMPLIANT: The loop bound `j` is not mutated
92+
// anywhere in the loop
93+
}
94+
95+
for (int i = 0; i < j; i++) { // COMPLIANT: The loop bound `j` is not mutated
96+
// anywhere in the loop
97+
}
98+
99+
for (int i = 0; i < j;
100+
i++) { // NON_COMPLIANT: The loop bound `j` is mutated in the loop
101+
j++;
102+
}
103+
104+
/* ========== 6. Existence of pointers to the loop counter, loop bound, and
105+
* loop step ========== */
106+
107+
int k = 10;
108+
int l = 2;
109+
110+
for (int i = 0; i < k; i += l) { // COMPLIANT: The loop counter, bound, and
111+
// step are not taken addresses of
112+
}
113+
114+
for (int i = j; i < k; i += l) { // NON_COMPLIANT: The loop counter is passed
115+
// as a non-const reference
116+
f(j);
117+
}
118+
119+
for (int i = j; i < k; i += l) { // NON_COMPLIANT: The loop counter is passed
120+
// as a non-const pointer
121+
g(&j);
122+
}
123+
124+
for (int i = j; i < k;
125+
i +=
126+
l) { // NON_COMPLIANT: The loop bound is passed as a non-const pointer
127+
f(k);
128+
}
129+
130+
for (int i = j; i < k;
131+
i +=
132+
l) { // NON_COMPLIANT: The loop bound is passed as a non-const pointer
133+
g(&k);
134+
}
135+
136+
for (int i = j; i < k;
137+
i +=
138+
l) { // NON_COMPLIANT: The loop step is passed as a non-const pointer
139+
f(l);
140+
}
141+
142+
for (int i = j; i < k;
143+
i +=
144+
l) { // NON_COMPLIANT: The loop step is passed as a non-const pointer
145+
g(&l);
146+
}
147+
}

0 commit comments

Comments
 (0)