summaryrefslogtreecommitdiffstats
path: root/js/src/tests/non262/Array/length-truncate-with-indexed.js
blob: 9e4da812aa35137c14c040d11e587bf2f06bd890 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
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");