126 lines
3.0 KiB
Zig
126 lines
3.0 KiB
Zig
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(
|
|
\\export fn _start() u32 {
|
|
\\ foo();
|
|
\\ bar();
|
|
\\ return 42;
|
|
\\}
|
|
\\fn foo() void {
|
|
\\ bar();
|
|
\\ bar();
|
|
\\}
|
|
\\fn bar() void {}
|
|
,
|
|
"42\n",
|
|
);
|
|
|
|
case.addCompareOutput(
|
|
\\export fn _start() i64 {
|
|
\\ bar();
|
|
\\ foo();
|
|
\\ foo();
|
|
\\ bar();
|
|
\\ foo();
|
|
\\ bar();
|
|
\\ return 42;
|
|
\\}
|
|
\\fn foo() void {
|
|
\\ bar();
|
|
\\}
|
|
\\fn bar() void {}
|
|
,
|
|
"42\n",
|
|
);
|
|
|
|
case.addCompareOutput(
|
|
\\export fn _start() f32 {
|
|
\\ bar();
|
|
\\ foo();
|
|
\\ return 42.0;
|
|
\\}
|
|
\\fn foo() void {
|
|
\\ bar();
|
|
\\ bar();
|
|
\\ bar();
|
|
\\}
|
|
\\fn bar() void {}
|
|
,
|
|
// This is what you get when you take the bits of the IEE-754
|
|
// representation of 42.0 and reinterpret them as an unsigned
|
|
// integer. Guess that's a bug in wasmtime.
|
|
"1109917696\n",
|
|
);
|
|
|
|
case.addCompareOutput(
|
|
\\export fn _start() u32 {
|
|
\\ foo(10, 20);
|
|
\\ return 5;
|
|
\\}
|
|
\\fn foo(x: u32, y: u32) void {}
|
|
, "5\n");
|
|
}
|
|
|
|
{
|
|
var case = ctx.exe("wasm locals", wasi);
|
|
|
|
case.addCompareOutput(
|
|
\\export fn _start() u32 {
|
|
\\ var i: u32 = 5;
|
|
\\ var y: f32 = 42.0;
|
|
\\ var x: u32 = 10;
|
|
\\ return i;
|
|
\\}
|
|
, "5\n");
|
|
|
|
case.addCompareOutput(
|
|
\\export fn _start() u32 {
|
|
\\ var i: u32 = 5;
|
|
\\ var y: f32 = 42.0;
|
|
\\ var x: u32 = 10;
|
|
\\ foo(i, x);
|
|
\\ i = x;
|
|
\\ return i;
|
|
\\}
|
|
\\fn foo(x: u32, y: u32) void {
|
|
\\ var i: u32 = 10;
|
|
\\ i = x;
|
|
\\}
|
|
, "10\n");
|
|
}
|
|
|
|
{
|
|
var case = ctx.exe("wasm binary operands", wasi);
|
|
|
|
case.addCompareOutput(
|
|
\\export fn _start() u32 {
|
|
\\ var i: u32 = 5;
|
|
\\ i += 20;
|
|
\\ return i;
|
|
\\}
|
|
, "25\n");
|
|
|
|
case.addCompareOutput(
|
|
\\export fn _start() u32 {
|
|
\\ var i: u32 = 5;
|
|
\\ i += 20;
|
|
\\ var result: u32 = foo(i, 10);
|
|
\\ return result;
|
|
\\}
|
|
\\fn foo(x: u32, y: u32) u32 {
|
|
\\ return x + y;
|
|
\\}
|
|
, "35\n");
|
|
}
|
|
}
|