function assert(b) {
    if (!b)
        throw new Error("Bad!");
}
noInline(assert);

let weakMap = new WeakMap;

function objectKey(o) {
    return weakMap.get(o);
}
noInline(objectKey);

const iters = 1000000;
let start = Date.now();

{
    let o = {f: 20};
    var array = [];
    for (var i = 0; i < 10; i++) {
        let newObject = { f: i };
        weakMap.set(newObject, i);
        array[i] = newObject;
    }

    for (var j = 0; j < iters; ++j) {
        for (let i = 0; i < 10; i++)
            assert(objectKey(array[i]) === i);
    }
}

const verbose = false;
if (verbose)
    print(Date.now() - start);
