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 28var x; 29 30// Converts a number to string respecting -0. 31function stringify(n) { 32 if ((1 / n) === -Infinity) return "-0"; 33 return String(n); 34} 35 36function 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 58x = 8388607; 59f(0, 0); 60f(8388607, 1); 61f(16777214, 2); 62f(25165821, 3); 63f(33554428, 4); 64f(41943035, 5); 65f(58720249, 7); 66f(67108856, 8); 67f(75497463, 9); 68f(125829105, 15); 69f(134217712, 16); 70f(142606319, 17); 71f(260046817, 31); 72f(268435424, 32); 73f(276824031, 33); 74f(528482241, 63); 75f(536870848, 64); 76f(545259455, 65); 77f(1065353089, 127); 78f(1073741696, 128); 79f(1082130303, 129); 80f(2139094785, 255); 81f(2147483392, 256); 82f(2155871999, 257); 83f(4286578177, 511); 84f(4294966784, 512); 85f(4303355391, 513); 86f(8581544961, 1023); 87f(8589933568, 1024); 88f(8598322175, 1025); 89f(17171478529, 2047); 90f(17179867136, 2048); 91f(17188255743, 2049); 92f(34351345665, 4095); 93f(34359734272, 4096); 94f(34368122879, 4097); 95f(68711079937, 8191); 96f(68719468544, 8192); 97f(68727857151, 8193); 98f(137430548481, 16383); 99f(137438937088, 16384); 100f(137447325695, 16385); 101f(274869485569, 32767); 102f(274877874176, 32768); 103f(274886262783, 32769); 104f(549747359745, 65535); 105f(549755748352, 65536); 106f(549764136959, 65537); 107f(1099503108097, 131071); 108f(1099511496704, 131072); 109f(1099519885311, 131073); 110f(2199014604801, 262143); 111f(2199022993408, 262144); 112f(2199031382015, 262145); 113f(4398037598209, 524287); 114f(4398045986816, 524288); 115f(4398054375423, 524289); 116f(8796083585025, 1048575); 117f(8796091973632, 1048576); 118f(8796100362239, 1048577); 119f(17592175558657, 2097151); 120f(17592183947264, 2097152); 121f(17592192335871, 2097153); 122f(35184359505921, 4194303); 123f(35184367894528, 4194304); 124f(35184376283135, 4194305); 125f(70368727400449, 8388607); 126x = 8388608; 127f(0, 0); 128f(8388608, 1); 129f(16777216, 2); 130f(25165824, 3); 131f(33554432, 4); 132f(41943040, 5); 133f(58720256, 7); 134f(67108864, 8); 135f(75497472, 9); 136f(125829120, 15); 137f(134217728, 16); 138f(142606336, 17); 139f(260046848, 31); 140f(268435456, 32); 141f(276824064, 33); 142f(528482304, 63); 143f(536870912, 64); 144f(545259520, 65); 145f(1065353216, 127); 146f(1073741824, 128); 147f(1082130432, 129); 148f(2139095040, 255); 149f(2147483648, 256); 150f(2155872256, 257); 151f(4286578688, 511); 152f(4294967296, 512); 153f(4303355904, 513); 154f(8581545984, 1023); 155f(8589934592, 1024); 156f(8598323200, 1025); 157f(17171480576, 2047); 158f(17179869184, 2048); 159f(17188257792, 2049); 160f(34351349760, 4095); 161f(34359738368, 4096); 162f(34368126976, 4097); 163f(68711088128, 8191); 164f(68719476736, 8192); 165f(68727865344, 8193); 166f(137430564864, 16383); 167f(137438953472, 16384); 168f(137447342080, 16385); 169f(274869518336, 32767); 170f(274877906944, 32768); 171f(274886295552, 32769); 172f(549747425280, 65535); 173f(549755813888, 65536); 174f(549764202496, 65537); 175f(1099503239168, 131071); 176f(1099511627776, 131072); 177f(1099520016384, 131073); 178f(2199014866944, 262143); 179f(2199023255552, 262144); 180f(2199031644160, 262145); 181f(4398038122496, 524287); 182f(4398046511104, 524288); 183f(4398054899712, 524289); 184f(8796084633600, 1048575); 185f(8796093022208, 1048576); 186f(8796101410816, 1048577); 187f(17592177655808, 2097151); 188f(17592186044416, 2097152); 189f(17592194433024, 2097153); 190f(35184363700224, 4194303); 191f(35184372088832, 4194304); 192f(35184380477440, 4194305); 193f(70368735789056, 8388607); 194f(70368744177664, 8388608); 195x = 8388609; 196f(0, 0); 197f(8388609, 1); 198f(16777218, 2); 199f(25165827, 3); 200f(33554436, 4); 201f(41943045, 5); 202f(58720263, 7); 203f(67108872, 8); 204f(75497481, 9); 205f(125829135, 15); 206f(134217744, 16); 207f(142606353, 17); 208f(260046879, 31); 209f(268435488, 32); 210f(276824097, 33); 211f(528482367, 63); 212f(536870976, 64); 213f(545259585, 65); 214f(1065353343, 127); 215f(1073741952, 128); 216f(1082130561, 129); 217f(2139095295, 255); 218f(2147483904, 256); 219f(2155872513, 257); 220f(4286579199, 511); 221f(4294967808, 512); 222f(4303356417, 513); 223f(8581547007, 1023); 224f(8589935616, 1024); 225f(8598324225, 1025); 226f(17171482623, 2047); 227f(17179871232, 2048); 228f(17188259841, 2049); 229f(34351353855, 4095); 230f(34359742464, 4096); 231f(34368131073, 4097); 232f(68711096319, 8191); 233f(68719484928, 8192); 234f(68727873537, 8193); 235f(137430581247, 16383); 236f(137438969856, 16384); 237f(137447358465, 16385); 238f(274869551103, 32767); 239f(274877939712, 32768); 240f(274886328321, 32769); 241f(549747490815, 65535); 242f(549755879424, 65536); 243f(549764268033, 65537); 244f(1099503370239, 131071); 245f(1099511758848, 131072); 246f(1099520147457, 131073); 247f(2199015129087, 262143); 248f(2199023517696, 262144); 249f(2199031906305, 262145); 250f(4398038646783, 524287); 251f(4398047035392, 524288); 252f(4398055424001, 524289); 253f(8796085682175, 1048575); 254f(8796094070784, 1048576); 255f(8796102459393, 1048577); 256f(17592179752959, 2097151); 257f(17592188141568, 2097152); 258f(17592196530177, 2097153); 259f(35184367894527, 4194303); 260f(35184376283136, 4194304); 261f(35184384671745, 4194305); 262f(70368744177663, 8388607); 263f(70368752566272, 8388608); 264f(70368760954881, 8388609); 265x = 16777215; 266f(0, 0); 267f(16777215, 1); 268f(33554430, 2); 269f(50331645, 3); 270f(67108860, 4); 271f(83886075, 5); 272f(117440505, 7); 273f(134217720, 8); 274f(150994935, 9); 275f(251658225, 15); 276f(268435440, 16); 277f(285212655, 17); 278f(520093665, 31); 279f(536870880, 32); 280f(553648095, 33); 281f(1056964545, 63); 282f(1073741760, 64); 283f(1090518975, 65); 284f(2130706305, 127); 285f(2147483520, 128); 286f(2164260735, 129); 287f(4278189825, 255); 288f(4294967040, 256); 289f(4311744255, 257); 290f(8573156865, 511); 291f(8589934080, 512); 292f(8606711295, 513); 293f(17163090945, 1023); 294f(17179868160, 1024); 295f(17196645375, 1025); 296f(34342959105, 2047); 297f(34359736320, 2048); 298f(34376513535, 2049); 299f(68702695425, 4095); 300f(68719472640, 4096); 301f(68736249855, 4097); 302f(137422168065, 8191); 303f(137438945280, 8192); 304f(137455722495, 8193); 305f(274861113345, 16383); 306f(274877890560, 16384); 307f(274894667775, 16385); 308f(549739003905, 32767); 309f(549755781120, 32768); 310f(549772558335, 32769); 311f(1099494785025, 65535); 312f(1099511562240, 65536); 313f(1099528339455, 65537); 314f(2199006347265, 131071); 315f(2199023124480, 131072); 316f(2199039901695, 131073); 317f(4398029471745, 262143); 318f(4398046248960, 262144); 319f(4398063026175, 262145); 320f(8796075720705, 524287); 321f(8796092497920, 524288); 322f(8796109275135, 524289); 323f(17592168218625, 1048575); 324f(17592184995840, 1048576); 325f(17592201773055, 1048577); 326f(35184353214465, 2097151); 327f(35184369991680, 2097152); 328f(35184386768895, 2097153); 329f(70368723206145, 4194303); 330f(70368739983360, 4194304); 331f(70368756760575, 4194305); 332f(140737463189505, 8388607); 333f(140737479966720, 8388608); 334f(140737496743935, 8388609); 335f(281474943156225, 16777215); 336x = 16777216; 337f(0, 0); 338f(16777216, 1); 339f(33554432, 2); 340f(50331648, 3); 341f(67108864, 4); 342f(83886080, 5); 343f(117440512, 7); 344f(134217728, 8); 345f(150994944, 9); 346f(251658240, 15); 347f(268435456, 16); 348f(285212672, 17); 349f(520093696, 31); 350f(536870912, 32); 351f(553648128, 33); 352f(1056964608, 63); 353f(1073741824, 64); 354f(1090519040, 65); 355f(2130706432, 127); 356f(2147483648, 128); 357f(2164260864, 129); 358f(4278190080, 255); 359f(4294967296, 256); 360f(4311744512, 257); 361f(8573157376, 511); 362f(8589934592, 512); 363f(8606711808, 513); 364f(17163091968, 1023); 365f(17179869184, 1024); 366f(17196646400, 1025); 367f(34342961152, 2047); 368f(34359738368, 2048); 369f(34376515584, 2049); 370f(68702699520, 4095); 371f(68719476736, 4096); 372f(68736253952, 4097); 373f(137422176256, 8191); 374f(137438953472, 8192); 375f(137455730688, 8193); 376f(274861129728, 16383); 377f(274877906944, 16384); 378f(274894684160, 16385); 379f(549739036672, 32767); 380f(549755813888, 32768); 381f(549772591104, 32769); 382f(1099494850560, 65535); 383f(1099511627776, 65536); 384f(1099528404992, 65537); 385f(2199006478336, 131071); 386f(2199023255552, 131072); 387f(2199040032768, 131073); 388f(4398029733888, 262143); 389f(4398046511104, 262144); 390f(4398063288320, 262145); 391f(8796076244992, 524287); 392f(8796093022208, 524288); 393f(8796109799424, 524289); 394f(17592169267200, 1048575); 395f(17592186044416, 1048576); 396f(17592202821632, 1048577); 397f(35184355311616, 2097151); 398f(35184372088832, 2097152); 399f(35184388866048, 2097153); 400f(70368727400448, 4194303); 401f(70368744177664, 4194304); 402f(70368760954880, 4194305); 403f(140737471578112, 8388607); 404f(140737488355328, 8388608); 405f(140737505132544, 8388609); 406f(281474959933440, 16777215); 407f(281474976710656, 16777216); 408x = 16777217; 409f(0, 0); 410f(16777217, 1); 411f(33554434, 2); 412f(50331651, 3); 413f(67108868, 4); 414f(83886085, 5); 415f(117440519, 7); 416f(134217736, 8); 417f(150994953, 9); 418f(251658255, 15); 419f(268435472, 16); 420f(285212689, 17); 421f(520093727, 31); 422f(536870944, 32); 423f(553648161, 33); 424f(1056964671, 63); 425f(1073741888, 64); 426f(1090519105, 65); 427f(2130706559, 127); 428f(2147483776, 128); 429f(2164260993, 129); 430f(4278190335, 255); 431f(4294967552, 256); 432f(4311744769, 257); 433f(8573157887, 511); 434f(8589935104, 512); 435f(8606712321, 513); 436f(17163092991, 1023); 437f(17179870208, 1024); 438f(17196647425, 1025); 439f(34342963199, 2047); 440f(34359740416, 2048); 441f(34376517633, 2049); 442f(68702703615, 4095); 443f(68719480832, 4096); 444f(68736258049, 4097); 445f(137422184447, 8191); 446f(137438961664, 8192); 447f(137455738881, 8193); 448f(274861146111, 16383); 449f(274877923328, 16384); 450f(274894700545, 16385); 451f(549739069439, 32767); 452f(549755846656, 32768); 453f(549772623873, 32769); 454f(1099494916095, 65535); 455f(1099511693312, 65536); 456f(1099528470529, 65537); 457f(2199006609407, 131071); 458f(2199023386624, 131072); 459f(2199040163841, 131073); 460f(4398029996031, 262143); 461f(4398046773248, 262144); 462f(4398063550465, 262145); 463f(8796076769279, 524287); 464f(8796093546496, 524288); 465f(8796110323713, 524289); 466f(17592170315775, 1048575); 467f(17592187092992, 1048576); 468f(17592203870209, 1048577); 469f(35184357408767, 2097151); 470f(35184374185984, 2097152); 471f(35184390963201, 2097153); 472f(70368731594751, 4194303); 473f(70368748371968, 4194304); 474f(70368765149185, 4194305); 475f(140737479966719, 8388607); 476f(140737496743936, 8388608); 477f(140737513521153, 8388609); 478f(281474976710655, 16777215); 479f(281474993487872, 16777216); 480f(281475010265089, 16777217); 481x = 33554431; 482f(0, 0); 483f(33554431, 1); 484f(67108862, 2); 485f(100663293, 3); 486f(134217724, 4); 487f(167772155, 5); 488f(234881017, 7); 489f(268435448, 8); 490f(301989879, 9); 491f(503316465, 15); 492f(536870896, 16); 493f(570425327, 17); 494f(1040187361, 31); 495f(1073741792, 32); 496f(1107296223, 33); 497f(2113929153, 63); 498f(2147483584, 64); 499f(2181038015, 65); 500f(4261412737, 127); 501f(4294967168, 128); 502f(4328521599, 129); 503f(8556379905, 255); 504f(8589934336, 256); 505f(8623488767, 257); 506f(17146314241, 511); 507f(17179868672, 512); 508f(17213423103, 513); 509f(34326182913, 1023); 510f(34359737344, 1024); 511f(34393291775, 1025); 512f(68685920257, 2047); 513f(68719474688, 2048); 514f(68753029119, 2049); 515f(137405394945, 4095); 516f(137438949376, 4096); 517f(137472503807, 4097); 518f(274844344321, 8191); 519f(274877898752, 8192); 520f(274911453183, 8193); 521f(549722243073, 16383); 522f(549755797504, 16384); 523f(549789351935, 16385); 524f(1099478040577, 32767); 525f(1099511595008, 32768); 526f(1099545149439, 32769); 527f(2198989635585, 65535); 528f(2199023190016, 65536); 529f(2199056744447, 65537); 530f(4398012825601, 131071); 531f(4398046380032, 131072); 532f(4398079934463, 131073); 533f(8796059205633, 262143); 534f(8796092760064, 262144); 535f(8796126314495, 262145); 536f(17592151965697, 524287); 537f(17592185520128, 524288); 538f(17592219074559, 524289); 539f(35184337485825, 1048575); 540f(35184371040256, 1048576); 541f(35184404594687, 1048577); 542f(70368708526081, 2097151); 543f(70368742080512, 2097152); 544f(70368775634943, 2097153); 545f(140737450606593, 4194303); 546f(140737484161024, 4194304); 547f(140737517715455, 4194305); 548f(281474934767617, 8388607); 549f(281474968322048, 8388608); 550f(281475001876479, 8388609); 551f(562949903089665, 16777215); 552f(562949936644096, 16777216); 553f(562949970198527, 16777217); 554f(1125899839733761, 33554431); 555