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 = 33554432;
     59 f(0, 0);
     60 f(33554432, 1);
     61 f(67108864, 2);
     62 f(100663296, 3);
     63 f(134217728, 4);
     64 f(167772160, 5);
     65 f(234881024, 7);
     66 f(268435456, 8);
     67 f(301989888, 9);
     68 f(503316480, 15);
     69 f(536870912, 16);
     70 f(570425344, 17);
     71 f(1040187392, 31);
     72 f(1073741824, 32);
     73 f(1107296256, 33);
     74 f(2113929216, 63);
     75 f(2147483648, 64);
     76 f(2181038080, 65);
     77 f(4261412864, 127);
     78 f(4294967296, 128);
     79 f(4328521728, 129);
     80 f(8556380160, 255);
     81 f(8589934592, 256);
     82 f(8623489024, 257);
     83 f(17146314752, 511);
     84 f(17179869184, 512);
     85 f(17213423616, 513);
     86 f(34326183936, 1023);
     87 f(34359738368, 1024);
     88 f(34393292800, 1025);
     89 f(68685922304, 2047);
     90 f(68719476736, 2048);
     91 f(68753031168, 2049);
     92 f(137405399040, 4095);
     93 f(137438953472, 4096);
     94 f(137472507904, 4097);
     95 f(274844352512, 8191);
     96 f(274877906944, 8192);
     97 f(274911461376, 8193);
     98 f(549722259456, 16383);
     99 f(549755813888, 16384);
    100 f(549789368320, 16385);
    101 f(1099478073344, 32767);
    102 f(1099511627776, 32768);
    103 f(1099545182208, 32769);
    104 f(2198989701120, 65535);
    105 f(2199023255552, 65536);
    106 f(2199056809984, 65537);
    107 f(4398012956672, 131071);
    108 f(4398046511104, 131072);
    109 f(4398080065536, 131073);
    110 f(8796059467776, 262143);
    111 f(8796093022208, 262144);
    112 f(8796126576640, 262145);
    113 f(17592152489984, 524287);
    114 f(17592186044416, 524288);
    115 f(17592219598848, 524289);
    116 f(35184338534400, 1048575);
    117 f(35184372088832, 1048576);
    118 f(35184405643264, 1048577);
    119 f(70368710623232, 2097151);
    120 f(70368744177664, 2097152);
    121 f(70368777732096, 2097153);
    122 f(140737454800896, 4194303);
    123 f(140737488355328, 4194304);
    124 f(140737521909760, 4194305);
    125 f(281474943156224, 8388607);
    126 f(281474976710656, 8388608);
    127 f(281475010265088, 8388609);
    128 f(562949919866880, 16777215);
    129 f(562949953421312, 16777216);
    130 f(562949986975744, 16777217);
    131 f(1125899873288192, 33554431);
    132 f(1125899906842624, 33554432);
    133 x = 33554433;
    134 f(0, 0);
    135 f(33554433, 1);
    136 f(67108866, 2);
    137 f(100663299, 3);
    138 f(134217732, 4);
    139 f(167772165, 5);
    140 f(234881031, 7);
    141 f(268435464, 8);
    142 f(301989897, 9);
    143 f(503316495, 15);
    144 f(536870928, 16);
    145 f(570425361, 17);
    146 f(1040187423, 31);
    147 f(1073741856, 32);
    148 f(1107296289, 33);
    149 f(2113929279, 63);
    150 f(2147483712, 64);
    151 f(2181038145, 65);
    152 f(4261412991, 127);
    153 f(4294967424, 128);
    154 f(4328521857, 129);
    155 f(8556380415, 255);
    156 f(8589934848, 256);
    157 f(8623489281, 257);
    158 f(17146315263, 511);
    159 f(17179869696, 512);
    160 f(17213424129, 513);
    161 f(34326184959, 1023);
    162 f(34359739392, 1024);
    163 f(34393293825, 1025);
    164 f(68685924351, 2047);
    165 f(68719478784, 2048);
    166 f(68753033217, 2049);
    167 f(137405403135, 4095);
    168 f(137438957568, 4096);
    169 f(137472512001, 4097);
    170 f(274844360703, 8191);
    171 f(274877915136, 8192);
    172 f(274911469569, 8193);
    173 f(549722275839, 16383);
    174 f(549755830272, 16384);
    175 f(549789384705, 16385);
    176 f(1099478106111, 32767);
    177 f(1099511660544, 32768);
    178 f(1099545214977, 32769);
    179 f(2198989766655, 65535);
    180 f(2199023321088, 65536);
    181 f(2199056875521, 65537);
    182 f(4398013087743, 131071);
    183 f(4398046642176, 131072);
    184 f(4398080196609, 131073);
    185 f(8796059729919, 262143);
    186 f(8796093284352, 262144);
    187 f(8796126838785, 262145);
    188 f(17592153014271, 524287);
    189 f(17592186568704, 524288);
    190 f(17592220123137, 524289);
    191 f(35184339582975, 1048575);
    192 f(35184373137408, 1048576);
    193 f(35184406691841, 1048577);
    194 f(70368712720383, 2097151);
    195 f(70368746274816, 2097152);
    196 f(70368779829249, 2097153);
    197 f(140737458995199, 4194303);
    198 f(140737492549632, 4194304);
    199 f(140737526104065, 4194305);
    200 f(281474951544831, 8388607);
    201 f(281474985099264, 8388608);
    202 f(281475018653697, 8388609);
    203 f(562949936644095, 16777215);
    204 f(562949970198528, 16777216);
    205 f(562950003752961, 16777217);
    206 f(1125899906842623, 33554431);
    207 f(1125899940397056, 33554432);
    208 f(1125899973951489, 33554433);
    209 x = 67108863;
    210 f(0, 0);
    211 f(67108863, 1);
    212 f(134217726, 2);
    213 f(201326589, 3);
    214 f(268435452, 4);
    215 f(335544315, 5);
    216 f(469762041, 7);
    217 f(536870904, 8);
    218 f(603979767, 9);
    219 f(1006632945, 15);
    220 f(1073741808, 16);
    221 f(1140850671, 17);
    222 f(2080374753, 31);
    223 f(2147483616, 32);
    224 f(2214592479, 33);
    225 f(4227858369, 63);
    226 f(4294967232, 64);
    227 f(4362076095, 65);
    228 f(8522825601, 127);
    229 f(8589934464, 128);
    230 f(8657043327, 129);
    231 f(17112760065, 255);
    232 f(17179868928, 256);
    233 f(17246977791, 257);
    234 f(34292628993, 511);
    235 f(34359737856, 512);
    236 f(34426846719, 513);
    237 f(68652366849, 1023);
    238 f(68719475712, 1024);
    239 f(68786584575, 1025);
    240 f(137371842561, 2047);
    241 f(137438951424, 2048);
    242 f(137506060287, 2049);
    243 f(274810793985, 4095);
    244 f(274877902848, 4096);
    245 f(274945011711, 4097);
    246 f(549688696833, 8191);
    247 f(549755805696, 8192);
    248 f(549822914559, 8193);
    249 f(1099444502529, 16383);
    250 f(1099511611392, 16384);
    251 f(1099578720255, 16385);
    252 f(2198956113921, 32767);
    253 f(2199023222784, 32768);
    254 f(2199090331647, 32769);
    255 f(4397979336705, 65535);
    256 f(4398046445568, 65536);
    257 f(4398113554431, 65537);
    258 f(8796025782273, 131071);
    259 f(8796092891136, 131072);
    260 f(8796159999999, 131073);
    261 f(17592118673409, 262143);
    262 f(17592185782272, 262144);
    263 f(17592252891135, 262145);
    264 f(35184304455681, 524287);
    265 f(35184371564544, 524288);
    266 f(35184438673407, 524289);
    267 f(70368676020225, 1048575);
    268 f(70368743129088, 1048576);
    269 f(70368810237951, 1048577);
    270 f(140737419149313, 2097151);
    271 f(140737486258176, 2097152);
    272 f(140737553367039, 2097153);
    273 f(281474905407489, 4194303);
    274 f(281474972516352, 4194304);
    275 f(281475039625215, 4194305);
    276 f(562949877923841, 8388607);
    277 f(562949945032704, 8388608);
    278 f(562950012141567, 8388609);
    279 f(1125899822956545, 16777215);
    280 f(1125899890065408, 16777216);
    281 f(1125899957174271, 16777217);
    282 x = 67108864;
    283 f(0, 0);
    284 f(67108864, 1);
    285 f(134217728, 2);
    286 f(201326592, 3);
    287 f(268435456, 4);
    288 f(335544320, 5);
    289 f(469762048, 7);
    290 f(536870912, 8);
    291 f(603979776, 9);
    292 f(1006632960, 15);
    293 f(1073741824, 16);
    294 f(1140850688, 17);
    295 f(2080374784, 31);
    296 f(2147483648, 32);
    297 f(2214592512, 33);
    298 f(4227858432, 63);
    299 f(4294967296, 64);
    300 f(4362076160, 65);
    301 f(8522825728, 127);
    302 f(8589934592, 128);
    303 f(8657043456, 129);
    304 f(17112760320, 255);
    305 f(17179869184, 256);
    306 f(17246978048, 257);
    307 f(34292629504, 511);
    308 f(34359738368, 512);
    309 f(34426847232, 513);
    310 f(68652367872, 1023);
    311 f(68719476736, 1024);
    312 f(68786585600, 1025);
    313 f(137371844608, 2047);
    314 f(137438953472, 2048);
    315 f(137506062336, 2049);
    316 f(274810798080, 4095);
    317 f(274877906944, 4096);
    318 f(274945015808, 4097);
    319 f(549688705024, 8191);
    320 f(549755813888, 8192);
    321 f(549822922752, 8193);
    322 f(1099444518912, 16383);
    323 f(1099511627776, 16384);
    324 f(1099578736640, 16385);
    325 f(2198956146688, 32767);
    326 f(2199023255552, 32768);
    327 f(2199090364416, 32769);
    328 f(4397979402240, 65535);
    329 f(4398046511104, 65536);
    330 f(4398113619968, 65537);
    331 f(8796025913344, 131071);
    332 f(8796093022208, 131072);
    333 f(8796160131072, 131073);
    334 f(17592118935552, 262143);
    335 f(17592186044416, 262144);
    336 f(17592253153280, 262145);
    337 f(35184304979968, 524287);
    338 f(35184372088832, 524288);
    339 f(35184439197696, 524289);
    340 f(70368677068800, 1048575);
    341 f(70368744177664, 1048576);
    342 f(70368811286528, 1048577);
    343 f(140737421246464, 2097151);
    344 f(140737488355328, 2097152);
    345 f(140737555464192, 2097153);
    346 f(281474909601792, 4194303);
    347 f(281474976710656, 4194304);
    348 f(281475043819520, 4194305);
    349 f(562949886312448, 8388607);
    350 f(562949953421312, 8388608);
    351 f(562950020530176, 8388609);
    352 f(1125899839733760, 16777215);
    353 f(1125899906842624, 16777216);
    354 f(1125899973951488, 16777217);
    355 x = 67108865;
    356 f(0, 0);
    357 f(67108865, 1);
    358 f(134217730, 2);
    359 f(201326595, 3);
    360 f(268435460, 4);
    361 f(335544325, 5);
    362 f(469762055, 7);
    363 f(536870920, 8);
    364 f(603979785, 9);
    365 f(1006632975, 15);
    366 f(1073741840, 16);
    367 f(1140850705, 17);
    368 f(2080374815, 31);
    369 f(2147483680, 32);
    370 f(2214592545, 33);
    371 f(4227858495, 63);
    372 f(4294967360, 64);
    373 f(4362076225, 65);
    374 f(8522825855, 127);
    375 f(8589934720, 128);
    376 f(8657043585, 129);
    377 f(17112760575, 255);
    378 f(17179869440, 256);
    379 f(17246978305, 257);
    380 f(34292630015, 511);
    381 f(34359738880, 512);
    382 f(34426847745, 513);
    383 f(68652368895, 1023);
    384 f(68719477760, 1024);
    385 f(68786586625, 1025);
    386 f(137371846655, 2047);
    387 f(137438955520, 2048);
    388 f(137506064385, 2049);
    389 f(274810802175, 4095);
    390 f(274877911040, 4096);
    391 f(274945019905, 4097);
    392 f(549688713215, 8191);
    393 f(549755822080, 8192);
    394 f(549822930945, 8193);
    395 f(1099444535295, 16383);
    396 f(1099511644160, 16384);
    397 f(1099578753025, 16385);
    398 f(2198956179455, 32767);
    399 f(2199023288320, 32768);
    400 f(2199090397185, 32769);
    401 f(4397979467775, 65535);
    402 f(4398046576640, 65536);
    403 f(4398113685505, 65537);
    404 f(8796026044415, 131071);
    405 f(8796093153280, 131072);
    406 f(8796160262145, 131073);
    407 f(17592119197695, 262143);
    408 f(17592186306560, 262144);
    409 f(17592253415425, 262145);
    410 f(35184305504255, 524287);
    411 f(35184372613120, 524288);
    412 f(35184439721985, 524289);
    413 f(70368678117375, 1048575);
    414 f(70368745226240, 1048576);
    415 f(70368812335105, 1048577);
    416 f(140737423343615, 2097151);
    417 f(140737490452480, 2097152);
    418 f(140737557561345, 2097153);
    419 f(281474913796095, 4194303);
    420 f(281474980904960, 4194304);
    421 f(281475048013825, 4194305);
    422 f(562949894701055, 8388607);
    423 f(562949961809920, 8388608);
    424 f(562950028918785, 8388609);
    425 f(1125899856510975, 16777215);
    426 f(1125899923619840, 16777216);
    427 f(1125899990728705, 16777217);
    428 x = 134217727;
    429 f(0, 0);
    430 f(134217727, 1);
    431 f(268435454, 2);
    432 f(402653181, 3);
    433 f(536870908, 4);
    434 f(671088635, 5);
    435 f(939524089, 7);
    436 f(1073741816, 8);
    437 f(1207959543, 9);
    438 f(2013265905, 15);
    439 f(2147483632, 16);
    440 f(2281701359, 17);
    441 f(4160749537, 31);
    442 f(4294967264, 32);
    443 f(4429184991, 33);
    444 f(8455716801, 63);
    445 f(8589934528, 64);
    446 f(8724152255, 65);
    447 f(17045651329, 127);
    448 f(17179869056, 128);
    449 f(17314086783, 129);
    450 f(34225520385, 255);
    451 f(34359738112, 256);
    452 f(34493955839, 257);
    453 f(68585258497, 511);
    454 f(68719476224, 512);
    455 f(68853693951, 513);
    456 f(137304734721, 1023);
    457 f(137438952448, 1024);
    458 f(137573170175, 1025);
    459 f(274743687169, 2047);
    460 f(274877904896, 2048);
    461 f(275012122623, 2049);
    462 f(549621592065, 4095);
    463 f(549755809792, 4096);
    464 f(549890027519, 4097);
    465 f(1099377401857, 8191);
    466 f(1099511619584, 8192);
    467 f(1099645837311, 8193);
    468 f(2198889021441, 16383);
    469 f(2199023239168, 16384);
    470 f(2199157456895, 16385);
    471 f(4397912260609, 32767);
    472 f(4398046478336, 32768);
    473 f(4398180696063, 32769);
    474 f(8795958738945, 65535);
    475 f(8796092956672, 65536);
    476 f(8796227174399, 65537);
    477 f(17592051695617, 131071);
    478 f(17592185913344, 131072);
    479 f(17592320131071, 131073);
    480 f(35184237608961, 262143);
    481 f(35184371826688, 262144);
    482 f(35184506044415, 262145);
    483 f(70368609435649, 524287);
    484 f(70368743653376, 524288);
    485 f(70368877871103, 524289);
    486 f(140737353089025, 1048575);
    487 f(140737487306752, 1048576);
    488 f(140737621524479, 1048577);
    489 f(281474840395777, 2097151);
    490 f(281474974613504, 2097152);
    491 f(281475108831231, 2097153);
    492 f(562949815009281, 4194303);
    493 f(562949949227008, 4194304);
    494 f(562950083444735, 4194305);
    495 f(1125899764236289, 8388607);
    496 f(1125899898454016, 8388608);
    497 f(1125900032671743, 8388609);
    498