| //------------------------------------------------------------------------------------------------------- |
| // Copyright (C) Microsoft. All rights reserved. |
| // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. |
| //------------------------------------------------------------------------------------------------------- |
| |
| function write(args) |
| { |
| WScript.Echo(args); |
| } |
| |
| var a; |
| var b; |
| |
| write("Scenario 1"); |
| a = []; |
| a.length = 20; |
| b = a.splice(0,1,10); |
| write(a); |
| write(b); |
| |
| write("Scenario 2"); |
| a = []; |
| a.length = 20; |
| b = a.splice(0,0,10); |
| write(a); |
| write(b); |
| |
| write("Scenario 3"); |
| a = []; |
| a.length = 20; |
| b = a.splice(0,10); |
| write(a); |
| write(b); |
| |
| write("Scenario 4"); |
| a = []; |
| a.length = 20; |
| b = a.splice(0,1,1); |
| write(a); |
| write(b); |
| |
| write("Scenario 5"); |
| a = []; |
| a.length = 20; |
| b = a.splice(10,1,1); |
| write(a); |
| write(b); |
| |
| |
| write("Scenario 6"); |
| a = []; |
| b = a.splice(0,1,1); |
| write(a); |
| write(b); |
| |
| |
| write("Scenario 7"); |
| a = []; |
| a[10] = 10; |
| a[15] = 20; |
| b = a.splice(10,1); |
| write(a); |
| write(b); |
| |
| |
| write("Scenario 8"); |
| a = []; |
| a[10] = 10; |
| a[15] = 20; |
| b = a.splice(10,5); |
| write(a); |
| write(b); |
| |
| |
| write("Scenario 9"); |
| a = []; |
| a[10] = 10; |
| a[15] = 20; |
| b = a.splice(10,5,20); |
| write(a); |
| write(b); |
| |
| write("Scenario 10"); |
| a = []; |
| a[10] = 10; |
| a[15] = 20; |
| b = a.splice(10,5,20); |
| write(a); |
| write(b); |
| |
| write("Scenario 11"); |
| a = []; |
| a[10] = 10; |
| a[15] = 20; |
| b = a.splice(10,10,20); |
| write(a); |
| write(b); |
| |
| write("Scenario 12"); |
| a = []; |
| a[10] = 10; |
| a[15] = 20; |
| b = a.splice(10,1,20,30,40); |
| write(a); |
| write(b); |
| |
| write("Scenario 13"); |
| a = []; |
| a[10] = 10; |
| a[15] = 20; |
| b = a.splice(10,0,20,30,40); |
| write(a); |
| write(b); |
| |
| write("Scenario 13"); |
| a = []; |
| a[10] = 10; |
| a[15] = 20; |
| b = a.splice(10,6,20,30,40,50,60,70); |
| write(a); |
| write(b); |
| |
| write("Scenario 14"); |
| a = []; |
| a[10] = 10; |
| a[15] = 20; |
| b = a.splice(10,6,20,30,40,50,60,70); |
| write(a); |
| write(b); |
| |
| write("Scenario 15"); |
| a = []; |
| a[10] = 10; |
| a[15] = 20; |
| b = a.splice(10,10,20,30,40,50,60,70); |
| write(a); |
| write(b); |
| |
| write("Scenario 15"); |
| a = []; |
| a[10] = 10; |
| a[11] = 11; |
| a[15] = 20; |
| a[16] = 21; |
| b = a.splice(10,10,20,30,40,50,60,70); |
| write(a); |
| write(b); |
| |
| write("Scenario 16"); |
| a = []; |
| a[40] = 123; // creates a 2nd segment |
| b = a.splice(30, 11); // splice in between the 2 segments |
| write(a); |
| write(b); |
| |
| |
| //------ overflow tests --------- |
| 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) { |
| if (+p == p) { |
| echo(" " + p + ": " + arr[p]); |
| } |
| } |
| } |
| |
| echo("--- splice overflow 1"); |
| var a = []; |
| guarded_call(function () { |
| a[4294967290] = 100; |
| a.splice(4294967294, 0, 200, 201, 202, 203, 204); |
| }); |
| dump_array(a); |
| |
| echo("--- splice overflow 2"); |
| var a = []; |
| guarded_call(function () { |
| var base = 4294967290; |
| for (var i = 0; i < 10; i++) { |
| a[base + i] = 100 + i; |
| } |
| a.splice(4294967290, 0, 200, 201, 202, 203, 204, 205, 206); |
| }); |
| dump_array(a); |
| |
| echo("--- splice overflow 3"); |
| var a = []; |
| guarded_call(function () { |
| var base = 4294967290; |
| for (var i = 0; i < 10; i++) { |
| a[base + i] = 100 + i; |
| } |
| delete a[base + 3]; |
| a.splice(4294967290, 0, 200, 201, 202, 203, 204, 205, 206); |
| }); |
| dump_array(a); |
| |
| echo("--- splice overflow 3"); |
| var a = []; |
| guarded_call(function () { |
| var base = 4294967290; |
| for (var i = 0; i < 10; i++) { |
| a[base + i] = 100 + i; |
| } |
| delete a[base + 3]; |
| a.splice(4294967290, 2); |
| }); |
| dump_array(a); |
| |
| |
| echo("--- splice object overflow"); |
| Object.prototype.splice = Array.prototype.splice; |
| var obj = new Object(); |
| obj.length = 4294967295; |
| obj[4294967294] = "Eze"; |
| var arr = obj.splice(4294967293, 4294967295, 1, 2, 3); |
| echo(obj.length); |
| |
| echo("--- splice object delete"); |
| Object.prototype.splice = Array.prototype.splice; |
| var obj = new Object(); |
| for (var i = 0; i < 10; i++) { |
| obj[i] = 100 + i; |
| } |
| obj.length = 10; |
| delete obj[4]; |
| dump_array(obj); |
| obj.splice(0, 0, 200, 201); |
| dump_array(obj); |