//@ memoryHog!

function assert(b) {
    if (!b)
        throw new Error("Bad assertion")
}
noInline(assert);
function test(map, key, value) {
    let loadValue = eval(`${Math.random()}; let k = key; (function getValue() { return map.get(k); });`);
    noInline(loadValue);
    for (let i = 0; i < 1000000; i++) {
        assert(loadValue() === value);
    }
}

let reallyLongString = "";
for (let i = 0; i < 60000; i++) {
    reallyLongString += "i";
}
reallyLongString.toString();

let keys = [
    "foo",
    "fdashfdsahfdashfdsh",
    "rope" + "string",
    reallyLongString,
    259243,
    1238231.2138321,
    -92138.328,
    {foo: 25},
    Symbol("Hello world"),
    true,
    false,
    undefined,
    null,
    NaN,
    -0,
    function foo() {}
];

let start = Date.now();
let map = new Map;
let i = 0;
for (let key of keys) {
    let value = {i: i++};
    map.set(key, value);
    test(map, key, value);
}
const verbose = false;
if (verbose)
    print(Date.now() - start);
