Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(645)

Side by Side Diff: test/mjsunit/array-splice.js

Issue 1873833002: [elements] Add more tests to increase coverage (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « test/mjsunit/array-push.js ('k') | test/mjsunit/delete.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2010 the V8 project authors. All rights reserved. 1 // Copyright 2010 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 282 matching lines...) Expand 10 before | Expand all | Expand 10 after
293 // When we start splice, array is [0 .. 2*i - 1], so we get 293 // When we start splice, array is [0 .. 2*i - 1], so we get
294 // as a result [2*i], this element is removed from the array, 294 // as a result [2*i], this element is removed from the array,
295 // but [2 * i, 2 * i + 1] are added. 295 // but [2 * i, 2 * i + 1] are added.
296 assertEquals([2 * i - 1], spliced); 296 assertEquals([2 * i - 1], spliced);
297 assertEquals(2 * i, array[i]); 297 assertEquals(2 * i, array[i]);
298 assertEquals(2 * i + 1, array[i + 1]); 298 assertEquals(2 * i + 1, array[i + 1]);
299 } 299 }
300 } 300 }
301 })(); 301 })();
302 302
303 // Check the behaviour when approaching maximal values for length.
304 (function() {
305 for (var i = 0; i < 7; i++) {
306 try {
307 new Array(Math.pow(2, 32) - 3).splice(-1, 0, 1, 2, 3, 4, 5);
308 throw 'Should have thrown RangeError';
309 } catch (e) {
310 assertTrue(e instanceof RangeError);
311 }
neis 2016/04/08 15:21:43 Can't you just say assertThrows(() => new Array(..
312
313 // Check smi boundary
314 var bigNum = (1 << 30) - 3;
315 var array = new Array(bigNum);
316 array.splice(-1, 0, 1, 2, 3, 4, 5, 6, 7);
317 assertEquals(bigNum + 7, array.length);
318 }
319 })();
320
321 (function() {
322 for (var i = 0; i < 7; i++) {
323 var a = [7, 8, 9];
324 a.splice(0, 0, 1, 2, 3, 4, 5, 6);
325 assertEquals([1, 2, 3, 4, 5, 6, 7, 8, 9], a);
326 assertFalse(a.hasOwnProperty(10), "a.hasOwnProperty(10)");
327 assertEquals(undefined, a[10]);
328 }
329 })();
330
331 (function testSpliceDeleteDouble() {
332 var a = [1.1, 1.2, 1.3, 1.4];
333 a.splice(2, 1)
334 assertEquals([1.1, 1.2, 1.4], a);
335 })();
336
337 // Past this point the ArrayProtector is invalidated since we modify the
338 // Array.prototype.
339
340 // Check the case of JS builtin .splice()
341 (function() {
342 for (var i = 0; i < 7; i++) {
343 var array = [1, 2, 3, 4];
344 Array.prototype[3] = 'foo'; // To force JS builtin.
345
346 var spliced = array.splice();
347
348 assertEquals([], spliced);
349 assertEquals([1, 2, 3, 4], array);
350 }
351 })();
303 352
304 // Now check the case with array of holes and some elements on prototype. 353 // Now check the case with array of holes and some elements on prototype.
305 (function() { 354 (function() {
306 var len = 9; 355 var len = 9;
307 356
308 var at3 = "@3"; 357 var at3 = "@3";
309 var at7 = "@7"; 358 var at7 = "@7";
310 359
311 for (var i = 0; i < 7; i++) { 360 for (var i = 0; i < 7; i++) {
312 var array = new Array(len); 361 var array = new Array(len);
(...skipping 30 matching lines...) Expand all
343 // and now check couple of indices above length. 392 // and now check couple of indices above length.
344 assertFalse(array.hasOwnProperty(10), "array.hasOwnProperty(10)"); 393 assertFalse(array.hasOwnProperty(10), "array.hasOwnProperty(10)");
345 assertFalse(array.hasOwnProperty(15), "array.hasOwnProperty(15)"); 394 assertFalse(array.hasOwnProperty(15), "array.hasOwnProperty(15)");
346 assertFalse(array.hasOwnProperty(31), "array.hasOwnProperty(31)"); 395 assertFalse(array.hasOwnProperty(31), "array.hasOwnProperty(31)");
347 assertFalse(array.hasOwnProperty(63), "array.hasOwnProperty(63)"); 396 assertFalse(array.hasOwnProperty(63), "array.hasOwnProperty(63)");
348 assertFalse(array.hasOwnProperty(Math.pow(2, 32) - 2), 397 assertFalse(array.hasOwnProperty(Math.pow(2, 32) - 2),
349 "array.hasOwnProperty(Math.pow(2, 32) - 2)"); 398 "array.hasOwnProperty(Math.pow(2, 32) - 2)");
350 } 399 }
351 })(); 400 })();
352 401
353
354 // Now check the case with array of holes and some elements on prototype. 402 // Now check the case with array of holes and some elements on prototype.
355 (function() { 403 (function() {
356 var len = 9; 404 var len = 9;
357 405
358 var at3 = "@3"; 406 var at3 = "@3";
359 var at7 = "@7"; 407 var at7 = "@7";
360 408
361 for (var i = 0; i < 7; i++) { 409 for (var i = 0; i < 7; i++) {
362 var array = new Array(len); 410 var array = new Array(len);
363 Array.prototype[3] = at3; 411 Array.prototype[3] = at3;
(...skipping 26 matching lines...) Expand all
390 438
391 // and now check couple of indices above length. 439 // and now check couple of indices above length.
392 assertFalse(array.hasOwnProperty(10), "array.hasOwnProperty(10)"); 440 assertFalse(array.hasOwnProperty(10), "array.hasOwnProperty(10)");
393 assertFalse(array.hasOwnProperty(15), "array.hasOwnProperty(15)"); 441 assertFalse(array.hasOwnProperty(15), "array.hasOwnProperty(15)");
394 assertFalse(array.hasOwnProperty(31), "array.hasOwnProperty(31)"); 442 assertFalse(array.hasOwnProperty(31), "array.hasOwnProperty(31)");
395 assertFalse(array.hasOwnProperty(63), "array.hasOwnProperty(63)"); 443 assertFalse(array.hasOwnProperty(63), "array.hasOwnProperty(63)");
396 assertFalse(array.hasOwnProperty(Math.pow(2, 32) - 2), 444 assertFalse(array.hasOwnProperty(Math.pow(2, 32) - 2),
397 "array.hasOwnProperty(Math.pow(2, 32) - 2)"); 445 "array.hasOwnProperty(Math.pow(2, 32) - 2)");
398 } 446 }
399 })(); 447 })();
400
401
402 // Check the case of JS builtin .splice()
403 (function() {
404 for (var i = 0; i < 7; i++) {
405 var array = [1, 2, 3, 4];
406 Array.prototype[3] = 'foo'; // To force JS builtin.
407
408 var spliced = array.splice();
409
410 assertEquals([], spliced);
411 assertEquals([1, 2, 3, 4], array);
412 }
413 })();
414
415
416 // Check the behaviour when approaching maximal values for length.
417 (function() {
418 for (var i = 0; i < 7; i++) {
419 try {
420 new Array(Math.pow(2, 32) - 3).splice(-1, 0, 1, 2, 3, 4, 5);
421 throw 'Should have thrown RangeError';
422 } catch (e) {
423 assertTrue(e instanceof RangeError);
424 }
425
neis 2016/04/08 15:21:43 Ok now I see that you only moved this around :o
426 // Check smi boundary
427 var bigNum = (1 << 30) - 3;
428 var array = new Array(bigNum);
429 array.splice(-1, 0, 1, 2, 3, 4, 5, 6, 7);
430 assertEquals(bigNum + 7, array.length);
431 }
432 })();
433
434 (function() {
435 for (var i = 0; i < 7; i++) {
436 var a = [7, 8, 9];
437 a.splice(0, 0, 1, 2, 3, 4, 5, 6);
438 assertEquals([1, 2, 3, 4, 5, 6, 7, 8, 9], a);
439 assertFalse(a.hasOwnProperty(10), "a.hasOwnProperty(10)");
440 assertEquals(undefined, a[10]);
441 }
442 })();
OLDNEW
« no previous file with comments | « test/mjsunit/array-push.js ('k') | test/mjsunit/delete.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698