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 = 1048577;
     59 f(0, 0);
     60 f(1048577, 1);
     61 f(2097154, 2);
     62 f(3145731, 3);
     63 f(4194308, 4);
     64 f(5242885, 5);
     65 f(7340039, 7);
     66 f(8388616, 8);
     67 f(9437193, 9);
     68 f(15728655, 15);
     69 f(16777232, 16);
     70 f(17825809, 17);
     71 f(32505887, 31);
     72 f(33554464, 32);
     73 f(34603041, 33);
     74 f(66060351, 63);
     75 f(67108928, 64);
     76 f(68157505, 65);
     77 f(133169279, 127);
     78 f(134217856, 128);
     79 f(135266433, 129);
     80 f(267387135, 255);
     81 f(268435712, 256);
     82 f(269484289, 257);
     83 f(535822847, 511);
     84 f(536871424, 512);
     85 f(537920001, 513);
     86 f(1072694271, 1023);
     87 f(1073742848, 1024);
     88 f(1074791425, 1025);
     89 f(2146437119, 2047);
     90 f(2147485696, 2048);
     91 f(2148534273, 2049);
     92 f(4293922815, 4095);
     93 f(4294971392, 4096);
     94 f(4296019969, 4097);
     95 f(8588894207, 8191);
     96 f(8589942784, 8192);
     97 f(8590991361, 8193);
     98 f(17178836991, 16383);
     99 f(17179885568, 16384);
    100 f(17180934145, 16385);
    101 f(34358722559, 32767);
    102 f(34359771136, 32768);
    103 f(34360819713, 32769);
    104 f(68718493695, 65535);
    105 f(68719542272, 65536);
    106 f(68720590849, 65537);
    107 f(137438035967, 131071);
    108 f(137439084544, 131072);
    109 f(137440133121, 131073);
    110 f(274877120511, 262143);
    111 f(274878169088, 262144);
    112 f(274879217665, 262145);
    113 f(549755289599, 524287);
    114 f(549756338176, 524288);
    115 f(549757386753, 524289);
    116 f(1099511627775, 1048575);
    117 f(1099512676352, 1048576);
    118 f(1099513724929, 1048577);
    119 x = 2097151;
    120 f(0, 0);
    121 f(2097151, 1);
    122 f(4194302, 2);
    123 f(6291453, 3);
    124 f(8388604, 4);
    125 f(10485755, 5);
    126 f(14680057, 7);
    127 f(16777208, 8);
    128 f(18874359, 9);
    129 f(31457265, 15);
    130 f(33554416, 16);
    131 f(35651567, 17);
    132 f(65011681, 31);
    133 f(67108832, 32);
    134 f(69205983, 33);
    135 f(132120513, 63);
    136 f(134217664, 64);
    137 f(136314815, 65);
    138 f(266338177, 127);
    139 f(268435328, 128);
    140 f(270532479, 129);
    141 f(534773505, 255);
    142 f(536870656, 256);
    143 f(538967807, 257);
    144 f(1071644161, 511);
    145 f(1073741312, 512);
    146 f(1075838463, 513);
    147 f(2145385473, 1023);
    148 f(2147482624, 1024);
    149 f(2149579775, 1025);
    150 f(4292868097, 2047);
    151 f(4294965248, 2048);
    152 f(4297062399, 2049);
    153 f(8587833345, 4095);
    154 f(8589930496, 4096);
    155 f(8592027647, 4097);
    156 f(17177763841, 8191);
    157 f(17179860992, 8192);
    158 f(17181958143, 8193);
    159 f(34357624833, 16383);
    160 f(34359721984, 16384);
    161 f(34361819135, 16385);
    162 f(68717346817, 32767);
    163 f(68719443968, 32768);
    164 f(68721541119, 32769);
    165 f(137436790785, 65535);
    166 f(137438887936, 65536);
    167 f(137440985087, 65537);
    168 f(274875678721, 131071);
    169 f(274877775872, 131072);
    170 f(274879873023, 131073);
    171 f(549753454593, 262143);
    172 f(549755551744, 262144);
    173 f(549757648895, 262145);
    174 f(1099509006337, 524287);
    175 f(1099511103488, 524288);
    176 f(1099513200639, 524289);
    177 f(2199020109825, 1048575);
    178 f(2199022206976, 1048576);
    179 f(2199024304127, 1048577);
    180 f(4398042316801, 2097151);
    181 x = 2097152;
    182 f(0, 0);
    183 f(2097152, 1);
    184 f(4194304, 2);
    185 f(6291456, 3);
    186 f(8388608, 4);
    187 f(10485760, 5);
    188 f(14680064, 7);
    189 f(16777216, 8);
    190 f(18874368, 9);
    191 f(31457280, 15);
    192 f(33554432, 16);
    193 f(35651584, 17);
    194 f(65011712, 31);
    195 f(67108864, 32);
    196 f(69206016, 33);
    197 f(132120576, 63);
    198 f(134217728, 64);
    199 f(136314880, 65);
    200 f(266338304, 127);
    201 f(268435456, 128);
    202 f(270532608, 129);
    203 f(534773760, 255);
    204 f(536870912, 256);
    205 f(538968064, 257);
    206 f(1071644672, 511);
    207 f(1073741824, 512);
    208 f(1075838976, 513);
    209 f(2145386496, 1023);
    210 f(2147483648, 1024);
    211 f(2149580800, 1025);
    212 f(4292870144, 2047);
    213 f(4294967296, 2048);
    214 f(4297064448, 2049);
    215 f(8587837440, 4095);
    216 f(8589934592, 4096);
    217 f(8592031744, 4097);
    218 f(17177772032, 8191);
    219 f(17179869184, 8192);
    220 f(17181966336, 8193);
    221 f(34357641216, 16383);
    222 f(34359738368, 16384);
    223 f(34361835520, 16385);
    224 f(68717379584, 32767);
    225 f(68719476736, 32768);
    226 f(68721573888, 32769);
    227 f(137436856320, 65535);
    228 f(137438953472, 65536);
    229 f(137441050624, 65537);
    230 f(274875809792, 131071);
    231 f(274877906944, 131072);
    232 f(274880004096, 131073);
    233 f(549753716736, 262143);
    234 f(549755813888, 262144);
    235 f(549757911040, 262145);
    236 f(1099509530624, 524287);
    237 f(1099511627776, 524288);
    238 f(1099513724928, 524289);
    239 f(2199021158400, 1048575);
    240 f(2199023255552, 1048576);
    241 f(2199025352704, 1048577);
    242 f(4398044413952, 2097151);
    243 f(4398046511104, 2097152);
    244 x = 2097153;
    245 f(0, 0);
    246 f(2097153, 1);
    247 f(4194306, 2);
    248 f(6291459, 3);
    249 f(8388612, 4);
    250 f(10485765, 5);
    251 f(14680071, 7);
    252 f(16777224, 8);
    253 f(18874377, 9);
    254 f(31457295, 15);
    255 f(33554448, 16);
    256 f(35651601, 17);
    257 f(65011743, 31);
    258 f(67108896, 32);
    259 f(69206049, 33);
    260 f(132120639, 63);
    261 f(134217792, 64);
    262 f(136314945, 65);
    263 f(266338431, 127);
    264 f(268435584, 128);
    265 f(270532737, 129);
    266 f(534774015, 255);
    267 f(536871168, 256);
    268 f(538968321, 257);
    269 f(1071645183, 511);
    270 f(1073742336, 512);
    271 f(1075839489, 513);
    272 f(2145387519, 1023);
    273 f(2147484672, 1024);
    274 f(2149581825, 1025);
    275 f(4292872191, 2047);
    276 f(4294969344, 2048);
    277 f(4297066497, 2049);
    278 f(8587841535, 4095);
    279 f(8589938688, 4096);
    280 f(8592035841, 4097);
    281 f(17177780223, 8191);
    282 f(17179877376, 8192);
    283 f(17181974529, 8193);
    284 f(34357657599, 16383);
    285 f(34359754752, 16384);
    286 f(34361851905, 16385);
    287 f(68717412351, 32767);
    288 f(68719509504, 32768);
    289 f(68721606657, 32769);
    290 f(137436921855, 65535);
    291 f(137439019008, 65536);
    292 f(137441116161, 65537);
    293 f(274875940863, 131071);
    294 f(274878038016, 131072);
    295 f(274880135169, 131073);
    296 f(549753978879, 262143);
    297 f(549756076032, 262144);
    298 f(549758173185, 262145);
    299 f(1099510054911, 524287);
    300 f(1099512152064, 524288);
    301 f(1099514249217, 524289);
    302 f(2199022206975, 1048575);
    303 f(2199024304128, 1048576);
    304 f(2199026401281, 1048577);
    305 f(4398046511103, 2097151);
    306 f(4398048608256, 2097152);
    307 f(4398050705409, 2097153);
    308 x = 4194303;
    309 f(0, 0);
    310 f(4194303, 1);
    311 f(8388606, 2);
    312 f(12582909, 3);
    313 f(16777212, 4);
    314 f(20971515, 5);
    315 f(29360121, 7);
    316 f(33554424, 8);
    317 f(37748727, 9);
    318 f(62914545, 15);
    319 f(67108848, 16);
    320 f(71303151, 17);
    321 f(130023393, 31);
    322 f(134217696, 32);
    323 f(138411999, 33);
    324 f(264241089, 63);
    325 f(268435392, 64);
    326 f(272629695, 65);
    327 f(532676481, 127);
    328 f(536870784, 128);
    329 f(541065087, 129);
    330 f(1069547265, 255);
    331 f(1073741568, 256);
    332 f(1077935871, 257);
    333 f(2143288833, 511);
    334 f(2147483136, 512);
    335 f(2151677439, 513);
    336 f(4290771969, 1023);
    337 f(4294966272, 1024);
    338 f(4299160575, 1025);
    339 f(8585738241, 2047);
    340 f(8589932544, 2048);
    341 f(8594126847, 2049);
    342 f(17175670785, 4095);
    343 f(17179865088, 4096);
    344 f(17184059391, 4097);
    345 f(34355535873, 8191);
    346 f(34359730176, 8192);
    347 f(34363924479, 8193);
    348 f(68715266049, 16383);
    349 f(68719460352, 16384);
    350 f(68723654655, 16385);
    351 f(137434726401, 32767);
    352 f(137438920704, 32768);
    353 f(137443115007, 32769);
    354 f(274873647105, 65535);
    355 f(274877841408, 65536);
    356 f(274882035711, 65537);
    357 f(549751488513, 131071);
    358 f(549755682816, 131072);
    359 f(549759877119, 131073);
    360 f(1099507171329, 262143);
    361 f(1099511365632, 262144);
    362 f(1099515559935, 262145);
    363 f(2199018536961, 524287);
    364 f(2199022731264, 524288);
    365 f(2199026925567, 524289);
    366 f(4398041268225, 1048575);
    367 f(4398045462528, 1048576);
    368 f(4398049656831, 1048577);
    369 f(8796086730753, 2097151);
    370 f(8796090925056, 2097152);
    371 f(8796095119359, 2097153);
    372 f(17592177655809, 4194303);
    373 x = 4194304;
    374 f(0, 0);
    375 f(4194304, 1);
    376 f(8388608, 2);
    377 f(12582912, 3);
    378 f(16777216, 4);
    379 f(20971520, 5);
    380 f(29360128, 7);
    381 f(33554432, 8);
    382 f(37748736, 9);
    383 f(62914560, 15);
    384 f(67108864, 16);
    385 f(71303168, 17);
    386 f(130023424, 31);
    387 f(134217728, 32);
    388 f(138412032, 33);
    389 f(264241152, 63);
    390 f(268435456, 64);
    391 f(272629760, 65);
    392 f(532676608, 127);
    393 f(536870912, 128);
    394 f(541065216, 129);
    395 f(1069547520, 255);
    396 f(1073741824, 256);
    397 f(1077936128, 257);
    398 f(2143289344, 511);
    399 f(2147483648, 512);
    400 f(2151677952, 513);
    401 f(4290772992, 1023);
    402 f(4294967296, 1024);
    403 f(4299161600, 1025);
    404 f(8585740288, 2047);
    405 f(8589934592, 2048);
    406 f(8594128896, 2049);
    407 f(17175674880, 4095);
    408 f(17179869184, 4096);
    409 f(17184063488, 4097);
    410 f(34355544064, 8191);
    411 f(34359738368, 8192);
    412 f(34363932672, 8193);
    413 f(68715282432, 16383);
    414 f(68719476736, 16384);
    415 f(68723671040, 16385);
    416 f(137434759168, 32767);
    417 f(137438953472, 32768);
    418 f(137443147776, 32769);
    419 f(274873712640, 65535);
    420 f(274877906944, 65536);
    421 f(274882101248, 65537);
    422 f(549751619584, 131071);
    423 f(549755813888, 131072);
    424 f(549760008192, 131073);
    425 f(1099507433472, 262143);
    426 f(1099511627776, 262144);
    427 f(1099515822080, 262145);
    428 f(2199019061248, 524287);
    429 f(2199023255552, 524288);
    430 f(2199027449856, 524289);
    431 f(4398042316800, 1048575);
    432 f(4398046511104, 1048576);
    433 f(4398050705408, 1048577);
    434 f(8796088827904, 2097151);
    435 f(8796093022208, 2097152);
    436 f(8796097216512, 2097153);
    437 f(17592181850112, 4194303);
    438 f(17592186044416, 4194304);
    439 x = 4194305;
    440 f(0, 0);
    441 f(4194305, 1);
    442 f(8388610, 2);
    443 f(12582915, 3);
    444 f(16777220, 4);
    445 f(20971525, 5);
    446 f(29360135, 7);
    447 f(33554440, 8);
    448 f(37748745, 9);
    449 f(62914575, 15);
    450 f(67108880, 16);
    451 f(71303185, 17);
    452 f(130023455, 31);
    453 f(134217760, 32);
    454 f(138412065, 33);
    455 f(264241215, 63);
    456 f(268435520, 64);
    457 f(272629825, 65);
    458 f(532676735, 127);
    459 f(536871040, 128);
    460 f(541065345, 129);
    461 f(1069547775, 255);
    462 f(1073742080, 256);
    463 f(1077936385, 257);
    464 f(2143289855, 511);
    465 f(2147484160, 512);
    466 f(2151678465, 513);
    467 f(4290774015, 1023);
    468 f(4294968320, 1024);
    469 f(4299162625, 1025);
    470 f(8585742335, 2047);
    471 f(8589936640, 2048);
    472 f(8594130945, 2049);
    473 f(17175678975, 4095);
    474 f(17179873280, 4096);
    475 f(17184067585, 4097);
    476 f(34355552255, 8191);
    477 f(34359746560, 8192);
    478 f(34363940865, 8193);
    479 f(68715298815, 16383);
    480 f(68719493120, 16384);
    481 f(68723687425, 16385);
    482 f(137434791935, 32767);
    483 f(137438986240, 32768);
    484 f(137443180545, 32769);
    485 f(274873778175, 65535);
    486 f(274877972480, 65536);
    487 f(274882166785, 65537);
    488 f(549751750655, 131071);
    489 f(549755944960, 131072);
    490 f(549760139265, 131073);
    491 f(1099507695615, 262143);
    492 f(1099511889920, 262144);
    493 f(1099516084225, 262145);
    494 f(2199019585535, 524287);
    495 f(2199023779840, 524288);
    496 f(2199027974145, 524289);
    497 f(4398043365375, 1048575);
    498 f(4398047559680, 1048576);
    499 f(4398051753985, 1048577);
    500 f(8796090925055, 2097151);
    501 f(8796095119360, 2097152);
    502 f(8796099313665, 2097153);
    503 f(17592186044415, 4194303);
    504 f(17592190238720, 4194304);
    505 f(17592194433025, 4194305);
    506