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

Side by Side Diff: test/mjsunit/harmony/spread-call.js

Issue 938443002: [es6] implement spread calls (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Add more variations to evaluation order tests Created 5 years, 9 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
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 // Flags: --harmony-spreadcalls
6
7 (function testSpreadCallsStrict() {
8 "use strict"
9 function countArgs() { return arguments.length; }
10
11 // Test this argument
12 function returnThis() { return this; }
13 assertEquals(void 0, returnThis(..."test"));
14
15 // Test argument counting with different iterables
16 assertEquals(0, countArgs(...""));
17 assertEquals(1, countArgs(..."t"));
18 assertEquals(2, countArgs(..."te"));
19 assertEquals(3, countArgs(..."tes"));
20 assertEquals(4, countArgs(..."test"));
21 assertEquals(4, countArgs(..."tes", ..."t"));
22 assertEquals(4, countArgs("t", ..."es", "t"));
23 assertEquals(5, countArgs(..."test!"));
24 assertEquals(5, countArgs(..."tes", ..."t!"));
25 assertEquals(6, countArgs(..."test!!"));
26 assertEquals(6, countArgs(..."tes", ..."t!!"));
27
28 assertEquals(1, countArgs(...[1]));
29 assertEquals(2, countArgs(...[1, 2]));
30 assertEquals(3, countArgs(...[1, 2, 3]));
31 assertEquals(4, countArgs(...[1, 2, 3, 4]));
32 assertEquals(5, countArgs(...[1, 2, 3, 4, 5]));
33 assertEquals(6, countArgs(...[1, 2, 3, 4, 5, 6]));
34
35 assertEquals(1, countArgs(...new Set([1])));
36 assertEquals(2, countArgs(...new Set([1, 2])));
37 assertEquals(3, countArgs(...new Set([1, 2, 3])));
38 assertEquals(4, countArgs(...new Set([1, 2, 3, 4])));
39 assertEquals(5, countArgs(...new Set([1, 2, 3, 4, 5])));
40 assertEquals(6, countArgs(...new Set([1, 2, 3, 4, 5, 6])));
41
42 assertEquals(3, countArgs(...(function*(){ yield 1; yield 2; yield 3; })()));
43
44 // Test values
45 function sum() {
46 var sum = arguments[0];
47 for (var i = 1; i < arguments.length; ++i) {
48 sum += arguments[i];
49 }
50 return sum;
51 }
52
53 assertEquals(void 0, sum(...""));
54 assertEquals(void 0, sum(...[]));
55 assertEquals(void 0, sum(...new Set));
56 assertEquals(void 0, sum(...(function*() { })()));
57
58 assertEquals("test", sum(..."test"));
59 assertEquals(10, sum(...[1, 2, 3, 4]));
60 assertEquals(10, sum(...[1, 2, 3], 4));
61 assertEquals(10, sum(1, ...[2, 3], 4));
62 assertEquals(10, sum(1, ...[2, 3], ...[4]));
63 assertEquals(10, sum(1, 2, ...[3, 4]));
64 assertEquals(10, sum(...new Set([1, 2, 3, 4])));
65 assertEquals(10, sum(...(function*() {
66 yield 1;
67 yield 2;
68 yield 3;
69 yield 4;
70 })()));
71
72 // nested spreads
73 function makeArray() {
74 var result = [];
75 for (var i = 0; i < arguments.length; ++i) {
76 result.push(arguments[i]);
77 }
78 return result;
79 }
80 assertEquals(10, sum(...makeArray(...[1, 2, 3, 4])));
81 assertEquals("test!!!", sum(...makeArray(..."test!!!")));
82
83 // Interleaved spread/unspread args
84 assertEquals(36, sum(0, ...[1], 2, 3, ...[4, 5], 6, 7, 8));
85 assertEquals(45, sum(0, ...[1], 2, 3, ...[4, 5], 6, 7, 8, ...[9]));
86
87 // Methods
88 var O = {
89 returnThis: returnThis,
90 countArgs: countArgs,
91 sum: sum,
92 makeArray: makeArray,
93
94 nested: {
95 returnThis: returnThis,
96 countArgs: countArgs,
97 sum: sum,
98 makeArray: makeArray
99 }
100 };
101
102 // Test this argument
103 assertEquals(O, O.returnThis(..."test"));
104 assertEquals(O, O["returnThis"](..."test"));
105 assertEquals(O.nested, O.nested.returnThis(..."test"));
106 assertEquals(O.nested, O.nested["returnThis"](..."test"));
107
108 // Test argument counting with different iterables
109 assertEquals(0, O.countArgs(...""));
110 assertEquals(1, O.countArgs(..."t"));
111 assertEquals(2, O.countArgs(..."te"));
112 assertEquals(3, O.countArgs(..."tes"));
113 assertEquals(4, O.countArgs(..."test"));
114 assertEquals(4, O.countArgs(..."tes", ..."t"));
115 assertEquals(4, O.countArgs("t", ..."es", "t"));
116 assertEquals(5, O.countArgs(..."test!"));
117 assertEquals(5, O.countArgs(..."tes", ..."t!"));
118 assertEquals(6, O.countArgs(..."test!!"));
119 assertEquals(6, O.countArgs(..."tes", ..."t!!"));
120
121 assertEquals(1, O.countArgs(...[1]));
122 assertEquals(2, O.countArgs(...[1, 2]));
123 assertEquals(3, O.countArgs(...[1, 2, 3]));
124 assertEquals(4, O.countArgs(...[1, 2, 3, 4]));
125 assertEquals(5, O.countArgs(...[1, 2, 3, 4, 5]));
126 assertEquals(6, O.countArgs(...[1, 2, 3, 4, 5, 6]));
127
128 assertEquals(1, O.countArgs(...new Set([1])));
129 assertEquals(2, O.countArgs(...new Set([1, 2])));
130 assertEquals(3, O.countArgs(...new Set([1, 2, 3])));
131 assertEquals(4, O.countArgs(...new Set([1, 2, 3, 4])));
132 assertEquals(5, O.countArgs(...new Set([1, 2, 3, 4, 5])));
133 assertEquals(6, O.countArgs(...new Set([1, 2, 3, 4, 5, 6])));
134
135 assertEquals(3, O.countArgs(...(function*(){ yield 1; yield 2; yield 3; })())) ;
136
137 // Test values
138 assertEquals(void 0, O.sum(...""));
139 assertEquals(void 0, O.sum(...[]));
140 assertEquals(void 0, O.sum(...new Set));
141 assertEquals(void 0, O.sum(...(function*() { })()));
142
143 assertEquals("test", O.sum(..."test"));
144 assertEquals(10, O.sum(...[1, 2, 3, 4]));
145 assertEquals(10, O.sum(...[1, 2, 3], 4));
146 assertEquals(10, O.sum(1, ...[2, 3], 4));
147 assertEquals(10, O.sum(1, ...[2, 3], ...[4]));
148 assertEquals(10, O.sum(1, 2, ...[3, 4]));
149 assertEquals(10, O.sum(...new Set([1, 2, 3, 4])));
150 assertEquals(10, O.sum(...(function*() {
151 yield 1;
152 yield 2;
153 yield 3;
154 yield 4;
155 })()));
156
157 // nested spreads
158 assertEquals(10, O.sum(...O.makeArray(...[1, 2, 3, 4])));
159 assertEquals("test!!!", O.sum(...O.makeArray(..."test!!!")));
160
161 // Interleaved spread/unspread args
162 assertEquals(36, O.sum(0, ...[1], 2, 3, ...[4, 5], 6, 7, 8));
163 assertEquals(45, O.sum(0, ...[1], 2, 3, ...[4, 5], 6, 7, 8, ...[9]));
164 })();
165
166
167 (function testSpreadCallsSloppy() {
168 // Test this argument
169 function returnThis() { return this; }
170 assertEquals(this, returnThis(..."test"));
171
172 function countArgs() { return arguments.length; }
173
174 // Test argument counting with different iterables
175 assertEquals(0, countArgs(...""));
176 assertEquals(1, countArgs(..."t"));
177 assertEquals(2, countArgs(..."te"));
178 assertEquals(3, countArgs(..."tes"));
179 assertEquals(4, countArgs(..."test"));
180 assertEquals(4, countArgs(..."tes", ..."t"));
181 assertEquals(4, countArgs("t", ..."es", "t"));
182 assertEquals(5, countArgs(..."test!"));
183 assertEquals(5, countArgs(..."tes", ..."t!"));
184 assertEquals(6, countArgs(..."test!!"));
185 assertEquals(6, countArgs(..."tes", ..."t!!"));
186
187 assertEquals(1, countArgs(...[1]));
188 assertEquals(2, countArgs(...[1, 2]));
189 assertEquals(3, countArgs(...[1, 2, 3]));
190 assertEquals(4, countArgs(...[1, 2, 3, 4]));
191 assertEquals(5, countArgs(...[1, 2, 3, 4, 5]));
192 assertEquals(6, countArgs(...[1, 2, 3, 4, 5, 6]));
193
194 assertEquals(1, countArgs(...new Set([1])));
195 assertEquals(2, countArgs(...new Set([1, 2])));
196 assertEquals(3, countArgs(...new Set([1, 2, 3])));
197 assertEquals(4, countArgs(...new Set([1, 2, 3, 4])));
198 assertEquals(5, countArgs(...new Set([1, 2, 3, 4, 5])));
199 assertEquals(6, countArgs(...new Set([1, 2, 3, 4, 5, 6])));
200
201 assertEquals(3, countArgs(...(function*(){ yield 1; yield 2; yield 3; })()));
202
203 // Test values
204 function sum() {
205 var sum = arguments[0];
206 for (var i = 1; i < arguments.length; ++i) {
207 sum += arguments[i];
208 }
209 return sum;
210 }
211
212 assertEquals(void 0, sum(...""));
213 assertEquals(void 0, sum(...[]));
214 assertEquals(void 0, sum(...new Set));
215 assertEquals(void 0, sum(...(function*() { })()));
216
217 assertEquals("test", sum(..."test"));
218 assertEquals(10, sum(...[1, 2, 3, 4]));
219 assertEquals(10, sum(...[1, 2, 3], 4));
220 assertEquals(10, sum(1, ...[2, 3], 4));
221 assertEquals(10, sum(1, ...[2, 3], ...[4]));
222 assertEquals(10, sum(1, 2, ...[3, 4]));
223 assertEquals(10, sum(...new Set([1, 2, 3, 4])));
224 assertEquals(10, sum(...(function*() {
225 yield 1;
226 yield 2;
227 yield 3;
228 yield 4;
229 })()));
230
231 // nested spreads
232 function makeArray() {
233 var result = [];
234 for (var i = 0; i < arguments.length; ++i) {
235 result.push(arguments[i]);
236 }
237 return result;
238 }
239 assertEquals(10, sum(...makeArray(...[1, 2, 3, 4])));
240 assertEquals("test!!!", sum(...makeArray(..."test!!!")));
241
242 // Interleaved spread/unspread args
243 assertEquals(36, sum(0, ...[1], 2, 3, ...[4, 5], 6, 7, 8));
244 assertEquals(45, sum(0, ...[1], 2, 3, ...[4, 5], 6, 7, 8, ...[9]));
245
246 // Methods
247 var O = {
248 returnThis: returnThis,
249 countArgs: countArgs,
250 sum: sum,
251 makeArray: makeArray,
252
253 nested: {
254 returnThis: returnThis,
255 countArgs: countArgs,
256 sum: sum,
257 makeArray: makeArray
258 }
259 };
260
261 // Test this argument
262 assertEquals(O, O.returnThis(..."test"));
263 assertEquals(O, O["returnThis"](..."test"));
264 assertEquals(O.nested, O.nested.returnThis(..."test"));
265 assertEquals(O.nested, O.nested["returnThis"](..."test"));
266
267 // Test argument counting with different iterables
268 assertEquals(0, O.countArgs(...""));
269 assertEquals(1, O.countArgs(..."t"));
270 assertEquals(2, O.countArgs(..."te"));
271 assertEquals(3, O.countArgs(..."tes"));
272 assertEquals(4, O.countArgs(..."test"));
273 assertEquals(4, O.countArgs(..."tes", ..."t"));
274 assertEquals(4, O.countArgs("t", ..."es", "t"));
275 assertEquals(5, O.countArgs(..."test!"));
276 assertEquals(5, O.countArgs(..."tes", ..."t!"));
277 assertEquals(6, O.countArgs(..."test!!"));
278 assertEquals(6, O.countArgs(..."tes", ..."t!!"));
279
280 assertEquals(1, O.countArgs(...[1]));
281 assertEquals(2, O.countArgs(...[1, 2]));
282 assertEquals(3, O.countArgs(...[1, 2, 3]));
283 assertEquals(4, O.countArgs(...[1, 2, 3, 4]));
284 assertEquals(5, O.countArgs(...[1, 2, 3, 4, 5]));
285 assertEquals(6, O.countArgs(...[1, 2, 3, 4, 5, 6]));
286
287 assertEquals(1, O.countArgs(...new Set([1])));
288 assertEquals(2, O.countArgs(...new Set([1, 2])));
289 assertEquals(3, O.countArgs(...new Set([1, 2, 3])));
290 assertEquals(4, O.countArgs(...new Set([1, 2, 3, 4])));
291 assertEquals(5, O.countArgs(...new Set([1, 2, 3, 4, 5])));
292 assertEquals(6, O.countArgs(...new Set([1, 2, 3, 4, 5, 6])));
293
294 assertEquals(3, O.countArgs(...(function*(){ yield 1; yield 2; yield 3; })())) ;
295
296 // Test values
297 assertEquals(void 0, O.sum(...""));
298 assertEquals(void 0, O.sum(...[]));
299 assertEquals(void 0, O.sum(...new Set));
300 assertEquals(void 0, O.sum(...(function*() { })()));
301
302 assertEquals("test", O.sum(..."test"));
303 assertEquals(10, O.sum(...[1, 2, 3, 4]));
304 assertEquals(10, O.sum(...[1, 2, 3], 4));
305 assertEquals(10, O.sum(1, ...[2, 3], 4));
306 assertEquals(10, O.sum(1, ...[2, 3], ...[4]));
307 assertEquals(10, O.sum(1, 2, ...[3, 4]));
308 assertEquals(10, O.sum(...new Set([1, 2, 3, 4])));
309 assertEquals(10, O.sum(...(function*() {
310 yield 1;
311 yield 2;
312 yield 3;
313 yield 4;
314 })()));
315
316 // nested spreads
317 assertEquals(10, O.sum(...O.makeArray(...[1, 2, 3, 4])));
318 assertEquals("test!!!", O.sum(...O.makeArray(..."test!!!")));
319
320 // Interleaved spread/unspread args
321 assertEquals(36, O.sum(0, ...[1], 2, 3, ...[4, 5], 6, 7, 8));
322 assertEquals(45, O.sum(0, ...[1], 2, 3, ...[4, 5], 6, 7, 8, ...[9]));
323 })();
324
325
326 (function testSpreadEvaluationOrder() {
327 "use strict";
328 var log = "";
329 function* gen() { log += "X"; yield 0; log += "Y"; }
330 function a() { log += "A"; }
331 function b() { log += "B"; return gen(); }
332 function* c() { log += 'C1'; yield 1; log += 'C2'; }
333 function d() { log += "D"; }
334 function e() { log += "E"; }
335 function fn() {
336 var args = [];
337 for (var i = 0; i < arguments.length; ++i) args.push(arguments[i]);
338 return args;
339 }
340
341 var result = fn(a(), ...b(), d());
342 assertEquals([undefined, 0, undefined], result);
343 assertEquals("ABXYD", log);
344
345 log = "";
346 result = fn(...b(), d());
347 assertEquals([0, undefined], result);
348 assertEquals("BXYD", log);
349
350 log = "";
351 result = fn(a(), ...b());
352 assertEquals([undefined, 0], result);
353 assertEquals("ABXY", log);
354
355 log = "";
356 result = fn(a(), ...b(), ...c(), d(), e());
357 assertEquals([undefined, 0, 1, undefined, undefined], result);
358 assertEquals("ABXYC1C2DE", log);
359
360 log = "";
361 result = fn(a(), ...b(), ...c(), d(), e(), ...b(), ...c());
362 assertEquals([undefined, 0, 1, undefined, undefined, 0, 1], result);
363 assertEquals("ABXYC1C2DEBXYC1C2", log);
364 })();
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698