| function shouldBe(actual, expected) { |
| if (actual !== expected) |
| throw new Error('bad value: ' + actual); |
| } |
| |
| function testArrayStorageInBounds(array, index, value) |
| { |
| array[index] = value; |
| } |
| noInline(testArrayStorageInBounds); |
| |
| for (var i = 0; i < 1e5; ++i) { |
| var array = [1, 2, 3, 4, 5]; |
| ensureArrayStorage(array); |
| shouldBe(array[0], 1); |
| testArrayStorageInBounds(array, 0, 42); |
| shouldBe(array[0], 42); |
| } |
| for (var i = 0; i < 1e5; ++i) { |
| var array = [, 2, 3, 4]; |
| ensureArrayStorage(array); |
| shouldBe(array[0], undefined); |
| shouldBe(array[1], 2); |
| testArrayStorageInBounds(array, 0, 42); |
| testArrayStorageInBounds(array, 1, 40); |
| shouldBe(array[0], 42); |
| shouldBe(array[1], 40); |
| shouldBe(array.length, 4); |
| testArrayStorageInBounds(array, 4, 42); |
| shouldBe(array[4], 42); |
| shouldBe(array.length, 5); |
| } |
| for (var i = 0; i < 1e5; ++i) { |
| var array = [, 2, 3, 4]; |
| ensureArrayStorage(array); |
| shouldBe(array[6], undefined); |
| testArrayStorageInBounds(array, 6, 42); |
| shouldBe(array.length, 7); |
| shouldBe(array[6], 42); |
| } |