aboutsummaryrefslogtreecommitdiff
path: root/test/behavior/while.zig
diff options
context:
space:
mode:
authorVeikka Tuominen <git@vexu.eu>2024-01-02 17:33:41 +0200
committerAndrew Kelley <andrew@ziglang.org>2024-01-06 16:49:41 -0800
commit804cee3b93cb7084c16ee61d3bcb57f7d3c9f0bc (patch)
tree3d8c534b1adc352b248255ef2906ef2bdf11dffc /test/behavior/while.zig
parent282ff8d3bd4a0d870a98f145aa87039e0409b745 (diff)
downloadzig-804cee3b93cb7084c16ee61d3bcb57f7d3c9f0bc.tar.gz
zig-804cee3b93cb7084c16ee61d3bcb57f7d3c9f0bc.zip
categorize `behavior/bugs/<issueno>.zig` tests
Diffstat (limited to 'test/behavior/while.zig')
-rw-r--r--test/behavior/while.zig34
1 files changed, 34 insertions, 0 deletions
diff --git a/test/behavior/while.zig b/test/behavior/while.zig
index 5dc3aef3f0..51ae8c5d98 100644
--- a/test/behavior/while.zig
+++ b/test/behavior/while.zig
@@ -367,3 +367,37 @@ test "while loop with comptime true condition needs no else block to return valu
};
try expect(x == 69);
}
+
+test "int returned from switch in while" {
+ if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
+
+ var x: u32 = 3;
+ const val: usize = while (true) switch (x) {
+ 1 => break 2,
+ else => x -= 1,
+ };
+ try std.testing.expect(val == 2);
+}
+
+test "breaking from a loop in an if statement" {
+ if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
+ if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
+ if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
+
+ const S = struct {
+ fn retOpt() ?u32 {
+ return null;
+ }
+ };
+
+ var cond = true;
+ _ = &cond;
+ const opt = while (cond) {
+ if (S.retOpt()) |opt| {
+ break opt;
+ }
+ break 1;
+ } else 2;
+ _ = opt;
+}