blob: 5839c758b166593c70c327dc4d894d0c1facc42c [file] [log] [blame]
//-------------------------------------------------------------------------------------------------------
// Copyright (C) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
//-------------------------------------------------------------------------------------------------------
function echo(v) {
WScript.Echo(v);
}
function guarded_call(func) {
try {
func();
} catch (e) {
echo(e.name + " : " + e.message);
}
}
function dump_array(arr) {
echo("length: " + arr.length);
for (var p in arr) {
echo(" " + p + ": " + arr[p]);
}
}
function test_concat(size) {
guarded_call(function () {
var arr = new Array(size);
arr[size - 1] = 100;
echo("- concat 101, 102, 103, 104, 105");
arr = arr.concat(101, 102, 103, 104, 105);
dump_array(arr);
echo("- arr.concat(arr)");
arr = arr.concat(arr);
dump_array(arr);
});
}
echo("-------concat Small-------------");
test_concat(2147483642);
// Fix for MSRC 33319 changes concat to skip a fast path if the index we're copying into is a BigIndex.
// Disable the large portion of this test since this change makes such a test run for hours.
//echo("-------concat Large-------------");
//test_concat(4294967294);
echo("-------test prototype lookup-------------");
for (var i = 0; i < 10; i++) {
Array.prototype[i] = 100 + i;
}
delete Array.prototype[3];
var a = [200, 201, 202, 203, 204];
delete a[1];
a[7] = 207;
echo("a: " + a);
var r = a.concat(300, 301, 302, 303, 304);
echo("r: " + r);
delete r[8];
echo("r: " + r); // Now r[8] should come from prototype
for (var i = 0; i < 10; i++) {
delete Array.prototype[i];
}
echo("r: " + r); // r[8] gone, other entries not affected (verify not from prototype)