Home | History | Annotate | Download | only in mjsunit
      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);
    492