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 = 1024;
     59 f(0, 0);
     60 f(1024, 1);
     61 f(2048, 2);
     62 f(3072, 3);
     63 f(4096, 4);
     64 f(5120, 5);
     65 f(7168, 7);
     66 f(8192, 8);
     67 f(9216, 9);
     68 f(15360, 15);
     69 f(16384, 16);
     70 f(17408, 17);
     71 f(31744, 31);
     72 f(32768, 32);
     73 f(33792, 33);
     74 f(64512, 63);
     75 f(65536, 64);
     76 f(66560, 65);
     77 f(130048, 127);
     78 f(131072, 128);
     79 f(132096, 129);
     80 f(261120, 255);
     81 f(262144, 256);
     82 f(263168, 257);
     83 f(523264, 511);
     84 f(524288, 512);
     85 f(525312, 513);
     86 f(1047552, 1023);
     87 f(1048576, 1024);
     88 x = 1025;
     89 f(0, 0);
     90 f(1025, 1);
     91 f(2050, 2);
     92 f(3075, 3);
     93 f(4100, 4);
     94 f(5125, 5);
     95 f(7175, 7);
     96 f(8200, 8);
     97 f(9225, 9);
     98 f(15375, 15);
     99 f(16400, 16);
    100 f(17425, 17);
    101 f(31775, 31);
    102 f(32800, 32);
    103 f(33825, 33);
    104 f(64575, 63);
    105 f(65600, 64);
    106 f(66625, 65);
    107 f(130175, 127);
    108 f(131200, 128);
    109 f(132225, 129);
    110 f(261375, 255);
    111 f(262400, 256);
    112 f(263425, 257);
    113 f(523775, 511);
    114 f(524800, 512);
    115 f(525825, 513);
    116 f(1048575, 1023);
    117 f(1049600, 1024);
    118 f(1050625, 1025);
    119 x = 2047;
    120 f(0, 0);
    121 f(2047, 1);
    122 f(4094, 2);
    123 f(6141, 3);
    124 f(8188, 4);
    125 f(10235, 5);
    126 f(14329, 7);
    127 f(16376, 8);
    128 f(18423, 9);
    129 f(30705, 15);
    130 f(32752, 16);
    131 f(34799, 17);
    132 f(63457, 31);
    133 f(65504, 32);
    134 f(67551, 33);
    135 f(128961, 63);
    136 f(131008, 64);
    137 f(133055, 65);
    138 f(259969, 127);
    139 f(262016, 128);
    140 f(264063, 129);
    141 f(521985, 255);
    142 f(524032, 256);
    143 f(526079, 257);
    144 f(1046017, 511);
    145 f(1048064, 512);
    146 f(1050111, 513);
    147 f(2094081, 1023);
    148 f(2096128, 1024);
    149 f(2098175, 1025);
    150 f(4190209, 2047);
    151 x = 2048;
    152 f(0, 0);
    153 f(2048, 1);
    154 f(4096, 2);
    155 f(6144, 3);
    156 f(8192, 4);
    157 f(10240, 5);
    158 f(14336, 7);
    159 f(16384, 8);
    160 f(18432, 9);
    161 f(30720, 15);
    162 f(32768, 16);
    163 f(34816, 17);
    164 f(63488, 31);
    165 f(65536, 32);
    166 f(67584, 33);
    167 f(129024, 63);
    168 f(131072, 64);
    169 f(133120, 65);
    170 f(260096, 127);
    171 f(262144, 128);
    172 f(264192, 129);
    173 f(522240, 255);
    174 f(524288, 256);
    175 f(526336, 257);
    176 f(1046528, 511);
    177 f(1048576, 512);
    178 f(1050624, 513);
    179 f(2095104, 1023);
    180 f(2097152, 1024);
    181 f(2099200, 1025);
    182 f(4192256, 2047);
    183 f(4194304, 2048);
    184 x = 2049;
    185 f(0, 0);
    186 f(2049, 1);
    187 f(4098, 2);
    188 f(6147, 3);
    189 f(8196, 4);
    190 f(10245, 5);
    191 f(14343, 7);
    192 f(16392, 8);
    193 f(18441, 9);
    194 f(30735, 15);
    195 f(32784, 16);
    196 f(34833, 17);
    197 f(63519, 31);
    198 f(65568, 32);
    199 f(67617, 33);
    200 f(129087, 63);
    201 f(131136, 64);
    202 f(133185, 65);
    203 f(260223, 127);
    204 f(262272, 128);
    205 f(264321, 129);
    206 f(522495, 255);
    207 f(524544, 256);
    208 f(526593, 257);
    209 f(1047039, 511);
    210 f(1049088, 512);
    211 f(1051137, 513);
    212 f(2096127, 1023);
    213 f(2098176, 1024);
    214 f(2100225, 1025);
    215 f(4194303, 2047);
    216 f(4196352, 2048);
    217 f(4198401, 2049);
    218 x = 4095;
    219 f(0, 0);
    220 f(4095, 1);
    221 f(8190, 2);
    222 f(12285, 3);
    223 f(16380, 4);
    224 f(20475, 5);
    225 f(28665, 7);
    226 f(32760, 8);
    227 f(36855, 9);
    228 f(61425, 15);
    229 f(65520, 16);
    230 f(69615, 17);
    231 f(126945, 31);
    232 f(131040, 32);
    233 f(135135, 33);
    234 f(257985, 63);
    235 f(262080, 64);
    236 f(266175, 65);
    237 f(520065, 127);
    238 f(524160, 128);
    239 f(528255, 129);
    240 f(1044225, 255);
    241 f(1048320, 256);
    242 f(1052415, 257);
    243 f(2092545, 511);
    244 f(2096640, 512);
    245 f(2100735, 513);
    246 f(4189185, 1023);
    247 f(4193280, 1024);
    248 f(4197375, 1025);
    249 f(8382465, 2047);
    250 f(8386560, 2048);
    251 f(8390655, 2049);
    252 f(16769025, 4095);
    253 x = 4096;
    254 f(0, 0);
    255 f(4096, 1);
    256 f(8192, 2);
    257 f(12288, 3);
    258 f(16384, 4);
    259 f(20480, 5);
    260 f(28672, 7);
    261 f(32768, 8);
    262 f(36864, 9);
    263 f(61440, 15);
    264 f(65536, 16);
    265 f(69632, 17);
    266 f(126976, 31);
    267 f(131072, 32);
    268 f(135168, 33);
    269 f(258048, 63);
    270 f(262144, 64);
    271 f(266240, 65);
    272 f(520192, 127);
    273 f(524288, 128);
    274 f(528384, 129);
    275 f(1044480, 255);
    276 f(1048576, 256);
    277 f(1052672, 257);
    278 f(2093056, 511);
    279 f(2097152, 512);
    280 f(2101248, 513);
    281 f(4190208, 1023);
    282 f(4194304, 1024);
    283 f(4198400, 1025);
    284 f(8384512, 2047);
    285 f(8388608, 2048);
    286 f(8392704, 2049);
    287 f(16773120, 4095);
    288 f(16777216, 4096);
    289 x = 4097;
    290 f(0, 0);
    291 f(4097, 1);
    292 f(8194, 2);
    293 f(12291, 3);
    294 f(16388, 4);
    295 f(20485, 5);
    296 f(28679, 7);
    297 f(32776, 8);
    298 f(36873, 9);
    299 f(61455, 15);
    300 f(65552, 16);
    301 f(69649, 17);
    302 f(127007, 31);
    303 f(131104, 32);
    304 f(135201, 33);
    305 f(258111, 63);
    306 f(262208, 64);
    307 f(266305, 65);
    308 f(520319, 127);
    309 f(524416, 128);
    310 f(528513, 129);
    311 f(1044735, 255);
    312 f(1048832, 256);
    313 f(1052929, 257);
    314 f(2093567, 511);
    315 f(2097664, 512);
    316 f(2101761, 513);
    317 f(4191231, 1023);
    318 f(4195328, 1024);
    319 f(4199425, 1025);
    320 f(8386559, 2047);
    321 f(8390656, 2048);
    322 f(8394753, 2049);
    323 f(16777215, 4095);
    324 f(16781312, 4096);
    325 f(16785409, 4097);
    326 x = 8191;
    327 f(0, 0);
    328 f(8191, 1);
    329 f(16382, 2);
    330 f(24573, 3);
    331 f(32764, 4);
    332 f(40955, 5);
    333 f(57337, 7);
    334 f(65528, 8);
    335 f(73719, 9);
    336 f(122865, 15);
    337 f(131056, 16);
    338 f(139247, 17);
    339 f(253921, 31);
    340 f(262112, 32);
    341 f(270303, 33);
    342 f(516033, 63);
    343 f(524224, 64);
    344 f(532415, 65);
    345 f(1040257, 127);
    346 f(1048448, 128);
    347 f(1056639, 129);
    348 f(2088705, 255);
    349 f(2096896, 256);
    350 f(2105087, 257);
    351 f(4185601, 511);
    352 f(4193792, 512);
    353 f(4201983, 513);
    354 f(8379393, 1023);
    355 f(8387584, 1024);
    356 f(8395775, 1025);
    357 f(16766977, 2047);
    358 f(16775168, 2048);
    359 f(16783359, 2049);
    360 f(33542145, 4095);
    361 f(33550336, 4096);
    362 f(33558527, 4097);
    363 f(67092481, 8191);
    364 x = 8192;
    365 f(0, 0);
    366 f(8192, 1);
    367 f(16384, 2);
    368 f(24576, 3);
    369 f(32768, 4);
    370 f(40960, 5);
    371 f(57344, 7);
    372 f(65536, 8);
    373 f(73728, 9);
    374 f(122880, 15);
    375 f(131072, 16);
    376 f(139264, 17);
    377 f(253952, 31);
    378 f(262144, 32);
    379 f(270336, 33);
    380 f(516096, 63);
    381 f(524288, 64);
    382 f(532480, 65);
    383 f(1040384, 127);
    384 f(1048576, 128);
    385 f(1056768, 129);
    386 f(2088960, 255);
    387 f(2097152, 256);
    388 f(2105344, 257);
    389 f(4186112, 511);
    390 f(4194304, 512);
    391 f(4202496, 513);
    392 f(8380416, 1023);
    393 f(8388608, 1024);
    394 f(8396800, 1025);
    395 f(16769024, 2047);
    396 f(16777216, 2048);
    397 f(16785408, 2049);
    398 f(33546240, 4095);
    399 f(33554432, 4096);
    400 f(33562624, 4097);
    401 f(67100672, 8191);
    402 f(67108864, 8192);
    403 x = 8193;
    404 f(0, 0);
    405 f(8193, 1);
    406 f(16386, 2);
    407 f(24579, 3);
    408 f(32772, 4);
    409 f(40965, 5);
    410 f(57351, 7);
    411 f(65544, 8);
    412 f(73737, 9);
    413 f(122895, 15);
    414 f(131088, 16);
    415 f(139281, 17);
    416 f(253983, 31);
    417 f(262176, 32);
    418 f(270369, 33);
    419 f(516159, 63);
    420 f(524352, 64);
    421 f(532545, 65);
    422 f(1040511, 127);
    423 f(1048704, 128);
    424 f(1056897, 129);
    425 f(2089215, 255);
    426 f(2097408, 256);
    427 f(2105601, 257);
    428 f(4186623, 511);
    429 f(4194816, 512);
    430 f(4203009, 513);
    431 f(8381439, 1023);
    432 f(8389632, 1024);
    433 f(8397825, 1025);
    434 f(16771071, 2047);
    435 f(16779264, 2048);
    436 f(16787457, 2049);
    437 f(33550335, 4095);
    438 f(33558528, 4096);
    439 f(33566721, 4097);
    440 f(67108863, 8191);
    441 f(67117056, 8192);
    442 f(67125249, 8193);
    443 x = 16383;
    444 f(0, 0);
    445 f(16383, 1);
    446 f(32766, 2);
    447 f(49149, 3);
    448 f(65532, 4);
    449 f(81915, 5);
    450 f(114681, 7);
    451 f(131064, 8);
    452 f(147447, 9);
    453 f(245745, 15);
    454 f(262128, 16);
    455 f(278511, 17);
    456 f(507873, 31);
    457 f(524256, 32);
    458 f(540639, 33);
    459 f(1032129, 63);
    460 f(1048512, 64);
    461 f(1064895, 65);
    462 f(2080641, 127);
    463 f(2097024, 128);
    464 f(2113407, 129);
    465 f(4177665, 255);
    466 f(4194048, 256);
    467 f(4210431, 257);
    468 f(8371713, 511);
    469 f(8388096, 512);
    470 f(8404479, 513);
    471 f(16759809, 1023);
    472 f(16776192, 1024);
    473 f(16792575, 1025);
    474 f(33536001, 2047);
    475 f(33552384, 2048);
    476 f(33568767, 2049);
    477 f(67088385, 4095);
    478 f(67104768, 4096);
    479 f(67121151, 4097);
    480 f(134193153, 8191);
    481 f(134209536, 8192);
    482 f(134225919, 8193);
    483 f(268402689, 16383);
    484 x = 16384;
    485 f(0, 0);
    486 f(16384, 1);
    487 f(32768, 2);
    488 f(49152, 3);
    489 f(65536, 4);
    490 f(81920, 5);
    491 f(114688, 7);
    492 f(131072, 8);
    493 f(147456, 9);
    494 f(245760, 15);
    495 f(262144, 16);
    496 f(278528, 17);
    497 f(507904, 31);
    498 f(524288, 32);
    499 f(540672, 33);
    500 f(1032192, 63);
    501 f(1048576, 64);
    502 f(1064960, 65);
    503 f(2080768, 127);
    504 f(2097152, 128);
    505 f(2113536, 129);
    506 f(4177920, 255);
    507 f(4194304, 256);
    508 f(4210688, 257);
    509 f(8372224, 511);
    510 f(8388608, 512);
    511 f(8404992, 513);
    512 f(16760832, 1023);
    513 f(16777216, 1024);
    514 f(16793600, 1025);
    515 f(33538048, 2047);
    516 f(33554432, 2048);
    517 f(33570816, 2049);
    518 f(67092480, 4095);
    519 f(67108864, 4096);
    520 f(67125248, 4097);
    521 f(134201344, 8191);
    522 f(134217728, 8192);
    523 f(134234112, 8193);
    524 f(268419072, 16383);
    525 f(268435456, 16384);
    526