/* * Any copyright is dedicated to the Public Domain. * http://creativecommons.org/licenses/publicdomain/ * Contributor: * Jeff Walden */ //----------------------------------------------------------------------------- var BUGNUMBER = 858381; var summary = "Array length setting/truncating with non-dense, indexed elements"; print(BUGNUMBER + ": " + summary); /************** * BEGIN TEST * **************/ function testTruncateDenseAndSparse() { var arr; // initialized length 16, capacity same arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]; // plus a sparse element arr[987654321] = 987654321; // lop off the sparse element and half the dense elements, shrink capacity arr.length = 8; assertEq(987654321 in arr, false); assertEq(arr[987654321], undefined); assertEq(arr.length, 8); } testTruncateDenseAndSparse(); function testTruncateSparse() { // initialized length 8, capacity same var arr = [0, 1, 2, 3, 4, 5, 6, 7]; // plus a sparse element arr[987654321] = 987654321; // lop off the sparse element, leave initialized length/capacity unchanged arr.length = 8; assertEq(987654321 in arr, false); assertEq(arr[987654321], undefined); assertEq(arr.length, 8); } testTruncateSparse(); function testTruncateDenseAndSparseShrinkCapacity() { // initialized length 11, capacity...somewhat larger, likely 16 var arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; // plus a sparse element arr[987654321] = 987654321; // lop off the sparse element, reduce initialized length, reduce capacity arr.length = 8; assertEq(987654321 in arr, false); assertEq(arr[987654321], undefined); assertEq(arr.length, 8); } testTruncateDenseAndSparseShrinkCapacity(); function testTruncateSparseShrinkCapacity() { // initialized length 8, capacity same var arr = [0, 1, 2, 3, 4, 5, 6, 7]; // capacity expands to accommodate, initialized length remains same (not equal // to capacity or length) arr[15] = 15; // now no elements past initialized length delete arr[15]; // ...except a sparse element arr[987654321] = 987654321; // trims sparse element, doesn't change initialized length, shrinks capacity arr.length = 8; assertEq(987654321 in arr, false); assertEq(arr[987654321], undefined); assertEq(arr.length, 8); } testTruncateSparseShrinkCapacity(); /******************************************************************************/ if (typeof reportCompare === "function") reportCompare(true, true); print("Tests complete");