1402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// Copyright 2010 the V8 project authors. All rights reserved.
2402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// Redistribution and use in source and binary forms, with or without
3402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// modification, are permitted provided that the following conditions are
4402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// met:
5402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu//
6402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu//     * Redistributions of source code must retain the above copyright
7402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu//       notice, this list of conditions and the following disclaimer.
8402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu//     * Redistributions in binary form must reproduce the above
9402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu//       copyright notice, this list of conditions and the following
10402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu//       disclaimer in the documentation and/or other materials provided
11402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu//       with the distribution.
12402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu//     * Neither the name of Google Inc. nor the names of its
13402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu//       contributors may be used to endorse or promote products derived
14402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu//       from this software without specific prior written permission.
15402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu//
16402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu
28402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// Check that unshifting array of holes keeps the original array
29402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// as array of holes
30402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu(function() {
31402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu  var array = new Array(10);
32402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu  assertEquals(13, array.unshift('1st', '2ns', '3rd'));
33402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu  assertTrue(0 in array);
34402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu  assertTrue(1 in array);
35402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu  assertTrue(2 in array);
36402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu  assertFalse(3 in array);
37402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu})();
38402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu
39402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu
4025f6136652d8341ed047e7fc1a450af5bd218ea9Kristian Monsen// Check that unshift with no args has a side-effect of
4125f6136652d8341ed047e7fc1a450af5bd218ea9Kristian Monsen// filling the holes with elements from the prototype
42402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// (if present, of course)
43402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu(function() {
44402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu  var len = 3;
45402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu  var array = new Array(len);
46402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu
47402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu  var at0 = '@0';
48402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu  var at2 = '@2';
49402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu
50402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu  Array.prototype[0] = at0;
51402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu  Array.prototype[2] = at2;
52402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu
53402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu  // array owns nothing...
54402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu  assertFalse(array.hasOwnProperty(0));
55402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu  assertFalse(array.hasOwnProperty(1));
56402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu  assertFalse(array.hasOwnProperty(2));
57402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu
58402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu  // ... but sees values from Array.prototype
59402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu  assertEquals(array[0], at0);
60402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu  assertEquals(array[1], undefined);
61402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu  assertEquals(array[2], at2);
62402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu
63402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu  assertEquals(len, array.unshift());
64402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu
65402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu  assertTrue(delete Array.prototype[0]);
66402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu  assertTrue(delete Array.prototype[2]);
67402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu
68402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu  // unshift makes array own 0 and 2...
69402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu  assertTrue(array.hasOwnProperty(0));
70402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu  assertFalse(array.hasOwnProperty(1));
71402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu  assertTrue(array.hasOwnProperty(2));
72402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu
73402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu  // ... so they are not affected be delete.
74402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu  assertEquals(array[0], at0);
75402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu  assertEquals(array[1], undefined);
76402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu  assertEquals(array[2], at2);
77402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu})();
78402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu
79402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu
80402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// Now check the case with array of holes and some elements on prototype.
81402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu(function() {
82402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu  var len = 9;
83402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu  var array = new Array(len);
84402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu  Array.prototype[3] = "@3";
85402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu  Array.prototype[7] = "@7";
86402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu
87402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu  assertEquals(len, array.length);
88402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu  for (var i = 0; i < array.length; i++) {
89402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu    assertEquals(array[i], Array.prototype[i]);
90402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu  }
91402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu
92402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu  assertEquals(len + 1, array.unshift('head'));
93402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu
94402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu  assertEquals(len + 1, array.length);
95402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu  // Note that unshift copies values from prototype into the array.
96402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu  assertEquals(array[4], Array.prototype[3]);
97402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu  assertTrue(array.hasOwnProperty(4));
98402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu
99402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu  assertEquals(array[8], Array.prototype[7]);
100402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu  assertTrue(array.hasOwnProperty(8));
101402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu
102402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu  // ... but keeps the rest as holes:
103402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu  Array.prototype[5] = "@5";
104402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu  assertEquals(array[5], Array.prototype[5]);
105402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu  assertFalse(array.hasOwnProperty(5));
106402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu
107402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu  assertEquals(array[3], Array.prototype[3]);
108402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu  assertFalse(array.hasOwnProperty(3));
109402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu
110402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu  assertEquals(array[7], Array.prototype[7]);
111402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu  assertFalse(array.hasOwnProperty(7));
112402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu
113402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu  assertTrue(delete Array.prototype[3]);
114402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu  assertTrue(delete Array.prototype[5]);
115402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu  assertTrue(delete Array.prototype[7]);
116402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu})();
117402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu
11825f6136652d8341ed047e7fc1a450af5bd218ea9Kristian Monsen// Check that unshift with no args has a side-effect of
11925f6136652d8341ed047e7fc1a450af5bd218ea9Kristian Monsen// filling the holes with elements from the prototype
12025f6136652d8341ed047e7fc1a450af5bd218ea9Kristian Monsen// (if present, of course)
12125f6136652d8341ed047e7fc1a450af5bd218ea9Kristian Monsen(function() {
12225f6136652d8341ed047e7fc1a450af5bd218ea9Kristian Monsen  var len = 3;
12325f6136652d8341ed047e7fc1a450af5bd218ea9Kristian Monsen  var array = new Array(len);
12425f6136652d8341ed047e7fc1a450af5bd218ea9Kristian Monsen
12525f6136652d8341ed047e7fc1a450af5bd218ea9Kristian Monsen  var at0 = '@0';
12625f6136652d8341ed047e7fc1a450af5bd218ea9Kristian Monsen  var at2 = '@2';
12725f6136652d8341ed047e7fc1a450af5bd218ea9Kristian Monsen
12825f6136652d8341ed047e7fc1a450af5bd218ea9Kristian Monsen  var array_proto = [];
12925f6136652d8341ed047e7fc1a450af5bd218ea9Kristian Monsen  array_proto[0] = at0;
13025f6136652d8341ed047e7fc1a450af5bd218ea9Kristian Monsen  array_proto[2] = at2;
13125f6136652d8341ed047e7fc1a450af5bd218ea9Kristian Monsen  array.__proto__ = array_proto;
13225f6136652d8341ed047e7fc1a450af5bd218ea9Kristian Monsen
13325f6136652d8341ed047e7fc1a450af5bd218ea9Kristian Monsen  // array owns nothing...
13425f6136652d8341ed047e7fc1a450af5bd218ea9Kristian Monsen  assertFalse(array.hasOwnProperty(0));
13525f6136652d8341ed047e7fc1a450af5bd218ea9Kristian Monsen  assertFalse(array.hasOwnProperty(1));
13625f6136652d8341ed047e7fc1a450af5bd218ea9Kristian Monsen  assertFalse(array.hasOwnProperty(2));
13725f6136652d8341ed047e7fc1a450af5bd218ea9Kristian Monsen
13825f6136652d8341ed047e7fc1a450af5bd218ea9Kristian Monsen  // ... but sees values from array_proto.
13925f6136652d8341ed047e7fc1a450af5bd218ea9Kristian Monsen  assertEquals(array[0], at0);
14025f6136652d8341ed047e7fc1a450af5bd218ea9Kristian Monsen  assertEquals(array[1], undefined);
14125f6136652d8341ed047e7fc1a450af5bd218ea9Kristian Monsen  assertEquals(array[2], at2);
14225f6136652d8341ed047e7fc1a450af5bd218ea9Kristian Monsen
14325f6136652d8341ed047e7fc1a450af5bd218ea9Kristian Monsen  assertEquals(len, array.unshift());
14425f6136652d8341ed047e7fc1a450af5bd218ea9Kristian Monsen
14525f6136652d8341ed047e7fc1a450af5bd218ea9Kristian Monsen  // unshift makes array own 0 and 2...
14625f6136652d8341ed047e7fc1a450af5bd218ea9Kristian Monsen  assertTrue(array.hasOwnProperty(0));
14725f6136652d8341ed047e7fc1a450af5bd218ea9Kristian Monsen  assertFalse(array.hasOwnProperty(1));
14825f6136652d8341ed047e7fc1a450af5bd218ea9Kristian Monsen  assertTrue(array.hasOwnProperty(2));
14925f6136652d8341ed047e7fc1a450af5bd218ea9Kristian Monsen
15025f6136652d8341ed047e7fc1a450af5bd218ea9Kristian Monsen  // ... so they are not affected be delete.
15125f6136652d8341ed047e7fc1a450af5bd218ea9Kristian Monsen  assertEquals(array[0], at0);
15225f6136652d8341ed047e7fc1a450af5bd218ea9Kristian Monsen  assertEquals(array[1], undefined);
15325f6136652d8341ed047e7fc1a450af5bd218ea9Kristian Monsen  assertEquals(array[2], at2);
15425f6136652d8341ed047e7fc1a450af5bd218ea9Kristian Monsen})();
15525f6136652d8341ed047e7fc1a450af5bd218ea9Kristian Monsen
15625f6136652d8341ed047e7fc1a450af5bd218ea9Kristian Monsen
15725f6136652d8341ed047e7fc1a450af5bd218ea9Kristian Monsen// Now check the case with array of holes and some elements on prototype.
15825f6136652d8341ed047e7fc1a450af5bd218ea9Kristian Monsen(function() {
15925f6136652d8341ed047e7fc1a450af5bd218ea9Kristian Monsen  var len = 9;
16025f6136652d8341ed047e7fc1a450af5bd218ea9Kristian Monsen  var array = new Array(len);
16125f6136652d8341ed047e7fc1a450af5bd218ea9Kristian Monsen  var array_proto = []
16225f6136652d8341ed047e7fc1a450af5bd218ea9Kristian Monsen  array_proto[3] = "@3";
16325f6136652d8341ed047e7fc1a450af5bd218ea9Kristian Monsen  array_proto[7] = "@7";
16425f6136652d8341ed047e7fc1a450af5bd218ea9Kristian Monsen  array.__proto__ = array_proto;
16525f6136652d8341ed047e7fc1a450af5bd218ea9Kristian Monsen
16625f6136652d8341ed047e7fc1a450af5bd218ea9Kristian Monsen  assertEquals(len, array.length);
16725f6136652d8341ed047e7fc1a450af5bd218ea9Kristian Monsen  for (var i = 0; i < array.length; i++) {
16825f6136652d8341ed047e7fc1a450af5bd218ea9Kristian Monsen    assertEquals(array[i], array_proto[i]);
16925f6136652d8341ed047e7fc1a450af5bd218ea9Kristian Monsen  }
17025f6136652d8341ed047e7fc1a450af5bd218ea9Kristian Monsen
17125f6136652d8341ed047e7fc1a450af5bd218ea9Kristian Monsen  assertEquals(len + 1, array.unshift('head'));
17225f6136652d8341ed047e7fc1a450af5bd218ea9Kristian Monsen
17325f6136652d8341ed047e7fc1a450af5bd218ea9Kristian Monsen  assertEquals(len + 1, array.length);
17425f6136652d8341ed047e7fc1a450af5bd218ea9Kristian Monsen  // Note that unshift copies values from prototype into the array.
17525f6136652d8341ed047e7fc1a450af5bd218ea9Kristian Monsen  assertEquals(array[4], array_proto[3]);
17625f6136652d8341ed047e7fc1a450af5bd218ea9Kristian Monsen  assertTrue(array.hasOwnProperty(4));
17725f6136652d8341ed047e7fc1a450af5bd218ea9Kristian Monsen
17825f6136652d8341ed047e7fc1a450af5bd218ea9Kristian Monsen  assertEquals(array[8], array_proto[7]);
17925f6136652d8341ed047e7fc1a450af5bd218ea9Kristian Monsen  assertTrue(array.hasOwnProperty(8));
18025f6136652d8341ed047e7fc1a450af5bd218ea9Kristian Monsen
18125f6136652d8341ed047e7fc1a450af5bd218ea9Kristian Monsen  // ... but keeps the rest as holes:
18225f6136652d8341ed047e7fc1a450af5bd218ea9Kristian Monsen  array_proto[5] = "@5";
18325f6136652d8341ed047e7fc1a450af5bd218ea9Kristian Monsen  assertEquals(array[5], array_proto[5]);
18425f6136652d8341ed047e7fc1a450af5bd218ea9Kristian Monsen  assertFalse(array.hasOwnProperty(5));
18525f6136652d8341ed047e7fc1a450af5bd218ea9Kristian Monsen
18625f6136652d8341ed047e7fc1a450af5bd218ea9Kristian Monsen  assertEquals(array[3], array_proto[3]);
18725f6136652d8341ed047e7fc1a450af5bd218ea9Kristian Monsen  assertFalse(array.hasOwnProperty(3));
18825f6136652d8341ed047e7fc1a450af5bd218ea9Kristian Monsen
18925f6136652d8341ed047e7fc1a450af5bd218ea9Kristian Monsen  assertEquals(array[7], array_proto[7]);
19025f6136652d8341ed047e7fc1a450af5bd218ea9Kristian Monsen  assertFalse(array.hasOwnProperty(7));
19125f6136652d8341ed047e7fc1a450af5bd218ea9Kristian Monsen})();
19225f6136652d8341ed047e7fc1a450af5bd218ea9Kristian Monsen
193402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// Check the behaviour when approaching maximal values for length.
194402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu(function() {
195402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu  for (var i = 0; i < 7; i++) {
196402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu    try {
197402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu      new Array((1 << 32) - 3).unshift(1, 2, 3, 4, 5);
198402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu      throw 'Should have thrown RangeError';
199402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu    } catch (e) {
200402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu      assertTrue(e instanceof RangeError);
201402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu    }
202402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu
203402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu    // Check smi boundary
204402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu    var bigNum = (1 << 30) - 3;
205402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu    assertEquals(bigNum + 7, new Array(bigNum).unshift(1, 2, 3, 4, 5, 6, 7));
206402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu  }
207402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu})();
2086ded16be15dd865a9b21ea304d5273c8be299c87Steve Block
2096ded16be15dd865a9b21ea304d5273c8be299c87Steve Block(function() {
2106ded16be15dd865a9b21ea304d5273c8be299c87Steve Block  for (var i = 0; i < 7; i++) {
2116ded16be15dd865a9b21ea304d5273c8be299c87Steve Block    var a = [6, 7, 8, 9];
2126ded16be15dd865a9b21ea304d5273c8be299c87Steve Block    a.unshift(1, 2, 3, 4, 5);
2136ded16be15dd865a9b21ea304d5273c8be299c87Steve Block    assertEquals([1, 2, 3, 4, 5, 6, 7, 8, 9], a);
2146ded16be15dd865a9b21ea304d5273c8be299c87Steve Block  }
2156ded16be15dd865a9b21ea304d5273c8be299c87Steve Block})();
216