From 8e05e6a1ed3089ce1161cca9980f9939440a421b Mon Sep 17 00:00:00 2001 From: Jakub Konka Date: Wed, 27 Apr 2022 22:59:55 +0200 Subject: [PATCH] test: migrate wasm incremental tests --- test/cases.zig | 1 - test/incremental/binary_operands.0.zig | 9 + test/incremental/binary_operands.1.zig | 8 + test/incremental/binary_operands.10.zig | 13 + test/incremental/binary_operands.11.zig | 9 + test/incremental/binary_operands.12.zig | 8 + test/incremental/binary_operands.13.zig | 8 + test/incremental/binary_operands.14.zig | 13 + test/incremental/binary_operands.15.zig | 8 + test/incremental/binary_operands.16.zig | 8 + test/incremental/binary_operands.17.zig | 8 + test/incremental/binary_operands.18.zig | 9 + test/incremental/binary_operands.19.zig | 9 + test/incremental/binary_operands.2.zig | 8 + test/incremental/binary_operands.20.zig | 9 + test/incremental/binary_operands.21.zig | 9 + test/incremental/binary_operands.22.zig | 9 + test/incremental/binary_operands.23.zig | 9 + test/incremental/binary_operands.24.zig | 9 + test/incremental/binary_operands.25.zig | 9 + test/incremental/binary_operands.3.zig | 7 + test/incremental/binary_operands.4.zig | 12 + test/incremental/binary_operands.5.zig | 8 + test/incremental/binary_operands.6.zig | 8 + test/incremental/binary_operands.7.zig | 8 + test/incremental/binary_operands.8.zig | 7 + test/incremental/binary_operands.9.zig | 12 + test/incremental/enum_values.0.zig | 18 + test/incremental/enum_values.1.zig | 22 + test/incremental/function_calls.0.zig | 12 + test/incremental/function_calls.1.zig | 15 + test/incremental/function_calls.2.zig | 14 + test/incremental/function_calls.3.zig | 10 + test/incremental/wasm-wasi/conditions.0.zig | 11 + test/incremental/wasm-wasi/conditions.1.zig | 12 + test/incremental/wasm-wasi/conditions.2.zig | 12 + test/incremental/wasm-wasi/conditions.3.zig | 16 + test/incremental/wasm-wasi/conditions.4.zig | 15 + test/incremental/wasm-wasi/conditions.5.zig | 20 + test/incremental/wasm-wasi/error_unions.0.zig | 15 + test/incremental/wasm-wasi/error_unions.1.zig | 8 + test/incremental/wasm-wasi/error_unions.2.zig | 8 + test/incremental/wasm-wasi/error_unions.3.zig | 12 + test/incremental/wasm-wasi/error_unions.4.zig | 12 + test/incremental/wasm-wasi/error_unions.5.zig | 12 + test/incremental/wasm-wasi/locals.0.zig | 14 + test/incremental/wasm-wasi/locals.1.zig | 17 + test/incremental/wasm-wasi/optionals.0.zig | 12 + test/incremental/wasm-wasi/optionals.1.zig | 11 + test/incremental/wasm-wasi/optionals.2.zig | 7 + test/incremental/wasm-wasi/optionals.3.zig | 8 + test/incremental/wasm-wasi/optionals.4.zig | 13 + test/incremental/wasm-wasi/pointers.0.zig | 14 + test/incremental/wasm-wasi/pointers.1.zig | 18 + test/incremental/wasm-wasi/structs.0.zig | 10 + test/incremental/wasm-wasi/structs.1.zig | 10 + test/incremental/wasm-wasi/structs.2.zig | 9 + test/incremental/wasm-wasi/structs.3.zig | 12 + test/incremental/wasm-wasi/structs.4.zig | 11 + test/incremental/wasm-wasi/switch.0.zig | 15 + test/incremental/wasm-wasi/switch.1.zig | 14 + test/incremental/wasm-wasi/switch.2.zig | 14 + test/incremental/wasm-wasi/switch.3.zig | 15 + test/incremental/wasm-wasi/while_loops.0.zig | 12 + test/incremental/wasm-wasi/while_loops.1.zig | 11 + test/incremental/wasm-wasi/while_loops.2.zig | 12 + test/stage2/wasm.zig | 796 ------------------ 67 files changed, 737 insertions(+), 797 deletions(-) create mode 100644 test/incremental/binary_operands.0.zig create mode 100644 test/incremental/binary_operands.1.zig create mode 100644 test/incremental/binary_operands.10.zig create mode 100644 test/incremental/binary_operands.11.zig create mode 100644 test/incremental/binary_operands.12.zig create mode 100644 test/incremental/binary_operands.13.zig create mode 100644 test/incremental/binary_operands.14.zig create mode 100644 test/incremental/binary_operands.15.zig create mode 100644 test/incremental/binary_operands.16.zig create mode 100644 test/incremental/binary_operands.17.zig create mode 100644 test/incremental/binary_operands.18.zig create mode 100644 test/incremental/binary_operands.19.zig create mode 100644 test/incremental/binary_operands.2.zig create mode 100644 test/incremental/binary_operands.20.zig create mode 100644 test/incremental/binary_operands.21.zig create mode 100644 test/incremental/binary_operands.22.zig create mode 100644 test/incremental/binary_operands.23.zig create mode 100644 test/incremental/binary_operands.24.zig create mode 100644 test/incremental/binary_operands.25.zig create mode 100644 test/incremental/binary_operands.3.zig create mode 100644 test/incremental/binary_operands.4.zig create mode 100644 test/incremental/binary_operands.5.zig create mode 100644 test/incremental/binary_operands.6.zig create mode 100644 test/incremental/binary_operands.7.zig create mode 100644 test/incremental/binary_operands.8.zig create mode 100644 test/incremental/binary_operands.9.zig create mode 100644 test/incremental/enum_values.0.zig create mode 100644 test/incremental/enum_values.1.zig create mode 100644 test/incremental/function_calls.0.zig create mode 100644 test/incremental/function_calls.1.zig create mode 100644 test/incremental/function_calls.2.zig create mode 100644 test/incremental/function_calls.3.zig create mode 100644 test/incremental/wasm-wasi/conditions.0.zig create mode 100644 test/incremental/wasm-wasi/conditions.1.zig create mode 100644 test/incremental/wasm-wasi/conditions.2.zig create mode 100644 test/incremental/wasm-wasi/conditions.3.zig create mode 100644 test/incremental/wasm-wasi/conditions.4.zig create mode 100644 test/incremental/wasm-wasi/conditions.5.zig create mode 100644 test/incremental/wasm-wasi/error_unions.0.zig create mode 100644 test/incremental/wasm-wasi/error_unions.1.zig create mode 100644 test/incremental/wasm-wasi/error_unions.2.zig create mode 100644 test/incremental/wasm-wasi/error_unions.3.zig create mode 100644 test/incremental/wasm-wasi/error_unions.4.zig create mode 100644 test/incremental/wasm-wasi/error_unions.5.zig create mode 100644 test/incremental/wasm-wasi/locals.0.zig create mode 100644 test/incremental/wasm-wasi/locals.1.zig create mode 100644 test/incremental/wasm-wasi/optionals.0.zig create mode 100644 test/incremental/wasm-wasi/optionals.1.zig create mode 100644 test/incremental/wasm-wasi/optionals.2.zig create mode 100644 test/incremental/wasm-wasi/optionals.3.zig create mode 100644 test/incremental/wasm-wasi/optionals.4.zig create mode 100644 test/incremental/wasm-wasi/pointers.0.zig create mode 100644 test/incremental/wasm-wasi/pointers.1.zig create mode 100644 test/incremental/wasm-wasi/structs.0.zig create mode 100644 test/incremental/wasm-wasi/structs.1.zig create mode 100644 test/incremental/wasm-wasi/structs.2.zig create mode 100644 test/incremental/wasm-wasi/structs.3.zig create mode 100644 test/incremental/wasm-wasi/structs.4.zig create mode 100644 test/incremental/wasm-wasi/switch.0.zig create mode 100644 test/incremental/wasm-wasi/switch.1.zig create mode 100644 test/incremental/wasm-wasi/switch.2.zig create mode 100644 test/incremental/wasm-wasi/switch.3.zig create mode 100644 test/incremental/wasm-wasi/while_loops.0.zig create mode 100644 test/incremental/wasm-wasi/while_loops.1.zig create mode 100644 test/incremental/wasm-wasi/while_loops.2.zig delete mode 100644 test/stage2/wasm.zig diff --git a/test/cases.zig b/test/cases.zig index 0fb6f381dd..cc77104fb9 100644 --- a/test/cases.zig +++ b/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); diff --git a/test/incremental/binary_operands.0.zig b/test/incremental/binary_operands.0.zig new file mode 100644 index 0000000000..e3688232aa --- /dev/null +++ b/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 +// diff --git a/test/incremental/binary_operands.1.zig b/test/incremental/binary_operands.1.zig new file mode 100644 index 0000000000..fdee492d22 --- /dev/null +++ b/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 +// diff --git a/test/incremental/binary_operands.10.zig b/test/incremental/binary_operands.10.zig new file mode 100644 index 0000000000..63e045c258 --- /dev/null +++ b/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 +// diff --git a/test/incremental/binary_operands.11.zig b/test/incremental/binary_operands.11.zig new file mode 100644 index 0000000000..f461bcc0af --- /dev/null +++ b/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 +// diff --git a/test/incremental/binary_operands.12.zig b/test/incremental/binary_operands.12.zig new file mode 100644 index 0000000000..0ffb5e2230 --- /dev/null +++ b/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 +// diff --git a/test/incremental/binary_operands.13.zig b/test/incremental/binary_operands.13.zig new file mode 100644 index 0000000000..e62107b47e --- /dev/null +++ b/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 +// diff --git a/test/incremental/binary_operands.14.zig b/test/incremental/binary_operands.14.zig new file mode 100644 index 0000000000..fcc7245ad9 --- /dev/null +++ b/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 +// diff --git a/test/incremental/binary_operands.15.zig b/test/incremental/binary_operands.15.zig new file mode 100644 index 0000000000..c709e5dfd2 --- /dev/null +++ b/test/incremental/binary_operands.15.zig @@ -0,0 +1,8 @@ +pub fn main() u8 { + var i: u8 = 5; + i &= 6; + return i - 4; +} + +// run +// diff --git a/test/incremental/binary_operands.16.zig b/test/incremental/binary_operands.16.zig new file mode 100644 index 0000000000..fe1813b877 --- /dev/null +++ b/test/incremental/binary_operands.16.zig @@ -0,0 +1,8 @@ +pub fn main() u8 { + var i: u8 = 5; + i |= 6; + return i - 7; +} + +// run +// diff --git a/test/incremental/binary_operands.17.zig b/test/incremental/binary_operands.17.zig new file mode 100644 index 0000000000..439d3d6d6b --- /dev/null +++ b/test/incremental/binary_operands.17.zig @@ -0,0 +1,8 @@ +pub fn main() u8 { + var i: u8 = 5; + i ^= 6; + return i - 3; +} + +// run +// diff --git a/test/incremental/binary_operands.18.zig b/test/incremental/binary_operands.18.zig new file mode 100644 index 0000000000..c21aa586c5 --- /dev/null +++ b/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 +// diff --git a/test/incremental/binary_operands.19.zig b/test/incremental/binary_operands.19.zig new file mode 100644 index 0000000000..e95470391c --- /dev/null +++ b/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 +// diff --git a/test/incremental/binary_operands.2.zig b/test/incremental/binary_operands.2.zig new file mode 100644 index 0000000000..7407ed7d95 --- /dev/null +++ b/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 +// diff --git a/test/incremental/binary_operands.20.zig b/test/incremental/binary_operands.20.zig new file mode 100644 index 0000000000..9238bf97c0 --- /dev/null +++ b/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 +// diff --git a/test/incremental/binary_operands.21.zig b/test/incremental/binary_operands.21.zig new file mode 100644 index 0000000000..a2d427bda9 --- /dev/null +++ b/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 +// diff --git a/test/incremental/binary_operands.22.zig b/test/incremental/binary_operands.22.zig new file mode 100644 index 0000000000..aa8439a361 --- /dev/null +++ b/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 +// diff --git a/test/incremental/binary_operands.23.zig b/test/incremental/binary_operands.23.zig new file mode 100644 index 0000000000..8596ea7709 --- /dev/null +++ b/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 +// diff --git a/test/incremental/binary_operands.24.zig b/test/incremental/binary_operands.24.zig new file mode 100644 index 0000000000..08dc4430a2 --- /dev/null +++ b/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 +// diff --git a/test/incremental/binary_operands.25.zig b/test/incremental/binary_operands.25.zig new file mode 100644 index 0000000000..8aa0acfdb5 --- /dev/null +++ b/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 +// diff --git a/test/incremental/binary_operands.3.zig b/test/incremental/binary_operands.3.zig new file mode 100644 index 0000000000..0297f1e7a4 --- /dev/null +++ b/test/incremental/binary_operands.3.zig @@ -0,0 +1,7 @@ +pub fn main() u8 { + var i: u8 = 255; + return i +% 1; +} + +// run +// diff --git a/test/incremental/binary_operands.4.zig b/test/incremental/binary_operands.4.zig new file mode 100644 index 0000000000..f0f8910e14 --- /dev/null +++ b/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 +// diff --git a/test/incremental/binary_operands.5.zig b/test/incremental/binary_operands.5.zig new file mode 100644 index 0000000000..51ab437475 --- /dev/null +++ b/test/incremental/binary_operands.5.zig @@ -0,0 +1,8 @@ +pub fn main() u8 { + var i: u8 = 20; + i -= 5; + return i - 15; +} + +// run +// diff --git a/test/incremental/binary_operands.6.zig b/test/incremental/binary_operands.6.zig new file mode 100644 index 0000000000..5c9c5be68a --- /dev/null +++ b/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 +// diff --git a/test/incremental/binary_operands.7.zig b/test/incremental/binary_operands.7.zig new file mode 100644 index 0000000000..634a47fb0c --- /dev/null +++ b/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 +// diff --git a/test/incremental/binary_operands.8.zig b/test/incremental/binary_operands.8.zig new file mode 100644 index 0000000000..a20f664694 --- /dev/null +++ b/test/incremental/binary_operands.8.zig @@ -0,0 +1,7 @@ +pub fn main() void { + var i: u4 = 0; + if (i -% 1 != 15) unreachable; +} + +// run +// diff --git a/test/incremental/binary_operands.9.zig b/test/incremental/binary_operands.9.zig new file mode 100644 index 0000000000..e6c4f5d52b --- /dev/null +++ b/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 +// diff --git a/test/incremental/enum_values.0.zig b/test/incremental/enum_values.0.zig new file mode 100644 index 0000000000..d96841dd8c --- /dev/null +++ b/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 +// diff --git a/test/incremental/enum_values.1.zig b/test/incremental/enum_values.1.zig new file mode 100644 index 0000000000..47b9e21a27 --- /dev/null +++ b/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 +// diff --git a/test/incremental/function_calls.0.zig b/test/incremental/function_calls.0.zig new file mode 100644 index 0000000000..eb388bc49f --- /dev/null +++ b/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 +// diff --git a/test/incremental/function_calls.1.zig b/test/incremental/function_calls.1.zig new file mode 100644 index 0000000000..60bc061bca --- /dev/null +++ b/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 +// diff --git a/test/incremental/function_calls.2.zig b/test/incremental/function_calls.2.zig new file mode 100644 index 0000000000..ce5627378a --- /dev/null +++ b/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 +// diff --git a/test/incremental/function_calls.3.zig b/test/incremental/function_calls.3.zig new file mode 100644 index 0000000000..0316d9042d --- /dev/null +++ b/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 +// diff --git a/test/incremental/wasm-wasi/conditions.0.zig b/test/incremental/wasm-wasi/conditions.0.zig new file mode 100644 index 0000000000..1167ea85a4 --- /dev/null +++ b/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 +// diff --git a/test/incremental/wasm-wasi/conditions.1.zig b/test/incremental/wasm-wasi/conditions.1.zig new file mode 100644 index 0000000000..f9f03808b9 --- /dev/null +++ b/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 +// diff --git a/test/incremental/wasm-wasi/conditions.2.zig b/test/incremental/wasm-wasi/conditions.2.zig new file mode 100644 index 0000000000..a80ead9ea5 --- /dev/null +++ b/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 +// diff --git a/test/incremental/wasm-wasi/conditions.3.zig b/test/incremental/wasm-wasi/conditions.3.zig new file mode 100644 index 0000000000..bd016a47f3 --- /dev/null +++ b/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 +// diff --git a/test/incremental/wasm-wasi/conditions.4.zig b/test/incremental/wasm-wasi/conditions.4.zig new file mode 100644 index 0000000000..e1bd9ce0f7 --- /dev/null +++ b/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 +// diff --git a/test/incremental/wasm-wasi/conditions.5.zig b/test/incremental/wasm-wasi/conditions.5.zig new file mode 100644 index 0000000000..2d5ba338c7 --- /dev/null +++ b/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 +// diff --git a/test/incremental/wasm-wasi/error_unions.0.zig b/test/incremental/wasm-wasi/error_unions.0.zig new file mode 100644 index 0000000000..355698e4b6 --- /dev/null +++ b/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 +// diff --git a/test/incremental/wasm-wasi/error_unions.1.zig b/test/incremental/wasm-wasi/error_unions.1.zig new file mode 100644 index 0000000000..526e1a110d --- /dev/null +++ b/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 +// diff --git a/test/incremental/wasm-wasi/error_unions.2.zig b/test/incremental/wasm-wasi/error_unions.2.zig new file mode 100644 index 0000000000..b66c7d78c0 --- /dev/null +++ b/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 +// diff --git a/test/incremental/wasm-wasi/error_unions.3.zig b/test/incremental/wasm-wasi/error_unions.3.zig new file mode 100644 index 0000000000..d37f826272 --- /dev/null +++ b/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 +// diff --git a/test/incremental/wasm-wasi/error_unions.4.zig b/test/incremental/wasm-wasi/error_unions.4.zig new file mode 100644 index 0000000000..bbc8dd34da --- /dev/null +++ b/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 +// diff --git a/test/incremental/wasm-wasi/error_unions.5.zig b/test/incremental/wasm-wasi/error_unions.5.zig new file mode 100644 index 0000000000..96d52d1de1 --- /dev/null +++ b/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 +// diff --git a/test/incremental/wasm-wasi/locals.0.zig b/test/incremental/wasm-wasi/locals.0.zig new file mode 100644 index 0000000000..f2df242792 --- /dev/null +++ b/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 +// diff --git a/test/incremental/wasm-wasi/locals.1.zig b/test/incremental/wasm-wasi/locals.1.zig new file mode 100644 index 0000000000..f7e59e1c02 --- /dev/null +++ b/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 +// diff --git a/test/incremental/wasm-wasi/optionals.0.zig b/test/incremental/wasm-wasi/optionals.0.zig new file mode 100644 index 0000000000..e602bf1c80 --- /dev/null +++ b/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 +// diff --git a/test/incremental/wasm-wasi/optionals.1.zig b/test/incremental/wasm-wasi/optionals.1.zig new file mode 100644 index 0000000000..26e81b8909 --- /dev/null +++ b/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 +// diff --git a/test/incremental/wasm-wasi/optionals.2.zig b/test/incremental/wasm-wasi/optionals.2.zig new file mode 100644 index 0000000000..b610c6d2e9 --- /dev/null +++ b/test/incremental/wasm-wasi/optionals.2.zig @@ -0,0 +1,7 @@ +pub fn main() u8 { + var x: ?u8 = 5; + return x.? - 5; +} + +// run +// diff --git a/test/incremental/wasm-wasi/optionals.3.zig b/test/incremental/wasm-wasi/optionals.3.zig new file mode 100644 index 0000000000..d513c10282 --- /dev/null +++ b/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 +// diff --git a/test/incremental/wasm-wasi/optionals.4.zig b/test/incremental/wasm-wasi/optionals.4.zig new file mode 100644 index 0000000000..af3400b322 --- /dev/null +++ b/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 +// diff --git a/test/incremental/wasm-wasi/pointers.0.zig b/test/incremental/wasm-wasi/pointers.0.zig new file mode 100644 index 0000000000..958ee5ac88 --- /dev/null +++ b/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 +// diff --git a/test/incremental/wasm-wasi/pointers.1.zig b/test/incremental/wasm-wasi/pointers.1.zig new file mode 100644 index 0000000000..b3649cf520 --- /dev/null +++ b/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 +// diff --git a/test/incremental/wasm-wasi/structs.0.zig b/test/incremental/wasm-wasi/structs.0.zig new file mode 100644 index 0000000000..03a8938d9e --- /dev/null +++ b/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 +// diff --git a/test/incremental/wasm-wasi/structs.1.zig b/test/incremental/wasm-wasi/structs.1.zig new file mode 100644 index 0000000000..8d4250e4a2 --- /dev/null +++ b/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 +// diff --git a/test/incremental/wasm-wasi/structs.2.zig b/test/incremental/wasm-wasi/structs.2.zig new file mode 100644 index 0000000000..b1d3cbf080 --- /dev/null +++ b/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 +// diff --git a/test/incremental/wasm-wasi/structs.3.zig b/test/incremental/wasm-wasi/structs.3.zig new file mode 100644 index 0000000000..558b5a1e2d --- /dev/null +++ b/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 +// diff --git a/test/incremental/wasm-wasi/structs.4.zig b/test/incremental/wasm-wasi/structs.4.zig new file mode 100644 index 0000000000..2d37446c56 --- /dev/null +++ b/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 +// diff --git a/test/incremental/wasm-wasi/switch.0.zig b/test/incremental/wasm-wasi/switch.0.zig new file mode 100644 index 0000000000..d0c0e43f8f --- /dev/null +++ b/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 +// diff --git a/test/incremental/wasm-wasi/switch.1.zig b/test/incremental/wasm-wasi/switch.1.zig new file mode 100644 index 0000000000..fe503bf212 --- /dev/null +++ b/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 +// diff --git a/test/incremental/wasm-wasi/switch.2.zig b/test/incremental/wasm-wasi/switch.2.zig new file mode 100644 index 0000000000..24f40d8402 --- /dev/null +++ b/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 +// diff --git a/test/incremental/wasm-wasi/switch.3.zig b/test/incremental/wasm-wasi/switch.3.zig new file mode 100644 index 0000000000..e0b55db3bf --- /dev/null +++ b/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 +// diff --git a/test/incremental/wasm-wasi/while_loops.0.zig b/test/incremental/wasm-wasi/while_loops.0.zig new file mode 100644 index 0000000000..721b127ff5 --- /dev/null +++ b/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 +// diff --git a/test/incremental/wasm-wasi/while_loops.1.zig b/test/incremental/wasm-wasi/while_loops.1.zig new file mode 100644 index 0000000000..715a813b65 --- /dev/null +++ b/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 +// diff --git a/test/incremental/wasm-wasi/while_loops.2.zig b/test/incremental/wasm-wasi/while_loops.2.zig new file mode 100644 index 0000000000..7ad8101c37 --- /dev/null +++ b/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 +// diff --git a/test/stage2/wasm.zig b/test/stage2/wasm.zig deleted file mode 100644 index 7c7e203b40..0000000000 --- a/test/stage2/wasm.zig +++ /dev/null @@ -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; - \\} - , ""); - } -}