test: migrate wasm incremental tests
This commit is contained in:
@@ -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);
|
||||
|
||||
9
test/incremental/binary_operands.0.zig
Normal file
9
test/incremental/binary_operands.0.zig
Normal file
@@ -0,0 +1,9 @@
|
||||
pub fn main() void {
|
||||
var i: u8 = 5;
|
||||
i += 20;
|
||||
if (i != 25) unreachable;
|
||||
}
|
||||
|
||||
// run
|
||||
// target=wasm32-wasi
|
||||
//
|
||||
8
test/incremental/binary_operands.1.zig
Normal file
8
test/incremental/binary_operands.1.zig
Normal file
@@ -0,0 +1,8 @@
|
||||
pub fn main() void {
|
||||
var i: i32 = 2147483647;
|
||||
if (i +% 1 != -2147483648) unreachable;
|
||||
return;
|
||||
}
|
||||
|
||||
// run
|
||||
//
|
||||
13
test/incremental/binary_operands.10.zig
Normal file
13
test/incremental/binary_operands.10.zig
Normal file
@@ -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
|
||||
//
|
||||
9
test/incremental/binary_operands.11.zig
Normal file
9
test/incremental/binary_operands.11.zig
Normal file
@@ -0,0 +1,9 @@
|
||||
pub fn main() void {
|
||||
var i: i32 = 2147483647;
|
||||
const result = i *% 2;
|
||||
if (result != -2) unreachable;
|
||||
return;
|
||||
}
|
||||
|
||||
// run
|
||||
//
|
||||
8
test/incremental/binary_operands.12.zig
Normal file
8
test/incremental/binary_operands.12.zig
Normal file
@@ -0,0 +1,8 @@
|
||||
pub fn main() void {
|
||||
var i: u3 = 3;
|
||||
if (i *% 3 != 1) unreachable;
|
||||
return;
|
||||
}
|
||||
|
||||
// run
|
||||
//
|
||||
8
test/incremental/binary_operands.13.zig
Normal file
8
test/incremental/binary_operands.13.zig
Normal file
@@ -0,0 +1,8 @@
|
||||
pub fn main() void {
|
||||
var i: i4 = 3;
|
||||
if (i *% 3 != 1) unreachable;
|
||||
return;
|
||||
}
|
||||
|
||||
// run
|
||||
//
|
||||
13
test/incremental/binary_operands.14.zig
Normal file
13
test/incremental/binary_operands.14.zig
Normal file
@@ -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
|
||||
//
|
||||
8
test/incremental/binary_operands.15.zig
Normal file
8
test/incremental/binary_operands.15.zig
Normal file
@@ -0,0 +1,8 @@
|
||||
pub fn main() u8 {
|
||||
var i: u8 = 5;
|
||||
i &= 6;
|
||||
return i - 4;
|
||||
}
|
||||
|
||||
// run
|
||||
//
|
||||
8
test/incremental/binary_operands.16.zig
Normal file
8
test/incremental/binary_operands.16.zig
Normal file
@@ -0,0 +1,8 @@
|
||||
pub fn main() u8 {
|
||||
var i: u8 = 5;
|
||||
i |= 6;
|
||||
return i - 7;
|
||||
}
|
||||
|
||||
// run
|
||||
//
|
||||
8
test/incremental/binary_operands.17.zig
Normal file
8
test/incremental/binary_operands.17.zig
Normal file
@@ -0,0 +1,8 @@
|
||||
pub fn main() u8 {
|
||||
var i: u8 = 5;
|
||||
i ^= 6;
|
||||
return i - 3;
|
||||
}
|
||||
|
||||
// run
|
||||
//
|
||||
9
test/incremental/binary_operands.18.zig
Normal file
9
test/incremental/binary_operands.18.zig
Normal file
@@ -0,0 +1,9 @@
|
||||
pub fn main() void {
|
||||
var b: bool = false;
|
||||
b = b or false;
|
||||
if (b) unreachable;
|
||||
return;
|
||||
}
|
||||
|
||||
// run
|
||||
//
|
||||
9
test/incremental/binary_operands.19.zig
Normal file
9
test/incremental/binary_operands.19.zig
Normal file
@@ -0,0 +1,9 @@
|
||||
pub fn main() void {
|
||||
var b: bool = true;
|
||||
b = b or false;
|
||||
if (!b) unreachable;
|
||||
return;
|
||||
}
|
||||
|
||||
// run
|
||||
//
|
||||
8
test/incremental/binary_operands.2.zig
Normal file
8
test/incremental/binary_operands.2.zig
Normal file
@@ -0,0 +1,8 @@
|
||||
pub fn main() void {
|
||||
var i: i4 = 7;
|
||||
if (i +% 1 != 0) unreachable;
|
||||
return;
|
||||
}
|
||||
|
||||
// run
|
||||
//
|
||||
9
test/incremental/binary_operands.20.zig
Normal file
9
test/incremental/binary_operands.20.zig
Normal file
@@ -0,0 +1,9 @@
|
||||
pub fn main() void {
|
||||
var b: bool = false;
|
||||
b = b or true;
|
||||
if (!b) unreachable;
|
||||
return;
|
||||
}
|
||||
|
||||
// run
|
||||
//
|
||||
9
test/incremental/binary_operands.21.zig
Normal file
9
test/incremental/binary_operands.21.zig
Normal file
@@ -0,0 +1,9 @@
|
||||
pub fn main() void {
|
||||
var b: bool = true;
|
||||
b = b or true;
|
||||
if (!b) unreachable;
|
||||
return;
|
||||
}
|
||||
|
||||
// run
|
||||
//
|
||||
9
test/incremental/binary_operands.22.zig
Normal file
9
test/incremental/binary_operands.22.zig
Normal file
@@ -0,0 +1,9 @@
|
||||
pub fn main() void {
|
||||
var b: bool = false;
|
||||
b = b and false;
|
||||
if (b) unreachable;
|
||||
return;
|
||||
}
|
||||
|
||||
// run
|
||||
//
|
||||
9
test/incremental/binary_operands.23.zig
Normal file
9
test/incremental/binary_operands.23.zig
Normal file
@@ -0,0 +1,9 @@
|
||||
pub fn main() void {
|
||||
var b: bool = true;
|
||||
b = b and false;
|
||||
if (b) unreachable;
|
||||
return;
|
||||
}
|
||||
|
||||
// run
|
||||
//
|
||||
9
test/incremental/binary_operands.24.zig
Normal file
9
test/incremental/binary_operands.24.zig
Normal file
@@ -0,0 +1,9 @@
|
||||
pub fn main() void {
|
||||
var b: bool = false;
|
||||
b = b and true;
|
||||
if (b) unreachable;
|
||||
return;
|
||||
}
|
||||
|
||||
// run
|
||||
//
|
||||
9
test/incremental/binary_operands.25.zig
Normal file
9
test/incremental/binary_operands.25.zig
Normal file
@@ -0,0 +1,9 @@
|
||||
pub fn main() void {
|
||||
var b: bool = true;
|
||||
b = b and true;
|
||||
if (!b) unreachable;
|
||||
return;
|
||||
}
|
||||
|
||||
// run
|
||||
//
|
||||
7
test/incremental/binary_operands.3.zig
Normal file
7
test/incremental/binary_operands.3.zig
Normal file
@@ -0,0 +1,7 @@
|
||||
pub fn main() u8 {
|
||||
var i: u8 = 255;
|
||||
return i +% 1;
|
||||
}
|
||||
|
||||
// run
|
||||
//
|
||||
12
test/incremental/binary_operands.4.zig
Normal file
12
test/incremental/binary_operands.4.zig
Normal file
@@ -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
|
||||
//
|
||||
8
test/incremental/binary_operands.5.zig
Normal file
8
test/incremental/binary_operands.5.zig
Normal file
@@ -0,0 +1,8 @@
|
||||
pub fn main() u8 {
|
||||
var i: u8 = 20;
|
||||
i -= 5;
|
||||
return i - 15;
|
||||
}
|
||||
|
||||
// run
|
||||
//
|
||||
8
test/incremental/binary_operands.6.zig
Normal file
8
test/incremental/binary_operands.6.zig
Normal file
@@ -0,0 +1,8 @@
|
||||
pub fn main() void {
|
||||
var i: i32 = -2147483648;
|
||||
if (i -% 1 != 2147483647) unreachable;
|
||||
return;
|
||||
}
|
||||
|
||||
// run
|
||||
//
|
||||
8
test/incremental/binary_operands.7.zig
Normal file
8
test/incremental/binary_operands.7.zig
Normal file
@@ -0,0 +1,8 @@
|
||||
pub fn main() void {
|
||||
var i: i7 = -64;
|
||||
if (i -% 1 != 63) unreachable;
|
||||
return;
|
||||
}
|
||||
|
||||
// run
|
||||
//
|
||||
7
test/incremental/binary_operands.8.zig
Normal file
7
test/incremental/binary_operands.8.zig
Normal file
@@ -0,0 +1,7 @@
|
||||
pub fn main() void {
|
||||
var i: u4 = 0;
|
||||
if (i -% 1 != 15) unreachable;
|
||||
}
|
||||
|
||||
// run
|
||||
//
|
||||
12
test/incremental/binary_operands.9.zig
Normal file
12
test/incremental/binary_operands.9.zig
Normal file
@@ -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
|
||||
//
|
||||
18
test/incremental/enum_values.0.zig
Normal file
18
test/incremental/enum_values.0.zig
Normal file
@@ -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
|
||||
//
|
||||
22
test/incremental/enum_values.1.zig
Normal file
22
test/incremental/enum_values.1.zig
Normal file
@@ -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
|
||||
//
|
||||
12
test/incremental/function_calls.0.zig
Normal file
12
test/incremental/function_calls.0.zig
Normal file
@@ -0,0 +1,12 @@
|
||||
pub fn main() void {
|
||||
foo();
|
||||
bar();
|
||||
}
|
||||
fn foo() void {
|
||||
bar();
|
||||
bar();
|
||||
}
|
||||
fn bar() void {}
|
||||
|
||||
// run
|
||||
//
|
||||
15
test/incremental/function_calls.1.zig
Normal file
15
test/incremental/function_calls.1.zig
Normal file
@@ -0,0 +1,15 @@
|
||||
pub fn main() void {
|
||||
bar();
|
||||
foo();
|
||||
foo();
|
||||
bar();
|
||||
foo();
|
||||
bar();
|
||||
}
|
||||
fn foo() void {
|
||||
bar();
|
||||
}
|
||||
fn bar() void {}
|
||||
|
||||
// run
|
||||
//
|
||||
14
test/incremental/function_calls.2.zig
Normal file
14
test/incremental/function_calls.2.zig
Normal file
@@ -0,0 +1,14 @@
|
||||
pub fn main() void {
|
||||
bar();
|
||||
foo();
|
||||
return;
|
||||
}
|
||||
fn foo() void {
|
||||
bar();
|
||||
bar();
|
||||
bar();
|
||||
}
|
||||
fn bar() void {}
|
||||
|
||||
// run
|
||||
//
|
||||
10
test/incremental/function_calls.3.zig
Normal file
10
test/incremental/function_calls.3.zig
Normal file
@@ -0,0 +1,10 @@
|
||||
pub fn main() void {
|
||||
foo(10, 20);
|
||||
}
|
||||
fn foo(x: u8, y: u8) void {
|
||||
_ = x;
|
||||
_ = y;
|
||||
}
|
||||
|
||||
// run
|
||||
//
|
||||
11
test/incremental/wasm-wasi/conditions.0.zig
Normal file
11
test/incremental/wasm-wasi/conditions.0.zig
Normal file
@@ -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
|
||||
//
|
||||
12
test/incremental/wasm-wasi/conditions.1.zig
Normal file
12
test/incremental/wasm-wasi/conditions.1.zig
Normal file
@@ -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
|
||||
//
|
||||
12
test/incremental/wasm-wasi/conditions.2.zig
Normal file
12
test/incremental/wasm-wasi/conditions.2.zig
Normal file
@@ -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
|
||||
//
|
||||
16
test/incremental/wasm-wasi/conditions.3.zig
Normal file
16
test/incremental/wasm-wasi/conditions.3.zig
Normal file
@@ -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
|
||||
//
|
||||
15
test/incremental/wasm-wasi/conditions.4.zig
Normal file
15
test/incremental/wasm-wasi/conditions.4.zig
Normal file
@@ -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
|
||||
//
|
||||
20
test/incremental/wasm-wasi/conditions.5.zig
Normal file
20
test/incremental/wasm-wasi/conditions.5.zig
Normal file
@@ -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
|
||||
//
|
||||
15
test/incremental/wasm-wasi/error_unions.0.zig
Normal file
15
test/incremental/wasm-wasi/error_unions.0.zig
Normal file
@@ -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
|
||||
//
|
||||
8
test/incremental/wasm-wasi/error_unions.1.zig
Normal file
8
test/incremental/wasm-wasi/error_unions.1.zig
Normal file
@@ -0,0 +1,8 @@
|
||||
pub fn main() u8 {
|
||||
var e: anyerror!u8 = 5;
|
||||
const i = e catch 10;
|
||||
return i - 5;
|
||||
}
|
||||
|
||||
// run
|
||||
//
|
||||
8
test/incremental/wasm-wasi/error_unions.2.zig
Normal file
8
test/incremental/wasm-wasi/error_unions.2.zig
Normal file
@@ -0,0 +1,8 @@
|
||||
pub fn main() u8 {
|
||||
var e: anyerror!u8 = error.Foo;
|
||||
const i = e catch 10;
|
||||
return i - 10;
|
||||
}
|
||||
|
||||
// run
|
||||
//
|
||||
12
test/incremental/wasm-wasi/error_unions.3.zig
Normal file
12
test/incremental/wasm-wasi/error_unions.3.zig
Normal file
@@ -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
|
||||
//
|
||||
12
test/incremental/wasm-wasi/error_unions.4.zig
Normal file
12
test/incremental/wasm-wasi/error_unions.4.zig
Normal file
@@ -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
|
||||
//
|
||||
12
test/incremental/wasm-wasi/error_unions.5.zig
Normal file
12
test/incremental/wasm-wasi/error_unions.5.zig
Normal file
@@ -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
|
||||
//
|
||||
14
test/incremental/wasm-wasi/locals.0.zig
Normal file
14
test/incremental/wasm-wasi/locals.0.zig
Normal file
@@ -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
|
||||
//
|
||||
17
test/incremental/wasm-wasi/locals.1.zig
Normal file
17
test/incremental/wasm-wasi/locals.1.zig
Normal file
@@ -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
|
||||
//
|
||||
12
test/incremental/wasm-wasi/optionals.0.zig
Normal file
12
test/incremental/wasm-wasi/optionals.0.zig
Normal file
@@ -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
|
||||
//
|
||||
11
test/incremental/wasm-wasi/optionals.1.zig
Normal file
11
test/incremental/wasm-wasi/optionals.1.zig
Normal file
@@ -0,0 +1,11 @@
|
||||
pub fn main() u8 {
|
||||
var x: ?u8 = null;
|
||||
var y: u8 = 0;
|
||||
if (x) |val| {
|
||||
y = val;
|
||||
}
|
||||
return y;
|
||||
}
|
||||
|
||||
// run
|
||||
//
|
||||
7
test/incremental/wasm-wasi/optionals.2.zig
Normal file
7
test/incremental/wasm-wasi/optionals.2.zig
Normal file
@@ -0,0 +1,7 @@
|
||||
pub fn main() u8 {
|
||||
var x: ?u8 = 5;
|
||||
return x.? - 5;
|
||||
}
|
||||
|
||||
// run
|
||||
//
|
||||
8
test/incremental/wasm-wasi/optionals.3.zig
Normal file
8
test/incremental/wasm-wasi/optionals.3.zig
Normal file
@@ -0,0 +1,8 @@
|
||||
pub fn main() u8 {
|
||||
var x: u8 = 5;
|
||||
var y: ?u8 = x;
|
||||
return y.? - 5;
|
||||
}
|
||||
|
||||
// run
|
||||
//
|
||||
13
test/incremental/wasm-wasi/optionals.4.zig
Normal file
13
test/incremental/wasm-wasi/optionals.4.zig
Normal file
@@ -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
|
||||
//
|
||||
14
test/incremental/wasm-wasi/pointers.0.zig
Normal file
14
test/incremental/wasm-wasi/pointers.0.zig
Normal file
@@ -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
|
||||
//
|
||||
18
test/incremental/wasm-wasi/pointers.1.zig
Normal file
18
test/incremental/wasm-wasi/pointers.1.zig
Normal file
@@ -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
|
||||
//
|
||||
10
test/incremental/wasm-wasi/structs.0.zig
Normal file
10
test/incremental/wasm-wasi/structs.0.zig
Normal file
@@ -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
|
||||
//
|
||||
10
test/incremental/wasm-wasi/structs.1.zig
Normal file
10
test/incremental/wasm-wasi/structs.1.zig
Normal file
@@ -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
|
||||
//
|
||||
9
test/incremental/wasm-wasi/structs.2.zig
Normal file
9
test/incremental/wasm-wasi/structs.2.zig
Normal file
@@ -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
|
||||
//
|
||||
12
test/incremental/wasm-wasi/structs.3.zig
Normal file
12
test/incremental/wasm-wasi/structs.3.zig
Normal file
@@ -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
|
||||
//
|
||||
11
test/incremental/wasm-wasi/structs.4.zig
Normal file
11
test/incremental/wasm-wasi/structs.4.zig
Normal file
@@ -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
|
||||
//
|
||||
15
test/incremental/wasm-wasi/switch.0.zig
Normal file
15
test/incremental/wasm-wasi/switch.0.zig
Normal file
@@ -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
|
||||
//
|
||||
14
test/incremental/wasm-wasi/switch.1.zig
Normal file
14
test/incremental/wasm-wasi/switch.1.zig
Normal file
@@ -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
|
||||
//
|
||||
14
test/incremental/wasm-wasi/switch.2.zig
Normal file
14
test/incremental/wasm-wasi/switch.2.zig
Normal file
@@ -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
|
||||
//
|
||||
15
test/incremental/wasm-wasi/switch.3.zig
Normal file
15
test/incremental/wasm-wasi/switch.3.zig
Normal file
@@ -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
|
||||
//
|
||||
12
test/incremental/wasm-wasi/while_loops.0.zig
Normal file
12
test/incremental/wasm-wasi/while_loops.0.zig
Normal file
@@ -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
|
||||
//
|
||||
11
test/incremental/wasm-wasi/while_loops.1.zig
Normal file
11
test/incremental/wasm-wasi/while_loops.1.zig
Normal file
@@ -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
|
||||
//
|
||||
12
test/incremental/wasm-wasi/while_loops.2.zig
Normal file
12
test/incremental/wasm-wasi/while_loops.2.zig
Normal file
@@ -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
|
||||
//
|
||||
@@ -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;
|
||||
\\}
|
||||
, "");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user