Commit 8e05e6a1ed

Jakub Konka <kubkon@jakubkonka.com>
2022-04-27 22:59:55
test: migrate wasm incremental tests
1 parent 815dc2c
test/incremental/wasm-wasi/conditions.0.zig
@@ -0,0 +1,11 @@
+pub fn main() u8 {
+    var i: u8 = 5;
+    if (i > @as(u8, 4)) {
+        i += 10;
+    }
+    return i - 15;
+}
+
+// run
+// target=wasm32-wasi
+//
test/incremental/wasm-wasi/conditions.1.zig
@@ -0,0 +1,12 @@
+pub fn main() u8 {
+    var i: u8 = 5;
+    if (i < @as(u8, 4)) {
+        i += 10;
+    } else {
+        i = 2;
+    }
+    return i - 2;
+}
+
+// run
+//
test/incremental/wasm-wasi/conditions.2.zig
@@ -0,0 +1,12 @@
+pub fn main() u8 {
+    var i: u8 = 5;
+    if (i < @as(u8, 4)) {
+        i += 10;
+    } else if (i == @as(u8, 5)) {
+        i = 20;
+    }
+    return i - 20;
+}
+
+// run
+//
test/incremental/wasm-wasi/conditions.3.zig
@@ -0,0 +1,16 @@
+pub fn main() u8 {
+    var i: u8 = 11;
+    if (i < @as(u8, 4)) {
+        i += 10;
+    } else {
+        if (i > @as(u8, 10)) {
+            i += 20;
+        } else {
+            i = 20;
+        }
+    }
+    return i - 31;
+}
+
+// run
+//
test/incremental/wasm-wasi/conditions.4.zig
@@ -0,0 +1,15 @@
+pub fn main() void {
+    assert(foo(true) != @as(i32, 30));
+}
+
+fn assert(ok: bool) void {
+    if (!ok) unreachable;
+}
+
+fn foo(ok: bool) i32 {
+    const x = if (ok) @as(i32, 20) else @as(i32, 10);
+    return x;
+}
+
+// run
+//
test/incremental/wasm-wasi/conditions.5.zig
@@ -0,0 +1,20 @@
+pub fn main() void {
+    assert(foo(false) == @as(i32, 20));
+    assert(foo(true) == @as(i32, 30));
+}
+
+fn assert(ok: bool) void {
+    if (!ok) unreachable;
+}
+
+fn foo(ok: bool) i32 {
+    const val: i32 = blk: {
+        var x: i32 = 1;
+        if (!ok) break :blk x + @as(i32, 9);
+        break :blk x + @as(i32, 19);
+    };
+    return val + 10;
+}
+
+// run
+//
test/incremental/wasm-wasi/error_unions.0.zig
@@ -0,0 +1,15 @@
+pub fn main() void {
+    var e1 = error.Foo;
+    var e2 = error.Bar;
+    assert(e1 != e2);
+    assert(e1 == error.Foo);
+    assert(e2 == error.Bar);
+}
+
+fn assert(b: bool) void {
+    if (!b) unreachable;
+}
+
+// run
+// target=wasm32-wasi
+//
test/incremental/wasm-wasi/error_unions.1.zig
@@ -0,0 +1,8 @@
+pub fn main() u8 {
+    var e: anyerror!u8 = 5;
+    const i = e catch 10;
+    return i - 5;
+}
+
+// run
+//
test/incremental/wasm-wasi/error_unions.2.zig
@@ -0,0 +1,8 @@
+pub fn main() u8 {
+    var e: anyerror!u8 = error.Foo;
+    const i = e catch 10;
+    return i - 10;
+}
+
+// run
+//
test/incremental/wasm-wasi/error_unions.3.zig
@@ -0,0 +1,12 @@
+pub fn main() u8 {
+    var e = foo();
+    const i = e catch 69;
+    return i - 5;
+}
+
+fn foo() anyerror!u8 {
+    return 5;
+}
+
+// run
+//
test/incremental/wasm-wasi/error_unions.4.zig
@@ -0,0 +1,12 @@
+pub fn main() u8 {
+    var e = foo();
+    const i = e catch 69;
+    return i - 69;
+}
+
+fn foo() anyerror!u8 {
+    return error.Bruh;
+}
+
+// run
+//
test/incremental/wasm-wasi/error_unions.5.zig
@@ -0,0 +1,12 @@
+pub fn main() u8 {
+    var e = foo();
+    const i = e catch 42;
+    return i - 42;
+}
+
+fn foo() anyerror!u8 {
+    return error.Dab;
+}
+
+// run
+//
test/incremental/wasm-wasi/locals.0.zig
@@ -0,0 +1,14 @@
+pub fn main() void {
+    var i: u8 = 5;
+    var y: f32 = 42.0;
+    var x: u8 = 10;
+    if (false) {
+        y;
+        x;
+    }
+    if (i != 5) unreachable;
+}
+
+// run
+// target=wasm32-wasi
+//
test/incremental/wasm-wasi/locals.1.zig
@@ -0,0 +1,17 @@
+pub fn main() void {
+    var i: u8 = 5;
+    var y: f32 = 42.0;
+    _ = y;
+    var x: u8 = 10;
+    foo(i, x);
+    i = x;
+    if (i != 10) unreachable;
+}
+fn foo(x: u8, y: u8) void {
+    _ = y;
+    var i: u8 = 10;
+    i = x;
+}
+
+// run
+//
test/incremental/wasm-wasi/optionals.0.zig
@@ -0,0 +1,12 @@
+pub fn main() u8 {
+    var x: ?u8 = 5;
+    var y: u8 = 0;
+    if (x) |val| {
+        y = val;
+    }
+    return y - 5;
+}
+
+// run
+// target=wasm32-wasi
+//
test/incremental/wasm-wasi/optionals.1.zig
@@ -0,0 +1,11 @@
+pub fn main() u8 {
+    var x: ?u8 = null;
+    var y: u8 = 0;
+    if (x) |val| {
+        y = val;
+    }
+    return y;
+}
+
+// run
+//
test/incremental/wasm-wasi/optionals.2.zig
@@ -0,0 +1,7 @@
+pub fn main() u8 {
+    var x: ?u8 = 5;
+    return x.? - 5;
+}
+
+// run
+//
test/incremental/wasm-wasi/optionals.3.zig
@@ -0,0 +1,8 @@
+pub fn main() u8 {
+    var x: u8 = 5;
+    var y: ?u8 = x;
+    return y.? - 5;
+}
+
+// run
+//
test/incremental/wasm-wasi/optionals.4.zig
@@ -0,0 +1,13 @@
+pub fn main() u8 {
+    var val: ?u8 = 5;
+    while (val) |*v| {
+        v.* -= 1;
+        if (v.* == 2) {
+            val = null;
+        }
+    }
+    return 0;
+}
+
+// run
+//
test/incremental/wasm-wasi/pointers.0.zig
@@ -0,0 +1,14 @@
+pub fn main() u8 {
+    var x: u8 = 0;
+
+    foo(&x);
+    return x - 2;
+}
+
+fn foo(x: *u8) void {
+    x.* = 2;
+}
+
+// run
+// target=wasm32-wasi
+//
test/incremental/wasm-wasi/pointers.1.zig
@@ -0,0 +1,18 @@
+pub fn main() u8 {
+    var x: u8 = 0;
+
+    foo(&x);
+    bar(&x);
+    return x - 4;
+}
+
+fn foo(x: *u8) void {
+    x.* = 2;
+}
+
+fn bar(x: *u8) void {
+    x.* += 2;
+}
+
+// run
+//
test/incremental/wasm-wasi/structs.0.zig
@@ -0,0 +1,10 @@
+const Example = struct { x: u8 };
+
+pub fn main() u8 {
+    var example: Example = .{ .x = 5 };
+    return example.x - 5;
+}
+
+// run
+// target=wasm32-wasi
+//
test/incremental/wasm-wasi/structs.1.zig
@@ -0,0 +1,10 @@
+const Example = struct { x: u8 };
+
+pub fn main() u8 {
+    var example: Example = .{ .x = 5 };
+    example.x = 10;
+    return example.x - 10;
+}
+
+// run
+//
test/incremental/wasm-wasi/structs.2.zig
@@ -0,0 +1,9 @@
+const Example = struct { x: u8, y: u8 };
+
+pub fn main() u8 {
+    var example: Example = .{ .x = 5, .y = 10 };
+    return example.y + example.x - 15;
+}
+
+// run
+//
test/incremental/wasm-wasi/structs.3.zig
@@ -0,0 +1,12 @@
+const Example = struct { x: u8, y: u8 };
+
+pub fn main() u8 {
+    var example: Example = .{ .x = 5, .y = 10 };
+    var example2: Example = .{ .x = 10, .y = 20 };
+
+    example = example2;
+    return example.y + example.x - 30;
+}
+
+// run
+//
test/incremental/wasm-wasi/structs.4.zig
@@ -0,0 +1,11 @@
+const Example = struct { x: u8, y: u8 };
+
+pub fn main() u8 {
+    var example: Example = .{ .x = 5, .y = 10 };
+
+    example = .{ .x = 10, .y = 20 };
+    return example.y + example.x - 30;
+}
+
+// run
+//
test/incremental/wasm-wasi/switch.0.zig
@@ -0,0 +1,15 @@
+pub fn main() u8 {
+    var val: u8 = 1;
+    var a: u8 = switch (val) {
+        0, 1 => 2,
+        2 => 3,
+        3 => 4,
+        else => 5,
+    };
+
+    return a - 2;
+}
+
+// run
+// target=wasm32-wasi
+//
test/incremental/wasm-wasi/switch.1.zig
@@ -0,0 +1,14 @@
+pub fn main() u8 {
+    var val: u8 = 2;
+    var a: u8 = switch (val) {
+        0, 1 => 2,
+        2 => 3,
+        3 => 4,
+        else => 5,
+    };
+
+    return a - 3;
+}
+
+// run
+//
test/incremental/wasm-wasi/switch.2.zig
@@ -0,0 +1,14 @@
+pub fn main() u8 {
+    var val: u8 = 10;
+    var a: u8 = switch (val) {
+        0, 1 => 2,
+        2 => 3,
+        3 => 4,
+        else => 5,
+    };
+
+    return a - 5;
+}
+
+// run
+//
test/incremental/wasm-wasi/switch.3.zig
@@ -0,0 +1,15 @@
+const MyEnum = enum { One, Two, Three };
+
+pub fn main() u8 {
+    var val: MyEnum = .Two;
+    var a: u8 = switch (val) {
+        .One => 1,
+        .Two => 2,
+        .Three => 3,
+    };
+
+    return a - 2;
+}
+
+// run
+//
test/incremental/wasm-wasi/while_loops.0.zig
@@ -0,0 +1,12 @@
+pub fn main() u8 {
+    var i: u8 = 0;
+    while (i < @as(u8, 5)) {
+        i += 1;
+    }
+
+    return i - 5;
+}
+
+// run
+// target=wasm32-wasi
+//
test/incremental/wasm-wasi/while_loops.1.zig
@@ -0,0 +1,11 @@
+pub fn main() u8 {
+    var i: u8 = 0;
+    while (i < @as(u8, 10)) {
+        var x: u8 = 1;
+        i += x;
+    }
+    return i - 10;
+}
+
+// run
+//
test/incremental/wasm-wasi/while_loops.2.zig
@@ -0,0 +1,12 @@
+pub fn main() u8 {
+    var i: u8 = 0;
+    while (i < @as(u8, 10)) {
+        var x: u8 = 1;
+        i += x;
+        if (i == @as(u8, 5)) break;
+    }
+    return i - 5;
+}
+
+// run
+//
test/incremental/binary_operands.0.zig
@@ -0,0 +1,9 @@
+pub fn main() void {
+    var i: u8 = 5;
+    i += 20;
+    if (i != 25) unreachable;
+}
+
+// run
+// target=wasm32-wasi
+//
test/incremental/binary_operands.1.zig
@@ -0,0 +1,8 @@
+pub fn main() void {
+    var i: i32 = 2147483647;
+    if (i +% 1 != -2147483648) unreachable;
+    return;
+}
+
+// run
+//
test/incremental/binary_operands.10.zig
@@ -0,0 +1,13 @@
+pub fn main() void {
+    var i: u32 = 5;
+    i *= 7;
+    var result: u32 = foo(i, 10);
+    if (result != 350) unreachable;
+    return;
+}
+fn foo(x: u32, y: u32) u32 {
+    return x * y;
+}
+
+// run
+//
test/incremental/binary_operands.11.zig
@@ -0,0 +1,9 @@
+pub fn main() void {
+    var i: i32 = 2147483647;
+    const result = i *% 2;
+    if (result != -2) unreachable;
+    return;
+}
+
+// run
+//
test/incremental/binary_operands.12.zig
@@ -0,0 +1,8 @@
+pub fn main() void {
+    var i: u3 = 3;
+    if (i *% 3 != 1) unreachable;
+    return;
+}
+
+// run
+//
test/incremental/binary_operands.13.zig
@@ -0,0 +1,8 @@
+pub fn main() void {
+    var i: i4 = 3;
+    if (i *% 3 != 1) unreachable;
+    return;
+}
+
+// run
+//
test/incremental/binary_operands.14.zig
@@ -0,0 +1,13 @@
+pub fn main() void {
+    var i: u32 = 352;
+    i /= 7; // i = 50
+    var result: u32 = foo(i, 7);
+    if (result != 7) unreachable;
+    return;
+}
+fn foo(x: u32, y: u32) u32 {
+    return x / y;
+}
+
+// run
+//
test/incremental/binary_operands.15.zig
@@ -0,0 +1,8 @@
+pub fn main() u8 {
+    var i: u8 = 5;
+    i &= 6;
+    return i - 4;
+}
+
+// run
+//
test/incremental/binary_operands.16.zig
@@ -0,0 +1,8 @@
+pub fn main() u8 {
+    var i: u8 = 5;
+    i |= 6;
+    return i - 7;
+}
+
+// run
+//
test/incremental/binary_operands.17.zig
@@ -0,0 +1,8 @@
+pub fn main() u8 {
+    var i: u8 = 5;
+    i ^= 6;
+    return i - 3;
+}
+
+// run
+//
test/incremental/binary_operands.18.zig
@@ -0,0 +1,9 @@
+pub fn main() void {
+    var b: bool = false;
+    b = b or false;
+    if (b) unreachable;
+    return;
+}
+
+// run
+//
test/incremental/binary_operands.19.zig
@@ -0,0 +1,9 @@
+pub fn main() void {
+    var b: bool = true;
+    b = b or false;
+    if (!b) unreachable;
+    return;
+}
+
+// run
+//
test/incremental/binary_operands.2.zig
@@ -0,0 +1,8 @@
+pub fn main() void {
+    var i: i4 = 7;
+    if (i +% 1 != 0) unreachable;
+    return;
+}
+
+// run
+//
test/incremental/binary_operands.20.zig
@@ -0,0 +1,9 @@
+pub fn main() void {
+    var b: bool = false;
+    b = b or true;
+    if (!b) unreachable;
+    return;
+}
+
+// run
+//
test/incremental/binary_operands.21.zig
@@ -0,0 +1,9 @@
+pub fn main() void {
+    var b: bool = true;
+    b = b or true;
+    if (!b) unreachable;
+    return;
+}
+
+// run
+//
test/incremental/binary_operands.22.zig
@@ -0,0 +1,9 @@
+pub fn main() void {
+    var b: bool = false;
+    b = b and false;
+    if (b) unreachable;
+    return;
+}
+
+// run
+//
test/incremental/binary_operands.23.zig
@@ -0,0 +1,9 @@
+pub fn main() void {
+    var b: bool = true;
+    b = b and false;
+    if (b) unreachable;
+    return;
+}
+
+// run
+//
test/incremental/binary_operands.24.zig
@@ -0,0 +1,9 @@
+pub fn main() void {
+    var b: bool = false;
+    b = b and true;
+    if (b) unreachable;
+    return;
+}
+
+// run
+//
test/incremental/binary_operands.25.zig
@@ -0,0 +1,9 @@
+pub fn main() void {
+    var b: bool = true;
+    b = b and true;
+    if (!b) unreachable;
+    return;
+}
+
+// run
+//
test/incremental/binary_operands.3.zig
@@ -0,0 +1,7 @@
+pub fn main() u8 {
+    var i: u8 = 255;
+    return i +% 1;
+}
+
+// run
+//
test/incremental/binary_operands.4.zig
@@ -0,0 +1,12 @@
+pub fn main() u8 {
+    var i: u8 = 5;
+    i += 20;
+    var result: u8 = foo(i, 10);
+    return result - 35;
+}
+fn foo(x: u8, y: u8) u8 {
+    return x + y;
+}
+
+// run
+//
test/incremental/binary_operands.5.zig
@@ -0,0 +1,8 @@
+pub fn main() u8 {
+    var i: u8 = 20;
+    i -= 5;
+    return i - 15;
+}
+
+// run
+//
test/incremental/binary_operands.6.zig
@@ -0,0 +1,8 @@
+pub fn main() void {
+    var i: i32 = -2147483648;
+    if (i -% 1 != 2147483647) unreachable;
+    return;
+}
+
+// run
+//
test/incremental/binary_operands.7.zig
@@ -0,0 +1,8 @@
+pub fn main() void {
+    var i: i7 = -64;
+    if (i -% 1 != 63) unreachable;
+    return;
+}
+
+// run
+//
test/incremental/binary_operands.8.zig
@@ -0,0 +1,7 @@
+pub fn main() void {
+    var i: u4 = 0;
+    if (i -% 1 != 15) unreachable;
+}
+
+// run
+//
test/incremental/binary_operands.9.zig
@@ -0,0 +1,12 @@
+pub fn main() u8 {
+    var i: u8 = 5;
+    i -= 3;
+    var result: u8 = foo(i, 10);
+    return result - 8;
+}
+fn foo(x: u8, y: u8) u8 {
+    return y - x;
+}
+
+// run
+//
test/incremental/enum_values.0.zig
@@ -0,0 +1,18 @@
+const Number = enum { One, Two, Three };
+
+pub fn main() void {
+    var number1 = Number.One;
+    var number2: Number = .Two;
+    if (false) {
+        number1;
+        number2;
+    }
+    const number3 = @intToEnum(Number, 2);
+    if (@enumToInt(number3) != 2) {
+        unreachable;
+    }
+    return;
+}
+
+// run
+//
test/incremental/enum_values.1.zig
@@ -0,0 +1,22 @@
+const Number = enum { One, Two, Three };
+
+pub fn main() void {
+    var number1 = Number.One;
+    var number2: Number = .Two;
+    const number3 = @intToEnum(Number, 2);
+    assert(number1 != number2);
+    assert(number2 != number3);
+    assert(@enumToInt(number1) == 0);
+    assert(@enumToInt(number2) == 1);
+    assert(@enumToInt(number3) == 2);
+    var x: Number = .Two;
+    assert(number2 == x);
+
+    return;
+}
+fn assert(val: bool) void {
+    if (!val) unreachable;
+}
+
+// run
+//
test/incremental/function_calls.0.zig
@@ -0,0 +1,12 @@
+pub fn main() void {
+    foo();
+    bar();
+}
+fn foo() void {
+    bar();
+    bar();
+}
+fn bar() void {}
+
+// run
+//
test/incremental/function_calls.1.zig
@@ -0,0 +1,15 @@
+pub fn main() void {
+    bar();
+    foo();
+    foo();
+    bar();
+    foo();
+    bar();
+}
+fn foo() void {
+    bar();
+}
+fn bar() void {}
+
+// run
+//
test/incremental/function_calls.2.zig
@@ -0,0 +1,14 @@
+pub fn main() void {
+    bar();
+    foo();
+    return;
+}
+fn foo() void {
+    bar();
+    bar();
+    bar();
+}
+fn bar() void {}
+
+// run
+//
test/incremental/function_calls.3.zig
@@ -0,0 +1,10 @@
+pub fn main() void {
+    foo(10, 20);
+}
+fn foo(x: u8, y: u8) void {
+    _ = x;
+    _ = y;
+}
+
+// run
+//
test/stage2/wasm.zig
@@ -1,796 +0,0 @@
-const std = @import("std");
-const TestContext = @import("../../src/test.zig").TestContext;
-
-const wasi = std.zig.CrossTarget{
-    .cpu_arch = .wasm32,
-    .os_tag = .wasi,
-};
-
-pub fn addCases(ctx: *TestContext) !void {
-    {
-        var case = ctx.exe("wasm function calls", wasi);
-
-        case.addCompareOutput(
-            \\pub fn main() void {
-            \\    foo();
-            \\    bar();
-            \\}
-            \\fn foo() void {
-            \\    bar();
-            \\    bar();
-            \\}
-            \\fn bar() void {}
-        , "");
-
-        case.addCompareOutput(
-            \\pub fn main() void {
-            \\    bar();
-            \\    foo();
-            \\    foo();
-            \\    bar();
-            \\    foo();
-            \\    bar();
-            \\}
-            \\fn foo() void {
-            \\    bar();
-            \\}
-            \\fn bar() void {}
-        , "");
-
-        case.addCompareOutput(
-            \\pub fn main() void {
-            \\    bar();
-            \\    foo();
-            \\    return;
-            \\}
-            \\fn foo() void {
-            \\    bar();
-            \\    bar();
-            \\    bar();
-            \\}
-            \\fn bar() void {}
-        ,
-            "",
-        );
-
-        case.addCompareOutput(
-            \\pub fn main() void {
-            \\    foo(10, 20);
-            \\}
-            \\fn foo(x: u8, y: u8) void { _ = x; _ = y; }
-        , "");
-    }
-
-    {
-        var case = ctx.exe("wasm locals", wasi);
-
-        case.addCompareOutput(
-            \\pub fn main() void {
-            \\    var i: u8 = 5;
-            \\    var y: f32 = 42.0;
-            \\    var x: u8 = 10;
-            \\    if (false) {
-            \\      y;
-            \\      x;
-            \\    }
-            \\    if (i != 5) unreachable;
-            \\}
-        , "");
-
-        case.addCompareOutput(
-            \\pub fn main() void {
-            \\    var i: u8 = 5;
-            \\    var y: f32 = 42.0;
-            \\    _ = y;
-            \\    var x: u8 = 10;
-            \\    foo(i, x);
-            \\    i = x;
-            \\    if (i != 10) unreachable;
-            \\}
-            \\fn foo(x: u8, y: u8) void {
-            \\    _  = y;
-            \\    var i: u8 = 10;
-            \\    i = x;
-            \\}
-        , "");
-    }
-
-    {
-        var case = ctx.exe("wasm binary operands", wasi);
-
-        case.addCompareOutput(
-            \\pub fn main() void {
-            \\    var i: u8 = 5;
-            \\    i += 20;
-            \\    if (i != 25) unreachable;
-            \\}
-        , "");
-
-        case.addCompareOutput(
-            \\pub fn main() void {
-            \\    var i: i32 = 2147483647;
-            \\    if (i +% 1 != -2147483648) unreachable;
-            \\    return;
-            \\}
-        , "");
-
-        case.addCompareOutput(
-            \\pub fn main() void {
-            \\    var i: i4 = 7;
-            \\    if (i +% 1 != 0) unreachable;
-            \\    return;
-            \\}
-        , "");
-
-        case.addCompareOutput(
-            \\pub fn main() u8 {
-            \\    var i: u8 = 255;
-            \\    return i +% 1;
-            \\}
-        , "");
-
-        case.addCompareOutput(
-            \\pub fn main() u8 {
-            \\    var i: u8 = 5;
-            \\    i += 20;
-            \\    var result: u8 = foo(i, 10);
-            \\    return result - 35;
-            \\}
-            \\fn foo(x: u8, y: u8) u8 {
-            \\    return x + y;
-            \\}
-        , "");
-
-        case.addCompareOutput(
-            \\pub fn main() u8 {
-            \\    var i: u8 = 20;
-            \\    i -= 5;
-            \\    return i - 15;
-            \\}
-        , "");
-
-        case.addCompareOutput(
-            \\pub fn main() void {
-            \\    var i: i32 = -2147483648;
-            \\    if (i -% 1 != 2147483647) unreachable;
-            \\    return;
-            \\}
-        , "");
-
-        case.addCompareOutput(
-            \\pub fn main() void {
-            \\    var i: i7 = -64;
-            \\    if (i -% 1 != 63) unreachable;
-            \\    return;
-            \\}
-        , "");
-
-        case.addCompareOutput(
-            \\pub fn main() void {
-            \\    var i: u4 = 0;
-            \\    if(i -% 1 != 15) unreachable;
-            \\}
-        , "");
-
-        case.addCompareOutput(
-            \\pub fn main() u8 {
-            \\    var i: u8 = 5;
-            \\    i -= 3;
-            \\    var result: u8 = foo(i, 10);
-            \\    return result - 8;
-            \\}
-            \\fn foo(x: u8, y: u8) u8 {
-            \\    return y - x;
-            \\}
-        , "");
-
-        case.addCompareOutput(
-            \\pub fn main() void {
-            \\    var i: u32 = 5;
-            \\    i *= 7;
-            \\    var result: u32 = foo(i, 10);
-            \\    if (result != 350) unreachable;
-            \\    return;
-            \\}
-            \\fn foo(x: u32, y: u32) u32 {
-            \\    return x * y;
-            \\}
-        , "");
-
-        case.addCompareOutput(
-            \\pub fn main() void {
-            \\    var i: i32 = 2147483647;
-            \\    const result = i *% 2;
-            \\    if (result != -2) unreachable;
-            \\    return;
-            \\}
-        , "");
-
-        case.addCompareOutput(
-            \\pub fn main() void {
-            \\    var i: u3 = 3;
-            \\    if (i *% 3 != 1) unreachable;
-            \\    return;
-            \\}
-        , "");
-
-        case.addCompareOutput(
-            \\pub fn main() void {
-            \\    var i: i4 = 3;
-            \\    if (i *% 3 != 1) unreachable;
-            \\    return;
-            \\}
-        , "");
-
-        case.addCompareOutput(
-            \\pub fn main() void {
-            \\    var i: u32 = 352;
-            \\    i /= 7; // i = 50
-            \\    var result: u32 = foo(i, 7);
-            \\    if (result != 7) unreachable;
-            \\    return;
-            \\}
-            \\fn foo(x: u32, y: u32) u32 {
-            \\    return x / y;
-            \\}
-        , "");
-
-        case.addCompareOutput(
-            \\pub fn main() u8 {
-            \\    var i: u8 = 5;
-            \\    i &= 6;
-            \\    return i - 4;
-            \\}
-        , "");
-
-        case.addCompareOutput(
-            \\pub fn main() u8 {
-            \\    var i: u8 = 5;
-            \\    i |= 6;
-            \\    return i - 7;
-            \\}
-        , "");
-
-        case.addCompareOutput(
-            \\pub fn main() u8 {
-            \\    var i: u8 = 5;
-            \\    i ^= 6;
-            \\    return i - 3;
-            \\}
-        , "");
-
-        case.addCompareOutput(
-            \\pub fn main() void {
-            \\    var b: bool = false;
-            \\    b = b or false;
-            \\    if (b) unreachable;
-            \\    return;
-            \\}
-        , "");
-
-        case.addCompareOutput(
-            \\pub fn main() void {
-            \\    var b: bool = true;
-            \\    b = b or false;
-            \\    if (!b) unreachable;
-            \\    return;
-            \\}
-        , "");
-
-        case.addCompareOutput(
-            \\pub fn main() void {
-            \\    var b: bool = false;
-            \\    b = b or true;
-            \\    if (!b) unreachable;
-            \\    return;
-            \\}
-        , "");
-
-        case.addCompareOutput(
-            \\pub fn main() void {
-            \\    var b: bool = true;
-            \\    b = b or true;
-            \\    if (!b) unreachable;
-            \\    return;
-            \\}
-        , "");
-
-        case.addCompareOutput(
-            \\pub fn main() void {
-            \\    var b: bool = false;
-            \\    b = b and false;
-            \\    if (b) unreachable;
-            \\    return;
-            \\}
-        , "");
-
-        case.addCompareOutput(
-            \\pub fn main() void {
-            \\    var b: bool = true;
-            \\    b = b and false;
-            \\    if (b) unreachable;
-            \\    return;
-            \\}
-        , "");
-
-        case.addCompareOutput(
-            \\pub fn main() void {
-            \\    var b: bool = false;
-            \\    b = b and true;
-            \\    if (b) unreachable;
-            \\    return;
-            \\}
-        , "");
-
-        case.addCompareOutput(
-            \\pub fn main() void {
-            \\    var b: bool = true;
-            \\    b = b and true;
-            \\    if (!b) unreachable;
-            \\    return;
-            \\}
-        , "");
-    }
-
-    {
-        var case = ctx.exe("wasm conditions", wasi);
-
-        case.addCompareOutput(
-            \\pub fn main() u8 {
-            \\    var i: u8 = 5;
-            \\    if (i > @as(u8, 4)) {
-            \\        i += 10;
-            \\    }
-            \\    return i - 15;
-            \\}
-        , "");
-
-        case.addCompareOutput(
-            \\pub fn main() u8 {
-            \\    var i: u8 = 5;
-            \\    if (i < @as(u8, 4)) {
-            \\        i += 10;
-            \\    } else {
-            \\        i = 2;
-            \\    }
-            \\    return i - 2;
-            \\}
-        , "");
-
-        case.addCompareOutput(
-            \\pub fn main() u8 {
-            \\    var i: u8 = 5;
-            \\    if (i < @as(u8, 4)) {
-            \\        i += 10;
-            \\    } else if(i == @as(u8, 5)) {
-            \\        i = 20;
-            \\    }
-            \\    return i - 20;
-            \\}
-        , "");
-
-        case.addCompareOutput(
-            \\pub fn main() u8 {
-            \\    var i: u8 = 11;
-            \\    if (i < @as(u8, 4)) {
-            \\        i += 10;
-            \\    } else {
-            \\        if (i > @as(u8, 10)) {
-            \\            i += 20;
-            \\        } else {
-            \\            i = 20;
-            \\        }
-            \\    }
-            \\    return i - 31;
-            \\}
-        , "");
-
-        case.addCompareOutput(
-            \\pub fn main() void {
-            \\    assert(foo(true) != @as(i32, 30));
-            \\}
-            \\
-            \\fn assert(ok: bool) void {
-            \\    if (!ok) unreachable;
-            \\}
-            \\
-            \\fn foo(ok: bool) i32 {
-            \\    const x = if(ok) @as(i32, 20) else @as(i32, 10);
-            \\    return x;
-            \\}
-        , "");
-
-        case.addCompareOutput(
-            \\pub fn main() void {
-            \\    assert(foo(false) == @as(i32, 20));
-            \\    assert(foo(true) == @as(i32, 30));
-            \\}
-            \\
-            \\fn assert(ok: bool) void {
-            \\    if (!ok) unreachable;
-            \\}
-            \\
-            \\fn foo(ok: bool) i32 {
-            \\    const val: i32 = blk: {
-            \\        var x: i32 = 1;
-            \\        if (!ok) break :blk x + @as(i32, 9);
-            \\        break :blk x + @as(i32, 19);
-            \\    };
-            \\    return val + 10;
-            \\}
-        , "");
-    }
-
-    {
-        var case = ctx.exe("wasm while loops", wasi);
-
-        case.addCompareOutput(
-            \\pub fn main() u8 {
-            \\    var i: u8 = 0;
-            \\    while(i < @as(u8, 5)){
-            \\        i += 1;
-            \\    }
-            \\
-            \\    return i - 5;
-            \\}
-        , "");
-
-        case.addCompareOutput(
-            \\pub fn main() u8 {
-            \\    var i: u8 = 0;
-            \\    while(i < @as(u8, 10)){
-            \\        var x: u8 = 1;
-            \\        i += x;
-            \\    }
-            \\    return i - 10;
-            \\}
-        , "");
-
-        case.addCompareOutput(
-            \\pub fn main() u8 {
-            \\    var i: u8 = 0;
-            \\    while(i < @as(u8, 10)){
-            \\        var x: u8 = 1;
-            \\        i += x;
-            \\        if (i == @as(u8, 5)) break;
-            \\    }
-            \\    return i - 5;
-            \\}
-        , "");
-    }
-
-    {
-        var case = ctx.exe("wasm enum values", wasi);
-
-        case.addCompareOutput(
-            \\const Number = enum { One, Two, Three };
-            \\
-            \\pub fn main() void {
-            \\    var number1 = Number.One;
-            \\    var number2: Number = .Two;
-            \\    if (false) {
-            \\        number1;
-            \\        number2;
-            \\    }
-            \\    const number3 = @intToEnum(Number, 2);
-            \\    if (@enumToInt(number3) != 2) {
-            \\        unreachable;
-            \\    }
-            \\    return;
-            \\}
-        , "");
-
-        case.addCompareOutput(
-            \\const Number = enum { One, Two, Three };
-            \\
-            \\pub fn main() void {
-            \\    var number1 = Number.One;
-            \\    var number2: Number = .Two;
-            \\    const number3 = @intToEnum(Number, 2);
-            \\    assert(number1 != number2);
-            \\    assert(number2 != number3);
-            \\    assert(@enumToInt(number1) == 0);
-            \\    assert(@enumToInt(number2) == 1);
-            \\    assert(@enumToInt(number3) == 2);
-            \\    var x: Number = .Two;
-            \\    assert(number2 == x);
-            \\
-            \\    return;
-            \\}
-            \\fn assert(val: bool) void {
-            \\    if(!val) unreachable;
-            \\}
-        , "");
-    }
-
-    {
-        var case = ctx.exe("wasm structs", wasi);
-
-        case.addCompareOutput(
-            \\const Example = struct { x: u8 };
-            \\
-            \\pub fn main() u8 {
-            \\    var example: Example = .{ .x = 5 };
-            \\    return example.x - 5;
-            \\}
-        , "");
-
-        case.addCompareOutput(
-            \\const Example = struct { x: u8 };
-            \\
-            \\pub fn main() u8 {
-            \\    var example: Example = .{ .x = 5 };
-            \\    example.x = 10;
-            \\    return example.x - 10;
-            \\}
-        , "");
-
-        case.addCompareOutput(
-            \\const Example = struct { x: u8, y: u8 };
-            \\
-            \\pub fn main() u8 {
-            \\    var example: Example = .{ .x = 5, .y = 10 };
-            \\    return example.y + example.x - 15;
-            \\}
-        , "");
-
-        case.addCompareOutput(
-            \\const Example = struct { x: u8, y: u8 };
-            \\
-            \\pub fn main() u8 {
-            \\    var example: Example = .{ .x = 5, .y = 10 };
-            \\    var example2: Example = .{ .x = 10, .y = 20 };
-            \\
-            \\    example = example2;
-            \\    return example.y + example.x - 30;
-            \\}
-        , "");
-
-        case.addCompareOutput(
-            \\const Example = struct { x: u8, y: u8 };
-            \\
-            \\pub fn main() u8 {
-            \\    var example: Example = .{ .x = 5, .y = 10 };
-            \\
-            \\    example = .{ .x = 10, .y = 20 };
-            \\    return example.y + example.x - 30;
-            \\}
-        , "");
-    }
-
-    {
-        var case = ctx.exe("wasm switch", wasi);
-
-        case.addCompareOutput(
-            \\pub fn main() u8 {
-            \\    var val: u8 = 1;
-            \\    var a: u8 = switch (val) {
-            \\        0, 1 => 2,
-            \\        2 => 3,
-            \\        3 => 4,
-            \\        else => 5,
-            \\    };
-            \\
-            \\    return a - 2;
-            \\}
-        , "");
-
-        case.addCompareOutput(
-            \\pub fn main() u8 {
-            \\    var val: u8 = 2;
-            \\    var a: u8 = switch (val) {
-            \\        0, 1 => 2,
-            \\        2 => 3,
-            \\        3 => 4,
-            \\        else => 5,
-            \\    };
-            \\
-            \\    return a - 3;
-            \\}
-        , "");
-
-        case.addCompareOutput(
-            \\pub fn main() u8 {
-            \\    var val: u8 = 10;
-            \\    var a: u8 = switch (val) {
-            \\        0, 1 => 2,
-            \\        2 => 3,
-            \\        3 => 4,
-            \\        else => 5,
-            \\    };
-            \\
-            \\    return a - 5;
-            \\}
-        , "");
-
-        case.addCompareOutput(
-            \\const MyEnum = enum { One, Two, Three };
-            \\
-            \\pub fn main() u8 {
-            \\    var val: MyEnum = .Two;
-            \\    var a: u8 = switch (val) {
-            \\        .One => 1,
-            \\        .Two => 2,
-            \\        .Three => 3,
-            \\    };
-            \\
-            \\    return a - 2;
-            \\}
-        , "");
-    }
-
-    {
-        var case = ctx.exe("wasm error unions", wasi);
-
-        case.addCompareOutput(
-            \\pub fn main() void {
-            \\    var e1 = error.Foo;
-            \\    var e2 = error.Bar;
-            \\    assert(e1 != e2);
-            \\    assert(e1 == error.Foo);
-            \\    assert(e2 == error.Bar);
-            \\}
-            \\
-            \\fn assert(b: bool) void {
-            \\    if (!b) unreachable;
-            \\}
-        , "");
-
-        case.addCompareOutput(
-            \\pub fn main() u8 {
-            \\    var e: anyerror!u8 = 5;
-            \\    const i = e catch 10;
-            \\    return i - 5;
-            \\}
-        , "");
-
-        case.addCompareOutput(
-            \\pub fn main() u8 {
-            \\    var e: anyerror!u8 = error.Foo;
-            \\    const i = e catch 10;
-            \\    return i - 10;
-            \\}
-        , "");
-
-        case.addCompareOutput(
-            \\pub fn main() u8 {
-            \\    var e = foo();
-            \\    const i = e catch 69;
-            \\    return i - 5;
-            \\}
-            \\
-            \\fn foo() anyerror!u8 {
-            \\    return 5;
-            \\}
-        , "");
-    }
-
-    {
-        var case = ctx.exe("wasm error union part 2", wasi);
-
-        case.addCompareOutput(
-            \\pub fn main() u8 {
-            \\    var e = foo();
-            \\    const i = e catch 69;
-            \\    return i - 69;
-            \\}
-            \\
-            \\fn foo() anyerror!u8 {
-            \\    return error.Bruh;
-            \\}
-        , "");
-        case.addCompareOutput(
-            \\pub fn main() u8 {
-            \\    var e = foo();
-            \\    const i = e catch 42;
-            \\    return i - 42;
-            \\}
-            \\
-            \\fn foo() anyerror!u8 {
-            \\    return error.Dab;
-            \\}
-        , "");
-    }
-
-    {
-        var case = ctx.exe("wasm integer widening", wasi);
-
-        case.addCompareOutput(
-            \\pub fn main() void{
-            \\    var x: u8 = 5;
-            \\    var y: u64 = x;
-            \\    _ = y;
-            \\    return;
-            \\}
-        , "");
-    }
-
-    {
-        var case = ctx.exe("wasm optionals", wasi);
-
-        case.addCompareOutput(
-            \\pub fn main() u8 {
-            \\    var x: ?u8 = 5;
-            \\    var y: u8 = 0;
-            \\    if (x) |val| {
-            \\        y = val;
-            \\    }
-            \\    return y - 5;
-            \\}
-        , "");
-
-        case.addCompareOutput(
-            \\pub fn main() u8 {
-            \\    var x: ?u8 = null;
-            \\    var y: u8 = 0;
-            \\    if (x) |val| {
-            \\        y = val;
-            \\    }
-            \\    return y;
-            \\}
-        , "");
-
-        case.addCompareOutput(
-            \\pub fn main() u8 {
-            \\    var x: ?u8 = 5;
-            \\    return x.? - 5;
-            \\}
-        , "");
-
-        case.addCompareOutput(
-            \\pub fn main() u8 {
-            \\    var x: u8 = 5;
-            \\    var y: ?u8 = x;
-            \\    return y.? - 5;
-            \\}
-        , "");
-
-        case.addCompareOutput(
-            \\pub fn main() u8 {
-            \\    var val: ?u8 = 5;
-            \\    while (val) |*v| {
-            \\        v.* -= 1;
-            \\        if (v.* == 2) {
-            \\            val = null;
-            \\        }
-            \\    }
-            \\    return 0;
-            \\}
-        , "");
-    }
-
-    {
-        var case = ctx.exe("wasm pointers", wasi);
-
-        case.addCompareOutput(
-            \\pub fn main() u8 {
-            \\    var x: u8 = 0;
-            \\
-            \\    foo(&x);
-            \\    return x - 2;
-            \\}
-            \\
-            \\fn foo(x: *u8)void {
-            \\    x.* = 2;
-            \\}
-        , "");
-
-        case.addCompareOutput(
-            \\pub fn main() u8 {
-            \\    var x: u8 = 0;
-            \\
-            \\    foo(&x);
-            \\    bar(&x);
-            \\    return x - 4;
-            \\}
-            \\
-            \\fn foo(x: *u8)void {
-            \\    x.* = 2;
-            \\}
-            \\
-            \\fn bar(x: *u8) void {
-            \\    x.* += 2;
-            \\}
-        , "");
-    }
-}
test/cases.zig
@@ -12,7 +12,6 @@ pub fn addCases(ctx: *TestContext) !void {
     try @import("stage2/arm.zig").addCases(ctx);
     try @import("stage2/aarch64.zig").addCases(ctx);
     try @import("stage2/llvm.zig").addCases(ctx);
-    try @import("stage2/wasm.zig").addCases(ctx);
     try @import("stage2/riscv64.zig").addCases(ctx);
     try @import("stage2/plan9.zig").addCases(ctx);
     try @import("stage2/x86_64.zig").addCases(ctx);