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

{
    const b = new Builder();
    const locals = [];
    const maxFunctionLocals = 50000;
    const numLocals = maxFunctionLocals;
    for (let i = 0; i < numLocals; ++i)
        locals[i] = "i32";
    let cont = b
        .Type().End()
        .Function().End()
        .Export()
            .Function("loop")
        .End()
        .Code()
            .Function("loop", { params: ["i32"], ret: "i32" }, locals)
                .I32Const(1)
                .Return()
            .End()
        .End()

    const bin = b.WebAssembly().get();
    var exception;
    try {
        const module = new WebAssembly.Module(bin);
    } catch (e) {
        exception = "" + e;
    }

    assert.eq(exception, "CompileError: WebAssembly.Module doesn't parse at byte 100002: Function's number of locals is too big 50001 maximum 50000, in function at index 0 (evaluating 'new WebAssembly.Module(bin)')");
}
