OLD | NEW |
---|---|
(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 // Methods | |
84 var O = { | |
85 returnThis: returnThis, | |
86 countArgs: countArgs, | |
87 sum: sum, | |
88 makeArray: makeArray, | |
89 | |
90 nested: { | |
91 returnThis: returnThis, | |
92 countArgs: countArgs, | |
93 sum: sum, | |
94 makeArray: makeArray | |
95 } | |
96 }; | |
97 | |
98 // Test this argument | |
99 assertEquals(O, O.returnThis(..."test")); | |
100 assertEquals(O, O["returnThis"](..."test")); | |
101 assertEquals(O.nested, O.nested.returnThis(..."test")); | |
102 assertEquals(O.nested, O.nested["returnThis"](..."test")); | |
103 | |
104 // Test argument counting with different iterables | |
105 assertEquals(0, O.countArgs(..."")); | |
106 assertEquals(1, O.countArgs(..."t")); | |
107 assertEquals(2, O.countArgs(..."te")); | |
108 assertEquals(3, O.countArgs(..."tes")); | |
109 assertEquals(4, O.countArgs(..."test")); | |
110 assertEquals(4, O.countArgs(..."tes", ..."t")); | |
111 assertEquals(4, O.countArgs("t", ..."es", "t")); | |
112 assertEquals(5, O.countArgs(..."test!")); | |
113 assertEquals(5, O.countArgs(..."tes", ..."t!")); | |
114 assertEquals(6, O.countArgs(..."test!!")); | |
115 assertEquals(6, O.countArgs(..."tes", ..."t!!")); | |
116 | |
117 assertEquals(1, O.countArgs(...[1])); | |
118 assertEquals(2, O.countArgs(...[1, 2])); | |
119 assertEquals(3, O.countArgs(...[1, 2, 3])); | |
120 assertEquals(4, O.countArgs(...[1, 2, 3, 4])); | |
121 assertEquals(5, O.countArgs(...[1, 2, 3, 4, 5])); | |
122 assertEquals(6, O.countArgs(...[1, 2, 3, 4, 5, 6])); | |
123 | |
124 assertEquals(1, O.countArgs(...new Set([1]))); | |
125 assertEquals(2, O.countArgs(...new Set([1, 2]))); | |
126 assertEquals(3, O.countArgs(...new Set([1, 2, 3]))); | |
127 assertEquals(4, O.countArgs(...new Set([1, 2, 3, 4]))); | |
128 assertEquals(5, O.countArgs(...new Set([1, 2, 3, 4, 5]))); | |
129 assertEquals(6, O.countArgs(...new Set([1, 2, 3, 4, 5, 6]))); | |
130 | |
131 assertEquals(3, O.countArgs(...(function*(){ yield 1; yield 2; yield 3; })())) ; | |
132 | |
133 // Test values | |
134 assertEquals(void 0, O.sum(..."")); | |
135 assertEquals(void 0, O.sum(...[])); | |
136 assertEquals(void 0, O.sum(...new Set)); | |
137 assertEquals(void 0, O.sum(...(function*() { })())); | |
138 | |
139 assertEquals("test", O.sum(..."test")); | |
140 assertEquals(10, O.sum(...[1, 2, 3, 4])); | |
141 assertEquals(10, O.sum(...[1, 2, 3], 4)); | |
142 assertEquals(10, O.sum(1, ...[2, 3], 4)); | |
143 assertEquals(10, O.sum(1, ...[2, 3], ...[4])); | |
144 assertEquals(10, O.sum(1, 2, ...[3, 4])); | |
145 assertEquals(10, O.sum(...new Set([1, 2, 3, 4]))); | |
146 assertEquals(10, O.sum(...(function*() { | |
147 yield 1; | |
148 yield 2; | |
149 yield 3; | |
150 yield 4; | |
151 })())); | |
152 | |
153 // nested spreads | |
154 assertEquals(10, O.sum(...O.makeArray(...[1, 2, 3, 4]))); | |
155 assertEquals("test!!!", O.sum(...O.makeArray(..."test!!!"))); | |
156 })(); | |
157 | |
158 | |
159 (function testSpreadCallsSloppy() { | |
160 function countArgs() { return arguments.length; } | |
161 | |
162 // Test argument counting with different iterables | |
163 assertEquals(0, countArgs(..."")); | |
164 assertEquals(1, countArgs(..."t")); | |
165 assertEquals(2, countArgs(..."te")); | |
166 assertEquals(3, countArgs(..."tes")); | |
167 assertEquals(4, countArgs(..."test")); | |
168 assertEquals(4, countArgs(..."tes", ..."t")); | |
169 assertEquals(4, countArgs("t", ..."es", "t")); | |
170 assertEquals(5, countArgs(..."test!")); | |
171 assertEquals(5, countArgs(..."tes", ..."t!")); | |
172 assertEquals(6, countArgs(..."test!!")); | |
173 assertEquals(6, countArgs(..."tes", ..."t!!")); | |
174 | |
175 assertEquals(1, countArgs(...[1])); | |
176 assertEquals(2, countArgs(...[1, 2])); | |
177 assertEquals(3, countArgs(...[1, 2, 3])); | |
178 assertEquals(4, countArgs(...[1, 2, 3, 4])); | |
179 assertEquals(5, countArgs(...[1, 2, 3, 4, 5])); | |
180 assertEquals(6, countArgs(...[1, 2, 3, 4, 5, 6])); | |
181 | |
182 assertEquals(1, countArgs(...new Set([1]))); | |
183 assertEquals(2, countArgs(...new Set([1, 2]))); | |
184 assertEquals(3, countArgs(...new Set([1, 2, 3]))); | |
185 assertEquals(4, countArgs(...new Set([1, 2, 3, 4]))); | |
186 assertEquals(5, countArgs(...new Set([1, 2, 3, 4, 5]))); | |
187 assertEquals(6, countArgs(...new Set([1, 2, 3, 4, 5, 6]))); | |
188 | |
189 assertEquals(3, countArgs(...(function*(){ yield 1; yield 2; yield 3; })())); | |
190 | |
191 // Test values | |
192 function sum() { | |
193 var sum = arguments[0]; | |
194 for (var i = 1; i < arguments.length; ++i) { | |
195 sum += arguments[i]; | |
196 } | |
197 return sum; | |
198 } | |
199 | |
200 assertEquals(void 0, sum(..."")); | |
201 assertEquals(void 0, sum(...[])); | |
202 assertEquals(void 0, sum(...new Set)); | |
203 assertEquals(void 0, sum(...(function*() { })())); | |
204 | |
205 assertEquals("test", sum(..."test")); | |
206 assertEquals(10, sum(...[1, 2, 3, 4])); | |
207 assertEquals(10, sum(...[1, 2, 3], 4)); | |
208 assertEquals(10, sum(1, ...[2, 3], 4)); | |
209 assertEquals(10, sum(1, ...[2, 3], ...[4])); | |
210 assertEquals(10, sum(1, 2, ...[3, 4])); | |
211 assertEquals(10, sum(...new Set([1, 2, 3, 4]))); | |
212 assertEquals(10, sum(...(function*() { | |
213 yield 1; | |
214 yield 2; | |
215 yield 3; | |
216 yield 4; | |
217 })())); | |
218 | |
219 // nested spreads | |
220 function makeArray() { | |
221 var result = []; | |
222 for (var i = 0; i < arguments.length; ++i) { | |
223 result.push(arguments[i]); | |
224 } | |
225 return result; | |
226 } | |
227 assertEquals(10, sum(...makeArray(...[1, 2, 3, 4]))); | |
228 assertEquals("test!!!", sum(...makeArray(..."test!!!"))); | |
229 })(); | |
arv (Not doing code reviews)
2015/02/18 15:07:06
Maybe some tests with F.p.apply too?
function f(s
caitp (gmail)
2015/02/18 15:32:08
Will do
| |
OLD | NEW |