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

assert.isFunction(WebAssembly.validate);
assert.isFunction(WebAssembly.__proto__.validate);
assert.eq(WebAssembly.validate.length, 1);

{
    const builder = (new Builder())
        .Type().End()
        .Import().Memory("imp", "memory", {initial: 20}).End()
        .Function().End()
        .Memory().InitialMaxPages(1, 1).End()
        .Export().End()
        .Code()
        .End();

    assert.truthy(!WebAssembly.validate(builder.WebAssembly().get()));
}

{
    const builder = (new Builder())
        .Type().End()
        .Import().Memory("imp", "memory", {initial: 20}).End()
        .Function().End()
        .Export().End()
        .Code()
        .End();

    assert.truthy(WebAssembly.validate(builder.WebAssembly().get()));
}

{
    const builder = (new Builder());
    builder.setChecked(false);

    builder.Type().End()
        .Import().Memory("imp", "memory", {initial: 20}).End()
        .Unknown("test").End()
        .Import().Memory("imp", "memory", {initial: 20}).End()
        .Function().End()
        .Export().End()
        .Code()
        .End();

    assert.falsy(WebAssembly.validate(builder.WebAssembly().get()));
}
