<!DOCTYPE html>
<script src="../resources/magnitude-perf.js"></script>
<body>
<script>

var doc, node, expected;

function appendDeepTree(magnitude)
{
    for (var i = 0; i < magnitude; i++) {
        node = node.appendChild(doc.createElement('div'));
    }
}


// Tests that contains is O(1) for document where the test |node| is in the document.

function setup1(magnitude)
{
    node = document.body;
    doc = document;
    expected = true;
    appendDeepTree(magnitude);
}

// Tests that contains is O(1) for document when the test |node| is not in the document.

function setup2(magnitude)
{
    node = document.createElement('div');  // Not added to the document
    doc = document;
    expected = false;
    appendDeepTree(magnitude);
}

// Tests that contains is O(1) for document when the test |node| is in a different document.

function setup3(magnitude)
{
    var iframe = document.body.appendChild(document.createElement('iframe'));
    doc = iframe.contentDocument;
    node = doc.body;  // Different document.
    expected = false;
    appendDeepTree(magnitude);
}

function test(magnitude)
{
    var actual = document.contains(node);
    if (actual !== expected)
        throw 'Unexpected return value: ' + actual + ', expected: ' + expected;
}

Magnitude.description('Tests that document.contains is O(1).');
Magnitude.run(setup1, test, Magnitude.CONSTANT);
Magnitude.run(setup2, test, Magnitude.CONSTANT);
Magnitude.run(setup3, test, Magnitude.CONSTANT);

</script>
</body>
