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 = 1048577; 59f(0, 0); 60f(1048577, 1); 61f(2097154, 2); 62f(3145731, 3); 63f(4194308, 4); 64f(5242885, 5); 65f(7340039, 7); 66f(8388616, 8); 67f(9437193, 9); 68f(15728655, 15); 69f(16777232, 16); 70f(17825809, 17); 71f(32505887, 31); 72f(33554464, 32); 73f(34603041, 33); 74f(66060351, 63); 75f(67108928, 64); 76f(68157505, 65); 77f(133169279, 127); 78f(134217856, 128); 79f(135266433, 129); 80f(267387135, 255); 81f(268435712, 256); 82f(269484289, 257); 83f(535822847, 511); 84f(536871424, 512); 85f(537920001, 513); 86f(1072694271, 1023); 87f(1073742848, 1024); 88f(1074791425, 1025); 89f(2146437119, 2047); 90f(2147485696, 2048); 91f(2148534273, 2049); 92f(4293922815, 4095); 93f(4294971392, 4096); 94f(4296019969, 4097); 95f(8588894207, 8191); 96f(8589942784, 8192); 97f(8590991361, 8193); 98f(17178836991, 16383); 99f(17179885568, 16384); 100f(17180934145, 16385); 101f(34358722559, 32767); 102f(34359771136, 32768); 103f(34360819713, 32769); 104f(68718493695, 65535); 105f(68719542272, 65536); 106f(68720590849, 65537); 107f(137438035967, 131071); 108f(137439084544, 131072); 109f(137440133121, 131073); 110f(274877120511, 262143); 111f(274878169088, 262144); 112f(274879217665, 262145); 113f(549755289599, 524287); 114f(549756338176, 524288); 115f(549757386753, 524289); 116f(1099511627775, 1048575); 117f(1099512676352, 1048576); 118f(1099513724929, 1048577); 119x = 2097151; 120f(0, 0); 121f(2097151, 1); 122f(4194302, 2); 123f(6291453, 3); 124f(8388604, 4); 125f(10485755, 5); 126f(14680057, 7); 127f(16777208, 8); 128f(18874359, 9); 129f(31457265, 15); 130f(33554416, 16); 131f(35651567, 17); 132f(65011681, 31); 133f(67108832, 32); 134f(69205983, 33); 135f(132120513, 63); 136f(134217664, 64); 137f(136314815, 65); 138f(266338177, 127); 139f(268435328, 128); 140f(270532479, 129); 141f(534773505, 255); 142f(536870656, 256); 143f(538967807, 257); 144f(1071644161, 511); 145f(1073741312, 512); 146f(1075838463, 513); 147f(2145385473, 1023); 148f(2147482624, 1024); 149f(2149579775, 1025); 150f(4292868097, 2047); 151f(4294965248, 2048); 152f(4297062399, 2049); 153f(8587833345, 4095); 154f(8589930496, 4096); 155f(8592027647, 4097); 156f(17177763841, 8191); 157f(17179860992, 8192); 158f(17181958143, 8193); 159f(34357624833, 16383); 160f(34359721984, 16384); 161f(34361819135, 16385); 162f(68717346817, 32767); 163f(68719443968, 32768); 164f(68721541119, 32769); 165f(137436790785, 65535); 166f(137438887936, 65536); 167f(137440985087, 65537); 168f(274875678721, 131071); 169f(274877775872, 131072); 170f(274879873023, 131073); 171f(549753454593, 262143); 172f(549755551744, 262144); 173f(549757648895, 262145); 174f(1099509006337, 524287); 175f(1099511103488, 524288); 176f(1099513200639, 524289); 177f(2199020109825, 1048575); 178f(2199022206976, 1048576); 179f(2199024304127, 1048577); 180f(4398042316801, 2097151); 181x = 2097152; 182f(0, 0); 183f(2097152, 1); 184f(4194304, 2); 185f(6291456, 3); 186f(8388608, 4); 187f(10485760, 5); 188f(14680064, 7); 189f(16777216, 8); 190f(18874368, 9); 191f(31457280, 15); 192f(33554432, 16); 193f(35651584, 17); 194f(65011712, 31); 195f(67108864, 32); 196f(69206016, 33); 197f(132120576, 63); 198f(134217728, 64); 199f(136314880, 65); 200f(266338304, 127); 201f(268435456, 128); 202f(270532608, 129); 203f(534773760, 255); 204f(536870912, 256); 205f(538968064, 257); 206f(1071644672, 511); 207f(1073741824, 512); 208f(1075838976, 513); 209f(2145386496, 1023); 210f(2147483648, 1024); 211f(2149580800, 1025); 212f(4292870144, 2047); 213f(4294967296, 2048); 214f(4297064448, 2049); 215f(8587837440, 4095); 216f(8589934592, 4096); 217f(8592031744, 4097); 218f(17177772032, 8191); 219f(17179869184, 8192); 220f(17181966336, 8193); 221f(34357641216, 16383); 222f(34359738368, 16384); 223f(34361835520, 16385); 224f(68717379584, 32767); 225f(68719476736, 32768); 226f(68721573888, 32769); 227f(137436856320, 65535); 228f(137438953472, 65536); 229f(137441050624, 65537); 230f(274875809792, 131071); 231f(274877906944, 131072); 232f(274880004096, 131073); 233f(549753716736, 262143); 234f(549755813888, 262144); 235f(549757911040, 262145); 236f(1099509530624, 524287); 237f(1099511627776, 524288); 238f(1099513724928, 524289); 239f(2199021158400, 1048575); 240f(2199023255552, 1048576); 241f(2199025352704, 1048577); 242f(4398044413952, 2097151); 243f(4398046511104, 2097152); 244x = 2097153; 245f(0, 0); 246f(2097153, 1); 247f(4194306, 2); 248f(6291459, 3); 249f(8388612, 4); 250f(10485765, 5); 251f(14680071, 7); 252f(16777224, 8); 253f(18874377, 9); 254f(31457295, 15); 255f(33554448, 16); 256f(35651601, 17); 257f(65011743, 31); 258f(67108896, 32); 259f(69206049, 33); 260f(132120639, 63); 261f(134217792, 64); 262f(136314945, 65); 263f(266338431, 127); 264f(268435584, 128); 265f(270532737, 129); 266f(534774015, 255); 267f(536871168, 256); 268f(538968321, 257); 269f(1071645183, 511); 270f(1073742336, 512); 271f(1075839489, 513); 272f(2145387519, 1023); 273f(2147484672, 1024); 274f(2149581825, 1025); 275f(4292872191, 2047); 276f(4294969344, 2048); 277f(4297066497, 2049); 278f(8587841535, 4095); 279f(8589938688, 4096); 280f(8592035841, 4097); 281f(17177780223, 8191); 282f(17179877376, 8192); 283f(17181974529, 8193); 284f(34357657599, 16383); 285f(34359754752, 16384); 286f(34361851905, 16385); 287f(68717412351, 32767); 288f(68719509504, 32768); 289f(68721606657, 32769); 290f(137436921855, 65535); 291f(137439019008, 65536); 292f(137441116161, 65537); 293f(274875940863, 131071); 294f(274878038016, 131072); 295f(274880135169, 131073); 296f(549753978879, 262143); 297f(549756076032, 262144); 298f(549758173185, 262145); 299f(1099510054911, 524287); 300f(1099512152064, 524288); 301f(1099514249217, 524289); 302f(2199022206975, 1048575); 303f(2199024304128, 1048576); 304f(2199026401281, 1048577); 305f(4398046511103, 2097151); 306f(4398048608256, 2097152); 307f(4398050705409, 2097153); 308x = 4194303; 309f(0, 0); 310f(4194303, 1); 311f(8388606, 2); 312f(12582909, 3); 313f(16777212, 4); 314f(20971515, 5); 315f(29360121, 7); 316f(33554424, 8); 317f(37748727, 9); 318f(62914545, 15); 319f(67108848, 16); 320f(71303151, 17); 321f(130023393, 31); 322f(134217696, 32); 323f(138411999, 33); 324f(264241089, 63); 325f(268435392, 64); 326f(272629695, 65); 327f(532676481, 127); 328f(536870784, 128); 329f(541065087, 129); 330f(1069547265, 255); 331f(1073741568, 256); 332f(1077935871, 257); 333f(2143288833, 511); 334f(2147483136, 512); 335f(2151677439, 513); 336f(4290771969, 1023); 337f(4294966272, 1024); 338f(4299160575, 1025); 339f(8585738241, 2047); 340f(8589932544, 2048); 341f(8594126847, 2049); 342f(17175670785, 4095); 343f(17179865088, 4096); 344f(17184059391, 4097); 345f(34355535873, 8191); 346f(34359730176, 8192); 347f(34363924479, 8193); 348f(68715266049, 16383); 349f(68719460352, 16384); 350f(68723654655, 16385); 351f(137434726401, 32767); 352f(137438920704, 32768); 353f(137443115007, 32769); 354f(274873647105, 65535); 355f(274877841408, 65536); 356f(274882035711, 65537); 357f(549751488513, 131071); 358f(549755682816, 131072); 359f(549759877119, 131073); 360f(1099507171329, 262143); 361f(1099511365632, 262144); 362f(1099515559935, 262145); 363f(2199018536961, 524287); 364f(2199022731264, 524288); 365f(2199026925567, 524289); 366f(4398041268225, 1048575); 367f(4398045462528, 1048576); 368f(4398049656831, 1048577); 369f(8796086730753, 2097151); 370f(8796090925056, 2097152); 371f(8796095119359, 2097153); 372f(17592177655809, 4194303); 373x = 4194304; 374f(0, 0); 375f(4194304, 1); 376f(8388608, 2); 377f(12582912, 3); 378f(16777216, 4); 379f(20971520, 5); 380f(29360128, 7); 381f(33554432, 8); 382f(37748736, 9); 383f(62914560, 15); 384f(67108864, 16); 385f(71303168, 17); 386f(130023424, 31); 387f(134217728, 32); 388f(138412032, 33); 389f(264241152, 63); 390f(268435456, 64); 391f(272629760, 65); 392f(532676608, 127); 393f(536870912, 128); 394f(541065216, 129); 395f(1069547520, 255); 396f(1073741824, 256); 397f(1077936128, 257); 398f(2143289344, 511); 399f(2147483648, 512); 400f(2151677952, 513); 401f(4290772992, 1023); 402f(4294967296, 1024); 403f(4299161600, 1025); 404f(8585740288, 2047); 405f(8589934592, 2048); 406f(8594128896, 2049); 407f(17175674880, 4095); 408f(17179869184, 4096); 409f(17184063488, 4097); 410f(34355544064, 8191); 411f(34359738368, 8192); 412f(34363932672, 8193); 413f(68715282432, 16383); 414f(68719476736, 16384); 415f(68723671040, 16385); 416f(137434759168, 32767); 417f(137438953472, 32768); 418f(137443147776, 32769); 419f(274873712640, 65535); 420f(274877906944, 65536); 421f(274882101248, 65537); 422f(549751619584, 131071); 423f(549755813888, 131072); 424f(549760008192, 131073); 425f(1099507433472, 262143); 426f(1099511627776, 262144); 427f(1099515822080, 262145); 428f(2199019061248, 524287); 429f(2199023255552, 524288); 430f(2199027449856, 524289); 431f(4398042316800, 1048575); 432f(4398046511104, 1048576); 433f(4398050705408, 1048577); 434f(8796088827904, 2097151); 435f(8796093022208, 2097152); 436f(8796097216512, 2097153); 437f(17592181850112, 4194303); 438f(17592186044416, 4194304); 439x = 4194305; 440f(0, 0); 441f(4194305, 1); 442f(8388610, 2); 443f(12582915, 3); 444f(16777220, 4); 445f(20971525, 5); 446f(29360135, 7); 447f(33554440, 8); 448f(37748745, 9); 449f(62914575, 15); 450f(67108880, 16); 451f(71303185, 17); 452f(130023455, 31); 453f(134217760, 32); 454f(138412065, 33); 455f(264241215, 63); 456f(268435520, 64); 457f(272629825, 65); 458f(532676735, 127); 459f(536871040, 128); 460f(541065345, 129); 461f(1069547775, 255); 462f(1073742080, 256); 463f(1077936385, 257); 464f(2143289855, 511); 465f(2147484160, 512); 466f(2151678465, 513); 467f(4290774015, 1023); 468f(4294968320, 1024); 469f(4299162625, 1025); 470f(8585742335, 2047); 471f(8589936640, 2048); 472f(8594130945, 2049); 473f(17175678975, 4095); 474f(17179873280, 4096); 475f(17184067585, 4097); 476f(34355552255, 8191); 477f(34359746560, 8192); 478f(34363940865, 8193); 479f(68715298815, 16383); 480f(68719493120, 16384); 481f(68723687425, 16385); 482f(137434791935, 32767); 483f(137438986240, 32768); 484f(137443180545, 32769); 485f(274873778175, 65535); 486f(274877972480, 65536); 487f(274882166785, 65537); 488f(549751750655, 131071); 489f(549755944960, 131072); 490f(549760139265, 131073); 491f(1099507695615, 262143); 492f(1099511889920, 262144); 493f(1099516084225, 262145); 494f(2199019585535, 524287); 495f(2199023779840, 524288); 496f(2199027974145, 524289); 497f(4398043365375, 1048575); 498f(4398047559680, 1048576); 499f(4398051753985, 1048577); 500f(8796090925055, 2097151); 501f(8796095119360, 2097152); 502f(8796099313665, 2097153); 503f(17592186044415, 4194303); 504f(17592190238720, 4194304); 505f(17592194433025, 4194305); 506