<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<script>

function runArrayOOMTest() {
    document.write("<p>Starting test...</p>");

    // The index 'target' is the location in the array we expect to fault on access, should the size calculation of the realloc of the vector be allowed
    // to overflow.  The vector needs to be ((target + 1) * sizeof(JSValue*)) bytes long to hold 'target', or approximately 2/3 UINT32_MAX.  Upon growing
    // the array an additional 50% capacity will be allocated, plus the storage object header, taking the size of the allocation over UINT32_MAX.
    var target = Math.floor(0xFFFFFFFF / 6);
    // In order to force arr[target] to be stored in the vector, rather than the sparse map, we need ensure the vector is sufficiently densely populated.
    var populate = Math.floor(target / 8 + 1);

    try {
        var arr = new Array();
        for (var i=0; i < populate; ++i)
            arr[i] = 0;
        arr[target] = 0;
    } catch(e) {
        var expect_name = "Error";
        var expect_message = "Out of memory";
        if ((e.name == expect_name) && (e.message == expect_message))
            document.write("<p>SUCCESS</p>");
        else
            document.write("<p>FAIL - Expected \"" + expect_name + "/" + expect_message + "\", got \"" + e.name + "/" + e.message + "\".</p>");

        return;
    }

    document.write("<p>FAIL - Expected exception.</p>");
}

</script>
</head>
<body>
<p>This test checks that Array objects fail gracefully (throw exception) when array length grows large.</p>
<p>This test may run for over 20 seconds on a fast machine, and will consume hundereds of MB of memory.</p>
<input type="button" onclick="runArrayOOMTest()" value="Start">
</body>
</html>
