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 = 134217728; | |
59 f(0, 0); | |
60 f(134217728, 1); | |
61 f(268435456, 2); | |
62 f(402653184, 3); | |
63 f(536870912, 4); | |
64 f(671088640, 5); | |
65 f(939524096, 7); | |
66 f(1073741824, 8); | |
67 f(1207959552, 9); | |
68 f(2013265920, 15); | |
69 f(2147483648, 16); | |
70 f(2281701376, 17); | |
71 f(4160749568, 31); | |
72 f(4294967296, 32); | |
73 f(4429185024, 33); | |
74 f(8455716864, 63); | |
75 f(8589934592, 64); | |
76 f(8724152320, 65); | |
77 f(17045651456, 127); | |
78 f(17179869184, 128); | |
79 f(17314086912, 129); | |
80 f(34225520640, 255); | |
81 f(34359738368, 256); | |
82 f(34493956096, 257); | |
83 f(68585259008, 511); | |
84 f(68719476736, 512); | |
85 f(68853694464, 513); | |
86 f(137304735744, 1023); | |
87 f(137438953472, 1024); | |
88 f(137573171200, 1025); | |
89 f(274743689216, 2047); | |
90 f(274877906944, 2048); | |
91 f(275012124672, 2049); | |
92 f(549621596160, 4095); | |
93 f(549755813888, 4096); | |
94 f(549890031616, 4097); | |
95 f(1099377410048, 8191); | |
96 f(1099511627776, 8192); | |
97 f(1099645845504, 8193); | |
98 f(2198889037824, 16383); | |
99 f(2199023255552, 16384); | |
100 f(2199157473280, 16385); | |
101 f(4397912293376, 32767); | |
102 f(4398046511104, 32768); | |
103 f(4398180728832, 32769); | |
104 f(8795958804480, 65535); | |
105 f(8796093022208, 65536); | |
106 f(8796227239936, 65537); | |
107 f(17592051826688, 131071); | |
108 f(17592186044416, 131072); | |
109 f(17592320262144, 131073); | |
110 f(35184237871104, 262143); | |
111 f(35184372088832, 262144); | |
112 f(35184506306560, 262145); | |
113 f(70368609959936, 524287); | |
114 f(70368744177664, 524288); | |
115 f(70368878395392, 524289); | |
116 f(140737354137600, 1048575); | |
117 f(140737488355328, 1048576); | |
118 f(140737622573056, 1048577); | |
119 f(281474842492928, 2097151); | |
120 f(281474976710656, 2097152); | |
121 f(281475110928384, 2097153); | |
122 f(562949819203584, 4194303); | |
123 f(562949953421312, 4194304); | |
124 f(562950087639040, 4194305); | |
125 f(1125899772624896, 8388607); | |
126 f(1125899906842624, 8388608); | |
127 f(1125900041060352, 8388609); | |
128 x = 134217729; | |
129 f(0, 0); | |
130 f(134217729, 1); | |
131 f(268435458, 2); | |
132 f(402653187, 3); | |
133 f(536870916, 4); | |
134 f(671088645, 5); | |
135 f(939524103, 7); | |
136 f(1073741832, 8); | |
137 f(1207959561, 9); | |
138 f(2013265935, 15); | |
139 f(2147483664, 16); | |
140 f(2281701393, 17); | |
141 f(4160749599, 31); | |
142 f(4294967328, 32); | |
143 f(4429185057, 33); | |
144 f(8455716927, 63); | |
145 f(8589934656, 64); | |
146 f(8724152385, 65); | |
147 f(17045651583, 127); | |
148 f(17179869312, 128); | |
149 f(17314087041, 129); | |
150 f(34225520895, 255); | |
151 f(34359738624, 256); | |
152 f(34493956353, 257); | |
153 f(68585259519, 511); | |
154 f(68719477248, 512); | |
155 f(68853694977, 513); | |
156 f(137304736767, 1023); | |
157 f(137438954496, 1024); | |
158 f(137573172225, 1025); | |
159 f(274743691263, 2047); | |
160 f(274877908992, 2048); | |
161 f(275012126721, 2049); | |
162 f(549621600255, 4095); | |
163 f(549755817984, 4096); | |
164 f(549890035713, 4097); | |
165 f(1099377418239, 8191); | |
166 f(1099511635968, 8192); | |
167 f(1099645853697, 8193); | |
168 f(2198889054207, 16383); | |
169 f(2199023271936, 16384); | |
170 f(2199157489665, 16385); | |
171 f(4397912326143, 32767); | |
172 f(4398046543872, 32768); | |
173 f(4398180761601, 32769); | |
174 f(8795958870015, 65535); | |
175 f(8796093087744, 65536); | |
176 f(8796227305473, 65537); | |
177 f(17592051957759, 131071); | |
178 f(17592186175488, 131072); | |
179 f(17592320393217, 131073); | |
180 f(35184238133247, 262143); | |
181 f(35184372350976, 262144); | |
182 f(35184506568705, 262145); | |
183 f(70368610484223, 524287); | |
184 f(70368744701952, 524288); | |
185 f(70368878919681, 524289); | |
186 f(140737355186175, 1048575); | |
187 f(140737489403904, 1048576); | |
188 f(140737623621633, 1048577); | |
189 f(281474844590079, 2097151); | |
190 f(281474978807808, 2097152); | |
191 f(281475113025537, 2097153); | |
192 f(562949823397887, 4194303); | |
193 f(562949957615616, 4194304); | |
194 f(562950091833345, 4194305); | |
195 f(1125899781013503, 8388607); | |
196 f(1125899915231232, 8388608); | |
197 f(1125900049448961, 8388609); | |
198 x = 268435455; | |
199 f(0, 0); | |
200 f(268435455, 1); | |
201 f(536870910, 2); | |
202 f(805306365, 3); | |
203 f(1073741820, 4); | |
204 f(1342177275, 5); | |
205 f(1879048185, 7); | |
206 f(2147483640, 8); | |
207 f(2415919095, 9); | |
208 f(4026531825, 15); | |
209 f(4294967280, 16); | |
210 f(4563402735, 17); | |
211 f(8321499105, 31); | |
212 f(8589934560, 32); | |
213 f(8858370015, 33); | |
214 f(16911433665, 63); | |
215 f(17179869120, 64); | |
216 f(17448304575, 65); | |
217 f(34091302785, 127); | |
218 f(34359738240, 128); | |
219 f(34628173695, 129); | |
220 f(68451041025, 255); | |
221 f(68719476480, 256); | |
222 f(68987911935, 257); | |
223 f(137170517505, 511); | |
224 f(137438952960, 512); | |
225 f(137707388415, 513); | |
226 f(274609470465, 1023); | |
227 f(274877905920, 1024); | |
228 f(275146341375, 1025); | |
229 f(549487376385, 2047); | |
230 f(549755811840, 2048); | |
231 f(550024247295, 2049); | |
232 f(1099243188225, 4095); | |
233 f(1099511623680, 4096); | |
234 f(1099780059135, 4097); | |
235 f(2198754811905, 8191); | |
236 f(2199023247360, 8192); | |
237 f(2199291682815, 8193); | |
238 f(4397778059265, 16383); | |
239 f(4398046494720, 16384); | |
240 f(4398314930175, 16385); | |
241 f(8795824553985, 32767); | |
242 f(8796092989440, 32768); | |
243 f(8796361424895, 32769); | |
244 f(17591917543425, 65535); | |
245 f(17592185978880, 65536); | |
246 f(17592454414335, 65537); | |
247 f(35184103522305, 131071); | |
248 f(35184371957760, 131072); | |
249 f(35184640393215, 131073); | |
250 f(70368475480065, 262143); | |
251 f(70368743915520, 262144); | |
252 f(70369012350975, 262145); | |
253 f(140737219395585, 524287); | |
254 f(140737487831040, 524288); | |
255 f(140737756266495, 524289); | |
256 f(281474707226625, 1048575); | |
257 f(281474975662080, 1048576); | |
258 f(281475244097535, 1048577); | |
259 f(562949682888705, 2097151); | |
260 f(562949951324160, 2097152); | |
261 f(562950219759615, 2097153); | |
262 f(1125899634212865, 4194303); | |
263 f(1125899902648320, 4194304); | |
264 f(1125900171083775, 4194305); | |
265 x = 268435456; | |
266 f(0, 0); | |
267 f(268435456, 1); | |
268 f(536870912, 2); | |
269 f(805306368, 3); | |
270 f(1073741824, 4); | |
271 f(1342177280, 5); | |
272 f(1879048192, 7); | |
273 f(2147483648, 8); | |
274 f(2415919104, 9); | |
275 f(4026531840, 15); | |
276 f(4294967296, 16); | |
277 f(4563402752, 17); | |
278 f(8321499136, 31); | |
279 f(8589934592, 32); | |
280 f(8858370048, 33); | |
281 f(16911433728, 63); | |
282 f(17179869184, 64); | |
283 f(17448304640, 65); | |
284 f(34091302912, 127); | |
285 f(34359738368, 128); | |
286 f(34628173824, 129); | |
287 f(68451041280, 255); | |
288 f(68719476736, 256); | |
289 f(68987912192, 257); | |
290 f(137170518016, 511); | |
291 f(137438953472, 512); | |
292 f(137707388928, 513); | |
293 f(274609471488, 1023); | |
294 f(274877906944, 1024); | |
295 f(275146342400, 1025); | |
296 f(549487378432, 2047); | |
297 f(549755813888, 2048); | |
298 f(550024249344, 2049); | |
299 f(1099243192320, 4095); | |
300 f(1099511627776, 4096); | |
301 f(1099780063232, 4097); | |
302 f(2198754820096, 8191); | |
303 f(2199023255552, 8192); | |
304 f(2199291691008, 8193); | |
305 f(4397778075648, 16383); | |
306 f(4398046511104, 16384); | |
307 f(4398314946560, 16385); | |
308 f(8795824586752, 32767); | |
309 f(8796093022208, 32768); | |
310 f(8796361457664, 32769); | |
311 f(17591917608960, 65535); | |
312 f(17592186044416, 65536); | |
313 f(17592454479872, 65537); | |
314 f(35184103653376, 131071); | |
315 f(35184372088832, 131072); | |
316 f(35184640524288, 131073); | |
317 f(70368475742208, 262143); | |
318 f(70368744177664, 262144); | |
319 f(70369012613120, 262145); | |
320 f(140737219919872, 524287); | |
321 f(140737488355328, 524288); | |
322 f(140737756790784, 524289); | |
323 f(281474708275200, 1048575); | |
324 f(281474976710656, 1048576); | |
325 f(281475245146112, 1048577); | |
326 f(562949684985856, 2097151); | |
327 f(562949953421312, 2097152); | |
328 f(562950221856768, 2097153); | |
329 f(1125899638407168, 4194303); | |
330 f(1125899906842624, 4194304); | |
331 f(1125900175278080, 4194305); | |
332 x = 268435457; | |
333 f(0, 0); | |
334 f(268435457, 1); | |
335 f(536870914, 2); | |
336 f(805306371, 3); | |
337 f(1073741828, 4); | |
338 f(1342177285, 5); | |
339 f(1879048199, 7); | |
340 f(2147483656, 8); | |
341 f(2415919113, 9); | |
342 f(4026531855, 15); | |
343 f(4294967312, 16); | |
344 f(4563402769, 17); | |
345 f(8321499167, 31); | |
346 f(8589934624, 32); | |
347 f(8858370081, 33); | |
348 f(16911433791, 63); | |
349 f(17179869248, 64); | |
350 f(17448304705, 65); | |
351 f(34091303039, 127); | |
352 f(34359738496, 128); | |
353 f(34628173953, 129); | |
354 f(68451041535, 255); | |
355 f(68719476992, 256); | |
356 f(68987912449, 257); | |
357 f(137170518527, 511); | |
358 f(137438953984, 512); | |
359 f(137707389441, 513); | |
360 f(274609472511, 1023); | |
361 f(274877907968, 1024); | |
362 f(275146343425, 1025); | |
363 f(549487380479, 2047); | |
364 f(549755815936, 2048); | |
365 f(550024251393, 2049); | |
366 f(1099243196415, 4095); | |
367 f(1099511631872, 4096); | |
368 f(1099780067329, 4097); | |
369 f(2198754828287, 8191); | |
370 f(2199023263744, 8192); | |
371 f(2199291699201, 8193); | |
372 f(4397778092031, 16383); | |
373 f(4398046527488, 16384); | |
374 f(4398314962945, 16385); | |
375 f(8795824619519, 32767); | |
376 f(8796093054976, 32768); | |
377 f(8796361490433, 32769); | |
378 f(17591917674495, 65535); | |
379 f(17592186109952, 65536); | |
380 f(17592454545409, 65537); | |
381 f(35184103784447, 131071); | |
382 f(35184372219904, 131072); | |
383 f(35184640655361, 131073); | |
384 f(70368476004351, 262143); | |
385 f(70368744439808, 262144); | |
386 f(70369012875265, 262145); | |
387 f(140737220444159, 524287); | |
388 f(140737488879616, 524288); | |
389 f(140737757315073, 524289); | |
390 f(281474709323775, 1048575); | |
391 f(281474977759232, 1048576); | |
392 f(281475246194689, 1048577); | |
393 f(562949687083007, 2097151); | |
394 f(562949955518464, 2097152); | |
395 f(562950223953921, 2097153); | |
396 f(1125899642601471, 4194303); | |
397 f(1125899911036928, 4194304); | |
398 f(1125900179472385, 4194305); | |
399 x = 536870911; | |
400 f(0, 0); | |
401 f(536870911, 1); | |
402 f(1073741822, 2); | |
403 f(1610612733, 3); | |
404 f(2147483644, 4); | |
405 f(2684354555, 5); | |
406 f(3758096377, 7); | |
407 f(4294967288, 8); | |
408 f(4831838199, 9); | |
409 f(8053063665, 15); | |
410 f(8589934576, 16); | |
411 f(9126805487, 17); | |
412 f(16642998241, 31); | |
413 f(17179869152, 32); | |
414 f(17716740063, 33); | |
415 f(33822867393, 63); | |
416 f(34359738304, 64); | |
417 f(34896609215, 65); | |
418 f(68182605697, 127); | |
419 f(68719476608, 128); | |
420 f(69256347519, 129); | |
421 f(136902082305, 255); | |
422 f(137438953216, 256); | |
423 f(137975824127, 257); | |
424 f(274341035521, 511); | |
425 f(274877906432, 512); | |
426 f(275414777343, 513); | |
427 f(549218941953, 1023); | |
428 f(549755812864, 1024); | |
429 f(550292683775, 1025); | |
430 f(1098974754817, 2047); | |
431 f(1099511625728, 2048); | |
432 f(1100048496639, 2049); | |
433 f(2198486380545, 4095); | |
434 f(2199023251456, 4096); | |
435 f(2199560122367, 4097); | |
436 f(4397509632001, 8191); | |
437 f(4398046502912, 8192); | |
438 f(4398583373823, 8193); | |
439 f(8795556134913, 16383); | |
440 f(8796093005824, 16384); | |
441 f(8796629876735, 16385); | |
442 f(17591649140737, 32767); | |
443 f(17592186011648, 32768); | |
444 f(17592722882559, 32769); | |
445 f(35183835152385, 65535); | |
446 f(35184372023296, 65536); | |
447 f(35184908894207, 65537); | |
448 f(70368207175681, 131071); | |
449 f(70368744046592, 131072); | |
450 f(70369280917503, 131073); | |
451 f(140736951222273, 262143); | |
452 f(140737488093184, 262144); | |
453 f(140738024964095, 262145); | |
454 f(281474439315457, 524287); | |
455 f(281474976186368, 524288); | |
456 f(281475513057279, 524289); | |
457 f(562949415501825, 1048575); | |
458 f(562949952372736, 1048576); | |
459 f(562950489243647, 1048577); | |
460 f(1125899367874561, 2097151); | |
461 f(1125899904745472, 2097152); | |
462 f(1125900441616383, 2097153); | |
463 x = 536870912; | |
464 f(0, 0); | |
465 f(536870912, 1); | |
466 f(1073741824, 2); | |
467 f(1610612736, 3); | |
468 f(2147483648, 4); | |
469 f(2684354560, 5); | |
470 f(3758096384, 7); | |
471 f(4294967296, 8); | |
472 f(4831838208, 9); | |
473 f(8053063680, 15); | |
474 f(8589934592, 16); | |
475 f(9126805504, 17); | |
476 f(16642998272, 31); | |
477 f(17179869184, 32); | |
478 f(17716740096, 33); | |
479 f(33822867456, 63); | |
480 f(34359738368, 64); | |
481 f(34896609280, 65); | |
482 f(68182605824, 127); | |
483 f(68719476736, 128); | |
484 f(69256347648, 129); | |
485 f(136902082560, 255); | |
486 f(137438953472, 256); | |
487 f(137975824384, 257); | |
488 f(274341036032, 511); | |
489 f(274877906944, 512); | |
490 f(275414777856, 513); | |
491 f(549218942976, 1023); | |
492 f(549755813888, 1024); | |
493 f(550292684800, 1025); | |
494 f(1098974756864, 2047); | |
495 f(1099511627776, 2048); | |
496 f(1100048498688, 2049); | |
497 f(2198486384640, 4095); | |
498 f(2199023255552, 4096); | |
499 f(2199560126464, 4097); | |
500 f(4397509640192, 8191); | |
501 f(4398046511104, 8192); | |
502 f(4398583382016, 8193); | |
503 f(8795556151296, 16383); | |
504 f(8796093022208, 16384); | |
505 f(8796629893120, 16385); | |
506 f(17591649173504, 32767); | |
507 f(17592186044416, 32768); | |
508 f(17592722915328, 32769); | |
509 f(35183835217920, 65535); | |
510 f(35184372088832, 65536); | |
511 f(35184908959744, 65537); | |
512 f(70368207306752, 131071); | |
513 f(70368744177664, 131072); | |
514 f(70369281048576, 131073); | |
515 f(140736951484416, 262143); | |
516 f(140737488355328, 262144); | |
517 f(140738025226240, 262145); | |
518 f(281474439839744, 524287); | |
519 f(281474976710656, 524288); | |
520 f(281475513581568, 524289); | |
521 f(562949416550400, 1048575); | |
522 f(562949953421312, 1048576); | |
523 f(562950490292224, 1048577); | |
524 f(1125899369971712, 2097151); | |
525 f(1125899906842624, 2097152); | |
526 f(1125900443713536, 2097153); | |
OLD | NEW |