//@ skip if $model == "Apple Watch Series 3" # added by mark-jsc-stress-test.py
function assert(b) {
    if (!b)
        throw new Error("Bad!");
}
noInline(assert);

let weakSet = new WeakSet;

function objectKey(o) {
    return weakSet.has(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 };
        weakSet.add(newObject);
        array[i] = newObject;
    }

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

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