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