import * as assert from '../assert.js'; import Builder from '../Builder.js'; async function test() { let builder = (new Builder()) .Type().End() .Function().End() .Export() .Function("foo") .End() .Code() .Function("foo", { params: ["i32"], ret: "i32" }, ["i32"]) .Block("i32") .Loop("i32", b => b.GetLocal(1) .GetLocal(0) .I32Eqz() .BrIf(1) .Call(1) .GetLocal(1) .I32Add() .SetLocal(1) .GetLocal(0) .I32Const(1) .I32Sub() .SetLocal(0) .Br(0) ) .End() .End() .Function("bar", { params: [], ret: "i32" }) .I32Const(42) .Return() .End() .End() const bin = builder.WebAssembly().get(); const {instance} = await WebAssembly.instantiate(bin, {}); const iters = 100000 for (let i = 0; i < 100; i++) assert.eq(instance.exports.foo(iters), 42 * iters); } assert.asyncTest(test());