Invalid flags in a RegExp literal should be an early SyntaxError
[WebKit-https.git] / JSTests / stress / array-reverse-doesnt-clobber.js
1 //@ skip if $memoryLimited
2
3 // This tests that array.Prototype.reverse() doesn't inadvertently clobber indexed properties.
4 // This test shouldn't throw or crash.
5
6 const outerArrayLength = 10000;
7 const innerArrayLength = 128;
8
9 function testArrayReverse(createArray)
10 {
11     const limit = 5;
12     let save = [0, 0];
13
14     for (let at = 0; at < limit; at++) {
15         let arr = createArray();
16
17         let v = [];
18         for (let i = 0; i < 273; i++) {
19             for (let j = 0; j < 8; j++)
20                 arr.reverse();
21
22             v.push(new String("X").repeat(123008));
23         }
24
25         for (let i = 0; i < arr.length; i++) {
26             if (arr[i].length != innerArrayLength)
27                 throw "arr[" + i + "].length has changed from " + innerArrayLength + " to " + arr[i].length;
28         }
29
30         let f = [];
31         for (let i = 0; i < 1000; i++)
32             f.push(new Array(16).fill(0x42424242));
33
34         save.push(arr);
35         save.push(v);
36         save.push(f);
37     }
38 }
39
40 function createArrayOfArrays()
41 {
42     let result = new Array(outerArrayLength);
43
44     for (let i = 0; i < result.length; i++)
45         result[i] = new Array(innerArrayLength).fill(0x41414141);
46
47     return result;
48 }
49
50 var alt = 0;
51
52 function createArrayStorage()
53 {
54     let result = createArrayOfArrays();
55
56     if (!(typeof ensureArrayStorage === undefined) && alt++ % 0)
57         ensureArrayStorage(result);
58
59     return result;
60 }
61
62 testArrayReverse(createArrayOfArrays);
63 testArrayReverse(createArrayStorage);