<!DOCTYPE html>
<script src="../../resources/js-test.js"></script>
<script>

description('Tests that we do not hold on to any nodes');

function numberOfLiveNodes() {
    return window.internals && window.internals.numberOfLiveNodes && window.internals.numberOfLiveNodes();
}

gc();
var beforeCount = numberOfLiveNodes();

const iterations = 100;
for (var j = 0; j < iterations; j++) {
    var f = document.documentElement.appendChild(document.createElement('form'));
    var i = f.appendChild(document.createElement('input'));
    i.setAttribute('onclick', '');
    i.remove();
    f.remove();
}

// The conservative GC may not reclaim all unreachable nodes.
gc();
var delta = numberOfLiveNodes() - beforeCount;
if (delta < iterations / 2)
    testPassed("did not leak");
else
    testFailed(`leaked an unexpected number of nodes: ${delta} leaks in ${iterations} runs`);

</script>
