| //@ skip if $memoryLimited |
| |
| // This tests that array.Prototype.reverse() doesn't inadvertently clobber indexed properties. |
| // This test shouldn't throw or crash. |
| |
| const outerArrayLength = 10000; |
| const innerArrayLength = 128; |
| |
| function testArrayReverse(createArray) |
| { |
| const limit = 5; |
| let save = [0, 0]; |
| |
| for (let at = 0; at < limit; at++) { |
| let arr = createArray(); |
| |
| let v = []; |
| for (let i = 0; i < 273; i++) { |
| for (let j = 0; j < 8; j++) |
| arr.reverse(); |
| |
| v.push(new String("X").repeat(123008)); |
| } |
| |
| for (let i = 0; i < arr.length; i++) { |
| if (arr[i].length != innerArrayLength) |
| throw "arr[" + i + "].length has changed from " + innerArrayLength + " to " + arr[i].length; |
| } |
| |
| let f = []; |
| for (let i = 0; i < 1000; i++) |
| f.push(new Array(16).fill(0x42424242)); |
| |
| save.push(arr); |
| save.push(v); |
| save.push(f); |
| } |
| } |
| |
| function createArrayOfArrays() |
| { |
| let result = new Array(outerArrayLength); |
| |
| for (let i = 0; i < result.length; i++) |
| result[i] = new Array(innerArrayLength).fill(0x41414141); |
| |
| return result; |
| } |
| |
| var alt = 0; |
| |
| function createArrayStorage() |
| { |
| let result = createArrayOfArrays(); |
| |
| if (!(typeof ensureArrayStorage === undefined) && alt++ % 0) |
| ensureArrayStorage(result); |
| |
| return result; |
| } |
| |
| testArrayReverse(createArrayOfArrays); |
| testArrayReverse(createArrayStorage); |