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 = 0; | |
59 f(0, 0); | |
60 x = 1; | |
61 f(0, 0); | |
62 f(1, 1); | |
63 x = 2; | |
64 f(0, 0); | |
65 f(2, 1); | |
66 f(4, 2); | |
67 x = 3; | |
68 f(0, 0); | |
69 f(3, 1); | |
70 f(6, 2); | |
71 f(9, 3); | |
72 x = 4; | |
73 f(0, 0); | |
74 f(4, 1); | |
75 f(8, 2); | |
76 f(12, 3); | |
77 f(16, 4); | |
78 x = 5; | |
79 f(0, 0); | |
80 f(5, 1); | |
81 f(10, 2); | |
82 f(15, 3); | |
83 f(20, 4); | |
84 f(25, 5); | |
85 x = 7; | |
86 f(0, 0); | |
87 f(7, 1); | |
88 f(14, 2); | |
89 f(21, 3); | |
90 f(28, 4); | |
91 f(35, 5); | |
92 f(49, 7); | |
93 x = 8; | |
94 f(0, 0); | |
95 f(8, 1); | |
96 f(16, 2); | |
97 f(24, 3); | |
98 f(32, 4); | |
99 f(40, 5); | |
100 f(56, 7); | |
101 f(64, 8); | |
102 x = 9; | |
103 f(0, 0); | |
104 f(9, 1); | |
105 f(18, 2); | |
106 f(27, 3); | |
107 f(36, 4); | |
108 f(45, 5); | |
109 f(63, 7); | |
110 f(72, 8); | |
111 f(81, 9); | |
112 x = 15; | |
113 f(0, 0); | |
114 f(15, 1); | |
115 f(30, 2); | |
116 f(45, 3); | |
117 f(60, 4); | |
118 f(75, 5); | |
119 f(105, 7); | |
120 f(120, 8); | |
121 f(135, 9); | |
122 f(225, 15); | |
123 x = 16; | |
124 f(0, 0); | |
125 f(16, 1); | |
126 f(32, 2); | |
127 f(48, 3); | |
128 f(64, 4); | |
129 f(80, 5); | |
130 f(112, 7); | |
131 f(128, 8); | |
132 f(144, 9); | |
133 f(240, 15); | |
134 f(256, 16); | |
135 x = 17; | |
136 f(0, 0); | |
137 f(17, 1); | |
138 f(34, 2); | |
139 f(51, 3); | |
140 f(68, 4); | |
141 f(85, 5); | |
142 f(119, 7); | |
143 f(136, 8); | |
144 f(153, 9); | |
145 f(255, 15); | |
146 f(272, 16); | |
147 f(289, 17); | |
148 x = 31; | |
149 f(0, 0); | |
150 f(31, 1); | |
151 f(62, 2); | |
152 f(93, 3); | |
153 f(124, 4); | |
154 f(155, 5); | |
155 f(217, 7); | |
156 f(248, 8); | |
157 f(279, 9); | |
158 f(465, 15); | |
159 f(496, 16); | |
160 f(527, 17); | |
161 f(961, 31); | |
162 x = 32; | |
163 f(0, 0); | |
164 f(32, 1); | |
165 f(64, 2); | |
166 f(96, 3); | |
167 f(128, 4); | |
168 f(160, 5); | |
169 f(224, 7); | |
170 f(256, 8); | |
171 f(288, 9); | |
172 f(480, 15); | |
173 f(512, 16); | |
174 f(544, 17); | |
175 f(992, 31); | |
176 f(1024, 32); | |
177 x = 33; | |
178 f(0, 0); | |
179 f(33, 1); | |
180 f(66, 2); | |
181 f(99, 3); | |
182 f(132, 4); | |
183 f(165, 5); | |
184 f(231, 7); | |
185 f(264, 8); | |
186 f(297, 9); | |
187 f(495, 15); | |
188 f(528, 16); | |
189 f(561, 17); | |
190 f(1023, 31); | |
191 f(1056, 32); | |
192 f(1089, 33); | |
193 x = 63; | |
194 f(0, 0); | |
195 f(63, 1); | |
196 f(126, 2); | |
197 f(189, 3); | |
198 f(252, 4); | |
199 f(315, 5); | |
200 f(441, 7); | |
201 f(504, 8); | |
202 f(567, 9); | |
203 f(945, 15); | |
204 f(1008, 16); | |
205 f(1071, 17); | |
206 f(1953, 31); | |
207 f(2016, 32); | |
208 f(2079, 33); | |
209 f(3969, 63); | |
210 x = 64; | |
211 f(0, 0); | |
212 f(64, 1); | |
213 f(128, 2); | |
214 f(192, 3); | |
215 f(256, 4); | |
216 f(320, 5); | |
217 f(448, 7); | |
218 f(512, 8); | |
219 f(576, 9); | |
220 f(960, 15); | |
221 f(1024, 16); | |
222 f(1088, 17); | |
223 f(1984, 31); | |
224 f(2048, 32); | |
225 f(2112, 33); | |
226 f(4032, 63); | |
227 f(4096, 64); | |
228 x = 65; | |
229 f(0, 0); | |
230 f(65, 1); | |
231 f(130, 2); | |
232 f(195, 3); | |
233 f(260, 4); | |
234 f(325, 5); | |
235 f(455, 7); | |
236 f(520, 8); | |
237 f(585, 9); | |
238 f(975, 15); | |
239 f(1040, 16); | |
240 f(1105, 17); | |
241 f(2015, 31); | |
242 f(2080, 32); | |
243 f(2145, 33); | |
244 f(4095, 63); | |
245 f(4160, 64); | |
246 f(4225, 65); | |
247 x = 127; | |
248 f(0, 0); | |
249 f(127, 1); | |
250 f(254, 2); | |
251 f(381, 3); | |
252 f(508, 4); | |
253 f(635, 5); | |
254 f(889, 7); | |
255 f(1016, 8); | |
256 f(1143, 9); | |
257 f(1905, 15); | |
258 f(2032, 16); | |
259 f(2159, 17); | |
260 f(3937, 31); | |
261 f(4064, 32); | |
262 f(4191, 33); | |
263 f(8001, 63); | |
264 f(8128, 64); | |
265 f(8255, 65); | |
266 f(16129, 127); | |
267 x = 128; | |
268 f(0, 0); | |
269 f(128, 1); | |
270 f(256, 2); | |
271 f(384, 3); | |
272 f(512, 4); | |
273 f(640, 5); | |
274 f(896, 7); | |
275 f(1024, 8); | |
276 f(1152, 9); | |
277 f(1920, 15); | |
278 f(2048, 16); | |
279 f(2176, 17); | |
280 f(3968, 31); | |
281 f(4096, 32); | |
282 f(4224, 33); | |
283 f(8064, 63); | |
284 f(8192, 64); | |
285 f(8320, 65); | |
286 f(16256, 127); | |
287 f(16384, 128); | |
288 x = 129; | |
289 f(0, 0); | |
290 f(129, 1); | |
291 f(258, 2); | |
292 f(387, 3); | |
293 f(516, 4); | |
294 f(645, 5); | |
295 f(903, 7); | |
296 f(1032, 8); | |
297 f(1161, 9); | |
298 f(1935, 15); | |
299 f(2064, 16); | |
300 f(2193, 17); | |
301 f(3999, 31); | |
302 f(4128, 32); | |
303 f(4257, 33); | |
304 f(8127, 63); | |
305 f(8256, 64); | |
306 f(8385, 65); | |
307 f(16383, 127); | |
308 f(16512, 128); | |
309 f(16641, 129); | |
310 x = 255; | |
311 f(0, 0); | |
312 f(255, 1); | |
313 f(510, 2); | |
314 f(765, 3); | |
315 f(1020, 4); | |
316 f(1275, 5); | |
317 f(1785, 7); | |
318 f(2040, 8); | |
319 f(2295, 9); | |
320 f(3825, 15); | |
321 f(4080, 16); | |
322 f(4335, 17); | |
323 f(7905, 31); | |
324 f(8160, 32); | |
325 f(8415, 33); | |
326 f(16065, 63); | |
327 f(16320, 64); | |
328 f(16575, 65); | |
329 f(32385, 127); | |
330 f(32640, 128); | |
331 f(32895, 129); | |
332 f(65025, 255); | |
333 x = 256; | |
334 f(0, 0); | |
335 f(256, 1); | |
336 f(512, 2); | |
337 f(768, 3); | |
338 f(1024, 4); | |
339 f(1280, 5); | |
340 f(1792, 7); | |
341 f(2048, 8); | |
342 f(2304, 9); | |
343 f(3840, 15); | |
344 f(4096, 16); | |
345 f(4352, 17); | |
346 f(7936, 31); | |
347 f(8192, 32); | |
348 f(8448, 33); | |
349 f(16128, 63); | |
350 f(16384, 64); | |
351 f(16640, 65); | |
352 f(32512, 127); | |
353 f(32768, 128); | |
354 f(33024, 129); | |
355 f(65280, 255); | |
356 f(65536, 256); | |
357 x = 257; | |
358 f(0, 0); | |
359 f(257, 1); | |
360 f(514, 2); | |
361 f(771, 3); | |
362 f(1028, 4); | |
363 f(1285, 5); | |
364 f(1799, 7); | |
365 f(2056, 8); | |
366 f(2313, 9); | |
367 f(3855, 15); | |
368 f(4112, 16); | |
369 f(4369, 17); | |
370 f(7967, 31); | |
371 f(8224, 32); | |
372 f(8481, 33); | |
373 f(16191, 63); | |
374 f(16448, 64); | |
375 f(16705, 65); | |
376 f(32639, 127); | |
377 f(32896, 128); | |
378 f(33153, 129); | |
379 f(65535, 255); | |
380 f(65792, 256); | |
381 f(66049, 257); | |
382 x = 511; | |
383 f(0, 0); | |
384 f(511, 1); | |
385 f(1022, 2); | |
386 f(1533, 3); | |
387 f(2044, 4); | |
388 f(2555, 5); | |
389 f(3577, 7); | |
390 f(4088, 8); | |
391 f(4599, 9); | |
392 f(7665, 15); | |
393 f(8176, 16); | |
394 f(8687, 17); | |
395 f(15841, 31); | |
396 f(16352, 32); | |
397 f(16863, 33); | |
398 f(32193, 63); | |
399 f(32704, 64); | |
400 f(33215, 65); | |
401 f(64897, 127); | |
402 f(65408, 128); | |
403 f(65919, 129); | |
404 f(130305, 255); | |
405 f(130816, 256); | |
406 f(131327, 257); | |
407 f(261121, 511); | |
408 x = 512; | |
409 f(0, 0); | |
410 f(512, 1); | |
411 f(1024, 2); | |
412 f(1536, 3); | |
413 f(2048, 4); | |
414 f(2560, 5); | |
415 f(3584, 7); | |
416 f(4096, 8); | |
417 f(4608, 9); | |
418 f(7680, 15); | |
419 f(8192, 16); | |
420 f(8704, 17); | |
421 f(15872, 31); | |
422 f(16384, 32); | |
423 f(16896, 33); | |
424 f(32256, 63); | |
425 f(32768, 64); | |
426 f(33280, 65); | |
427 f(65024, 127); | |
428 f(65536, 128); | |
429 f(66048, 129); | |
430 f(130560, 255); | |
431 f(131072, 256); | |
432 f(131584, 257); | |
433 f(261632, 511); | |
434 f(262144, 512); | |
435 x = 513; | |
436 f(0, 0); | |
437 f(513, 1); | |
438 f(1026, 2); | |
439 f(1539, 3); | |
440 f(2052, 4); | |
441 f(2565, 5); | |
442 f(3591, 7); | |
443 f(4104, 8); | |
444 f(4617, 9); | |
445 f(7695, 15); | |
446 f(8208, 16); | |
447 f(8721, 17); | |
448 f(15903, 31); | |
449 f(16416, 32); | |
450 f(16929, 33); | |
451 f(32319, 63); | |
452 f(32832, 64); | |
453 f(33345, 65); | |
454 f(65151, 127); | |
455 f(65664, 128); | |
456 f(66177, 129); | |
457 f(130815, 255); | |
458 f(131328, 256); | |
459 f(131841, 257); | |
460 f(262143, 511); | |
461 f(262656, 512); | |
462 f(263169, 513); | |
463 x = 1023; | |
464 f(0, 0); | |
465 f(1023, 1); | |
466 f(2046, 2); | |
467 f(3069, 3); | |
468 f(4092, 4); | |
469 f(5115, 5); | |
470 f(7161, 7); | |
471 f(8184, 8); | |
472 f(9207, 9); | |
473 f(15345, 15); | |
474 f(16368, 16); | |
475 f(17391, 17); | |
476 f(31713, 31); | |
477 f(32736, 32); | |
478 f(33759, 33); | |
479 f(64449, 63); | |
480 f(65472, 64); | |
481 f(66495, 65); | |
482 f(129921, 127); | |
483 f(130944, 128); | |
484 f(131967, 129); | |
485 f(260865, 255); | |
486 f(261888, 256); | |
487 f(262911, 257); | |
488 f(522753, 511); | |
489 f(523776, 512); | |
490 f(524799, 513); | |
491 f(1046529, 1023); | |
OLD | NEW |