github.com/Konstantin8105/c4go@v0.0.0-20240505174241-768bb1c65a51/tests/for.c (about) 1 #include "tests.h" 2 #include <stdio.h> 3 4 int main() 5 { 6 plan(62); 7 8 int i = 0; 9 10 diag("Missing init"); 11 for (; i < 3; i++) 12 pass("%d", i); 13 14 diag("CompountStmt"); 15 for (i = 0; i < 3; i++) { 16 pass("%d", i); 17 } 18 19 diag("Not CompountStmt"); 20 for (i = 0; i < 3; i++) 21 pass("%d", i); 22 23 diag("Infinite loop"); 24 int j = 0; 25 for (;;) { 26 pass("%d", j); 27 j++; 28 if (j > 3) 29 break; 30 } 31 32 diag("continue"); 33 i = 0; 34 j = 0; 35 for (;;) { 36 pass("%d %d", i, j); 37 i++; 38 if (i < 3) 39 continue; 40 j++; 41 if (j > 3) 42 break; 43 } 44 45 diag("big initialization 1"); 46 for (i = 0, j = 0; i < 3; i++) { 47 pass("%d %d", i, j); 48 } 49 50 diag("big initialization 2"); 51 for (i = 0, j = 0; i < 3;) { 52 pass("%d %d", i, j); 53 i++; 54 j++; 55 } 56 57 diag("big increment"); 58 i = 0; 59 j = 0; 60 for (; i < 3; i++, j++) { 61 pass("%d %d", i, j); 62 } 63 64 diag("big condition"); 65 i = -1; 66 j = 0; 67 for (; i++, j < 3;) { 68 pass("%d %d", i, j); 69 j++; 70 } 71 72 diag("Without body and with 2 and more increments"); 73 for (i = 0, j = 0; i < 2; j++, i++) 74 ; 75 pass("%d", i); 76 77 diag("Without body and with 2 and more conditions"); 78 for (i = 0, j = 0; j++, i++, i < 2;) 79 ; 80 pass("%d", i); 81 82 diag("initialization inside for"); 83 for (int h = 0; h < 3; h++) 84 pass("%d", h); 85 86 diag("double initialization inside for"); 87 for (int f = 0, g = 0; g < 2 || f < 2; g++, f++) { 88 pass("%d", f); 89 pass("%d", g); 90 } 91 92 { 93 diag("double initialization inside for with double for"); 94 for (int ef = 0, eg = 0; eg < 2 || ef < 2; eg++, ef++) { 95 pass("%d", ef); 96 pass("%d", eg); 97 } 98 for (int ef = 0, eg = 0; eg < 2 || ef < 2; eg++, ef++) { 99 pass("%d", ef); 100 pass("%d", eg); 101 } 102 } 103 104 diag("NULL in for"); 105 int nn = 0; 106 for (; NULL; nn++) { 107 if (nn > 2) { 108 break; 109 } 110 } 111 is_eq(nn, 0); 112 113 diag("! NULL in for"); 114 int nn2 = 0; 115 for (; !NULL; nn2++) { 116 if (nn2 > 2) { 117 break; 118 } 119 } 120 is_eq(nn2, 3); 121 122 diag("for with specific body"); 123 { 124 double vars = 42.0; 125 for (int s = 0; s < 1; s++) 126 vars++; 127 is_eq(vars, 43.0); 128 } 129 { 130 double vars = 42.0; 131 for (int s = 0; s < 1; s++) 132 vars += 1.0; 133 is_eq(vars, 43.0); 134 } 135 { 136 double vars = 42.0; 137 int X, Y; 138 for (X = 0, Y = 0; X < 1; X++, Y++) 139 vars += 1.0; 140 is_eq(vars, 43.0); 141 } 142 { 143 double vars = 42.0; 144 for (int s = 0; s < 1; s++) 145 vars = vars + 1.0; 146 is_eq(vars, 43.0); 147 } 148 { 149 double vars = 42.0; 150 int X, Y; 151 for (X = 0, Y = 0; X < 1; X++, Y++) 152 vars = vars + 1.0; 153 is_eq(vars, 43.0); 154 } 155 { 156 int X, Y; 157 for (X = 0, Y = 0; X < 1; X++, Y++) 158 X += Y; 159 pass("ok"); 160 } 161 { 162 int X, Y; 163 for (X = 0, Y = 0; X < 1; X++, Y++) 164 X = X + Y; 165 pass("ok"); 166 } 167 168 diag("increment --"); 169 for (i = 3; i >= 1; i--) 170 pass("%d", i); 171 172 diag("increment -= 3"); 173 for (i = 3; i >= 1; i -= 3) 174 pass("%d", i); 175 176 diag("for with empty body"); 177 int varI = 10; 178 int nCopy = 50; 179 for (; varI > 0 && varI < nCopy; varI++) 180 ; 181 is_eq(varI, 50); 182 183 done_testing(); 184 }