| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241 |
- //-------------------------------------------------------------------------------------------------------
- // 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);
|