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 = 4294967296; | |
59 f(0, 0); | |
60 f(4294967296, 1); | |
61 f(8589934592, 2); | |
62 f(12884901888, 3); | |
63 f(17179869184, 4); | |
64 f(21474836480, 5); | |
65 f(30064771072, 7); | |
66 f(34359738368, 8); | |
67 f(38654705664, 9); | |
68 f(64424509440, 15); | |
69 f(68719476736, 16); | |
70 f(73014444032, 17); | |
71 f(133143986176, 31); | |
72 f(137438953472, 32); | |
73 f(141733920768, 33); | |
74 f(270582939648, 63); | |
75 f(274877906944, 64); | |
76 f(279172874240, 65); | |
77 f(545460846592, 127); | |
78 f(549755813888, 128); | |
79 f(554050781184, 129); | |
80 f(1095216660480, 255); | |
81 f(1099511627776, 256); | |
82 f(1103806595072, 257); | |
83 f(2194728288256, 511); | |
84 f(2199023255552, 512); | |
85 f(2203318222848, 513); | |
86 f(4393751543808, 1023); | |
87 f(4398046511104, 1024); | |
88 f(4402341478400, 1025); | |
89 f(8791798054912, 2047); | |
90 f(8796093022208, 2048); | |
91 f(8800387989504, 2049); | |
92 f(17587891077120, 4095); | |
93 f(17592186044416, 4096); | |
94 f(17596481011712, 4097); | |
95 f(35180077121536, 8191); | |
96 f(35184372088832, 8192); | |
97 f(35188667056128, 8193); | |
98 f(70364449210368, 16383); | |
99 f(70368744177664, 16384); | |
100 f(70373039144960, 16385); | |
101 f(140733193388032, 32767); | |
102 f(140737488355328, 32768); | |
103 f(140741783322624, 32769); | |
104 f(281470681743360, 65535); | |
105 f(281474976710656, 65536); | |
106 f(281479271677952, 65537); | |
107 f(562945658454016, 131071); | |
108 f(562949953421312, 131072); | |
109 f(562954248388608, 131073); | |
110 f(1125895611875328, 262143); | |
111 f(1125899906842624, 262144); | |
112 f(1125904201809920, 262145); | |
113 x = 4294967297; | |
114 f(0, 0); | |
115 f(4294967297, 1); | |
116 f(8589934594, 2); | |
117 f(12884901891, 3); | |
118 f(17179869188, 4); | |
119 f(21474836485, 5); | |
120 f(30064771079, 7); | |
121 f(34359738376, 8); | |
122 f(38654705673, 9); | |
123 f(64424509455, 15); | |
124 f(68719476752, 16); | |
125 f(73014444049, 17); | |
126 f(133143986207, 31); | |
127 f(137438953504, 32); | |
128 f(141733920801, 33); | |
129 f(270582939711, 63); | |
130 f(274877907008, 64); | |
131 f(279172874305, 65); | |
132 f(545460846719, 127); | |
133 f(549755814016, 128); | |
134 f(554050781313, 129); | |
135 f(1095216660735, 255); | |
136 f(1099511628032, 256); | |
137 f(1103806595329, 257); | |
138 f(2194728288767, 511); | |
139 f(2199023256064, 512); | |
140 f(2203318223361, 513); | |
141 f(4393751544831, 1023); | |
142 f(4398046512128, 1024); | |
143 f(4402341479425, 1025); | |
144 f(8791798056959, 2047); | |
145 f(8796093024256, 2048); | |
146 f(8800387991553, 2049); | |
147 f(17587891081215, 4095); | |
148 f(17592186048512, 4096); | |
149 f(17596481015809, 4097); | |
150 f(35180077129727, 8191); | |
151 f(35184372097024, 8192); | |
152 f(35188667064321, 8193); | |
153 f(70364449226751, 16383); | |
154 f(70368744194048, 16384); | |
155 f(70373039161345, 16385); | |
156 f(140733193420799, 32767); | |
157 f(140737488388096, 32768); | |
158 f(140741783355393, 32769); | |
159 f(281470681808895, 65535); | |
160 f(281474976776192, 65536); | |
161 f(281479271743489, 65537); | |
162 f(562945658585087, 131071); | |
163 f(562949953552384, 131072); | |
164 f(562954248519681, 131073); | |
165 f(1125895612137471, 262143); | |
166 f(1125899907104768, 262144); | |
167 f(1125904202072065, 262145); | |
168 x = 8589934591; | |
169 f(0, 0); | |
170 f(8589934591, 1); | |
171 f(17179869182, 2); | |
172 f(25769803773, 3); | |
173 f(34359738364, 4); | |
174 f(42949672955, 5); | |
175 f(60129542137, 7); | |
176 f(68719476728, 8); | |
177 f(77309411319, 9); | |
178 f(128849018865, 15); | |
179 f(137438953456, 16); | |
180 f(146028888047, 17); | |
181 f(266287972321, 31); | |
182 f(274877906912, 32); | |
183 f(283467841503, 33); | |
184 f(541165879233, 63); | |
185 f(549755813824, 64); | |
186 f(558345748415, 65); | |
187 f(1090921693057, 127); | |
188 f(1099511627648, 128); | |
189 f(1108101562239, 129); | |
190 f(2190433320705, 255); | |
191 f(2199023255296, 256); | |
192 f(2207613189887, 257); | |
193 f(4389456576001, 511); | |
194 f(4398046510592, 512); | |
195 f(4406636445183, 513); | |
196 f(8787503086593, 1023); | |
197 f(8796093021184, 1024); | |
198 f(8804682955775, 1025); | |
199 f(17583596107777, 2047); | |
200 f(17592186042368, 2048); | |
201 f(17600775976959, 2049); | |
202 f(35175782150145, 4095); | |
203 f(35184372084736, 4096); | |
204 f(35192962019327, 4097); | |
205 f(70360154234881, 8191); | |
206 f(70368744169472, 8192); | |
207 f(70377334104063, 8193); | |
208 f(140728898404353, 16383); | |
209 f(140737488338944, 16384); | |
210 f(140746078273535, 16385); | |
211 f(281466386743297, 32767); | |
212 f(281474976677888, 32768); | |
213 f(281483566612479, 32769); | |
214 f(562941363421185, 65535); | |
215 f(562949953355776, 65536); | |
216 f(562958543290367, 65537); | |
217 f(1125891316776961, 131071); | |
218 f(1125899906711552, 131072); | |
219 f(1125908496646143, 131073); | |
220 x = 8589934592; | |
221 f(0, 0); | |
222 f(8589934592, 1); | |
223 f(17179869184, 2); | |
224 f(25769803776, 3); | |
225 f(34359738368, 4); | |
226 f(42949672960, 5); | |
227 f(60129542144, 7); | |
228 f(68719476736, 8); | |
229 f(77309411328, 9); | |
230 f(128849018880, 15); | |
231 f(137438953472, 16); | |
232 f(146028888064, 17); | |
233 f(266287972352, 31); | |
234 f(274877906944, 32); | |
235 f(283467841536, 33); | |
236 f(541165879296, 63); | |
237 f(549755813888, 64); | |
238 f(558345748480, 65); | |
239 f(1090921693184, 127); | |
240 f(1099511627776, 128); | |
241 f(1108101562368, 129); | |
242 f(2190433320960, 255); | |
243 f(2199023255552, 256); | |
244 f(2207613190144, 257); | |
245 f(4389456576512, 511); | |
246 f(4398046511104, 512); | |
247 f(4406636445696, 513); | |
248 f(8787503087616, 1023); | |
249 f(8796093022208, 1024); | |
250 f(8804682956800, 1025); | |
251 f(17583596109824, 2047); | |
252 f(17592186044416, 2048); | |
253 f(17600775979008, 2049); | |
254 f(35175782154240, 4095); | |
255 f(35184372088832, 4096); | |
256 f(35192962023424, 4097); | |
257 f(70360154243072, 8191); | |
258 f(70368744177664, 8192); | |
259 f(70377334112256, 8193); | |
260 f(140728898420736, 16383); | |
261 f(140737488355328, 16384); | |
262 f(140746078289920, 16385); | |
263 f(281466386776064, 32767); | |
264 f(281474976710656, 32768); | |
265 f(281483566645248, 32769); | |
266 f(562941363486720, 65535); | |
267 f(562949953421312, 65536); | |
268 f(562958543355904, 65537); | |
269 f(1125891316908032, 131071); | |
270 f(1125899906842624, 131072); | |
271 f(1125908496777216, 131073); | |
272 x = 8589934593; | |
273 f(0, 0); | |
274 f(8589934593, 1); | |
275 f(17179869186, 2); | |
276 f(25769803779, 3); | |
277 f(34359738372, 4); | |
278 f(42949672965, 5); | |
279 f(60129542151, 7); | |
280 f(68719476744, 8); | |
281 f(77309411337, 9); | |
282 f(128849018895, 15); | |
283 f(137438953488, 16); | |
284 f(146028888081, 17); | |
285 f(266287972383, 31); | |
286 f(274877906976, 32); | |
287 f(283467841569, 33); | |
288 f(541165879359, 63); | |
289 f(549755813952, 64); | |
290 f(558345748545, 65); | |
291 f(1090921693311, 127); | |
292 f(1099511627904, 128); | |
293 f(1108101562497, 129); | |
294 f(2190433321215, 255); | |
295 f(2199023255808, 256); | |
296 f(2207613190401, 257); | |
297 f(4389456577023, 511); | |
298 f(4398046511616, 512); | |
299 f(4406636446209, 513); | |
300 f(8787503088639, 1023); | |
301 f(8796093023232, 1024); | |
302 f(8804682957825, 1025); | |
303 f(17583596111871, 2047); | |
304 f(17592186046464, 2048); | |
305 f(17600775981057, 2049); | |
306 f(35175782158335, 4095); | |
307 f(35184372092928, 4096); | |
308 f(35192962027521, 4097); | |
309 f(70360154251263, 8191); | |
310 f(70368744185856, 8192); | |
311 f(70377334120449, 8193); | |
312 f(140728898437119, 16383); | |
313 f(140737488371712, 16384); | |
314 f(140746078306305, 16385); | |
315 f(281466386808831, 32767); | |
316 f(281474976743424, 32768); | |
317 f(281483566678017, 32769); | |
318 f(562941363552255, 65535); | |
319 f(562949953486848, 65536); | |
320 f(562958543421441, 65537); | |
321 f(1125891317039103, 131071); | |
322 f(1125899906973696, 131072); | |
323 f(1125908496908289, 131073); | |
324 x = 17179869183; | |
325 f(0, 0); | |
326 f(17179869183, 1); | |
327 f(34359738366, 2); | |
328 f(51539607549, 3); | |
329 f(68719476732, 4); | |
330 f(85899345915, 5); | |
331 f(120259084281, 7); | |
332 f(137438953464, 8); | |
333 f(154618822647, 9); | |
334 f(257698037745, 15); | |
335 f(274877906928, 16); | |
336 f(292057776111, 17); | |
337 f(532575944673, 31); | |
338 f(549755813856, 32); | |
339 f(566935683039, 33); | |
340 f(1082331758529, 63); | |
341 f(1099511627712, 64); | |
342 f(1116691496895, 65); | |
343 f(2181843386241, 127); | |
344 f(2199023255424, 128); | |
345 f(2216203124607, 129); | |
346 f(4380866641665, 255); | |
347 f(4398046510848, 256); | |
348 f(4415226380031, 257); | |
349 f(8778913152513, 511); | |
350 f(8796093021696, 512); | |
351 f(8813272890879, 513); | |
352 f(17575006174209, 1023); | |
353 f(17592186043392, 1024); | |
354 f(17609365912575, 1025); | |
355 f(35167192217601, 2047); | |
356 f(35184372086784, 2048); | |
357 f(35201551955967, 2049); | |
358 f(70351564304385, 4095); | |
359 f(70368744173568, 4096); | |
360 f(70385924042751, 4097); | |
361 f(140720308477953, 8191); | |
362 f(140737488347136, 8192); | |
363 f(140754668216319, 8193); | |
364 f(281457796825089, 16383); | |
365 f(281474976694272, 16384); | |
366 f(281492156563455, 16385); | |
367 f(562932773519361, 32767); | |
368 f(562949953388544, 32768); | |
369 f(562967133257727, 32769); | |
370 f(1125882726907905, 65535); | |
371 f(1125899906777088, 65536); | |
372 f(1125917086646271, 65537); | |
373 x = 17179869184; | |
374 f(0, 0); | |
375 f(17179869184, 1); | |
376 f(34359738368, 2); | |
377 f(51539607552, 3); | |
378 f(68719476736, 4); | |
379 f(85899345920, 5); | |
380 f(120259084288, 7); | |
381 f(137438953472, 8); | |
382 f(154618822656, 9); | |
383 f(257698037760, 15); | |
384 f(274877906944, 16); | |
385 f(292057776128, 17); | |
386 f(532575944704, 31); | |
387 f(549755813888, 32); | |
388 f(566935683072, 33); | |
389 f(1082331758592, 63); | |
390 f(1099511627776, 64); | |
391 f(1116691496960, 65); | |
392 f(2181843386368, 127); | |
393 f(2199023255552, 128); | |
394 f(2216203124736, 129); | |
395 f(4380866641920, 255); | |
396 f(4398046511104, 256); | |
397 f(4415226380288, 257); | |
398 f(8778913153024, 511); | |
399 f(8796093022208, 512); | |
400 f(8813272891392, 513); | |
401 f(17575006175232, 1023); | |
402 f(17592186044416, 1024); | |
403 f(17609365913600, 1025); | |
404 f(35167192219648, 2047); | |
405 f(35184372088832, 2048); | |
406 f(35201551958016, 2049); | |
407 f(70351564308480, 4095); | |
408 f(70368744177664, 4096); | |
409 f(70385924046848, 4097); | |
410 f(140720308486144, 8191); | |
411 f(140737488355328, 8192); | |
412 f(140754668224512, 8193); | |
413 f(281457796841472, 16383); | |
414 f(281474976710656, 16384); | |
415 f(281492156579840, 16385); | |
416 f(562932773552128, 32767); | |
417 f(562949953421312, 32768); | |
418 f(562967133290496, 32769); | |
419 f(1125882726973440, 65535); | |
420 f(1125899906842624, 65536); | |
421 f(1125917086711808, 65537); | |
422 x = 17179869185; | |
423 f(0, 0); | |
424 f(17179869185, 1); | |
425 f(34359738370, 2); | |
426 f(51539607555, 3); | |
427 f(68719476740, 4); | |
428 f(85899345925, 5); | |
429 f(120259084295, 7); | |
430 f(137438953480, 8); | |
431 f(154618822665, 9); | |
432 f(257698037775, 15); | |
433 f(274877906960, 16); | |
434 f(292057776145, 17); | |
435 f(532575944735, 31); | |
436 f(549755813920, 32); | |
437 f(566935683105, 33); | |
438 f(1082331758655, 63); | |
439 f(1099511627840, 64); | |
440 f(1116691497025, 65); | |
441 f(2181843386495, 127); | |
442 f(2199023255680, 128); | |
443 f(2216203124865, 129); | |
444 f(4380866642175, 255); | |
445 f(4398046511360, 256); | |
446 f(4415226380545, 257); | |
447 f(8778913153535, 511); | |
448 f(8796093022720, 512); | |
449 f(8813272891905, 513); | |
450 f(17575006176255, 1023); | |
451 f(17592186045440, 1024); | |
452 f(17609365914625, 1025); | |
453 f(35167192221695, 2047); | |
454 f(35184372090880, 2048); | |
455 f(35201551960065, 2049); | |
456 f(70351564312575, 4095); | |
457 f(70368744181760, 4096); | |
458 f(70385924050945, 4097); | |
459 f(140720308494335, 8191); | |
460 f(140737488363520, 8192); | |
461 f(140754668232705, 8193); | |
462 f(281457796857855, 16383); | |
463 f(281474976727040, 16384); | |
464 f(281492156596225, 16385); | |
465 f(562932773584895, 32767); | |
466 f(562949953454080, 32768); | |
467 f(562967133323265, 32769); | |
468 f(1125882727038975, 65535); | |
469 f(1125899906908160, 65536); | |
470 f(1125917086777345, 65537); | |
OLD | NEW |