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 = 33554432; 59f(0, 0); 60f(33554432, 1); 61f(67108864, 2); 62f(100663296, 3); 63f(134217728, 4); 64f(167772160, 5); 65f(234881024, 7); 66f(268435456, 8); 67f(301989888, 9); 68f(503316480, 15); 69f(536870912, 16); 70f(570425344, 17); 71f(1040187392, 31); 72f(1073741824, 32); 73f(1107296256, 33); 74f(2113929216, 63); 75f(2147483648, 64); 76f(2181038080, 65); 77f(4261412864, 127); 78f(4294967296, 128); 79f(4328521728, 129); 80f(8556380160, 255); 81f(8589934592, 256); 82f(8623489024, 257); 83f(17146314752, 511); 84f(17179869184, 512); 85f(17213423616, 513); 86f(34326183936, 1023); 87f(34359738368, 1024); 88f(34393292800, 1025); 89f(68685922304, 2047); 90f(68719476736, 2048); 91f(68753031168, 2049); 92f(137405399040, 4095); 93f(137438953472, 4096); 94f(137472507904, 4097); 95f(274844352512, 8191); 96f(274877906944, 8192); 97f(274911461376, 8193); 98f(549722259456, 16383); 99f(549755813888, 16384); 100f(549789368320, 16385); 101f(1099478073344, 32767); 102f(1099511627776, 32768); 103f(1099545182208, 32769); 104f(2198989701120, 65535); 105f(2199023255552, 65536); 106f(2199056809984, 65537); 107f(4398012956672, 131071); 108f(4398046511104, 131072); 109f(4398080065536, 131073); 110f(8796059467776, 262143); 111f(8796093022208, 262144); 112f(8796126576640, 262145); 113f(17592152489984, 524287); 114f(17592186044416, 524288); 115f(17592219598848, 524289); 116f(35184338534400, 1048575); 117f(35184372088832, 1048576); 118f(35184405643264, 1048577); 119f(70368710623232, 2097151); 120f(70368744177664, 2097152); 121f(70368777732096, 2097153); 122f(140737454800896, 4194303); 123f(140737488355328, 4194304); 124f(140737521909760, 4194305); 125f(281474943156224, 8388607); 126f(281474976710656, 8388608); 127f(281475010265088, 8388609); 128f(562949919866880, 16777215); 129f(562949953421312, 16777216); 130f(562949986975744, 16777217); 131f(1125899873288192, 33554431); 132f(1125899906842624, 33554432); 133x = 33554433; 134f(0, 0); 135f(33554433, 1); 136f(67108866, 2); 137f(100663299, 3); 138f(134217732, 4); 139f(167772165, 5); 140f(234881031, 7); 141f(268435464, 8); 142f(301989897, 9); 143f(503316495, 15); 144f(536870928, 16); 145f(570425361, 17); 146f(1040187423, 31); 147f(1073741856, 32); 148f(1107296289, 33); 149f(2113929279, 63); 150f(2147483712, 64); 151f(2181038145, 65); 152f(4261412991, 127); 153f(4294967424, 128); 154f(4328521857, 129); 155f(8556380415, 255); 156f(8589934848, 256); 157f(8623489281, 257); 158f(17146315263, 511); 159f(17179869696, 512); 160f(17213424129, 513); 161f(34326184959, 1023); 162f(34359739392, 1024); 163f(34393293825, 1025); 164f(68685924351, 2047); 165f(68719478784, 2048); 166f(68753033217, 2049); 167f(137405403135, 4095); 168f(137438957568, 4096); 169f(137472512001, 4097); 170f(274844360703, 8191); 171f(274877915136, 8192); 172f(274911469569, 8193); 173f(549722275839, 16383); 174f(549755830272, 16384); 175f(549789384705, 16385); 176f(1099478106111, 32767); 177f(1099511660544, 32768); 178f(1099545214977, 32769); 179f(2198989766655, 65535); 180f(2199023321088, 65536); 181f(2199056875521, 65537); 182f(4398013087743, 131071); 183f(4398046642176, 131072); 184f(4398080196609, 131073); 185f(8796059729919, 262143); 186f(8796093284352, 262144); 187f(8796126838785, 262145); 188f(17592153014271, 524287); 189f(17592186568704, 524288); 190f(17592220123137, 524289); 191f(35184339582975, 1048575); 192f(35184373137408, 1048576); 193f(35184406691841, 1048577); 194f(70368712720383, 2097151); 195f(70368746274816, 2097152); 196f(70368779829249, 2097153); 197f(140737458995199, 4194303); 198f(140737492549632, 4194304); 199f(140737526104065, 4194305); 200f(281474951544831, 8388607); 201f(281474985099264, 8388608); 202f(281475018653697, 8388609); 203f(562949936644095, 16777215); 204f(562949970198528, 16777216); 205f(562950003752961, 16777217); 206f(1125899906842623, 33554431); 207f(1125899940397056, 33554432); 208f(1125899973951489, 33554433); 209x = 67108863; 210f(0, 0); 211f(67108863, 1); 212f(134217726, 2); 213f(201326589, 3); 214f(268435452, 4); 215f(335544315, 5); 216f(469762041, 7); 217f(536870904, 8); 218f(603979767, 9); 219f(1006632945, 15); 220f(1073741808, 16); 221f(1140850671, 17); 222f(2080374753, 31); 223f(2147483616, 32); 224f(2214592479, 33); 225f(4227858369, 63); 226f(4294967232, 64); 227f(4362076095, 65); 228f(8522825601, 127); 229f(8589934464, 128); 230f(8657043327, 129); 231f(17112760065, 255); 232f(17179868928, 256); 233f(17246977791, 257); 234f(34292628993, 511); 235f(34359737856, 512); 236f(34426846719, 513); 237f(68652366849, 1023); 238f(68719475712, 1024); 239f(68786584575, 1025); 240f(137371842561, 2047); 241f(137438951424, 2048); 242f(137506060287, 2049); 243f(274810793985, 4095); 244f(274877902848, 4096); 245f(274945011711, 4097); 246f(549688696833, 8191); 247f(549755805696, 8192); 248f(549822914559, 8193); 249f(1099444502529, 16383); 250f(1099511611392, 16384); 251f(1099578720255, 16385); 252f(2198956113921, 32767); 253f(2199023222784, 32768); 254f(2199090331647, 32769); 255f(4397979336705, 65535); 256f(4398046445568, 65536); 257f(4398113554431, 65537); 258f(8796025782273, 131071); 259f(8796092891136, 131072); 260f(8796159999999, 131073); 261f(17592118673409, 262143); 262f(17592185782272, 262144); 263f(17592252891135, 262145); 264f(35184304455681, 524287); 265f(35184371564544, 524288); 266f(35184438673407, 524289); 267f(70368676020225, 1048575); 268f(70368743129088, 1048576); 269f(70368810237951, 1048577); 270f(140737419149313, 2097151); 271f(140737486258176, 2097152); 272f(140737553367039, 2097153); 273f(281474905407489, 4194303); 274f(281474972516352, 4194304); 275f(281475039625215, 4194305); 276f(562949877923841, 8388607); 277f(562949945032704, 8388608); 278f(562950012141567, 8388609); 279f(1125899822956545, 16777215); 280f(1125899890065408, 16777216); 281f(1125899957174271, 16777217); 282x = 67108864; 283f(0, 0); 284f(67108864, 1); 285f(134217728, 2); 286f(201326592, 3); 287f(268435456, 4); 288f(335544320, 5); 289f(469762048, 7); 290f(536870912, 8); 291f(603979776, 9); 292f(1006632960, 15); 293f(1073741824, 16); 294f(1140850688, 17); 295f(2080374784, 31); 296f(2147483648, 32); 297f(2214592512, 33); 298f(4227858432, 63); 299f(4294967296, 64); 300f(4362076160, 65); 301f(8522825728, 127); 302f(8589934592, 128); 303f(8657043456, 129); 304f(17112760320, 255); 305f(17179869184, 256); 306f(17246978048, 257); 307f(34292629504, 511); 308f(34359738368, 512); 309f(34426847232, 513); 310f(68652367872, 1023); 311f(68719476736, 1024); 312f(68786585600, 1025); 313f(137371844608, 2047); 314f(137438953472, 2048); 315f(137506062336, 2049); 316f(274810798080, 4095); 317f(274877906944, 4096); 318f(274945015808, 4097); 319f(549688705024, 8191); 320f(549755813888, 8192); 321f(549822922752, 8193); 322f(1099444518912, 16383); 323f(1099511627776, 16384); 324f(1099578736640, 16385); 325f(2198956146688, 32767); 326f(2199023255552, 32768); 327f(2199090364416, 32769); 328f(4397979402240, 65535); 329f(4398046511104, 65536); 330f(4398113619968, 65537); 331f(8796025913344, 131071); 332f(8796093022208, 131072); 333f(8796160131072, 131073); 334f(17592118935552, 262143); 335f(17592186044416, 262144); 336f(17592253153280, 262145); 337f(35184304979968, 524287); 338f(35184372088832, 524288); 339f(35184439197696, 524289); 340f(70368677068800, 1048575); 341f(70368744177664, 1048576); 342f(70368811286528, 1048577); 343f(140737421246464, 2097151); 344f(140737488355328, 2097152); 345f(140737555464192, 2097153); 346f(281474909601792, 4194303); 347f(281474976710656, 4194304); 348f(281475043819520, 4194305); 349f(562949886312448, 8388607); 350f(562949953421312, 8388608); 351f(562950020530176, 8388609); 352f(1125899839733760, 16777215); 353f(1125899906842624, 16777216); 354f(1125899973951488, 16777217); 355x = 67108865; 356f(0, 0); 357f(67108865, 1); 358f(134217730, 2); 359f(201326595, 3); 360f(268435460, 4); 361f(335544325, 5); 362f(469762055, 7); 363f(536870920, 8); 364f(603979785, 9); 365f(1006632975, 15); 366f(1073741840, 16); 367f(1140850705, 17); 368f(2080374815, 31); 369f(2147483680, 32); 370f(2214592545, 33); 371f(4227858495, 63); 372f(4294967360, 64); 373f(4362076225, 65); 374f(8522825855, 127); 375f(8589934720, 128); 376f(8657043585, 129); 377f(17112760575, 255); 378f(17179869440, 256); 379f(17246978305, 257); 380f(34292630015, 511); 381f(34359738880, 512); 382f(34426847745, 513); 383f(68652368895, 1023); 384f(68719477760, 1024); 385f(68786586625, 1025); 386f(137371846655, 2047); 387f(137438955520, 2048); 388f(137506064385, 2049); 389f(274810802175, 4095); 390f(274877911040, 4096); 391f(274945019905, 4097); 392f(549688713215, 8191); 393f(549755822080, 8192); 394f(549822930945, 8193); 395f(1099444535295, 16383); 396f(1099511644160, 16384); 397f(1099578753025, 16385); 398f(2198956179455, 32767); 399f(2199023288320, 32768); 400f(2199090397185, 32769); 401f(4397979467775, 65535); 402f(4398046576640, 65536); 403f(4398113685505, 65537); 404f(8796026044415, 131071); 405f(8796093153280, 131072); 406f(8796160262145, 131073); 407f(17592119197695, 262143); 408f(17592186306560, 262144); 409f(17592253415425, 262145); 410f(35184305504255, 524287); 411f(35184372613120, 524288); 412f(35184439721985, 524289); 413f(70368678117375, 1048575); 414f(70368745226240, 1048576); 415f(70368812335105, 1048577); 416f(140737423343615, 2097151); 417f(140737490452480, 2097152); 418f(140737557561345, 2097153); 419f(281474913796095, 4194303); 420f(281474980904960, 4194304); 421f(281475048013825, 4194305); 422f(562949894701055, 8388607); 423f(562949961809920, 8388608); 424f(562950028918785, 8388609); 425f(1125899856510975, 16777215); 426f(1125899923619840, 16777216); 427f(1125899990728705, 16777217); 428x = 134217727; 429f(0, 0); 430f(134217727, 1); 431f(268435454, 2); 432f(402653181, 3); 433f(536870908, 4); 434f(671088635, 5); 435f(939524089, 7); 436f(1073741816, 8); 437f(1207959543, 9); 438f(2013265905, 15); 439f(2147483632, 16); 440f(2281701359, 17); 441f(4160749537, 31); 442f(4294967264, 32); 443f(4429184991, 33); 444f(8455716801, 63); 445f(8589934528, 64); 446f(8724152255, 65); 447f(17045651329, 127); 448f(17179869056, 128); 449f(17314086783, 129); 450f(34225520385, 255); 451f(34359738112, 256); 452f(34493955839, 257); 453f(68585258497, 511); 454f(68719476224, 512); 455f(68853693951, 513); 456f(137304734721, 1023); 457f(137438952448, 1024); 458f(137573170175, 1025); 459f(274743687169, 2047); 460f(274877904896, 2048); 461f(275012122623, 2049); 462f(549621592065, 4095); 463f(549755809792, 4096); 464f(549890027519, 4097); 465f(1099377401857, 8191); 466f(1099511619584, 8192); 467f(1099645837311, 8193); 468f(2198889021441, 16383); 469f(2199023239168, 16384); 470f(2199157456895, 16385); 471f(4397912260609, 32767); 472f(4398046478336, 32768); 473f(4398180696063, 32769); 474f(8795958738945, 65535); 475f(8796092956672, 65536); 476f(8796227174399, 65537); 477f(17592051695617, 131071); 478f(17592185913344, 131072); 479f(17592320131071, 131073); 480f(35184237608961, 262143); 481f(35184371826688, 262144); 482f(35184506044415, 262145); 483f(70368609435649, 524287); 484f(70368743653376, 524288); 485f(70368877871103, 524289); 486f(140737353089025, 1048575); 487f(140737487306752, 1048576); 488f(140737621524479, 1048577); 489f(281474840395777, 2097151); 490f(281474974613504, 2097152); 491f(281475108831231, 2097153); 492f(562949815009281, 4194303); 493f(562949949227008, 4194304); 494f(562950083444735, 4194305); 495f(1125899764236289, 8388607); 496f(1125899898454016, 8388608); 497f(1125900032671743, 8388609); 498