authorgravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2022-04-27 22:59:55+02:00
committergravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2022-04-28 18:35:01+02:00
log8e05e6a1ed3089ce1161cca9980f9939440a421b
tree91c0f0a9573b81d3c21bde5b7c42b75b250ec3e6
parent815dc2c6e77eb6035921bb59fee0844b095ee064

test: migrate wasm incremental tests


67 files changed, 737 insertions(+), 797 deletions(-)

test/cases.zig-1
...@@ -12,7 +12,6 @@ pub fn addCases(ctx: *TestContext) !void {...@@ -12,7 +12,6 @@ pub fn addCases(ctx: *TestContext) !void {
12 try @import("stage2/arm.zig").addCases(ctx);12 try @import("stage2/arm.zig").addCases(ctx);
13 try @import("stage2/aarch64.zig").addCases(ctx);13 try @import("stage2/aarch64.zig").addCases(ctx);
14 try @import("stage2/llvm.zig").addCases(ctx);14 try @import("stage2/llvm.zig").addCases(ctx);
15 try @import("stage2/wasm.zig").addCases(ctx);
16 try @import("stage2/riscv64.zig").addCases(ctx);15 try @import("stage2/riscv64.zig").addCases(ctx);
17 try @import("stage2/plan9.zig").addCases(ctx);16 try @import("stage2/plan9.zig").addCases(ctx);
18 try @import("stage2/x86_64.zig").addCases(ctx);17 try @import("stage2/x86_64.zig").addCases(ctx);
test/incremental/binary_operands.0.zig created+9
...@@ -0,0 +1,9 @@
1pub fn main() void {
2 var i: u8 = 5;
3 i += 20;
4 if (i != 25) unreachable;
5}
6
7// run
8// target=wasm32-wasi
9//
test/incremental/binary_operands.1.zig created+8
...@@ -0,0 +1,8 @@
1pub fn main() void {
2 var i: i32 = 2147483647;
3 if (i +% 1 != -2147483648) unreachable;
4 return;
5}
6
7// run
8//
test/incremental/binary_operands.10.zig created+13
...@@ -0,0 +1,13 @@
1pub fn main() void {
2 var i: u32 = 5;
3 i *= 7;
4 var result: u32 = foo(i, 10);
5 if (result != 350) unreachable;
6 return;
7}
8fn foo(x: u32, y: u32) u32 {
9 return x * y;
10}
11
12// run
13//
test/incremental/binary_operands.11.zig created+9
...@@ -0,0 +1,9 @@
1pub fn main() void {
2 var i: i32 = 2147483647;
3 const result = i *% 2;
4 if (result != -2) unreachable;
5 return;
6}
7
8// run
9//
test/incremental/binary_operands.12.zig created+8
...@@ -0,0 +1,8 @@
1pub fn main() void {
2 var i: u3 = 3;
3 if (i *% 3 != 1) unreachable;
4 return;
5}
6
7// run
8//
test/incremental/binary_operands.13.zig created+8
...@@ -0,0 +1,8 @@
1pub fn main() void {
2 var i: i4 = 3;
3 if (i *% 3 != 1) unreachable;
4 return;
5}
6
7// run
8//
test/incremental/binary_operands.14.zig created+13
...@@ -0,0 +1,13 @@
1pub fn main() void {
2 var i: u32 = 352;
3 i /= 7; // i = 50
4 var result: u32 = foo(i, 7);
5 if (result != 7) unreachable;
6 return;
7}
8fn foo(x: u32, y: u32) u32 {
9 return x / y;
10}
11
12// run
13//
test/incremental/binary_operands.15.zig created+8
...@@ -0,0 +1,8 @@
1pub fn main() u8 {
2 var i: u8 = 5;
3 i &= 6;
4 return i - 4;
5}
6
7// run
8//
test/incremental/binary_operands.16.zig created+8
...@@ -0,0 +1,8 @@
1pub fn main() u8 {
2 var i: u8 = 5;
3 i |= 6;
4 return i - 7;
5}
6
7// run
8//
test/incremental/binary_operands.17.zig created+8
...@@ -0,0 +1,8 @@
1pub fn main() u8 {
2 var i: u8 = 5;
3 i ^= 6;
4 return i - 3;
5}
6
7// run
8//
test/incremental/binary_operands.18.zig created+9
...@@ -0,0 +1,9 @@
1pub fn main() void {
2 var b: bool = false;
3 b = b or false;
4 if (b) unreachable;
5 return;
6}
7
8// run
9//
test/incremental/binary_operands.19.zig created+9
...@@ -0,0 +1,9 @@
1pub fn main() void {
2 var b: bool = true;
3 b = b or false;
4 if (!b) unreachable;
5 return;
6}
7
8// run
9//
test/incremental/binary_operands.2.zig created+8
...@@ -0,0 +1,8 @@
1pub fn main() void {
2 var i: i4 = 7;
3 if (i +% 1 != 0) unreachable;
4 return;
5}
6
7// run
8//
test/incremental/binary_operands.20.zig created+9
...@@ -0,0 +1,9 @@
1pub fn main() void {
2 var b: bool = false;
3 b = b or true;
4 if (!b) unreachable;
5 return;
6}
7
8// run
9//
test/incremental/binary_operands.21.zig created+9
...@@ -0,0 +1,9 @@
1pub fn main() void {
2 var b: bool = true;
3 b = b or true;
4 if (!b) unreachable;
5 return;
6}
7
8// run
9//
test/incremental/binary_operands.22.zig created+9
...@@ -0,0 +1,9 @@
1pub fn main() void {
2 var b: bool = false;
3 b = b and false;
4 if (b) unreachable;
5 return;
6}
7
8// run
9//
test/incremental/binary_operands.23.zig created+9
...@@ -0,0 +1,9 @@
1pub fn main() void {
2 var b: bool = true;
3 b = b and false;
4 if (b) unreachable;
5 return;
6}
7
8// run
9//
test/incremental/binary_operands.24.zig created+9
...@@ -0,0 +1,9 @@
1pub fn main() void {
2 var b: bool = false;
3 b = b and true;
4 if (b) unreachable;
5 return;
6}
7
8// run
9//
test/incremental/binary_operands.25.zig created+9
...@@ -0,0 +1,9 @@
1pub fn main() void {
2 var b: bool = true;
3 b = b and true;
4 if (!b) unreachable;
5 return;
6}
7
8// run
9//
test/incremental/binary_operands.3.zig created+7
...@@ -0,0 +1,7 @@
1pub fn main() u8 {
2 var i: u8 = 255;
3 return i +% 1;
4}
5
6// run
7//
test/incremental/binary_operands.4.zig created+12
...@@ -0,0 +1,12 @@
1pub fn main() u8 {
2 var i: u8 = 5;
3 i += 20;
4 var result: u8 = foo(i, 10);
5 return result - 35;
6}
7fn foo(x: u8, y: u8) u8 {
8 return x + y;
9}
10
11// run
12//
test/incremental/binary_operands.5.zig created+8
...@@ -0,0 +1,8 @@
1pub fn main() u8 {
2 var i: u8 = 20;
3 i -= 5;
4 return i - 15;
5}
6
7// run
8//
test/incremental/binary_operands.6.zig created+8
...@@ -0,0 +1,8 @@
1pub fn main() void {
2 var i: i32 = -2147483648;
3 if (i -% 1 != 2147483647) unreachable;
4 return;
5}
6
7// run
8//
test/incremental/binary_operands.7.zig created+8
...@@ -0,0 +1,8 @@
1pub fn main() void {
2 var i: i7 = -64;
3 if (i -% 1 != 63) unreachable;
4 return;
5}
6
7// run
8//
test/incremental/binary_operands.8.zig created+7
...@@ -0,0 +1,7 @@
1pub fn main() void {
2 var i: u4 = 0;
3 if (i -% 1 != 15) unreachable;
4}
5
6// run
7//
test/incremental/binary_operands.9.zig created+12
...@@ -0,0 +1,12 @@
1pub fn main() u8 {
2 var i: u8 = 5;
3 i -= 3;
4 var result: u8 = foo(i, 10);
5 return result - 8;
6}
7fn foo(x: u8, y: u8) u8 {
8 return y - x;
9}
10
11// run
12//
test/incremental/enum_values.0.zig created+18
...@@ -0,0 +1,18 @@
1const Number = enum { One, Two, Three };
2
3pub fn main() void {
4 var number1 = Number.One;
5 var number2: Number = .Two;
6 if (false) {
7 number1;
8 number2;
9 }
10 const number3 = @intToEnum(Number, 2);
11 if (@enumToInt(number3) != 2) {
12 unreachable;
13 }
14 return;
15}
16
17// run
18//
test/incremental/enum_values.1.zig created+22
...@@ -0,0 +1,22 @@
1const Number = enum { One, Two, Three };
2
3pub fn main() void {
4 var number1 = Number.One;
5 var number2: Number = .Two;
6 const number3 = @intToEnum(Number, 2);
7 assert(number1 != number2);
8 assert(number2 != number3);
9 assert(@enumToInt(number1) == 0);
10 assert(@enumToInt(number2) == 1);
11 assert(@enumToInt(number3) == 2);
12 var x: Number = .Two;
13 assert(number2 == x);
14
15 return;
16}
17fn assert(val: bool) void {
18 if (!val) unreachable;
19}
20
21// run
22//
test/incremental/function_calls.0.zig created+12
...@@ -0,0 +1,12 @@
1pub fn main() void {
2 foo();
3 bar();
4}
5fn foo() void {
6 bar();
7 bar();
8}
9fn bar() void {}
10
11// run
12//
test/incremental/function_calls.1.zig created+15
...@@ -0,0 +1,15 @@
1pub fn main() void {
2 bar();
3 foo();
4 foo();
5 bar();
6 foo();
7 bar();
8}
9fn foo() void {
10 bar();
11}
12fn bar() void {}
13
14// run
15//
test/incremental/function_calls.2.zig created+14
...@@ -0,0 +1,14 @@
1pub fn main() void {
2 bar();
3 foo();
4 return;
5}
6fn foo() void {
7 bar();
8 bar();
9 bar();
10}
11fn bar() void {}
12
13// run
14//
test/incremental/function_calls.3.zig created+10
...@@ -0,0 +1,10 @@
1pub fn main() void {
2 foo(10, 20);
3}
4fn foo(x: u8, y: u8) void {
5 _ = x;
6 _ = y;
7}
8
9// run
10//
test/incremental/wasm-wasi/conditions.0.zig created+11
...@@ -0,0 +1,11 @@
1pub fn main() u8 {
2 var i: u8 = 5;
3 if (i > @as(u8, 4)) {
4 i += 10;
5 }
6 return i - 15;
7}
8
9// run
10// target=wasm32-wasi
11//
test/incremental/wasm-wasi/conditions.1.zig created+12
...@@ -0,0 +1,12 @@
1pub fn main() u8 {
2 var i: u8 = 5;
3 if (i < @as(u8, 4)) {
4 i += 10;
5 } else {
6 i = 2;
7 }
8 return i - 2;
9}
10
11// run
12//
test/incremental/wasm-wasi/conditions.2.zig created+12
...@@ -0,0 +1,12 @@
1pub fn main() u8 {
2 var i: u8 = 5;
3 if (i < @as(u8, 4)) {
4 i += 10;
5 } else if (i == @as(u8, 5)) {
6 i = 20;
7 }
8 return i - 20;
9}
10
11// run
12//
test/incremental/wasm-wasi/conditions.3.zig created+16
...@@ -0,0 +1,16 @@
1pub fn main() u8 {
2 var i: u8 = 11;
3 if (i < @as(u8, 4)) {
4 i += 10;
5 } else {
6 if (i > @as(u8, 10)) {
7 i += 20;
8 } else {
9 i = 20;
10 }
11 }
12 return i - 31;
13}
14
15// run
16//
test/incremental/wasm-wasi/conditions.4.zig created+15
...@@ -0,0 +1,15 @@
1pub fn main() void {
2 assert(foo(true) != @as(i32, 30));
3}
4
5fn assert(ok: bool) void {
6 if (!ok) unreachable;
7}
8
9fn foo(ok: bool) i32 {
10 const x = if (ok) @as(i32, 20) else @as(i32, 10);
11 return x;
12}
13
14// run
15//
test/incremental/wasm-wasi/conditions.5.zig created+20
...@@ -0,0 +1,20 @@
1pub fn main() void {
2 assert(foo(false) == @as(i32, 20));
3 assert(foo(true) == @as(i32, 30));
4}
5
6fn assert(ok: bool) void {
7 if (!ok) unreachable;
8}
9
10fn foo(ok: bool) i32 {
11 const val: i32 = blk: {
12 var x: i32 = 1;
13 if (!ok) break :blk x + @as(i32, 9);
14 break :blk x + @as(i32, 19);
15 };
16 return val + 10;
17}
18
19// run
20//
test/incremental/wasm-wasi/error_unions.0.zig created+15
...@@ -0,0 +1,15 @@
1pub fn main() void {
2 var e1 = error.Foo;
3 var e2 = error.Bar;
4 assert(e1 != e2);
5 assert(e1 == error.Foo);
6 assert(e2 == error.Bar);
7}
8
9fn assert(b: bool) void {
10 if (!b) unreachable;
11}
12
13// run
14// target=wasm32-wasi
15//
test/incremental/wasm-wasi/error_unions.1.zig created+8
...@@ -0,0 +1,8 @@
1pub fn main() u8 {
2 var e: anyerror!u8 = 5;
3 const i = e catch 10;
4 return i - 5;
5}
6
7// run
8//
test/incremental/wasm-wasi/error_unions.2.zig created+8
...@@ -0,0 +1,8 @@
1pub fn main() u8 {
2 var e: anyerror!u8 = error.Foo;
3 const i = e catch 10;
4 return i - 10;
5}
6
7// run
8//
test/incremental/wasm-wasi/error_unions.3.zig created+12
...@@ -0,0 +1,12 @@
1pub fn main() u8 {
2 var e = foo();
3 const i = e catch 69;
4 return i - 5;
5}
6
7fn foo() anyerror!u8 {
8 return 5;
9}
10
11// run
12//
test/incremental/wasm-wasi/error_unions.4.zig created+12
...@@ -0,0 +1,12 @@
1pub fn main() u8 {
2 var e = foo();
3 const i = e catch 69;
4 return i - 69;
5}
6
7fn foo() anyerror!u8 {
8 return error.Bruh;
9}
10
11// run
12//
test/incremental/wasm-wasi/error_unions.5.zig created+12
...@@ -0,0 +1,12 @@
1pub fn main() u8 {
2 var e = foo();
3 const i = e catch 42;
4 return i - 42;
5}
6
7fn foo() anyerror!u8 {
8 return error.Dab;
9}
10
11// run
12//
test/incremental/wasm-wasi/locals.0.zig created+14
...@@ -0,0 +1,14 @@
1pub fn main() void {
2 var i: u8 = 5;
3 var y: f32 = 42.0;
4 var x: u8 = 10;
5 if (false) {
6 y;
7 x;
8 }
9 if (i != 5) unreachable;
10}
11
12// run
13// target=wasm32-wasi
14//
test/incremental/wasm-wasi/locals.1.zig created+17
...@@ -0,0 +1,17 @@
1pub fn main() void {
2 var i: u8 = 5;
3 var y: f32 = 42.0;
4 _ = y;
5 var x: u8 = 10;
6 foo(i, x);
7 i = x;
8 if (i != 10) unreachable;
9}
10fn foo(x: u8, y: u8) void {
11 _ = y;
12 var i: u8 = 10;
13 i = x;
14}
15
16// run
17//
test/incremental/wasm-wasi/optionals.0.zig created+12
...@@ -0,0 +1,12 @@
1pub fn main() u8 {
2 var x: ?u8 = 5;
3 var y: u8 = 0;
4 if (x) |val| {
5 y = val;
6 }
7 return y - 5;
8}
9
10// run
11// target=wasm32-wasi
12//
test/incremental/wasm-wasi/optionals.1.zig created+11
...@@ -0,0 +1,11 @@
1pub fn main() u8 {
2 var x: ?u8 = null;
3 var y: u8 = 0;
4 if (x) |val| {
5 y = val;
6 }
7 return y;
8}
9
10// run
11//
test/incremental/wasm-wasi/optionals.2.zig created+7
...@@ -0,0 +1,7 @@
1pub fn main() u8 {
2 var x: ?u8 = 5;
3 return x.? - 5;
4}
5
6// run
7//
test/incremental/wasm-wasi/optionals.3.zig created+8
...@@ -0,0 +1,8 @@
1pub fn main() u8 {
2 var x: u8 = 5;
3 var y: ?u8 = x;
4 return y.? - 5;
5}
6
7// run
8//
test/incremental/wasm-wasi/optionals.4.zig created+13
...@@ -0,0 +1,13 @@
1pub fn main() u8 {
2 var val: ?u8 = 5;
3 while (val) |*v| {
4 v.* -= 1;
5 if (v.* == 2) {
6 val = null;
7 }
8 }
9 return 0;
10}
11
12// run
13//
test/incremental/wasm-wasi/pointers.0.zig created+14
...@@ -0,0 +1,14 @@
1pub fn main() u8 {
2 var x: u8 = 0;
3
4 foo(&x);
5 return x - 2;
6}
7
8fn foo(x: *u8) void {
9 x.* = 2;
10}
11
12// run
13// target=wasm32-wasi
14//
test/incremental/wasm-wasi/pointers.1.zig created+18
...@@ -0,0 +1,18 @@
1pub fn main() u8 {
2 var x: u8 = 0;
3
4 foo(&x);
5 bar(&x);
6 return x - 4;
7}
8
9fn foo(x: *u8) void {
10 x.* = 2;
11}
12
13fn bar(x: *u8) void {
14 x.* += 2;
15}
16
17// run
18//
test/incremental/wasm-wasi/structs.0.zig created+10
...@@ -0,0 +1,10 @@
1const Example = struct { x: u8 };
2
3pub fn main() u8 {
4 var example: Example = .{ .x = 5 };
5 return example.x - 5;
6}
7
8// run
9// target=wasm32-wasi
10//
test/incremental/wasm-wasi/structs.1.zig created+10
...@@ -0,0 +1,10 @@
1const Example = struct { x: u8 };
2
3pub fn main() u8 {
4 var example: Example = .{ .x = 5 };
5 example.x = 10;
6 return example.x - 10;
7}
8
9// run
10//
test/incremental/wasm-wasi/structs.2.zig created+9
...@@ -0,0 +1,9 @@
1const Example = struct { x: u8, y: u8 };
2
3pub fn main() u8 {
4 var example: Example = .{ .x = 5, .y = 10 };
5 return example.y + example.x - 15;
6}
7
8// run
9//
test/incremental/wasm-wasi/structs.3.zig created+12
...@@ -0,0 +1,12 @@
1const Example = struct { x: u8, y: u8 };
2
3pub fn main() u8 {
4 var example: Example = .{ .x = 5, .y = 10 };
5 var example2: Example = .{ .x = 10, .y = 20 };
6
7 example = example2;
8 return example.y + example.x - 30;
9}
10
11// run
12//
test/incremental/wasm-wasi/structs.4.zig created+11
...@@ -0,0 +1,11 @@
1const Example = struct { x: u8, y: u8 };
2
3pub fn main() u8 {
4 var example: Example = .{ .x = 5, .y = 10 };
5
6 example = .{ .x = 10, .y = 20 };
7 return example.y + example.x - 30;
8}
9
10// run
11//
test/incremental/wasm-wasi/switch.0.zig created+15
...@@ -0,0 +1,15 @@
1pub fn main() u8 {
2 var val: u8 = 1;
3 var a: u8 = switch (val) {
4 0, 1 => 2,
5 2 => 3,
6 3 => 4,
7 else => 5,
8 };
9
10 return a - 2;
11}
12
13// run
14// target=wasm32-wasi
15//
test/incremental/wasm-wasi/switch.1.zig created+14
...@@ -0,0 +1,14 @@
1pub fn main() u8 {
2 var val: u8 = 2;
3 var a: u8 = switch (val) {
4 0, 1 => 2,
5 2 => 3,
6 3 => 4,
7 else => 5,
8 };
9
10 return a - 3;
11}
12
13// run
14//
test/incremental/wasm-wasi/switch.2.zig created+14
...@@ -0,0 +1,14 @@
1pub fn main() u8 {
2 var val: u8 = 10;
3 var a: u8 = switch (val) {
4 0, 1 => 2,
5 2 => 3,
6 3 => 4,
7 else => 5,
8 };
9
10 return a - 5;
11}
12
13// run
14//
test/incremental/wasm-wasi/switch.3.zig created+15
...@@ -0,0 +1,15 @@
1const MyEnum = enum { One, Two, Three };
2
3pub fn main() u8 {
4 var val: MyEnum = .Two;
5 var a: u8 = switch (val) {
6 .One => 1,
7 .Two => 2,
8 .Three => 3,
9 };
10
11 return a - 2;
12}
13
14// run
15//
test/incremental/wasm-wasi/while_loops.0.zig created+12
...@@ -0,0 +1,12 @@
1pub fn main() u8 {
2 var i: u8 = 0;
3 while (i < @as(u8, 5)) {
4 i += 1;
5 }
6
7 return i - 5;
8}
9
10// run
11// target=wasm32-wasi
12//
test/incremental/wasm-wasi/while_loops.1.zig created+11
...@@ -0,0 +1,11 @@
1pub fn main() u8 {
2 var i: u8 = 0;
3 while (i < @as(u8, 10)) {
4 var x: u8 = 1;
5 i += x;
6 }
7 return i - 10;
8}
9
10// run
11//
test/incremental/wasm-wasi/while_loops.2.zig created+12
...@@ -0,0 +1,12 @@
1pub fn main() u8 {
2 var i: u8 = 0;
3 while (i < @as(u8, 10)) {
4 var x: u8 = 1;
5 i += x;
6 if (i == @as(u8, 5)) break;
7 }
8 return i - 5;
9}
10
11// run
12//
test/stage2/wasm.zig deleted-796
...@@ -1,796 +0,0 @@
1const std = @import("std");
2const TestContext = @import("../../src/test.zig").TestContext;
3
4const wasi = std.zig.CrossTarget{
5 .cpu_arch = .wasm32,
6 .os_tag = .wasi,
7};
8
9pub fn addCases(ctx: *TestContext) !void {
10 {
11 var case = ctx.exe("wasm function calls", wasi);
12
13 case.addCompareOutput(
14 \\pub fn main() void {
15 \\ foo();
16 \\ bar();
17 \\}
18 \\fn foo() void {
19 \\ bar();
20 \\ bar();
21 \\}
22 \\fn bar() void {}
23 , "");
24
25 case.addCompareOutput(
26 \\pub fn main() void {
27 \\ bar();
28 \\ foo();
29 \\ foo();
30 \\ bar();
31 \\ foo();
32 \\ bar();
33 \\}
34 \\fn foo() void {
35 \\ bar();
36 \\}
37 \\fn bar() void {}
38 , "");
39
40 case.addCompareOutput(
41 \\pub fn main() void {
42 \\ bar();
43 \\ foo();
44 \\ return;
45 \\}
46 \\fn foo() void {
47 \\ bar();
48 \\ bar();
49 \\ bar();
50 \\}
51 \\fn bar() void {}
52 ,
53 "",
54 );
55
56 case.addCompareOutput(
57 \\pub fn main() void {
58 \\ foo(10, 20);
59 \\}
60 \\fn foo(x: u8, y: u8) void { _ = x; _ = y; }
61 , "");
62 }
63
64 {
65 var case = ctx.exe("wasm locals", wasi);
66
67 case.addCompareOutput(
68 \\pub fn main() void {
69 \\ var i: u8 = 5;
70 \\ var y: f32 = 42.0;
71 \\ var x: u8 = 10;
72 \\ if (false) {
73 \\ y;
74 \\ x;
75 \\ }
76 \\ if (i != 5) unreachable;
77 \\}
78 , "");
79
80 case.addCompareOutput(
81 \\pub fn main() void {
82 \\ var i: u8 = 5;
83 \\ var y: f32 = 42.0;
84 \\ _ = y;
85 \\ var x: u8 = 10;
86 \\ foo(i, x);
87 \\ i = x;
88 \\ if (i != 10) unreachable;
89 \\}
90 \\fn foo(x: u8, y: u8) void {
91 \\ _ = y;
92 \\ var i: u8 = 10;
93 \\ i = x;
94 \\}
95 , "");
96 }
97
98 {
99 var case = ctx.exe("wasm binary operands", wasi);
100
101 case.addCompareOutput(
102 \\pub fn main() void {
103 \\ var i: u8 = 5;
104 \\ i += 20;
105 \\ if (i != 25) unreachable;
106 \\}
107 , "");
108
109 case.addCompareOutput(
110 \\pub fn main() void {
111 \\ var i: i32 = 2147483647;
112 \\ if (i +% 1 != -2147483648) unreachable;
113 \\ return;
114 \\}
115 , "");
116
117 case.addCompareOutput(
118 \\pub fn main() void {
119 \\ var i: i4 = 7;
120 \\ if (i +% 1 != 0) unreachable;
121 \\ return;
122 \\}
123 , "");
124
125 case.addCompareOutput(
126 \\pub fn main() u8 {
127 \\ var i: u8 = 255;
128 \\ return i +% 1;
129 \\}
130 , "");
131
132 case.addCompareOutput(
133 \\pub fn main() u8 {
134 \\ var i: u8 = 5;
135 \\ i += 20;
136 \\ var result: u8 = foo(i, 10);
137 \\ return result - 35;
138 \\}
139 \\fn foo(x: u8, y: u8) u8 {
140 \\ return x + y;
141 \\}
142 , "");
143
144 case.addCompareOutput(
145 \\pub fn main() u8 {
146 \\ var i: u8 = 20;
147 \\ i -= 5;
148 \\ return i - 15;
149 \\}
150 , "");
151
152 case.addCompareOutput(
153 \\pub fn main() void {
154 \\ var i: i32 = -2147483648;
155 \\ if (i -% 1 != 2147483647) unreachable;
156 \\ return;
157 \\}
158 , "");
159
160 case.addCompareOutput(
161 \\pub fn main() void {
162 \\ var i: i7 = -64;
163 \\ if (i -% 1 != 63) unreachable;
164 \\ return;
165 \\}
166 , "");
167
168 case.addCompareOutput(
169 \\pub fn main() void {
170 \\ var i: u4 = 0;
171 \\ if(i -% 1 != 15) unreachable;
172 \\}
173 , "");
174
175 case.addCompareOutput(
176 \\pub fn main() u8 {
177 \\ var i: u8 = 5;
178 \\ i -= 3;
179 \\ var result: u8 = foo(i, 10);
180 \\ return result - 8;
181 \\}
182 \\fn foo(x: u8, y: u8) u8 {
183 \\ return y - x;
184 \\}
185 , "");
186
187 case.addCompareOutput(
188 \\pub fn main() void {
189 \\ var i: u32 = 5;
190 \\ i *= 7;
191 \\ var result: u32 = foo(i, 10);
192 \\ if (result != 350) unreachable;
193 \\ return;
194 \\}
195 \\fn foo(x: u32, y: u32) u32 {
196 \\ return x * y;
197 \\}
198 , "");
199
200 case.addCompareOutput(
201 \\pub fn main() void {
202 \\ var i: i32 = 2147483647;
203 \\ const result = i *% 2;
204 \\ if (result != -2) unreachable;
205 \\ return;
206 \\}
207 , "");
208
209 case.addCompareOutput(
210 \\pub fn main() void {
211 \\ var i: u3 = 3;
212 \\ if (i *% 3 != 1) unreachable;
213 \\ return;
214 \\}
215 , "");
216
217 case.addCompareOutput(
218 \\pub fn main() void {
219 \\ var i: i4 = 3;
220 \\ if (i *% 3 != 1) unreachable;
221 \\ return;
222 \\}
223 , "");
224
225 case.addCompareOutput(
226 \\pub fn main() void {
227 \\ var i: u32 = 352;
228 \\ i /= 7; // i = 50
229 \\ var result: u32 = foo(i, 7);
230 \\ if (result != 7) unreachable;
231 \\ return;
232 \\}
233 \\fn foo(x: u32, y: u32) u32 {
234 \\ return x / y;
235 \\}
236 , "");
237
238 case.addCompareOutput(
239 \\pub fn main() u8 {
240 \\ var i: u8 = 5;
241 \\ i &= 6;
242 \\ return i - 4;
243 \\}
244 , "");
245
246 case.addCompareOutput(
247 \\pub fn main() u8 {
248 \\ var i: u8 = 5;
249 \\ i |= 6;
250 \\ return i - 7;
251 \\}
252 , "");
253
254 case.addCompareOutput(
255 \\pub fn main() u8 {
256 \\ var i: u8 = 5;
257 \\ i ^= 6;
258 \\ return i - 3;
259 \\}
260 , "");
261
262 case.addCompareOutput(
263 \\pub fn main() void {
264 \\ var b: bool = false;
265 \\ b = b or false;
266 \\ if (b) unreachable;
267 \\ return;
268 \\}
269 , "");
270
271 case.addCompareOutput(
272 \\pub fn main() void {
273 \\ var b: bool = true;
274 \\ b = b or false;
275 \\ if (!b) unreachable;
276 \\ return;
277 \\}
278 , "");
279
280 case.addCompareOutput(
281 \\pub fn main() void {
282 \\ var b: bool = false;
283 \\ b = b or true;
284 \\ if (!b) unreachable;
285 \\ return;
286 \\}
287 , "");
288
289 case.addCompareOutput(
290 \\pub fn main() void {
291 \\ var b: bool = true;
292 \\ b = b or true;
293 \\ if (!b) unreachable;
294 \\ return;
295 \\}
296 , "");
297
298 case.addCompareOutput(
299 \\pub fn main() void {
300 \\ var b: bool = false;
301 \\ b = b and false;
302 \\ if (b) unreachable;
303 \\ return;
304 \\}
305 , "");
306
307 case.addCompareOutput(
308 \\pub fn main() void {
309 \\ var b: bool = true;
310 \\ b = b and false;
311 \\ if (b) unreachable;
312 \\ return;
313 \\}
314 , "");
315
316 case.addCompareOutput(
317 \\pub fn main() void {
318 \\ var b: bool = false;
319 \\ b = b and true;
320 \\ if (b) unreachable;
321 \\ return;
322 \\}
323 , "");
324
325 case.addCompareOutput(
326 \\pub fn main() void {
327 \\ var b: bool = true;
328 \\ b = b and true;
329 \\ if (!b) unreachable;
330 \\ return;
331 \\}
332 , "");
333 }
334
335 {
336 var case = ctx.exe("wasm conditions", wasi);
337
338 case.addCompareOutput(
339 \\pub fn main() u8 {
340 \\ var i: u8 = 5;
341 \\ if (i > @as(u8, 4)) {
342 \\ i += 10;
343 \\ }
344 \\ return i - 15;
345 \\}
346 , "");
347
348 case.addCompareOutput(
349 \\pub fn main() u8 {
350 \\ var i: u8 = 5;
351 \\ if (i < @as(u8, 4)) {
352 \\ i += 10;
353 \\ } else {
354 \\ i = 2;
355 \\ }
356 \\ return i - 2;
357 \\}
358 , "");
359
360 case.addCompareOutput(
361 \\pub fn main() u8 {
362 \\ var i: u8 = 5;
363 \\ if (i < @as(u8, 4)) {
364 \\ i += 10;
365 \\ } else if(i == @as(u8, 5)) {
366 \\ i = 20;
367 \\ }
368 \\ return i - 20;
369 \\}
370 , "");
371
372 case.addCompareOutput(
373 \\pub fn main() u8 {
374 \\ var i: u8 = 11;
375 \\ if (i < @as(u8, 4)) {
376 \\ i += 10;
377 \\ } else {
378 \\ if (i > @as(u8, 10)) {
379 \\ i += 20;
380 \\ } else {
381 \\ i = 20;
382 \\ }
383 \\ }
384 \\ return i - 31;
385 \\}
386 , "");
387
388 case.addCompareOutput(
389 \\pub fn main() void {
390 \\ assert(foo(true) != @as(i32, 30));
391 \\}
392 \\
393 \\fn assert(ok: bool) void {
394 \\ if (!ok) unreachable;
395 \\}
396 \\
397 \\fn foo(ok: bool) i32 {
398 \\ const x = if(ok) @as(i32, 20) else @as(i32, 10);
399 \\ return x;
400 \\}
401 , "");
402
403 case.addCompareOutput(
404 \\pub fn main() void {
405 \\ assert(foo(false) == @as(i32, 20));
406 \\ assert(foo(true) == @as(i32, 30));
407 \\}
408 \\
409 \\fn assert(ok: bool) void {
410 \\ if (!ok) unreachable;
411 \\}
412 \\
413 \\fn foo(ok: bool) i32 {
414 \\ const val: i32 = blk: {
415 \\ var x: i32 = 1;
416 \\ if (!ok) break :blk x + @as(i32, 9);
417 \\ break :blk x + @as(i32, 19);
418 \\ };
419 \\ return val + 10;
420 \\}
421 , "");
422 }
423
424 {
425 var case = ctx.exe("wasm while loops", wasi);
426
427 case.addCompareOutput(
428 \\pub fn main() u8 {
429 \\ var i: u8 = 0;
430 \\ while(i < @as(u8, 5)){
431 \\ i += 1;
432 \\ }
433 \\
434 \\ return i - 5;
435 \\}
436 , "");
437
438 case.addCompareOutput(
439 \\pub fn main() u8 {
440 \\ var i: u8 = 0;
441 \\ while(i < @as(u8, 10)){
442 \\ var x: u8 = 1;
443 \\ i += x;
444 \\ }
445 \\ return i - 10;
446 \\}
447 , "");
448
449 case.addCompareOutput(
450 \\pub fn main() u8 {
451 \\ var i: u8 = 0;
452 \\ while(i < @as(u8, 10)){
453 \\ var x: u8 = 1;
454 \\ i += x;
455 \\ if (i == @as(u8, 5)) break;
456 \\ }
457 \\ return i - 5;
458 \\}
459 , "");
460 }
461
462 {
463 var case = ctx.exe("wasm enum values", wasi);
464
465 case.addCompareOutput(
466 \\const Number = enum { One, Two, Three };
467 \\
468 \\pub fn main() void {
469 \\ var number1 = Number.One;
470 \\ var number2: Number = .Two;
471 \\ if (false) {
472 \\ number1;
473 \\ number2;
474 \\ }
475 \\ const number3 = @intToEnum(Number, 2);
476 \\ if (@enumToInt(number3) != 2) {
477 \\ unreachable;
478 \\ }
479 \\ return;
480 \\}
481 , "");
482
483 case.addCompareOutput(
484 \\const Number = enum { One, Two, Three };
485 \\
486 \\pub fn main() void {
487 \\ var number1 = Number.One;
488 \\ var number2: Number = .Two;
489 \\ const number3 = @intToEnum(Number, 2);
490 \\ assert(number1 != number2);
491 \\ assert(number2 != number3);
492 \\ assert(@enumToInt(number1) == 0);
493 \\ assert(@enumToInt(number2) == 1);
494 \\ assert(@enumToInt(number3) == 2);
495 \\ var x: Number = .Two;
496 \\ assert(number2 == x);
497 \\
498 \\ return;
499 \\}
500 \\fn assert(val: bool) void {
501 \\ if(!val) unreachable;
502 \\}
503 , "");
504 }
505
506 {
507 var case = ctx.exe("wasm structs", wasi);
508
509 case.addCompareOutput(
510 \\const Example = struct { x: u8 };
511 \\
512 \\pub fn main() u8 {
513 \\ var example: Example = .{ .x = 5 };
514 \\ return example.x - 5;
515 \\}
516 , "");
517
518 case.addCompareOutput(
519 \\const Example = struct { x: u8 };
520 \\
521 \\pub fn main() u8 {
522 \\ var example: Example = .{ .x = 5 };
523 \\ example.x = 10;
524 \\ return example.x - 10;
525 \\}
526 , "");
527
528 case.addCompareOutput(
529 \\const Example = struct { x: u8, y: u8 };
530 \\
531 \\pub fn main() u8 {
532 \\ var example: Example = .{ .x = 5, .y = 10 };
533 \\ return example.y + example.x - 15;
534 \\}
535 , "");
536
537 case.addCompareOutput(
538 \\const Example = struct { x: u8, y: u8 };
539 \\
540 \\pub fn main() u8 {
541 \\ var example: Example = .{ .x = 5, .y = 10 };
542 \\ var example2: Example = .{ .x = 10, .y = 20 };
543 \\
544 \\ example = example2;
545 \\ return example.y + example.x - 30;
546 \\}
547 , "");
548
549 case.addCompareOutput(
550 \\const Example = struct { x: u8, y: u8 };
551 \\
552 \\pub fn main() u8 {
553 \\ var example: Example = .{ .x = 5, .y = 10 };
554 \\
555 \\ example = .{ .x = 10, .y = 20 };
556 \\ return example.y + example.x - 30;
557 \\}
558 , "");
559 }
560
561 {
562 var case = ctx.exe("wasm switch", wasi);
563
564 case.addCompareOutput(
565 \\pub fn main() u8 {
566 \\ var val: u8 = 1;
567 \\ var a: u8 = switch (val) {
568 \\ 0, 1 => 2,
569 \\ 2 => 3,
570 \\ 3 => 4,
571 \\ else => 5,
572 \\ };
573 \\
574 \\ return a - 2;
575 \\}
576 , "");
577
578 case.addCompareOutput(
579 \\pub fn main() u8 {
580 \\ var val: u8 = 2;
581 \\ var a: u8 = switch (val) {
582 \\ 0, 1 => 2,
583 \\ 2 => 3,
584 \\ 3 => 4,
585 \\ else => 5,
586 \\ };
587 \\
588 \\ return a - 3;
589 \\}
590 , "");
591
592 case.addCompareOutput(
593 \\pub fn main() u8 {
594 \\ var val: u8 = 10;
595 \\ var a: u8 = switch (val) {
596 \\ 0, 1 => 2,
597 \\ 2 => 3,
598 \\ 3 => 4,
599 \\ else => 5,
600 \\ };
601 \\
602 \\ return a - 5;
603 \\}
604 , "");
605
606 case.addCompareOutput(
607 \\const MyEnum = enum { One, Two, Three };
608 \\
609 \\pub fn main() u8 {
610 \\ var val: MyEnum = .Two;
611 \\ var a: u8 = switch (val) {
612 \\ .One => 1,
613 \\ .Two => 2,
614 \\ .Three => 3,
615 \\ };
616 \\
617 \\ return a - 2;
618 \\}
619 , "");
620 }
621
622 {
623 var case = ctx.exe("wasm error unions", wasi);
624
625 case.addCompareOutput(
626 \\pub fn main() void {
627 \\ var e1 = error.Foo;
628 \\ var e2 = error.Bar;
629 \\ assert(e1 != e2);
630 \\ assert(e1 == error.Foo);
631 \\ assert(e2 == error.Bar);
632 \\}
633 \\
634 \\fn assert(b: bool) void {
635 \\ if (!b) unreachable;
636 \\}
637 , "");
638
639 case.addCompareOutput(
640 \\pub fn main() u8 {
641 \\ var e: anyerror!u8 = 5;
642 \\ const i = e catch 10;
643 \\ return i - 5;
644 \\}
645 , "");
646
647 case.addCompareOutput(
648 \\pub fn main() u8 {
649 \\ var e: anyerror!u8 = error.Foo;
650 \\ const i = e catch 10;
651 \\ return i - 10;
652 \\}
653 , "");
654
655 case.addCompareOutput(
656 \\pub fn main() u8 {
657 \\ var e = foo();
658 \\ const i = e catch 69;
659 \\ return i - 5;
660 \\}
661 \\
662 \\fn foo() anyerror!u8 {
663 \\ return 5;
664 \\}
665 , "");
666 }
667
668 {
669 var case = ctx.exe("wasm error union part 2", wasi);
670
671 case.addCompareOutput(
672 \\pub fn main() u8 {
673 \\ var e = foo();
674 \\ const i = e catch 69;
675 \\ return i - 69;
676 \\}
677 \\
678 \\fn foo() anyerror!u8 {
679 \\ return error.Bruh;
680 \\}
681 , "");
682 case.addCompareOutput(
683 \\pub fn main() u8 {
684 \\ var e = foo();
685 \\ const i = e catch 42;
686 \\ return i - 42;
687 \\}
688 \\
689 \\fn foo() anyerror!u8 {
690 \\ return error.Dab;
691 \\}
692 , "");
693 }
694
695 {
696 var case = ctx.exe("wasm integer widening", wasi);
697
698 case.addCompareOutput(
699 \\pub fn main() void{
700 \\ var x: u8 = 5;
701 \\ var y: u64 = x;
702 \\ _ = y;
703 \\ return;
704 \\}
705 , "");
706 }
707
708 {
709 var case = ctx.exe("wasm optionals", wasi);
710
711 case.addCompareOutput(
712 \\pub fn main() u8 {
713 \\ var x: ?u8 = 5;
714 \\ var y: u8 = 0;
715 \\ if (x) |val| {
716 \\ y = val;
717 \\ }
718 \\ return y - 5;
719 \\}
720 , "");
721
722 case.addCompareOutput(
723 \\pub fn main() u8 {
724 \\ var x: ?u8 = null;
725 \\ var y: u8 = 0;
726 \\ if (x) |val| {
727 \\ y = val;
728 \\ }
729 \\ return y;
730 \\}
731 , "");
732
733 case.addCompareOutput(
734 \\pub fn main() u8 {
735 \\ var x: ?u8 = 5;
736 \\ return x.? - 5;
737 \\}
738 , "");
739
740 case.addCompareOutput(
741 \\pub fn main() u8 {
742 \\ var x: u8 = 5;
743 \\ var y: ?u8 = x;
744 \\ return y.? - 5;
745 \\}
746 , "");
747
748 case.addCompareOutput(
749 \\pub fn main() u8 {
750 \\ var val: ?u8 = 5;
751 \\ while (val) |*v| {
752 \\ v.* -= 1;
753 \\ if (v.* == 2) {
754 \\ val = null;
755 \\ }
756 \\ }
757 \\ return 0;
758 \\}
759 , "");
760 }
761
762 {
763 var case = ctx.exe("wasm pointers", wasi);
764
765 case.addCompareOutput(
766 \\pub fn main() u8 {
767 \\ var x: u8 = 0;
768 \\
769 \\ foo(&x);
770 \\ return x - 2;
771 \\}
772 \\
773 \\fn foo(x: *u8)void {
774 \\ x.* = 2;
775 \\}
776 , "");
777
778 case.addCompareOutput(
779 \\pub fn main() u8 {
780 \\ var x: u8 = 0;
781 \\
782 \\ foo(&x);
783 \\ bar(&x);
784 \\ return x - 4;
785 \\}
786 \\
787 \\fn foo(x: *u8)void {
788 \\ x.* = 2;
789 \\}
790 \\
791 \\fn bar(x: *u8) void {
792 \\ x.* += 2;
793 \\}
794 , "");
795 }
796}