127 lines
3.3 KiB
JavaScript
127 lines
3.3 KiB
JavaScript
description(
|
|
"Tests array length shortening."
|
|
);
|
|
|
|
var count;
|
|
|
|
function testLengthShortening(array) {
|
|
array.length = 1;
|
|
count = 0;
|
|
for (var x of array) {
|
|
count++;
|
|
}
|
|
|
|
shouldBe("count", "1");
|
|
}
|
|
|
|
var arr;
|
|
|
|
// Test Objects with densely packed indexed properties:
|
|
function denseInt32Elements(arr) {
|
|
arr[0] = 1;
|
|
arr[1] = 2;
|
|
return arr;
|
|
}
|
|
testLengthShortening(denseInt32Elements(Object.create(Array.prototype)));
|
|
testLengthShortening(denseInt32Elements([]));
|
|
|
|
function denseDoubleElements(arr) {
|
|
arr[0] = 1.5;
|
|
arr[1] = 2.5;
|
|
return arr;
|
|
}
|
|
testLengthShortening(denseDoubleElements(Object.create(Array.prototype)));
|
|
testLengthShortening(denseDoubleElements([]));
|
|
|
|
function denseObjectElements(arr) {
|
|
arr[0] = {};
|
|
arr[1] = {};
|
|
return arr;
|
|
}
|
|
testLengthShortening(denseObjectElements(Object.create(Array.prototype)));
|
|
testLengthShortening(denseObjectElements([]));
|
|
|
|
// Test Objects with hole-y indexed properties:
|
|
function holeyInt32Elements(arr) {
|
|
arr[0] = 1;
|
|
arr[1] = 2;
|
|
arr[4] = 4;
|
|
return arr;
|
|
}
|
|
testLengthShortening(holeyInt32Elements(Object.create(Array.prototype)));
|
|
testLengthShortening(holeyInt32Elements([]));
|
|
|
|
function holeyDoubleElements(arr) {
|
|
arr[0] = 1.5;
|
|
arr[1] = 2.5;
|
|
arr[4] = 4.5;
|
|
return arr;
|
|
}
|
|
testLengthShortening(holeyDoubleElements(Object.create(Array.prototype)));
|
|
testLengthShortening(holeyDoubleElements([]));
|
|
|
|
function holeyObjectElements(arr) {
|
|
arr[0] = {};
|
|
arr[1] = {};
|
|
arr[4] = {};
|
|
return arr;
|
|
}
|
|
testLengthShortening(holeyObjectElements(Object.create(Array.prototype)));
|
|
testLengthShortening(holeyObjectElements([]));
|
|
|
|
// Test Objects with ArrayStorage indexed properties:
|
|
function arrayStorageInt32Elements(arr) {
|
|
arr[0] = 1;
|
|
arr[1] = 2;
|
|
arr.unshift(100); // Force conversion to using ArrayStorage.
|
|
return arr;
|
|
}
|
|
testLengthShortening(arrayStorageInt32Elements(Object.create(Array.prototype)));
|
|
testLengthShortening(arrayStorageInt32Elements([]));
|
|
|
|
function arrayStorageDoubleElements(arr) {
|
|
arr[0] = 1.5;
|
|
arr[1] = 2.5;
|
|
arr.unshift(100.5); // Force conversion to using ArrayStorage.
|
|
return arr;
|
|
}
|
|
testLengthShortening(arrayStorageDoubleElements(Object.create(Array.prototype)));
|
|
testLengthShortening(arrayStorageDoubleElements([]));
|
|
|
|
function arrayStorageObjectElements(arr) {
|
|
arr[0] = {};
|
|
arr[1] = {};
|
|
arr.unshift({}); // Force conversion to using ArrayStorage.
|
|
return arr;
|
|
}
|
|
testLengthShortening(arrayStorageObjectElements(Object.create(Array.prototype)));
|
|
testLengthShortening(arrayStorageObjectElements([]));
|
|
|
|
// Test Objects with sparse indexed properties:
|
|
function sparseInt32Elements(arr) {
|
|
arr[0] = 1;
|
|
arr[1] = 2;
|
|
arr[100000] = 100;
|
|
return arr;
|
|
}
|
|
testLengthShortening(sparseInt32Elements(Object.create(Array.prototype)));
|
|
testLengthShortening(sparseInt32Elements([]));
|
|
|
|
function sparseDoubleElements(arr) {
|
|
arr[0] = 1.5;
|
|
arr[1] = 2.5;
|
|
arr[100000] = 100.5;
|
|
return arr;
|
|
}
|
|
testLengthShortening(sparseDoubleElements(Object.create(Array.prototype)));
|
|
testLengthShortening(sparseDoubleElements([]));
|
|
|
|
function sparseObjectElements(arr) {
|
|
arr[0] = {};
|
|
arr[1] = {};
|
|
arr[100000] = {};
|
|
return arr;
|
|
}
|
|
testLengthShortening(sparseObjectElements(Object.create(Array.prototype)));
|
|
testLengthShortening(sparseObjectElements([]));
|