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

Side by Side Diff: test/mjsunit/harmony/array-concat.js

Issue 799853003: Use proper ToLength() operation in %ArrayConcat() (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Try ToUint32 before calling JS ToLength() Created 6 years 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
« src/runtime/runtime-array.cc ('K') | « src/runtime/runtime-array.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Flags: --harmony-arrays --harmony-classes 5 // Flags: --harmony-arrays --harmony-classes
6 6
7 (function testArrayConcatArity() { 7 (function testArrayConcatArity() {
8 "use strict"; 8 "use strict";
9 assertEquals(1, Array.prototype.concat.length); 9 assertEquals(1, Array.prototype.concat.length);
10 })(); 10 })();
(...skipping 22 matching lines...) Expand all
33 }; 33 };
34 obj[Symbol.isConcatSpreadable] = true; 34 obj[Symbol.isConcatSpreadable] = true;
35 var obj2 = { length: 3, "0": "0", "1": "1", "2": "2" }; 35 var obj2 = { length: 3, "0": "0", "1": "1", "2": "2" };
36 var arr = ["X", "Y", "Z"]; 36 var arr = ["X", "Y", "Z"];
37 assertEquals([void 0, "A", void 0, "B", void 0, "C", 37 assertEquals([void 0, "A", void 0, "B", void 0, "C",
38 { "length": 3, "0": "0", "1": "1", "2": "2" }, 38 { "length": 3, "0": "0", "1": "1", "2": "2" },
39 "X", "Y", "Z"], Array.prototype.concat.call(obj, obj2, arr)); 39 "X", "Y", "Z"], Array.prototype.concat.call(obj, obj2, arr));
40 })(); 40 })();
41 41
42 42
43 (function testConcatArrayLikeStringLength() {
44 "use strict";
45 var obj = {
46 "length": "6",
47 "1": "A",
48 "3": "B",
49 "5": "C"
50 };
51 obj[Symbol.isConcatSpreadable] = true;
52 var obj2 = { length: 3, "0": "0", "1": "1", "2": "2" };
53 var arr = ["X", "Y", "Z"];
54 assertEquals([void 0, "A", void 0, "B", void 0, "C",
55 { "length": 3, "0": "0", "1": "1", "2": "2" },
56 "X", "Y", "Z"], Array.prototype.concat.call(obj, obj2, arr));
57 })();
58
59
60 (function testConcatArrayLikeNegativeLength() {
61 "use strict";
62 var obj = {
63 "length": -6,
64 "1": "A",
65 "3": "B",
66 "5": "C"
67 };
68 obj[Symbol.isConcatSpreadable] = true;
69 assertEquals([], [].concat(obj));
70 obj.length = -6.7;
71 assertEquals([], [].concat(obj));
72 obj.length = "-6";
73 assertEquals([], [].concat(obj));
74 })();
75
76
77 (function testConcatArrayLikeToLengthThrows() {
78 "use strict";
79 var obj = {
80 "length": {valueOf: null, toString: null},
Dmitry Lomov (no reviews) 2014/12/15 07:23:51 Add a test where `toString` and `valueOf` throw an
caitp (gmail) 2014/12/15 18:15:29 Done
81 "1": "A",
82 "3": "B",
83 "5": "C"
84 };
85 obj[Symbol.isConcatSpreadable] = true;
86 var obj2 = { length: 3, "0": "0", "1": "1", "2": "2" };
87 var arr = ["X", "Y", "Z"];
88 assertThrows(function() {
89 Array.prototype.concat.call(obj, obj2, arr);
90 }, TypeError);
91 })();
92
93
43 (function testConcatHoleyArray() { 94 (function testConcatHoleyArray() {
44 "use strict"; 95 "use strict";
45 var arr = []; 96 var arr = [];
46 arr[4] = "Item 4"; 97 arr[4] = "Item 4";
47 arr[8] = "Item 8"; 98 arr[8] = "Item 8";
48 var arr2 = [".", "!", "?"]; 99 var arr2 = [".", "!", "?"];
49 assertEquals([void 0, void 0, void 0, void 0, "Item 4", void 0, void 0, 100 assertEquals([void 0, void 0, void 0, void 0, "Item 4", void 0, void 0,
50 void 0, "Item 8", ".", "!", "?"], arr.concat(arr2)); 101 void 0, "Item 8", ".", "!", "?"], arr.concat(arr2));
51 })(); 102 })();
52 103
(...skipping 351 matching lines...) Expand 10 before | Expand all | Expand 10 after
404 arr3.length = 10000; 455 arr3.length = 10000;
405 for (var i = 0; i < 100; i++) { 456 for (var i = 0; i < 100; i++) {
406 Object.defineProperty(arr3, i * i, {get: mkGetter(i)}); 457 Object.defineProperty(arr3, i * i, {get: mkGetter(i)});
407 expectedTrace[i] = i; 458 expectedTrace[i] = i;
408 expectedTrace[100 + i] = i; 459 expectedTrace[100 + i] = i;
409 } 460 }
410 var r4 = [0].concat(arr3, arr3); 461 var r4 = [0].concat(arr3, arr3);
411 assertEquals(1 + arr3.length * 2, r4.length); 462 assertEquals(1 + arr3.length * 2, r4.length);
412 assertEquals(expectedTrace, trace); 463 assertEquals(expectedTrace, trace);
413 })(); 464 })();
OLDNEW
« src/runtime/runtime-array.cc ('K') | « src/runtime/runtime-array.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698