array_splice2.js 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241
  1. //-------------------------------------------------------------------------------------------------------
  2. // Copyright (C) Microsoft. All rights reserved.
  3. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
  4. //-------------------------------------------------------------------------------------------------------
  5. function write(args)
  6. {
  7. WScript.Echo(args);
  8. }
  9. var a;
  10. var b;
  11. write("Scenario 1");
  12. a = [];
  13. a.length = 20;
  14. b = a.splice(0,1,10);
  15. write(a);
  16. write(b);
  17. write("Scenario 2");
  18. a = [];
  19. a.length = 20;
  20. b = a.splice(0,0,10);
  21. write(a);
  22. write(b);
  23. write("Scenario 3");
  24. a = [];
  25. a.length = 20;
  26. b = a.splice(0,10);
  27. write(a);
  28. write(b);
  29. write("Scenario 4");
  30. a = [];
  31. a.length = 20;
  32. b = a.splice(0,1,1);
  33. write(a);
  34. write(b);
  35. write("Scenario 5");
  36. a = [];
  37. a.length = 20;
  38. b = a.splice(10,1,1);
  39. write(a);
  40. write(b);
  41. write("Scenario 6");
  42. a = [];
  43. b = a.splice(0,1,1);
  44. write(a);
  45. write(b);
  46. write("Scenario 7");
  47. a = [];
  48. a[10] = 10;
  49. a[15] = 20;
  50. b = a.splice(10,1);
  51. write(a);
  52. write(b);
  53. write("Scenario 8");
  54. a = [];
  55. a[10] = 10;
  56. a[15] = 20;
  57. b = a.splice(10,5);
  58. write(a);
  59. write(b);
  60. write("Scenario 9");
  61. a = [];
  62. a[10] = 10;
  63. a[15] = 20;
  64. b = a.splice(10,5,20);
  65. write(a);
  66. write(b);
  67. write("Scenario 10");
  68. a = [];
  69. a[10] = 10;
  70. a[15] = 20;
  71. b = a.splice(10,5,20);
  72. write(a);
  73. write(b);
  74. write("Scenario 11");
  75. a = [];
  76. a[10] = 10;
  77. a[15] = 20;
  78. b = a.splice(10,10,20);
  79. write(a);
  80. write(b);
  81. write("Scenario 12");
  82. a = [];
  83. a[10] = 10;
  84. a[15] = 20;
  85. b = a.splice(10,1,20,30,40);
  86. write(a);
  87. write(b);
  88. write("Scenario 13");
  89. a = [];
  90. a[10] = 10;
  91. a[15] = 20;
  92. b = a.splice(10,0,20,30,40);
  93. write(a);
  94. write(b);
  95. write("Scenario 13");
  96. a = [];
  97. a[10] = 10;
  98. a[15] = 20;
  99. b = a.splice(10,6,20,30,40,50,60,70);
  100. write(a);
  101. write(b);
  102. write("Scenario 14");
  103. a = [];
  104. a[10] = 10;
  105. a[15] = 20;
  106. b = a.splice(10,6,20,30,40,50,60,70);
  107. write(a);
  108. write(b);
  109. write("Scenario 15");
  110. a = [];
  111. a[10] = 10;
  112. a[15] = 20;
  113. b = a.splice(10,10,20,30,40,50,60,70);
  114. write(a);
  115. write(b);
  116. write("Scenario 15");
  117. a = [];
  118. a[10] = 10;
  119. a[11] = 11;
  120. a[15] = 20;
  121. a[16] = 21;
  122. b = a.splice(10,10,20,30,40,50,60,70);
  123. write(a);
  124. write(b);
  125. write("Scenario 16");
  126. a = [];
  127. a[40] = 123; // creates a 2nd segment
  128. b = a.splice(30, 11); // splice in between the 2 segments
  129. write(a);
  130. write(b);
  131. //------ overflow tests ---------
  132. function echo(v) {
  133. WScript.Echo(v);
  134. }
  135. function guarded_call(func) {
  136. try {
  137. func();
  138. } catch (e) {
  139. echo(e.name + " : " + e.message);
  140. }
  141. }
  142. function dump_array(arr) {
  143. echo("length: " + arr.length);
  144. for (var p in arr) {
  145. if (+p == p) {
  146. echo(" " + p + ": " + arr[p]);
  147. }
  148. }
  149. }
  150. echo("--- splice overflow 1");
  151. var a = [];
  152. guarded_call(function () {
  153. a[4294967290] = 100;
  154. a.splice(4294967294, 0, 200, 201, 202, 203, 204);
  155. });
  156. dump_array(a);
  157. echo("--- splice overflow 2");
  158. var a = [];
  159. guarded_call(function () {
  160. var base = 4294967290;
  161. for (var i = 0; i < 10; i++) {
  162. a[base + i] = 100 + i;
  163. }
  164. a.splice(4294967290, 0, 200, 201, 202, 203, 204, 205, 206);
  165. });
  166. dump_array(a);
  167. echo("--- splice overflow 3");
  168. var a = [];
  169. guarded_call(function () {
  170. var base = 4294967290;
  171. for (var i = 0; i < 10; i++) {
  172. a[base + i] = 100 + i;
  173. }
  174. delete a[base + 3];
  175. a.splice(4294967290, 0, 200, 201, 202, 203, 204, 205, 206);
  176. });
  177. dump_array(a);
  178. echo("--- splice overflow 3");
  179. var a = [];
  180. guarded_call(function () {
  181. var base = 4294967290;
  182. for (var i = 0; i < 10; i++) {
  183. a[base + i] = 100 + i;
  184. }
  185. delete a[base + 3];
  186. a.splice(4294967290, 2);
  187. });
  188. dump_array(a);
  189. echo("--- splice object overflow");
  190. Object.prototype.splice = Array.prototype.splice;
  191. var obj = new Object();
  192. obj.length = 4294967295;
  193. obj[4294967294] = "Eze";
  194. var arr = obj.splice(4294967293, 4294967295, 1, 2, 3);
  195. echo(obj.length);
  196. echo("--- splice object delete");
  197. Object.prototype.splice = Array.prototype.splice;
  198. var obj = new Object();
  199. for (var i = 0; i < 10; i++) {
  200. obj[i] = 100 + i;
  201. }
  202. obj.length = 10;
  203. delete obj[4];
  204. dump_array(obj);
  205. obj.splice(0, 0, 200, 201);
  206. dump_array(obj);