From ee9b8fc921f48dc893808e1c9dbfbef321aa362c Mon Sep 17 00:00:00 2001 From: Nguyễn Gia Phong Date: Sun, 28 Feb 2021 17:18:03 +0700 Subject: [lang/zig] Learn some Zig --- lang/zig/while.zig | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 lang/zig/while.zig (limited to 'lang/zig/while.zig') 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; + } + } +} -- cgit 1.4.1