import Builder from '../Builder.js'
import * as assert from '../assert.js'

const b = new Builder();
b.Type().End()
    .Function().End()
    .Memory().InitialMaxPages(1, 1).End()
    .Export().Function("foo").End()
    .Code()
        .Function("foo", { params: ["i32", "i32"], ret: "i32" })
            .GetLocal(1)
            .GetLocal(0)
            .I32Store(2, 0)
            .GetLocal(1)
            .I32Load8S(0, 0)
            .Return()
        .End()
    .End()

const bin = b.WebAssembly().get();
const foo = (new WebAssembly.Instance(new WebAssembly.Module(bin))).exports.foo;
assert.eq(foo(0, 10), 0);
assert.eq(foo(100, 112), 100);
assert.eq(foo(1000000, 10), 0x40);
