summaryrefslogtreecommitdiffstats
path: root/js/src/tests/ecma_5/Array/length-truncate-with-indexed.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/tests/ecma_5/Array/length-truncate-with-indexed.js')
-rw-r--r--js/src/tests/ecma_5/Array/length-truncate-with-indexed.js101
1 files changed, 101 insertions, 0 deletions
diff --git a/js/src/tests/ecma_5/Array/length-truncate-with-indexed.js b/js/src/tests/ecma_5/Array/length-truncate-with-indexed.js
new file mode 100644
index 000000000..9e4da812a
--- /dev/null
+++ b/js/src/tests/ecma_5/Array/length-truncate-with-indexed.js
@@ -0,0 +1,101 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ * Contributor:
+ * Jeff Walden <jwalden+code@mit.edu>
+ */
+
+//-----------------------------------------------------------------------------
+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");