62d8985d48df4846f4462b01abaeae16b23828f5
[WebKit-https.git] / JSTests / stress / new-largeish-contiguous-array-with-size.js
1 // We only need one run of this with any GC or JIT strategy. This test is not particularly fast.
2 // Unfortunately, it needs to run for a while to test the thing it's testing.
3 //@ skip if $architecture == /arm/
4 //@ slow!
5 //@ runWithRAMSize(10000000)
6
7 function foo(x) {
8     return new Array(x);
9 }
10
11 noInline(foo);
12
13 function test(size) {
14     var result = foo(size);
15     if (result.length != size)
16         throw "Error: bad result: " + result;
17     var sawThings = false;
18     for (var s in result)
19         sawThings = true;
20     if (sawThings)
21         throw "Error: array is in bad state: " + result;
22     result[0] = "42.5";
23     if (result[0] != "42.5")
24         throw "Error: array is in weird state: " + result;
25 }
26
27 var result = gcHeapSize();
28
29 for (var i = 0; i < 1000; ++i) {
30     // The test was written when we found that large array allocations weren't being accounted for
31     // in that part of the GC's accounting that determined the GC trigger. Consequently, the GC
32     // would run too infrequently in this loop and we would use an absurd amount of memory when this
33     // loop exited.
34     test(50000);
35 }
36
37 // Last time I tested, the heap should be 3725734 before and 125782 after. I don't want to enforce
38 // exactly that. If you regress the accounting code, the GC heap size at this point will be much
39 // more than that.
40 var result = gcHeapSize();
41 if (result > 10000000)
42     throw "Error: heap too big before forced GC: " + result;
43
44 // Do a final check after GC, just for sanity.
45 gc();
46 result = gcHeapSize();
47 if (result > 1000000)
48     throw "Error: heap too big after forced GC: " + result;