aboutsummaryrefslogtreecommitdiff
path: root/test/behavior/switch.zig
diff options
context:
space:
mode:
authorMatthew Lugg <mlugg@mlugg.co.uk>2025-08-13 13:54:15 +0100
committerGitHub <noreply@github.com>2025-08-13 13:54:15 +0100
commit6e90ce25364b02555a3ca46013f85b2e80e98705 (patch)
treeaa3fe7f082466ba5fde47450d1c40c163e667d59 /test/behavior/switch.zig
parentb8124d9c0b01e8ac7cd0daf93a0ed018da5f2352 (diff)
parentaaee26bb1914a3d4e385bd120515813ece80311d (diff)
downloadzig-6e90ce25364b02555a3ca46013f85b2e80e98705.tar.gz
zig-6e90ce25364b02555a3ca46013f85b2e80e98705.zip
Merge pull request #24381 from Justus2308/switch-better-underscore
Enhance switch on non-exhaustive enums
Diffstat (limited to 'test/behavior/switch.zig')
-rw-r--r--test/behavior/switch.zig47
1 files changed, 47 insertions, 0 deletions
diff --git a/test/behavior/switch.zig b/test/behavior/switch.zig
index afc38661c3..b5540664c9 100644
--- a/test/behavior/switch.zig
+++ b/test/behavior/switch.zig
@@ -1073,3 +1073,50 @@ test "switch on 8-bit mod result" {
else => unreachable,
}
}
+
+test "switch on non-exhaustive enum" {
+ if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest; // TODO
+
+ const E = enum(u4) {
+ a,
+ b,
+ c,
+ _,
+
+ fn doTheTest(e: @This()) !void {
+ switch (e) {
+ .a, .b => {},
+ else => return error.TestFailed,
+ }
+ switch (e) {
+ .a, .b => {},
+ .c => return error.TestFailed,
+ _ => return error.TestFailed,
+ }
+ switch (e) {
+ .a, .b => {},
+ .c, _ => return error.TestFailed,
+ }
+ switch (e) {
+ .a => {},
+ .b, .c, _ => return error.TestFailed,
+ }
+ switch (e) {
+ .b => return error.TestFailed,
+ else => {},
+ _ => return error.TestFailed,
+ }
+ switch (e) {
+ else => {},
+ _ => return error.TestFailed,
+ }
+ switch (e) {
+ inline else => {},
+ _ => return error.TestFailed,
+ }
+ }
+ };
+
+ try E.doTheTest(.a);
+ try comptime E.doTheTest(.a);
+}