//@ skip if $memoryLimited or ($architecture != "arm64" && $architecture != "x86-64")
//@ runDefault()

function test() {

    // We don't support WebAssembly everywhere, so check for its existance before doing anything else.
    if (!this.WebAssembly)
        return;

    let bigArray = new Array(0x7000000);
    bigArray[0] = 1.1;
    bigArray[1] = 1.2;

    function foo(array) {
        var index = array.length;
        if (index >= bigArray.length || (index - 0x1ffdc01) < 0)
            return;
        return bigArray[index - 0x1ffdc01];
    }

    noInline(foo);

    var okArray = new Uint8Array(0x1ffdc02);

    for (var i = 0; i < 10000; ++i)
        foo(okArray);


    let maxSize = 0x10000;
    {
        var memory = new WebAssembly.Memory({ initial: 0x1000, maximum: maxSize });
        memory.grow(maxSize - 0x1000);
        var result = foo(new Uint8Array(memory.buffer));
        if (result !== void 0)
            throw "Error: bad result at end: " + result;
    }

    var ok = false;
    try {
        var memory = new WebAssembly.Memory({ initial: 0x1000, maximum: maxSize+1 });
        memory.grow(maxSize + 1 - 0x1000);
        var result = foo(new Uint8Array(memory.buffer));
        ok = true;
    } catch (e) {
        if (e.toString() != "RangeError: WebAssembly.Memory 'maximum' page count is too large")
            throw e;
    }
    if (ok)
        throw "Error: did not throw error";

}

test();
