about summary refs log tree commit diff
path: root/lang/zig/while.zig
diff options
context:
space:
mode:
Diffstat (limited to 'lang/zig/while.zig')
-rw-r--r--lang/zig/while.zig73
1 files changed, 73 insertions, 0 deletions
diff --git a/lang/zig/while.zig b/lang/zig/while.zig
new file mode 100644
index 0000000..9fe87e9
--- /dev/null
+++ b/lang/zig/while.zig
@@ -0,0 +1,73 @@
+const expect = @import("std").testing.expect;
+
+test "while basic" {
+    var i: usize = 0;
+    while (i < 10)
+        i += 1;
+    expect(i == 10);
+}
+
+test "while break" {
+    var i: usize = 0;
+    while (true) {
+        if (i == 10)
+            break;
+        i += 1;
+    }
+    expect(i == 10);
+}
+
+test "while continue" {
+    var i: usize = 0;
+    while (true) {
+        i += 1;
+        if (i < 10)
+            continue;
+        break;
+    }
+    expect(i == 10);
+}
+
+test "while loop continue expression" {
+    var i: usize = 0;
+    while (i < 10) : (i += 1) {}
+    expect(i == 10);
+}
+
+test "while loop continue expression, more complicated" {
+    var i: usize = 1;
+    var j: usize = 1;
+    while (i * j < 2000) : ({ i *= 2; j *= 3; })
+        expect(i * j < 2000);
+}
+
+test "while else" {
+    expect(rangeHasNumber(0, 10, 5));
+    expect(!rangeHasNumber(0, 10, 15));
+}
+
+fn rangeHasNumber(begin: usize, end: usize, number: usize) bool {
+    var i = begin;
+    return while (i < end) : (i += 1) {
+        if (i == number) {
+            break true;
+        }
+    } else false;
+}
+
+test "nested break" {
+    outer: while (true) {
+        while (true) {
+            break :outer;
+        }
+    }
+}
+
+test "nested continue" {
+    var i: usize = 0;
+    outer: while (i < 10) : (i += 1) {
+        while (true) {
+            continue :outer;
+        }
+    }
+}