summaryrefslogtreecommitdiff
path: root/tests/control_flow/test_loops.zc
diff options
context:
space:
mode:
Diffstat (limited to 'tests/control_flow/test_loops.zc')
-rw-r--r--tests/control_flow/test_loops.zc133
1 files changed, 133 insertions, 0 deletions
diff --git a/tests/control_flow/test_loops.zc b/tests/control_flow/test_loops.zc
new file mode 100644
index 0000000..9968cf5
--- /dev/null
+++ b/tests/control_flow/test_loops.zc
@@ -0,0 +1,133 @@
+
+test "test_loops" {
+ println "Testing loop constructs...";
+
+ // for-in range
+ var sum1 = 0;
+ for i in 0..5 {
+ sum1 += i;
+ }
+ assert(sum1 == 10, "for-in range (0..5) failed");
+ println " -> for-in range (0..5): Passed";
+
+ // for-in with step
+ var sum2 = 0;
+ for i in 0..10 step 2 {
+ sum2 += i;
+ }
+ assert(sum2 == 20, "for-in with step failed");
+ println " -> for-in with step: Passed";
+
+ // Repeat n times
+ var count = 0;
+ repeat 7 {
+ count++;
+ }
+ assert(count == 7, "repeat 7 failed");
+ println " -> repeat 7: Passed";
+
+ // loop with break
+ var i = 0;
+ loop {
+ i++;
+ if (i >= 5) {
+ break;
+ }
+ }
+ assert(i == 5, "loop with break failed");
+ println " -> loop with break: Passed";
+
+ // While loop
+ var j = 0;
+ while j < 3 {
+ j++;
+ }
+ assert(j == 3, "while loop failed");
+ println " -> while loop: Passed";
+
+ // C-style for loop
+ var sum3 = 0;
+ for (var k = 0; k < 4; k = k + 1) {
+ sum3 += k;
+ }
+ assert(sum3 == 6, "C-style for loop failed");
+ println " -> C-style for loop: Passed";
+
+ // loop with continue
+ var sum4 = 0;
+ var m = 0;
+ loop {
+ m++;
+ if (m == 3) {
+ continue;
+ }
+ if (m > 5) {
+ break;
+ }
+ sum4 += m;
+ }
+ assert(sum4 == 12, "loop with continue failed");
+ println " -> loop with continue: Passed";
+
+ println "All loop tests passed!";
+
+}
+
+}
+
+fn print_nums(list: [int]) {
+ var i = 0;
+ while (i < list.len) {
+ println "Num: {list.data[i]}";
+ i++;
+ }
+}
+
+test "test_arrays_loop" {
+ // Array literal transformation
+ var nums: [int] = [10, 20, 30];
+ print_nums(nums);
+}
+
+test "test_do_while" {
+ var x = 0;
+
+ // Basic do-while (runs at least once)
+ do {
+ x++;
+ } while x < 5;
+
+ assert(x == 5, "do-while x expected 5");
+
+ // Do-while with false condition (still runs once)
+ var y = 0;
+ do {
+ y = 100;
+ } while false;
+
+ assert(y == 100, "do-while false expected 100");
+}
+
+test "test_range_loops_generic" {
+ println "Testing range loops with different types...";
+
+ // Test with isize variables
+ var sum_isize: isize = 0;
+ var start: isize = 0;
+ var end: isize = 5;
+ for var i: isize = start; i < end; i++ {
+ sum_isize += i;
+ }
+ println "isize range (0..5): sum = {sum_isize}";
+ assert(sum_isize == 10, "isize range failed");
+
+ // Test with regular int
+ var sum_int = 0;
+ for i in 0..5 {
+ sum_int += i;
+ }
+ println "int range (0..5): sum = {sum_int}";
+ assert(sum_int == 10, "int range failed");
+
+ "-> Range loops work with any integer type!";
+}