//@ requireOptions("--useWeakRefs=true")

asyncTestStart(1);

function makeWeakRef() { return new WeakRef({foo: 1 }); }
noInline(makeWeakRef);

let loopCount = 10000;

function turnEventLoop() {
    return new Promise(function(resolve, reject) {
        if (globalThis.window) {
            // Turns out the test times out if we turn the event loop 10000 times...
            loopCount = 1000;
            window.setTimeout(() => {
                resolve();
            }, 0);
        } else {
            releaseWeakRefs();
            resolve();
        }
    });
}

let weakRefs = [];

async function* foo() {
    let weak = makeWeakRef();
    let object = weak.deref();
    yield await 1;
    if (weak.deref() !== object)
        throw new Error("Object appears to have been collected incorrectly");
    object = null;
    yield await turnEventLoop();
    weakRefs.push(weak);
}

async function test() {
    for (let i = 0; i < loopCount; i++) {
        for await (value of foo()) { }
    }
    gc();

    if (weakRefs.find((weak) => weak.deref() === null) === undefined)
        throw new Error("No weak ref value was collected");
    asyncTestPassed();
}


test().catch(e => debug(e));
