// We don't need N versions of this simultaneously filling up RAM.
//@ skip

const verbose = false;

// Use a full 4GiB so that exhaustion is likely to occur faster. We're not
// guaranteed that we'll get that much virtually allocated to the memory so we
// can't actually check that exhaustion occurs at a particular number of
// memories.
const maximumPages = 65536;

let memories = [];
try {
    while (true) {
        let m = new WebAssembly.Memory({ initial: 64, maximum: maximumPages });
        memories.push(m);
        if (verbose)
            print(`${WebAssemblyMemoryMode(m)} ${memories.length}`);
    }
} catch (e) {
    if (verbose)
        print(`Caught: ${e}`);
    if (e.message !== "Out of memory")
        throw new Error(`Expected an out of memory error, got ${e} of type ${typeof e}`);
}
