aboutsummaryrefslogtreecommitdiff
path: root/test/behavior/switch.zig
diff options
context:
space:
mode:
Diffstat (limited to 'test/behavior/switch.zig')
-rw-r--r--test/behavior/switch.zig86
1 files changed, 80 insertions, 6 deletions
diff --git a/test/behavior/switch.zig b/test/behavior/switch.zig
index 07b6c4b9f1..22c78e3162 100644
--- a/test/behavior/switch.zig
+++ b/test/behavior/switch.zig
@@ -1,9 +1,13 @@
+const builtin = @import("builtin");
const std = @import("std");
const expect = std.testing.expect;
const expectError = std.testing.expectError;
const expectEqual = std.testing.expectEqual;
test "switch with numbers" {
+ if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
+
try testSwitchWithNumbers(13);
}
@@ -17,6 +21,9 @@ fn testSwitchWithNumbers(x: u32) !void {
}
test "switch with all ranges" {
+ if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
+
try expect(testSwitchWithAllRanges(50, 3) == 1);
try expect(testSwitchWithAllRanges(101, 0) == 2);
try expect(testSwitchWithAllRanges(300, 5) == 3);
@@ -48,6 +55,9 @@ test "implicit comptime switch" {
}
test "switch on enum" {
+ if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
+
const fruit = Fruit.Orange;
nonConstSwitchOnEnum(fruit);
}
@@ -65,6 +75,9 @@ fn nonConstSwitchOnEnum(fruit: Fruit) void {
}
test "switch statement" {
+ if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
+
try nonConstSwitch(SwitchStatementFoo.C);
}
fn nonConstSwitch(foo: SwitchStatementFoo) !void {
@@ -79,6 +92,10 @@ fn nonConstSwitch(foo: SwitchStatementFoo) !void {
const SwitchStatementFoo = enum { A, B, C, D };
test "switch with multiple expressions" {
+ if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
+
const x = switch (returnsFive()) {
1, 2, 3 => 1,
4, 5, 6 => 2,
@@ -91,6 +108,9 @@ fn returnsFive() i32 {
}
test "switch on type" {
+ if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
+
try expect(trueIfBoolFalseOtherwise(bool));
try expect(!trueIfBoolFalseOtherwise(i32));
}
@@ -103,6 +123,10 @@ fn trueIfBoolFalseOtherwise(comptime T: type) bool {
}
test "switching on booleans" {
+ if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
+
try testSwitchOnBools();
comptime try testSwitchOnBools();
}
@@ -154,6 +178,9 @@ test "undefined.u0" {
}
test "switch with disjoint range" {
+ if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
+
var q: u8 = 0;
switch (q) {
0...125 => {},
@@ -163,6 +190,9 @@ test "switch with disjoint range" {
}
test "switch variable for range and multiple prongs" {
+ if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
+
const S = struct {
fn doTheTest() !void {
var u: u8 = 16;
@@ -196,6 +226,9 @@ fn poll() void {
}
test "switch on global mutable var isn't constant-folded" {
+ if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
+
while (state < 2) {
poll();
}
@@ -208,6 +241,10 @@ const SwitchProngWithVarEnum = union(enum) {
};
test "switch prong with variable" {
+ if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
+
try switchProngWithVarFn(SwitchProngWithVarEnum{ .One = 13 });
try switchProngWithVarFn(SwitchProngWithVarEnum{ .Two = 13.0 });
try switchProngWithVarFn(SwitchProngWithVarEnum{ .Meh = {} });
@@ -228,6 +265,9 @@ fn switchProngWithVarFn(a: SwitchProngWithVarEnum) !void {
}
test "switch on enum using pointer capture" {
+ if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
+
try testSwitchEnumPtrCapture();
comptime try testSwitchEnumPtrCapture();
}
@@ -245,6 +285,10 @@ fn testSwitchEnumPtrCapture() !void {
}
test "switch handles all cases of number" {
+ if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
+
try testSwitchHandleAllCases();
comptime try testSwitchHandleAllCases();
}
@@ -282,6 +326,9 @@ fn testSwitchHandleAllCasesRange(x: u8) u8 {
}
test "switch on union with some prongs capturing" {
+ if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
+
const X = union(enum) {
a,
b: i32,
@@ -311,10 +358,16 @@ fn returnsFalse() bool {
}
}
test "switch on const enum with var" {
+ if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
+
try expect(!returnsFalse());
}
test "anon enum literal used in switch on union enum" {
+ if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
+
const Foo = union(enum) {
a: i32,
};
@@ -328,6 +381,9 @@ test "anon enum literal used in switch on union enum" {
}
test "switch all prongs unreachable" {
+ if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
+
try testAllProngsUnreachable();
comptime try testAllProngsUnreachable();
}
@@ -349,6 +405,9 @@ fn switchWithUnreachable(x: i32) i32 {
}
test "capture value of switch with all unreachable prongs" {
+ if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
+
const x = return_a_number() catch |err| switch (err) {
else => unreachable,
};
@@ -360,6 +419,10 @@ fn return_a_number() anyerror!i32 {
}
test "switch on integer with else capturing expr" {
+ if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
+
const S = struct {
fn doTheTest() !void {
var x: i32 = 5;
@@ -375,7 +438,7 @@ test "switch on integer with else capturing expr" {
}
test "else prong of switch on error set excludes other cases" {
- if (@import("builtin").zig_backend == .stage2_llvm) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend != .stage1) return error.SkipZigTest; // TODO
const S = struct {
fn doTheTest() !void {
@@ -407,7 +470,7 @@ test "else prong of switch on error set excludes other cases" {
}
test "switch prongs with error set cases make a new error set type for capture value" {
- if (@import("builtin").zig_backend == .stage2_llvm) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend != .stage1) return error.SkipZigTest; // TODO
const S = struct {
fn doTheTest() !void {
@@ -441,6 +504,9 @@ test "switch prongs with error set cases make a new error set type for capture v
}
test "return result loc and then switch with range implicit casted to error union" {
+ if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
+
const S = struct {
fn doTheTest() !void {
try expect((func(0xb) catch unreachable) == 0xb);
@@ -457,6 +523,10 @@ test "return result loc and then switch with range implicit casted to error unio
}
test "switch with null and T peer types and inferred result location type" {
+ if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
+
const S = struct {
fn doTheTest(c: u8) !void {
if (switch (c) {
@@ -473,7 +543,7 @@ test "switch with null and T peer types and inferred result location type" {
}
test "switch prongs with cases with identical payload types" {
- if (@import("builtin").zig_backend == .stage2_llvm) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend != .stage1) return error.SkipZigTest; // TODO
const Union = union(enum) {
A: usize,
@@ -515,7 +585,11 @@ test "switch prongs with cases with identical payload types" {
}
test "switch on pointer type" {
- if (@import("builtin").zig_backend == .stage2_llvm) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
const S = struct {
const X = struct {
@@ -544,7 +618,7 @@ test "switch on pointer type" {
}
test "switch on error set with single else" {
- if (@import("builtin").zig_backend == .stage2_llvm) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend != .stage1) return error.SkipZigTest; // TODO
const S = struct {
fn doTheTest() !void {
@@ -563,7 +637,7 @@ test "switch on error set with single else" {
}
test "switch capture copies its payload" {
- if (@import("builtin").zig_backend == .stage2_llvm) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend != .stage1) return error.SkipZigTest; // TODO
const S = struct {
fn doTheTest() !void {