Cap length of an array with spread to MIN_ARRAY_STORAGE_CONSTRUCTION_LENGTH.
[WebKit-https.git] / JSTests / stress / new_array_with_spread-should-cap-array-size-to-MIN_ARRAY_STORAGE_CONSTRUCTION_LENGTH.js
1 //@ skip if $memoryLimited or $buildType == "debug"
2
3 function test() {
4     function makeFoo(n) {
5         let src = "return function(a, b) { for (let i = 0; i < 20000; i++); return [";
6         for (let i = 0; i < n; i++) {
7             src += "...a";
8             if (i < n-1)
9                 src += ",";
10         }
11         src += ",...b];}";
12         return (new Function(src))();
13     }
14
15     var NUM_SPREAD_ARGS = 8;
16     var foo = makeFoo(NUM_SPREAD_ARGS);
17
18     var b = [1.1, 1.1];
19     for (let i = 0; i < 10; i++)
20         foo(b, b);
21
22     function makeArray(len, v = 1.234) {
23         let a = [];
24         while (a.length < len)
25             a[a.length] = v;
26         return a;
27     }
28
29     var a = makeArray(0x20000040 / NUM_SPREAD_ARGS);
30     var c = []; c.length = 1;
31
32     var arr = foo(a, c);
33     print(arr.length);
34 }
35
36 var exception;
37 try {
38     test();
39 } catch (e) {
40     exception = e;
41 }
42
43 if (exception != "Error: Out of memory")
44     throw "FAILED";