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 = 536870913; 59f(0, 0); 60f(536870913, 1); 61f(1073741826, 2); 62f(1610612739, 3); 63f(2147483652, 4); 64f(2684354565, 5); 65f(3758096391, 7); 66f(4294967304, 8); 67f(4831838217, 9); 68f(8053063695, 15); 69f(8589934608, 16); 70f(9126805521, 17); 71f(16642998303, 31); 72f(17179869216, 32); 73f(17716740129, 33); 74f(33822867519, 63); 75f(34359738432, 64); 76f(34896609345, 65); 77f(68182605951, 127); 78f(68719476864, 128); 79f(69256347777, 129); 80f(136902082815, 255); 81f(137438953728, 256); 82f(137975824641, 257); 83f(274341036543, 511); 84f(274877907456, 512); 85f(275414778369, 513); 86f(549218943999, 1023); 87f(549755814912, 1024); 88f(550292685825, 1025); 89f(1098974758911, 2047); 90f(1099511629824, 2048); 91f(1100048500737, 2049); 92f(2198486388735, 4095); 93f(2199023259648, 4096); 94f(2199560130561, 4097); 95f(4397509648383, 8191); 96f(4398046519296, 8192); 97f(4398583390209, 8193); 98f(8795556167679, 16383); 99f(8796093038592, 16384); 100f(8796629909505, 16385); 101f(17591649206271, 32767); 102f(17592186077184, 32768); 103f(17592722948097, 32769); 104f(35183835283455, 65535); 105f(35184372154368, 65536); 106f(35184909025281, 65537); 107f(70368207437823, 131071); 108f(70368744308736, 131072); 109f(70369281179649, 131073); 110f(140736951746559, 262143); 111f(140737488617472, 262144); 112f(140738025488385, 262145); 113f(281474440364031, 524287); 114f(281474977234944, 524288); 115f(281475514105857, 524289); 116f(562949417598975, 1048575); 117f(562949954469888, 1048576); 118f(562950491340801, 1048577); 119f(1125899372068863, 2097151); 120f(1125899908939776, 2097152); 121f(1125900445810689, 2097153); 122x = 1073741823; 123f(0, 0); 124f(1073741823, 1); 125f(2147483646, 2); 126f(3221225469, 3); 127f(4294967292, 4); 128f(5368709115, 5); 129f(7516192761, 7); 130f(8589934584, 8); 131f(9663676407, 9); 132f(16106127345, 15); 133f(17179869168, 16); 134f(18253610991, 17); 135f(33285996513, 31); 136f(34359738336, 32); 137f(35433480159, 33); 138f(67645734849, 63); 139f(68719476672, 64); 140f(69793218495, 65); 141f(136365211521, 127); 142f(137438953344, 128); 143f(138512695167, 129); 144f(273804164865, 255); 145f(274877906688, 256); 146f(275951648511, 257); 147f(548682071553, 511); 148f(549755813376, 512); 149f(550829555199, 513); 150f(1098437884929, 1023); 151f(1099511626752, 1024); 152f(1100585368575, 1025); 153f(2197949511681, 2047); 154f(2199023253504, 2048); 155f(2200096995327, 2049); 156f(4396972765185, 4095); 157f(4398046507008, 4096); 158f(4399120248831, 4097); 159f(8795019272193, 8191); 160f(8796093014016, 8192); 161f(8797166755839, 8193); 162f(17591112286209, 16383); 163f(17592186028032, 16384); 164f(17593259769855, 16385); 165f(35183298314241, 32767); 166f(35184372056064, 32768); 167f(35185445797887, 32769); 168f(70367670370305, 65535); 169f(70368744112128, 65536); 170f(70369817853951, 65537); 171f(140736414482433, 131071); 172f(140737488224256, 131072); 173f(140738561966079, 131073); 174f(281473902706689, 262143); 175f(281474976448512, 262144); 176f(281476050190335, 262145); 177f(562948879155201, 524287); 178f(562949952897024, 524288); 179f(562951026638847, 524289); 180f(1125898832052225, 1048575); 181f(1125899905794048, 1048576); 182f(1125900979535871, 1048577); 183x = 1073741824; 184f(0, 0); 185f(1073741824, 1); 186f(2147483648, 2); 187f(3221225472, 3); 188f(4294967296, 4); 189f(5368709120, 5); 190f(7516192768, 7); 191f(8589934592, 8); 192f(9663676416, 9); 193f(16106127360, 15); 194f(17179869184, 16); 195f(18253611008, 17); 196f(33285996544, 31); 197f(34359738368, 32); 198f(35433480192, 33); 199f(67645734912, 63); 200f(68719476736, 64); 201f(69793218560, 65); 202f(136365211648, 127); 203f(137438953472, 128); 204f(138512695296, 129); 205f(273804165120, 255); 206f(274877906944, 256); 207f(275951648768, 257); 208f(548682072064, 511); 209f(549755813888, 512); 210f(550829555712, 513); 211f(1098437885952, 1023); 212f(1099511627776, 1024); 213f(1100585369600, 1025); 214f(2197949513728, 2047); 215f(2199023255552, 2048); 216f(2200096997376, 2049); 217f(4396972769280, 4095); 218f(4398046511104, 4096); 219f(4399120252928, 4097); 220f(8795019280384, 8191); 221f(8796093022208, 8192); 222f(8797166764032, 8193); 223f(17591112302592, 16383); 224f(17592186044416, 16384); 225f(17593259786240, 16385); 226f(35183298347008, 32767); 227f(35184372088832, 32768); 228f(35185445830656, 32769); 229f(70367670435840, 65535); 230f(70368744177664, 65536); 231f(70369817919488, 65537); 232f(140736414613504, 131071); 233f(140737488355328, 131072); 234f(140738562097152, 131073); 235f(281473902968832, 262143); 236f(281474976710656, 262144); 237f(281476050452480, 262145); 238f(562948879679488, 524287); 239f(562949953421312, 524288); 240f(562951027163136, 524289); 241f(1125898833100800, 1048575); 242f(1125899906842624, 1048576); 243f(1125900980584448, 1048577); 244x = 1073741825; 245f(0, 0); 246f(1073741825, 1); 247f(2147483650, 2); 248f(3221225475, 3); 249f(4294967300, 4); 250f(5368709125, 5); 251f(7516192775, 7); 252f(8589934600, 8); 253f(9663676425, 9); 254f(16106127375, 15); 255f(17179869200, 16); 256f(18253611025, 17); 257f(33285996575, 31); 258f(34359738400, 32); 259f(35433480225, 33); 260f(67645734975, 63); 261f(68719476800, 64); 262f(69793218625, 65); 263f(136365211775, 127); 264f(137438953600, 128); 265f(138512695425, 129); 266f(273804165375, 255); 267f(274877907200, 256); 268f(275951649025, 257); 269f(548682072575, 511); 270f(549755814400, 512); 271f(550829556225, 513); 272f(1098437886975, 1023); 273f(1099511628800, 1024); 274f(1100585370625, 1025); 275f(2197949515775, 2047); 276f(2199023257600, 2048); 277f(2200096999425, 2049); 278f(4396972773375, 4095); 279f(4398046515200, 4096); 280f(4399120257025, 4097); 281f(8795019288575, 8191); 282f(8796093030400, 8192); 283f(8797166772225, 8193); 284f(17591112318975, 16383); 285f(17592186060800, 16384); 286f(17593259802625, 16385); 287f(35183298379775, 32767); 288f(35184372121600, 32768); 289f(35185445863425, 32769); 290f(70367670501375, 65535); 291f(70368744243200, 65536); 292f(70369817985025, 65537); 293f(140736414744575, 131071); 294f(140737488486400, 131072); 295f(140738562228225, 131073); 296f(281473903230975, 262143); 297f(281474976972800, 262144); 298f(281476050714625, 262145); 299f(562948880203775, 524287); 300f(562949953945600, 524288); 301f(562951027687425, 524289); 302f(1125898834149375, 1048575); 303f(1125899907891200, 1048576); 304f(1125900981633025, 1048577); 305x = 2147483647; 306f(0, 0); 307f(2147483647, 1); 308f(4294967294, 2); 309f(6442450941, 3); 310f(8589934588, 4); 311f(10737418235, 5); 312f(15032385529, 7); 313f(17179869176, 8); 314f(19327352823, 9); 315f(32212254705, 15); 316f(34359738352, 16); 317f(36507221999, 17); 318f(66571993057, 31); 319f(68719476704, 32); 320f(70866960351, 33); 321f(135291469761, 63); 322f(137438953408, 64); 323f(139586437055, 65); 324f(272730423169, 127); 325f(274877906816, 128); 326f(277025390463, 129); 327f(547608329985, 255); 328f(549755813632, 256); 329f(551903297279, 257); 330f(1097364143617, 511); 331f(1099511627264, 512); 332f(1101659110911, 513); 333f(2196875770881, 1023); 334f(2199023254528, 1024); 335f(2201170738175, 1025); 336f(4395899025409, 2047); 337f(4398046509056, 2048); 338f(4400193992703, 2049); 339f(8793945534465, 4095); 340f(8796093018112, 4096); 341f(8798240501759, 4097); 342f(17590038552577, 8191); 343f(17592186036224, 8192); 344f(17594333519871, 8193); 345f(35182224588801, 16383); 346f(35184372072448, 16384); 347f(35186519556095, 16385); 348f(70366596661249, 32767); 349f(70368744144896, 32768); 350f(70370891628543, 32769); 351f(140735340806145, 65535); 352f(140737488289792, 65536); 353f(140739635773439, 65537); 354f(281472829095937, 131071); 355f(281474976579584, 131072); 356f(281477124063231, 131073); 357f(562947805675521, 262143); 358f(562949953159168, 262144); 359f(562952100642815, 262145); 360f(1125897758834689, 524287); 361f(1125899906318336, 524288); 362f(1125902053801983, 524289); 363x = 2147483648; 364f(0, 0); 365f(2147483648, 1); 366f(4294967296, 2); 367f(6442450944, 3); 368f(8589934592, 4); 369f(10737418240, 5); 370f(15032385536, 7); 371f(17179869184, 8); 372f(19327352832, 9); 373f(32212254720, 15); 374f(34359738368, 16); 375f(36507222016, 17); 376f(66571993088, 31); 377f(68719476736, 32); 378f(70866960384, 33); 379f(135291469824, 63); 380f(137438953472, 64); 381f(139586437120, 65); 382f(272730423296, 127); 383f(274877906944, 128); 384f(277025390592, 129); 385f(547608330240, 255); 386f(549755813888, 256); 387f(551903297536, 257); 388f(1097364144128, 511); 389f(1099511627776, 512); 390f(1101659111424, 513); 391f(2196875771904, 1023); 392f(2199023255552, 1024); 393f(2201170739200, 1025); 394f(4395899027456, 2047); 395f(4398046511104, 2048); 396f(4400193994752, 2049); 397f(8793945538560, 4095); 398f(8796093022208, 4096); 399f(8798240505856, 4097); 400f(17590038560768, 8191); 401f(17592186044416, 8192); 402f(17594333528064, 8193); 403f(35182224605184, 16383); 404f(35184372088832, 16384); 405f(35186519572480, 16385); 406f(70366596694016, 32767); 407f(70368744177664, 32768); 408f(70370891661312, 32769); 409f(140735340871680, 65535); 410f(140737488355328, 65536); 411f(140739635838976, 65537); 412f(281472829227008, 131071); 413f(281474976710656, 131072); 414f(281477124194304, 131073); 415f(562947805937664, 262143); 416f(562949953421312, 262144); 417f(562952100904960, 262145); 418f(1125897759358976, 524287); 419f(1125899906842624, 524288); 420f(1125902054326272, 524289); 421x = 2147483649; 422f(0, 0); 423f(2147483649, 1); 424f(4294967298, 2); 425f(6442450947, 3); 426f(8589934596, 4); 427f(10737418245, 5); 428f(15032385543, 7); 429f(17179869192, 8); 430f(19327352841, 9); 431f(32212254735, 15); 432f(34359738384, 16); 433f(36507222033, 17); 434f(66571993119, 31); 435f(68719476768, 32); 436f(70866960417, 33); 437f(135291469887, 63); 438f(137438953536, 64); 439f(139586437185, 65); 440f(272730423423, 127); 441f(274877907072, 128); 442f(277025390721, 129); 443f(547608330495, 255); 444f(549755814144, 256); 445f(551903297793, 257); 446f(1097364144639, 511); 447f(1099511628288, 512); 448f(1101659111937, 513); 449f(2196875772927, 1023); 450f(2199023256576, 1024); 451f(2201170740225, 1025); 452f(4395899029503, 2047); 453f(4398046513152, 2048); 454f(4400193996801, 2049); 455f(8793945542655, 4095); 456f(8796093026304, 4096); 457f(8798240509953, 4097); 458f(17590038568959, 8191); 459f(17592186052608, 8192); 460f(17594333536257, 8193); 461f(35182224621567, 16383); 462f(35184372105216, 16384); 463f(35186519588865, 16385); 464f(70366596726783, 32767); 465f(70368744210432, 32768); 466f(70370891694081, 32769); 467f(140735340937215, 65535); 468f(140737488420864, 65536); 469f(140739635904513, 65537); 470f(281472829358079, 131071); 471f(281474976841728, 131072); 472f(281477124325377, 131073); 473f(562947806199807, 262143); 474f(562949953683456, 262144); 475f(562952101167105, 262145); 476f(1125897759883263, 524287); 477f(1125899907366912, 524288); 478f(1125902054850561, 524289); 479x = 4294967295; 480f(0, 0); 481f(4294967295, 1); 482f(8589934590, 2); 483f(12884901885, 3); 484f(17179869180, 4); 485f(21474836475, 5); 486f(30064771065, 7); 487f(34359738360, 8); 488f(38654705655, 9); 489f(64424509425, 15); 490f(68719476720, 16); 491f(73014444015, 17); 492f(133143986145, 31); 493f(137438953440, 32); 494f(141733920735, 33); 495f(270582939585, 63); 496f(274877906880, 64); 497f(279172874175, 65); 498f(545460846465, 127); 499f(549755813760, 128); 500f(554050781055, 129); 501f(1095216660225, 255); 502f(1099511627520, 256); 503f(1103806594815, 257); 504f(2194728287745, 511); 505f(2199023255040, 512); 506f(2203318222335, 513); 507f(4393751542785, 1023); 508f(4398046510080, 1024); 509f(4402341477375, 1025); 510f(8791798052865, 2047); 511f(8796093020160, 2048); 512f(8800387987455, 2049); 513f(17587891073025, 4095); 514f(17592186040320, 4096); 515f(17596481007615, 4097); 516f(35180077113345, 8191); 517f(35184372080640, 8192); 518f(35188667047935, 8193); 519f(70364449193985, 16383); 520f(70368744161280, 16384); 521f(70373039128575, 16385); 522f(140733193355265, 32767); 523f(140737488322560, 32768); 524f(140741783289855, 32769); 525f(281470681677825, 65535); 526f(281474976645120, 65536); 527f(281479271612415, 65537); 528f(562945658322945, 131071); 529f(562949953290240, 131072); 530f(562954248257535, 131073); 531f(1125895611613185, 262143); 532f(1125899906580480, 262144); 533f(1125904201547775, 262145); 534