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 = 4294967296;
     59 f(0, 0);
     60 f(4294967296, 1);
     61 f(8589934592, 2);
     62 f(12884901888, 3);
     63 f(17179869184, 4);
     64 f(21474836480, 5);
     65 f(30064771072, 7);
     66 f(34359738368, 8);
     67 f(38654705664, 9);
     68 f(64424509440, 15);
     69 f(68719476736, 16);
     70 f(73014444032, 17);
     71 f(133143986176, 31);
     72 f(137438953472, 32);
     73 f(141733920768, 33);
     74 f(270582939648, 63);
     75 f(274877906944, 64);
     76 f(279172874240, 65);
     77 f(545460846592, 127);
     78 f(549755813888, 128);
     79 f(554050781184, 129);
     80 f(1095216660480, 255);
     81 f(1099511627776, 256);
     82 f(1103806595072, 257);
     83 f(2194728288256, 511);
     84 f(2199023255552, 512);
     85 f(2203318222848, 513);
     86 f(4393751543808, 1023);
     87 f(4398046511104, 1024);
     88 f(4402341478400, 1025);
     89 f(8791798054912, 2047);
     90 f(8796093022208, 2048);
     91 f(8800387989504, 2049);
     92 f(17587891077120, 4095);
     93 f(17592186044416, 4096);
     94 f(17596481011712, 4097);
     95 f(35180077121536, 8191);
     96 f(35184372088832, 8192);
     97 f(35188667056128, 8193);
     98 f(70364449210368, 16383);
     99 f(70368744177664, 16384);
    100 f(70373039144960, 16385);
    101 f(140733193388032, 32767);
    102 f(140737488355328, 32768);
    103 f(140741783322624, 32769);
    104 f(281470681743360, 65535);
    105 f(281474976710656, 65536);
    106 f(281479271677952, 65537);
    107 f(562945658454016, 131071);
    108 f(562949953421312, 131072);
    109 f(562954248388608, 131073);
    110 f(1125895611875328, 262143);
    111 f(1125899906842624, 262144);
    112 f(1125904201809920, 262145);
    113 x = 4294967297;
    114 f(0, 0);
    115 f(4294967297, 1);
    116 f(8589934594, 2);
    117 f(12884901891, 3);
    118 f(17179869188, 4);
    119 f(21474836485, 5);
    120 f(30064771079, 7);
    121 f(34359738376, 8);
    122 f(38654705673, 9);
    123 f(64424509455, 15);
    124 f(68719476752, 16);
    125 f(73014444049, 17);
    126 f(133143986207, 31);
    127 f(137438953504, 32);
    128 f(141733920801, 33);
    129 f(270582939711, 63);
    130 f(274877907008, 64);
    131 f(279172874305, 65);
    132 f(545460846719, 127);
    133 f(549755814016, 128);
    134 f(554050781313, 129);
    135 f(1095216660735, 255);
    136 f(1099511628032, 256);
    137 f(1103806595329, 257);
    138 f(2194728288767, 511);
    139 f(2199023256064, 512);
    140 f(2203318223361, 513);
    141 f(4393751544831, 1023);
    142 f(4398046512128, 1024);
    143 f(4402341479425, 1025);
    144 f(8791798056959, 2047);
    145 f(8796093024256, 2048);
    146 f(8800387991553, 2049);
    147 f(17587891081215, 4095);
    148 f(17592186048512, 4096);
    149 f(17596481015809, 4097);
    150 f(35180077129727, 8191);
    151 f(35184372097024, 8192);
    152 f(35188667064321, 8193);
    153 f(70364449226751, 16383);
    154 f(70368744194048, 16384);
    155 f(70373039161345, 16385);
    156 f(140733193420799, 32767);
    157 f(140737488388096, 32768);
    158 f(140741783355393, 32769);
    159 f(281470681808895, 65535);
    160 f(281474976776192, 65536);
    161 f(281479271743489, 65537);
    162 f(562945658585087, 131071);
    163 f(562949953552384, 131072);
    164 f(562954248519681, 131073);
    165 f(1125895612137471, 262143);
    166 f(1125899907104768, 262144);
    167 f(1125904202072065, 262145);
    168 x = 8589934591;
    169 f(0, 0);
    170 f(8589934591, 1);
    171 f(17179869182, 2);
    172 f(25769803773, 3);
    173 f(34359738364, 4);
    174 f(42949672955, 5);
    175 f(60129542137, 7);
    176 f(68719476728, 8);
    177 f(77309411319, 9);
    178 f(128849018865, 15);
    179 f(137438953456, 16);
    180 f(146028888047, 17);
    181 f(266287972321, 31);
    182 f(274877906912, 32);
    183 f(283467841503, 33);
    184 f(541165879233, 63);
    185 f(549755813824, 64);
    186 f(558345748415, 65);
    187 f(1090921693057, 127);
    188 f(1099511627648, 128);
    189 f(1108101562239, 129);
    190 f(2190433320705, 255);
    191 f(2199023255296, 256);
    192 f(2207613189887, 257);
    193 f(4389456576001, 511);
    194 f(4398046510592, 512);
    195 f(4406636445183, 513);
    196 f(8787503086593, 1023);
    197 f(8796093021184, 1024);
    198 f(8804682955775, 1025);
    199 f(17583596107777, 2047);
    200 f(17592186042368, 2048);
    201 f(17600775976959, 2049);
    202 f(35175782150145, 4095);
    203 f(35184372084736, 4096);
    204 f(35192962019327, 4097);
    205 f(70360154234881, 8191);
    206 f(70368744169472, 8192);
    207 f(70377334104063, 8193);
    208 f(140728898404353, 16383);
    209 f(140737488338944, 16384);
    210 f(140746078273535, 16385);
    211 f(281466386743297, 32767);
    212 f(281474976677888, 32768);
    213 f(281483566612479, 32769);
    214 f(562941363421185, 65535);
    215 f(562949953355776, 65536);
    216 f(562958543290367, 65537);
    217 f(1125891316776961, 131071);
    218 f(1125899906711552, 131072);
    219 f(1125908496646143, 131073);
    220 x = 8589934592;
    221 f(0, 0);
    222 f(8589934592, 1);
    223 f(17179869184, 2);
    224 f(25769803776, 3);
    225 f(34359738368, 4);
    226 f(42949672960, 5);
    227 f(60129542144, 7);
    228 f(68719476736, 8);
    229 f(77309411328, 9);
    230 f(128849018880, 15);
    231 f(137438953472, 16);
    232 f(146028888064, 17);
    233 f(266287972352, 31);
    234 f(274877906944, 32);
    235 f(283467841536, 33);
    236 f(541165879296, 63);
    237 f(549755813888, 64);
    238 f(558345748480, 65);
    239 f(1090921693184, 127);
    240 f(1099511627776, 128);
    241 f(1108101562368, 129);
    242 f(2190433320960, 255);
    243 f(2199023255552, 256);
    244 f(2207613190144, 257);
    245 f(4389456576512, 511);
    246 f(4398046511104, 512);
    247 f(4406636445696, 513);
    248 f(8787503087616, 1023);
    249 f(8796093022208, 1024);
    250 f(8804682956800, 1025);
    251 f(17583596109824, 2047);
    252 f(17592186044416, 2048);
    253 f(17600775979008, 2049);
    254 f(35175782154240, 4095);
    255 f(35184372088832, 4096);
    256 f(35192962023424, 4097);
    257 f(70360154243072, 8191);
    258 f(70368744177664, 8192);
    259 f(70377334112256, 8193);
    260 f(140728898420736, 16383);
    261 f(140737488355328, 16384);
    262 f(140746078289920, 16385);
    263 f(281466386776064, 32767);
    264 f(281474976710656, 32768);
    265 f(281483566645248, 32769);
    266 f(562941363486720, 65535);
    267 f(562949953421312, 65536);
    268 f(562958543355904, 65537);
    269 f(1125891316908032, 131071);
    270 f(1125899906842624, 131072);
    271 f(1125908496777216, 131073);
    272 x = 8589934593;
    273 f(0, 0);
    274 f(8589934593, 1);
    275 f(17179869186, 2);
    276 f(25769803779, 3);
    277 f(34359738372, 4);
    278 f(42949672965, 5);
    279 f(60129542151, 7);
    280 f(68719476744, 8);
    281 f(77309411337, 9);
    282 f(128849018895, 15);
    283 f(137438953488, 16);
    284 f(146028888081, 17);
    285 f(266287972383, 31);
    286 f(274877906976, 32);
    287 f(283467841569, 33);
    288 f(541165879359, 63);
    289 f(549755813952, 64);
    290 f(558345748545, 65);
    291 f(1090921693311, 127);
    292 f(1099511627904, 128);
    293 f(1108101562497, 129);
    294 f(2190433321215, 255);
    295 f(2199023255808, 256);
    296 f(2207613190401, 257);
    297 f(4389456577023, 511);
    298 f(4398046511616, 512);
    299 f(4406636446209, 513);
    300 f(8787503088639, 1023);
    301 f(8796093023232, 1024);
    302 f(8804682957825, 1025);
    303 f(17583596111871, 2047);
    304 f(17592186046464, 2048);
    305 f(17600775981057, 2049);
    306 f(35175782158335, 4095);
    307 f(35184372092928, 4096);
    308 f(35192962027521, 4097);
    309 f(70360154251263, 8191);
    310 f(70368744185856, 8192);
    311 f(70377334120449, 8193);
    312 f(140728898437119, 16383);
    313 f(140737488371712, 16384);
    314 f(140746078306305, 16385);
    315 f(281466386808831, 32767);
    316 f(281474976743424, 32768);
    317 f(281483566678017, 32769);
    318 f(562941363552255, 65535);
    319 f(562949953486848, 65536);
    320 f(562958543421441, 65537);
    321 f(1125891317039103, 131071);
    322 f(1125899906973696, 131072);
    323 f(1125908496908289, 131073);
    324 x = 17179869183;
    325 f(0, 0);
    326 f(17179869183, 1);
    327 f(34359738366, 2);
    328 f(51539607549, 3);
    329 f(68719476732, 4);
    330 f(85899345915, 5);
    331 f(120259084281, 7);
    332 f(137438953464, 8);
    333 f(154618822647, 9);
    334 f(257698037745, 15);
    335 f(274877906928, 16);
    336 f(292057776111, 17);
    337 f(532575944673, 31);
    338 f(549755813856, 32);
    339 f(566935683039, 33);
    340 f(1082331758529, 63);
    341 f(1099511627712, 64);
    342 f(1116691496895, 65);
    343 f(2181843386241, 127);
    344 f(2199023255424, 128);
    345 f(2216203124607, 129);
    346 f(4380866641665, 255);
    347 f(4398046510848, 256);
    348 f(4415226380031, 257);
    349 f(8778913152513, 511);
    350 f(8796093021696, 512);
    351 f(8813272890879, 513);
    352 f(17575006174209, 1023);
    353 f(17592186043392, 1024);
    354 f(17609365912575, 1025);
    355 f(35167192217601, 2047);
    356 f(35184372086784, 2048);
    357 f(35201551955967, 2049);
    358 f(70351564304385, 4095);
    359 f(70368744173568, 4096);
    360 f(70385924042751, 4097);
    361 f(140720308477953, 8191);
    362 f(140737488347136, 8192);
    363 f(140754668216319, 8193);
    364 f(281457796825089, 16383);
    365 f(281474976694272, 16384);
    366 f(281492156563455, 16385);
    367 f(562932773519361, 32767);
    368 f(562949953388544, 32768);
    369 f(562967133257727, 32769);
    370 f(1125882726907905, 65535);
    371 f(1125899906777088, 65536);
    372 f(1125917086646271, 65537);
    373 x = 17179869184;
    374 f(0, 0);
    375 f(17179869184, 1);
    376 f(34359738368, 2);
    377 f(51539607552, 3);
    378 f(68719476736, 4);
    379 f(85899345920, 5);
    380 f(120259084288, 7);
    381 f(137438953472, 8);
    382 f(154618822656, 9);
    383 f(257698037760, 15);
    384 f(274877906944, 16);
    385 f(292057776128, 17);
    386 f(532575944704, 31);
    387 f(549755813888, 32);
    388 f(566935683072, 33);
    389 f(1082331758592, 63);
    390 f(1099511627776, 64);
    391 f(1116691496960, 65);
    392 f(2181843386368, 127);
    393 f(2199023255552, 128);
    394 f(2216203124736, 129);
    395 f(4380866641920, 255);
    396 f(4398046511104, 256);
    397 f(4415226380288, 257);
    398 f(8778913153024, 511);
    399 f(8796093022208, 512);
    400 f(8813272891392, 513);
    401 f(17575006175232, 1023);
    402 f(17592186044416, 1024);
    403 f(17609365913600, 1025);
    404 f(35167192219648, 2047);
    405 f(35184372088832, 2048);
    406 f(35201551958016, 2049);
    407 f(70351564308480, 4095);
    408 f(70368744177664, 4096);
    409 f(70385924046848, 4097);
    410 f(140720308486144, 8191);
    411 f(140737488355328, 8192);
    412 f(140754668224512, 8193);
    413 f(281457796841472, 16383);
    414 f(281474976710656, 16384);
    415 f(281492156579840, 16385);
    416 f(562932773552128, 32767);
    417 f(562949953421312, 32768);
    418 f(562967133290496, 32769);
    419 f(1125882726973440, 65535);
    420 f(1125899906842624, 65536);
    421 f(1125917086711808, 65537);
    422 x = 17179869185;
    423 f(0, 0);
    424 f(17179869185, 1);
    425 f(34359738370, 2);
    426 f(51539607555, 3);
    427 f(68719476740, 4);
    428 f(85899345925, 5);
    429 f(120259084295, 7);
    430 f(137438953480, 8);
    431 f(154618822665, 9);
    432 f(257698037775, 15);
    433 f(274877906960, 16);
    434 f(292057776145, 17);
    435 f(532575944735, 31);
    436 f(549755813920, 32);
    437 f(566935683105, 33);
    438 f(1082331758655, 63);
    439 f(1099511627840, 64);
    440 f(1116691497025, 65);
    441 f(2181843386495, 127);
    442 f(2199023255680, 128);
    443 f(2216203124865, 129);
    444 f(4380866642175, 255);
    445 f(4398046511360, 256);
    446 f(4415226380545, 257);
    447 f(8778913153535, 511);
    448 f(8796093022720, 512);
    449 f(8813272891905, 513);
    450 f(17575006176255, 1023);
    451 f(17592186045440, 1024);
    452 f(17609365914625, 1025);
    453 f(35167192221695, 2047);
    454 f(35184372090880, 2048);
    455 f(35201551960065, 2049);
    456 f(70351564312575, 4095);
    457 f(70368744181760, 4096);
    458 f(70385924050945, 4097);
    459 f(140720308494335, 8191);
    460 f(140737488363520, 8192);
    461 f(140754668232705, 8193);
    462 f(281457796857855, 16383);
    463 f(281474976727040, 16384);
    464 f(281492156596225, 16385);
    465 f(562932773584895, 32767);
    466 f(562949953454080, 32768);
    467 f(562967133323265, 32769);
    468 f(1125882727038975, 65535);
    469 f(1125899906908160, 65536);
    470 f(1125917086777345, 65537);
    471