OLD | NEW |
| (Empty) |
1 // Copyright 2008 the V8 project authors. All rights reserved. | |
2 // Redistribution and use in source and binary forms, with or without | |
3 // modification, are permitted provided that the following conditions are | |
4 // met: | |
5 // | |
6 // * Redistributions of source code must retain the above copyright | |
7 // notice, this list of conditions and the following disclaimer. | |
8 // * Redistributions in binary form must reproduce the above | |
9 // copyright notice, this list of conditions and the following | |
10 // disclaimer in the documentation and/or other materials provided | |
11 // with the distribution. | |
12 // * Neither the name of Google Inc. nor the names of its | |
13 // contributors may be used to endorse or promote products derived | |
14 // from this software without specific prior written permission. | |
15 // | |
16 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | |
17 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | |
18 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | |
19 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | |
20 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |
21 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |
22 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | |
23 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | |
24 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | |
25 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | |
26 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |
27 | |
28 var x; | |
29 | |
30 // Converts a number to string respecting -0. | |
31 function stringify(n) { | |
32 if ((1 / n) === -Infinity) return "-0"; | |
33 return String(n); | |
34 } | |
35 | |
36 function f(expected, y) { | |
37 function testEval(string, x, y) { | |
38 var mulFunction = Function("x, y", "return " + string); | |
39 return mulFunction(x, y); | |
40 } | |
41 function mulTest(expected, x, y) { | |
42 assertEquals(expected, x * y); | |
43 assertEquals(expected, testEval(stringify(x) + " * y", x, y)); | |
44 assertEquals(expected, testEval("x * " + stringify(y), x, y)); | |
45 assertEquals(expected, testEval(stringify(x) + " * " + stringify(y), x, y)); | |
46 } | |
47 mulTest(expected, x, y); | |
48 mulTest(-expected, -x, y); | |
49 mulTest(-expected, x, -y); | |
50 mulTest(expected, -x, -y); | |
51 if (x === y) return; // Symmetric cases not necessary. | |
52 mulTest(expected, y, x); | |
53 mulTest(-expected, -y, x); | |
54 mulTest(-expected, y, -x); | |
55 mulTest(expected, -y, -x); | |
56 } | |
57 | |
58 x = 1048577; | |
59 f(0, 0); | |
60 f(1048577, 1); | |
61 f(2097154, 2); | |
62 f(3145731, 3); | |
63 f(4194308, 4); | |
64 f(5242885, 5); | |
65 f(7340039, 7); | |
66 f(8388616, 8); | |
67 f(9437193, 9); | |
68 f(15728655, 15); | |
69 f(16777232, 16); | |
70 f(17825809, 17); | |
71 f(32505887, 31); | |
72 f(33554464, 32); | |
73 f(34603041, 33); | |
74 f(66060351, 63); | |
75 f(67108928, 64); | |
76 f(68157505, 65); | |
77 f(133169279, 127); | |
78 f(134217856, 128); | |
79 f(135266433, 129); | |
80 f(267387135, 255); | |
81 f(268435712, 256); | |
82 f(269484289, 257); | |
83 f(535822847, 511); | |
84 f(536871424, 512); | |
85 f(537920001, 513); | |
86 f(1072694271, 1023); | |
87 f(1073742848, 1024); | |
88 f(1074791425, 1025); | |
89 f(2146437119, 2047); | |
90 f(2147485696, 2048); | |
91 f(2148534273, 2049); | |
92 f(4293922815, 4095); | |
93 f(4294971392, 4096); | |
94 f(4296019969, 4097); | |
95 f(8588894207, 8191); | |
96 f(8589942784, 8192); | |
97 f(8590991361, 8193); | |
98 f(17178836991, 16383); | |
99 f(17179885568, 16384); | |
100 f(17180934145, 16385); | |
101 f(34358722559, 32767); | |
102 f(34359771136, 32768); | |
103 f(34360819713, 32769); | |
104 f(68718493695, 65535); | |
105 f(68719542272, 65536); | |
106 f(68720590849, 65537); | |
107 f(137438035967, 131071); | |
108 f(137439084544, 131072); | |
109 f(137440133121, 131073); | |
110 f(274877120511, 262143); | |
111 f(274878169088, 262144); | |
112 f(274879217665, 262145); | |
113 f(549755289599, 524287); | |
114 f(549756338176, 524288); | |
115 f(549757386753, 524289); | |
116 f(1099511627775, 1048575); | |
117 f(1099512676352, 1048576); | |
118 f(1099513724929, 1048577); | |
119 x = 2097151; | |
120 f(0, 0); | |
121 f(2097151, 1); | |
122 f(4194302, 2); | |
123 f(6291453, 3); | |
124 f(8388604, 4); | |
125 f(10485755, 5); | |
126 f(14680057, 7); | |
127 f(16777208, 8); | |
128 f(18874359, 9); | |
129 f(31457265, 15); | |
130 f(33554416, 16); | |
131 f(35651567, 17); | |
132 f(65011681, 31); | |
133 f(67108832, 32); | |
134 f(69205983, 33); | |
135 f(132120513, 63); | |
136 f(134217664, 64); | |
137 f(136314815, 65); | |
138 f(266338177, 127); | |
139 f(268435328, 128); | |
140 f(270532479, 129); | |
141 f(534773505, 255); | |
142 f(536870656, 256); | |
143 f(538967807, 257); | |
144 f(1071644161, 511); | |
145 f(1073741312, 512); | |
146 f(1075838463, 513); | |
147 f(2145385473, 1023); | |
148 f(2147482624, 1024); | |
149 f(2149579775, 1025); | |
150 f(4292868097, 2047); | |
151 f(4294965248, 2048); | |
152 f(4297062399, 2049); | |
153 f(8587833345, 4095); | |
154 f(8589930496, 4096); | |
155 f(8592027647, 4097); | |
156 f(17177763841, 8191); | |
157 f(17179860992, 8192); | |
158 f(17181958143, 8193); | |
159 f(34357624833, 16383); | |
160 f(34359721984, 16384); | |
161 f(34361819135, 16385); | |
162 f(68717346817, 32767); | |
163 f(68719443968, 32768); | |
164 f(68721541119, 32769); | |
165 f(137436790785, 65535); | |
166 f(137438887936, 65536); | |
167 f(137440985087, 65537); | |
168 f(274875678721, 131071); | |
169 f(274877775872, 131072); | |
170 f(274879873023, 131073); | |
171 f(549753454593, 262143); | |
172 f(549755551744, 262144); | |
173 f(549757648895, 262145); | |
174 f(1099509006337, 524287); | |
175 f(1099511103488, 524288); | |
176 f(1099513200639, 524289); | |
177 f(2199020109825, 1048575); | |
178 f(2199022206976, 1048576); | |
179 f(2199024304127, 1048577); | |
180 f(4398042316801, 2097151); | |
181 x = 2097152; | |
182 f(0, 0); | |
183 f(2097152, 1); | |
184 f(4194304, 2); | |
185 f(6291456, 3); | |
186 f(8388608, 4); | |
187 f(10485760, 5); | |
188 f(14680064, 7); | |
189 f(16777216, 8); | |
190 f(18874368, 9); | |
191 f(31457280, 15); | |
192 f(33554432, 16); | |
193 f(35651584, 17); | |
194 f(65011712, 31); | |
195 f(67108864, 32); | |
196 f(69206016, 33); | |
197 f(132120576, 63); | |
198 f(134217728, 64); | |
199 f(136314880, 65); | |
200 f(266338304, 127); | |
201 f(268435456, 128); | |
202 f(270532608, 129); | |
203 f(534773760, 255); | |
204 f(536870912, 256); | |
205 f(538968064, 257); | |
206 f(1071644672, 511); | |
207 f(1073741824, 512); | |
208 f(1075838976, 513); | |
209 f(2145386496, 1023); | |
210 f(2147483648, 1024); | |
211 f(2149580800, 1025); | |
212 f(4292870144, 2047); | |
213 f(4294967296, 2048); | |
214 f(4297064448, 2049); | |
215 f(8587837440, 4095); | |
216 f(8589934592, 4096); | |
217 f(8592031744, 4097); | |
218 f(17177772032, 8191); | |
219 f(17179869184, 8192); | |
220 f(17181966336, 8193); | |
221 f(34357641216, 16383); | |
222 f(34359738368, 16384); | |
223 f(34361835520, 16385); | |
224 f(68717379584, 32767); | |
225 f(68719476736, 32768); | |
226 f(68721573888, 32769); | |
227 f(137436856320, 65535); | |
228 f(137438953472, 65536); | |
229 f(137441050624, 65537); | |
230 f(274875809792, 131071); | |
231 f(274877906944, 131072); | |
232 f(274880004096, 131073); | |
233 f(549753716736, 262143); | |
234 f(549755813888, 262144); | |
235 f(549757911040, 262145); | |
236 f(1099509530624, 524287); | |
237 f(1099511627776, 524288); | |
238 f(1099513724928, 524289); | |
239 f(2199021158400, 1048575); | |
240 f(2199023255552, 1048576); | |
241 f(2199025352704, 1048577); | |
242 f(4398044413952, 2097151); | |
243 f(4398046511104, 2097152); | |
244 x = 2097153; | |
245 f(0, 0); | |
246 f(2097153, 1); | |
247 f(4194306, 2); | |
248 f(6291459, 3); | |
249 f(8388612, 4); | |
250 f(10485765, 5); | |
251 f(14680071, 7); | |
252 f(16777224, 8); | |
253 f(18874377, 9); | |
254 f(31457295, 15); | |
255 f(33554448, 16); | |
256 f(35651601, 17); | |
257 f(65011743, 31); | |
258 f(67108896, 32); | |
259 f(69206049, 33); | |
260 f(132120639, 63); | |
261 f(134217792, 64); | |
262 f(136314945, 65); | |
263 f(266338431, 127); | |
264 f(268435584, 128); | |
265 f(270532737, 129); | |
266 f(534774015, 255); | |
267 f(536871168, 256); | |
268 f(538968321, 257); | |
269 f(1071645183, 511); | |
270 f(1073742336, 512); | |
271 f(1075839489, 513); | |
272 f(2145387519, 1023); | |
273 f(2147484672, 1024); | |
274 f(2149581825, 1025); | |
275 f(4292872191, 2047); | |
276 f(4294969344, 2048); | |
277 f(4297066497, 2049); | |
278 f(8587841535, 4095); | |
279 f(8589938688, 4096); | |
280 f(8592035841, 4097); | |
281 f(17177780223, 8191); | |
282 f(17179877376, 8192); | |
283 f(17181974529, 8193); | |
284 f(34357657599, 16383); | |
285 f(34359754752, 16384); | |
286 f(34361851905, 16385); | |
287 f(68717412351, 32767); | |
288 f(68719509504, 32768); | |
289 f(68721606657, 32769); | |
290 f(137436921855, 65535); | |
291 f(137439019008, 65536); | |
292 f(137441116161, 65537); | |
293 f(274875940863, 131071); | |
294 f(274878038016, 131072); | |
295 f(274880135169, 131073); | |
296 f(549753978879, 262143); | |
297 f(549756076032, 262144); | |
298 f(549758173185, 262145); | |
299 f(1099510054911, 524287); | |
300 f(1099512152064, 524288); | |
301 f(1099514249217, 524289); | |
302 f(2199022206975, 1048575); | |
303 f(2199024304128, 1048576); | |
304 f(2199026401281, 1048577); | |
305 f(4398046511103, 2097151); | |
306 f(4398048608256, 2097152); | |
307 f(4398050705409, 2097153); | |
308 x = 4194303; | |
309 f(0, 0); | |
310 f(4194303, 1); | |
311 f(8388606, 2); | |
312 f(12582909, 3); | |
313 f(16777212, 4); | |
314 f(20971515, 5); | |
315 f(29360121, 7); | |
316 f(33554424, 8); | |
317 f(37748727, 9); | |
318 f(62914545, 15); | |
319 f(67108848, 16); | |
320 f(71303151, 17); | |
321 f(130023393, 31); | |
322 f(134217696, 32); | |
323 f(138411999, 33); | |
324 f(264241089, 63); | |
325 f(268435392, 64); | |
326 f(272629695, 65); | |
327 f(532676481, 127); | |
328 f(536870784, 128); | |
329 f(541065087, 129); | |
330 f(1069547265, 255); | |
331 f(1073741568, 256); | |
332 f(1077935871, 257); | |
333 f(2143288833, 511); | |
334 f(2147483136, 512); | |
335 f(2151677439, 513); | |
336 f(4290771969, 1023); | |
337 f(4294966272, 1024); | |
338 f(4299160575, 1025); | |
339 f(8585738241, 2047); | |
340 f(8589932544, 2048); | |
341 f(8594126847, 2049); | |
342 f(17175670785, 4095); | |
343 f(17179865088, 4096); | |
344 f(17184059391, 4097); | |
345 f(34355535873, 8191); | |
346 f(34359730176, 8192); | |
347 f(34363924479, 8193); | |
348 f(68715266049, 16383); | |
349 f(68719460352, 16384); | |
350 f(68723654655, 16385); | |
351 f(137434726401, 32767); | |
352 f(137438920704, 32768); | |
353 f(137443115007, 32769); | |
354 f(274873647105, 65535); | |
355 f(274877841408, 65536); | |
356 f(274882035711, 65537); | |
357 f(549751488513, 131071); | |
358 f(549755682816, 131072); | |
359 f(549759877119, 131073); | |
360 f(1099507171329, 262143); | |
361 f(1099511365632, 262144); | |
362 f(1099515559935, 262145); | |
363 f(2199018536961, 524287); | |
364 f(2199022731264, 524288); | |
365 f(2199026925567, 524289); | |
366 f(4398041268225, 1048575); | |
367 f(4398045462528, 1048576); | |
368 f(4398049656831, 1048577); | |
369 f(8796086730753, 2097151); | |
370 f(8796090925056, 2097152); | |
371 f(8796095119359, 2097153); | |
372 f(17592177655809, 4194303); | |
373 x = 4194304; | |
374 f(0, 0); | |
375 f(4194304, 1); | |
376 f(8388608, 2); | |
377 f(12582912, 3); | |
378 f(16777216, 4); | |
379 f(20971520, 5); | |
380 f(29360128, 7); | |
381 f(33554432, 8); | |
382 f(37748736, 9); | |
383 f(62914560, 15); | |
384 f(67108864, 16); | |
385 f(71303168, 17); | |
386 f(130023424, 31); | |
387 f(134217728, 32); | |
388 f(138412032, 33); | |
389 f(264241152, 63); | |
390 f(268435456, 64); | |
391 f(272629760, 65); | |
392 f(532676608, 127); | |
393 f(536870912, 128); | |
394 f(541065216, 129); | |
395 f(1069547520, 255); | |
396 f(1073741824, 256); | |
397 f(1077936128, 257); | |
398 f(2143289344, 511); | |
399 f(2147483648, 512); | |
400 f(2151677952, 513); | |
401 f(4290772992, 1023); | |
402 f(4294967296, 1024); | |
403 f(4299161600, 1025); | |
404 f(8585740288, 2047); | |
405 f(8589934592, 2048); | |
406 f(8594128896, 2049); | |
407 f(17175674880, 4095); | |
408 f(17179869184, 4096); | |
409 f(17184063488, 4097); | |
410 f(34355544064, 8191); | |
411 f(34359738368, 8192); | |
412 f(34363932672, 8193); | |
413 f(68715282432, 16383); | |
414 f(68719476736, 16384); | |
415 f(68723671040, 16385); | |
416 f(137434759168, 32767); | |
417 f(137438953472, 32768); | |
418 f(137443147776, 32769); | |
419 f(274873712640, 65535); | |
420 f(274877906944, 65536); | |
421 f(274882101248, 65537); | |
422 f(549751619584, 131071); | |
423 f(549755813888, 131072); | |
424 f(549760008192, 131073); | |
425 f(1099507433472, 262143); | |
426 f(1099511627776, 262144); | |
427 f(1099515822080, 262145); | |
428 f(2199019061248, 524287); | |
429 f(2199023255552, 524288); | |
430 f(2199027449856, 524289); | |
431 f(4398042316800, 1048575); | |
432 f(4398046511104, 1048576); | |
433 f(4398050705408, 1048577); | |
434 f(8796088827904, 2097151); | |
435 f(8796093022208, 2097152); | |
436 f(8796097216512, 2097153); | |
437 f(17592181850112, 4194303); | |
438 f(17592186044416, 4194304); | |
439 x = 4194305; | |
440 f(0, 0); | |
441 f(4194305, 1); | |
442 f(8388610, 2); | |
443 f(12582915, 3); | |
444 f(16777220, 4); | |
445 f(20971525, 5); | |
446 f(29360135, 7); | |
447 f(33554440, 8); | |
448 f(37748745, 9); | |
449 f(62914575, 15); | |
450 f(67108880, 16); | |
451 f(71303185, 17); | |
452 f(130023455, 31); | |
453 f(134217760, 32); | |
454 f(138412065, 33); | |
455 f(264241215, 63); | |
456 f(268435520, 64); | |
457 f(272629825, 65); | |
458 f(532676735, 127); | |
459 f(536871040, 128); | |
460 f(541065345, 129); | |
461 f(1069547775, 255); | |
462 f(1073742080, 256); | |
463 f(1077936385, 257); | |
464 f(2143289855, 511); | |
465 f(2147484160, 512); | |
466 f(2151678465, 513); | |
467 f(4290774015, 1023); | |
468 f(4294968320, 1024); | |
469 f(4299162625, 1025); | |
470 f(8585742335, 2047); | |
471 f(8589936640, 2048); | |
472 f(8594130945, 2049); | |
473 f(17175678975, 4095); | |
474 f(17179873280, 4096); | |
475 f(17184067585, 4097); | |
476 f(34355552255, 8191); | |
477 f(34359746560, 8192); | |
478 f(34363940865, 8193); | |
479 f(68715298815, 16383); | |
480 f(68719493120, 16384); | |
481 f(68723687425, 16385); | |
482 f(137434791935, 32767); | |
483 f(137438986240, 32768); | |
484 f(137443180545, 32769); | |
485 f(274873778175, 65535); | |
486 f(274877972480, 65536); | |
487 f(274882166785, 65537); | |
488 f(549751750655, 131071); | |
489 f(549755944960, 131072); | |
490 f(549760139265, 131073); | |
491 f(1099507695615, 262143); | |
492 f(1099511889920, 262144); | |
493 f(1099516084225, 262145); | |
494 f(2199019585535, 524287); | |
495 f(2199023779840, 524288); | |
496 f(2199027974145, 524289); | |
497 f(4398043365375, 1048575); | |
498 f(4398047559680, 1048576); | |
499 f(4398051753985, 1048577); | |
500 f(8796090925055, 2097151); | |
501 f(8796095119360, 2097152); | |
502 f(8796099313665, 2097153); | |
503 f(17592186044415, 4194303); | |
504 f(17592190238720, 4194304); | |
505 f(17592194433025, 4194305); | |
OLD | NEW |