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 = 262143;
     59 f(0, 0);
     60 f(262143, 1);
     61 f(524286, 2);
     62 f(786429, 3);
     63 f(1048572, 4);
     64 f(1310715, 5);
     65 f(1835001, 7);
     66 f(2097144, 8);
     67 f(2359287, 9);
     68 f(3932145, 15);
     69 f(4194288, 16);
     70 f(4456431, 17);
     71 f(8126433, 31);
     72 f(8388576, 32);
     73 f(8650719, 33);
     74 f(16515009, 63);
     75 f(16777152, 64);
     76 f(17039295, 65);
     77 f(33292161, 127);
     78 f(33554304, 128);
     79 f(33816447, 129);
     80 f(66846465, 255);
     81 f(67108608, 256);
     82 f(67370751, 257);
     83 f(133955073, 511);
     84 f(134217216, 512);
     85 f(134479359, 513);
     86 f(268172289, 1023);
     87 f(268434432, 1024);
     88 f(268696575, 1025);
     89 f(536606721, 2047);
     90 f(536868864, 2048);
     91 f(537131007, 2049);
     92 f(1073475585, 4095);
     93 f(1073737728, 4096);
     94 f(1073999871, 4097);
     95 f(2147213313, 8191);
     96 f(2147475456, 8192);
     97 f(2147737599, 8193);
     98 f(4294688769, 16383);
     99 f(4294950912, 16384);
    100 f(4295213055, 16385);
    101 f(8589639681, 32767);
    102 f(8589901824, 32768);
    103 f(8590163967, 32769);
    104 f(17179541505, 65535);
    105 f(17179803648, 65536);
    106 f(17180065791, 65537);
    107 f(34359345153, 131071);
    108 f(34359607296, 131072);
    109 f(34359869439, 131073);
    110 f(68718952449, 262143);
    111 x = 262144;
    112 f(0, 0);
    113 f(262144, 1);
    114 f(524288, 2);
    115 f(786432, 3);
    116 f(1048576, 4);
    117 f(1310720, 5);
    118 f(1835008, 7);
    119 f(2097152, 8);
    120 f(2359296, 9);
    121 f(3932160, 15);
    122 f(4194304, 16);
    123 f(4456448, 17);
    124 f(8126464, 31);
    125 f(8388608, 32);
    126 f(8650752, 33);
    127 f(16515072, 63);
    128 f(16777216, 64);
    129 f(17039360, 65);
    130 f(33292288, 127);
    131 f(33554432, 128);
    132 f(33816576, 129);
    133 f(66846720, 255);
    134 f(67108864, 256);
    135 f(67371008, 257);
    136 f(133955584, 511);
    137 f(134217728, 512);
    138 f(134479872, 513);
    139 f(268173312, 1023);
    140 f(268435456, 1024);
    141 f(268697600, 1025);
    142 f(536608768, 2047);
    143 f(536870912, 2048);
    144 f(537133056, 2049);
    145 f(1073479680, 4095);
    146 f(1073741824, 4096);
    147 f(1074003968, 4097);
    148 f(2147221504, 8191);
    149 f(2147483648, 8192);
    150 f(2147745792, 8193);
    151 f(4294705152, 16383);
    152 f(4294967296, 16384);
    153 f(4295229440, 16385);
    154 f(8589672448, 32767);
    155 f(8589934592, 32768);
    156 f(8590196736, 32769);
    157 f(17179607040, 65535);
    158 f(17179869184, 65536);
    159 f(17180131328, 65537);
    160 f(34359476224, 131071);
    161 f(34359738368, 131072);
    162 f(34360000512, 131073);
    163 f(68719214592, 262143);
    164 f(68719476736, 262144);
    165 x = 262145;
    166 f(0, 0);
    167 f(262145, 1);
    168 f(524290, 2);
    169 f(786435, 3);
    170 f(1048580, 4);
    171 f(1310725, 5);
    172 f(1835015, 7);
    173 f(2097160, 8);
    174 f(2359305, 9);
    175 f(3932175, 15);
    176 f(4194320, 16);
    177 f(4456465, 17);
    178 f(8126495, 31);
    179 f(8388640, 32);
    180 f(8650785, 33);
    181 f(16515135, 63);
    182 f(16777280, 64);
    183 f(17039425, 65);
    184 f(33292415, 127);
    185 f(33554560, 128);
    186 f(33816705, 129);
    187 f(66846975, 255);
    188 f(67109120, 256);
    189 f(67371265, 257);
    190 f(133956095, 511);
    191 f(134218240, 512);
    192 f(134480385, 513);
    193 f(268174335, 1023);
    194 f(268436480, 1024);
    195 f(268698625, 1025);
    196 f(536610815, 2047);
    197 f(536872960, 2048);
    198 f(537135105, 2049);
    199 f(1073483775, 4095);
    200 f(1073745920, 4096);
    201 f(1074008065, 4097);
    202 f(2147229695, 8191);
    203 f(2147491840, 8192);
    204 f(2147753985, 8193);
    205 f(4294721535, 16383);
    206 f(4294983680, 16384);
    207 f(4295245825, 16385);
    208 f(8589705215, 32767);
    209 f(8589967360, 32768);
    210 f(8590229505, 32769);
    211 f(17179672575, 65535);
    212 f(17179934720, 65536);
    213 f(17180196865, 65537);
    214 f(34359607295, 131071);
    215 f(34359869440, 131072);
    216 f(34360131585, 131073);
    217 f(68719476735, 262143);
    218 f(68719738880, 262144);
    219 f(68720001025, 262145);
    220 x = 524287;
    221 f(0, 0);
    222 f(524287, 1);
    223 f(1048574, 2);
    224 f(1572861, 3);
    225 f(2097148, 4);
    226 f(2621435, 5);
    227 f(3670009, 7);
    228 f(4194296, 8);
    229 f(4718583, 9);
    230 f(7864305, 15);
    231 f(8388592, 16);
    232 f(8912879, 17);
    233 f(16252897, 31);
    234 f(16777184, 32);
    235 f(17301471, 33);
    236 f(33030081, 63);
    237 f(33554368, 64);
    238 f(34078655, 65);
    239 f(66584449, 127);
    240 f(67108736, 128);
    241 f(67633023, 129);
    242 f(133693185, 255);
    243 f(134217472, 256);
    244 f(134741759, 257);
    245 f(267910657, 511);
    246 f(268434944, 512);
    247 f(268959231, 513);
    248 f(536345601, 1023);
    249 f(536869888, 1024);
    250 f(537394175, 1025);
    251 f(1073215489, 2047);
    252 f(1073739776, 2048);
    253 f(1074264063, 2049);
    254 f(2146955265, 4095);
    255 f(2147479552, 4096);
    256 f(2148003839, 4097);
    257 f(4294434817, 8191);
    258 f(4294959104, 8192);
    259 f(4295483391, 8193);
    260 f(8589393921, 16383);
    261 f(8589918208, 16384);
    262 f(8590442495, 16385);
    263 f(17179312129, 32767);
    264 f(17179836416, 32768);
    265 f(17180360703, 32769);
    266 f(34359148545, 65535);
    267 f(34359672832, 65536);
    268 f(34360197119, 65537);
    269 f(68718821377, 131071);
    270 f(68719345664, 131072);
    271 f(68719869951, 131073);
    272 f(137438167041, 262143);
    273 f(137438691328, 262144);
    274 f(137439215615, 262145);
    275 f(274876858369, 524287);
    276 x = 524288;
    277 f(0, 0);
    278 f(524288, 1);
    279 f(1048576, 2);
    280 f(1572864, 3);
    281 f(2097152, 4);
    282 f(2621440, 5);
    283 f(3670016, 7);
    284 f(4194304, 8);
    285 f(4718592, 9);
    286 f(7864320, 15);
    287 f(8388608, 16);
    288 f(8912896, 17);
    289 f(16252928, 31);
    290 f(16777216, 32);
    291 f(17301504, 33);
    292 f(33030144, 63);
    293 f(33554432, 64);
    294 f(34078720, 65);
    295 f(66584576, 127);
    296 f(67108864, 128);
    297 f(67633152, 129);
    298 f(133693440, 255);
    299 f(134217728, 256);
    300 f(134742016, 257);
    301 f(267911168, 511);
    302 f(268435456, 512);
    303 f(268959744, 513);
    304 f(536346624, 1023);
    305 f(536870912, 1024);
    306 f(537395200, 1025);
    307 f(1073217536, 2047);
    308 f(1073741824, 2048);
    309 f(1074266112, 2049);
    310 f(2146959360, 4095);
    311 f(2147483648, 4096);
    312 f(2148007936, 4097);
    313 f(4294443008, 8191);
    314 f(4294967296, 8192);
    315 f(4295491584, 8193);
    316 f(8589410304, 16383);
    317 f(8589934592, 16384);
    318 f(8590458880, 16385);
    319 f(17179344896, 32767);
    320 f(17179869184, 32768);
    321 f(17180393472, 32769);
    322 f(34359214080, 65535);
    323 f(34359738368, 65536);
    324 f(34360262656, 65537);
    325 f(68718952448, 131071);
    326 f(68719476736, 131072);
    327 f(68720001024, 131073);
    328 f(137438429184, 262143);
    329 f(137438953472, 262144);
    330 f(137439477760, 262145);
    331 f(274877382656, 524287);
    332 f(274877906944, 524288);
    333 x = 524289;
    334 f(0, 0);
    335 f(524289, 1);
    336 f(1048578, 2);
    337 f(1572867, 3);
    338 f(2097156, 4);
    339 f(2621445, 5);
    340 f(3670023, 7);
    341 f(4194312, 8);
    342 f(4718601, 9);
    343 f(7864335, 15);
    344 f(8388624, 16);
    345 f(8912913, 17);
    346 f(16252959, 31);
    347 f(16777248, 32);
    348 f(17301537, 33);
    349 f(33030207, 63);
    350 f(33554496, 64);
    351 f(34078785, 65);
    352 f(66584703, 127);
    353 f(67108992, 128);
    354 f(67633281, 129);
    355 f(133693695, 255);
    356 f(134217984, 256);
    357 f(134742273, 257);
    358 f(267911679, 511);
    359 f(268435968, 512);
    360 f(268960257, 513);
    361 f(536347647, 1023);
    362 f(536871936, 1024);
    363 f(537396225, 1025);
    364 f(1073219583, 2047);
    365 f(1073743872, 2048);
    366 f(1074268161, 2049);
    367 f(2146963455, 4095);
    368 f(2147487744, 4096);
    369 f(2148012033, 4097);
    370 f(4294451199, 8191);
    371 f(4294975488, 8192);
    372 f(4295499777, 8193);
    373 f(8589426687, 16383);
    374 f(8589950976, 16384);
    375 f(8590475265, 16385);
    376 f(17179377663, 32767);
    377 f(17179901952, 32768);
    378 f(17180426241, 32769);
    379 f(34359279615, 65535);
    380 f(34359803904, 65536);
    381 f(34360328193, 65537);
    382 f(68719083519, 131071);
    383 f(68719607808, 131072);
    384 f(68720132097, 131073);
    385 f(137438691327, 262143);
    386 f(137439215616, 262144);
    387 f(137439739905, 262145);
    388 f(274877906943, 524287);
    389 f(274878431232, 524288);
    390 f(274878955521, 524289);
    391 x = 1048575;
    392 f(0, 0);
    393 f(1048575, 1);
    394 f(2097150, 2);
    395 f(3145725, 3);
    396 f(4194300, 4);
    397 f(5242875, 5);
    398 f(7340025, 7);
    399 f(8388600, 8);
    400 f(9437175, 9);
    401 f(15728625, 15);
    402 f(16777200, 16);
    403 f(17825775, 17);
    404 f(32505825, 31);
    405 f(33554400, 32);
    406 f(34602975, 33);
    407 f(66060225, 63);
    408 f(67108800, 64);
    409 f(68157375, 65);
    410 f(133169025, 127);
    411 f(134217600, 128);
    412 f(135266175, 129);
    413 f(267386625, 255);
    414 f(268435200, 256);
    415 f(269483775, 257);
    416 f(535821825, 511);
    417 f(536870400, 512);
    418 f(537918975, 513);
    419 f(1072692225, 1023);
    420 f(1073740800, 1024);
    421 f(1074789375, 1025);
    422 f(2146433025, 2047);
    423 f(2147481600, 2048);
    424 f(2148530175, 2049);
    425 f(4293914625, 4095);
    426 f(4294963200, 4096);
    427 f(4296011775, 4097);
    428 f(8588877825, 8191);
    429 f(8589926400, 8192);
    430 f(8590974975, 8193);
    431 f(17178804225, 16383);
    432 f(17179852800, 16384);
    433 f(17180901375, 16385);
    434 f(34358657025, 32767);
    435 f(34359705600, 32768);
    436 f(34360754175, 32769);
    437 f(68718362625, 65535);
    438 f(68719411200, 65536);
    439 f(68720459775, 65537);
    440 f(137437773825, 131071);
    441 f(137438822400, 131072);
    442 f(137439870975, 131073);
    443 f(274876596225, 262143);
    444 f(274877644800, 262144);
    445 f(274878693375, 262145);
    446 f(549754241025, 524287);
    447 f(549755289600, 524288);
    448 f(549756338175, 524289);
    449 f(1099509530625, 1048575);
    450 x = 1048576;
    451 f(0, 0);
    452 f(1048576, 1);
    453 f(2097152, 2);
    454 f(3145728, 3);
    455 f(4194304, 4);
    456 f(5242880, 5);
    457 f(7340032, 7);
    458 f(8388608, 8);
    459 f(9437184, 9);
    460 f(15728640, 15);
    461 f(16777216, 16);
    462 f(17825792, 17);
    463 f(32505856, 31);
    464 f(33554432, 32);
    465 f(34603008, 33);
    466 f(66060288, 63);
    467 f(67108864, 64);
    468 f(68157440, 65);
    469 f(133169152, 127);
    470 f(134217728, 128);
    471 f(135266304, 129);
    472 f(267386880, 255);
    473 f(268435456, 256);
    474 f(269484032, 257);
    475 f(535822336, 511);
    476 f(536870912, 512);
    477 f(537919488, 513);
    478 f(1072693248, 1023);
    479 f(1073741824, 1024);
    480 f(1074790400, 1025);
    481 f(2146435072, 2047);
    482 f(2147483648, 2048);
    483 f(2148532224, 2049);
    484 f(4293918720, 4095);
    485 f(4294967296, 4096);
    486 f(4296015872, 4097);
    487 f(8588886016, 8191);
    488 f(8589934592, 8192);
    489 f(8590983168, 8193);
    490 f(17178820608, 16383);
    491 f(17179869184, 16384);
    492 f(17180917760, 16385);
    493 f(34358689792, 32767);
    494 f(34359738368, 32768);
    495 f(34360786944, 32769);
    496 f(68718428160, 65535);
    497 f(68719476736, 65536);
    498 f(68720525312, 65537);
    499 f(137437904896, 131071);
    500 f(137438953472, 131072);
    501 f(137440002048, 131073);
    502 f(274876858368, 262143);
    503 f(274877906944, 262144);
    504 f(274878955520, 262145);
    505 f(549754765312, 524287);
    506 f(549755813888, 524288);
    507 f(549756862464, 524289);
    508 f(1099510579200, 1048575);
    509 f(1099511627776, 1048576);
    510