Chromium Code Reviews| 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 |