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 = 16385; 59f(0, 0); 60f(16385, 1); 61f(32770, 2); 62f(49155, 3); 63f(65540, 4); 64f(81925, 5); 65f(114695, 7); 66f(131080, 8); 67f(147465, 9); 68f(245775, 15); 69f(262160, 16); 70f(278545, 17); 71f(507935, 31); 72f(524320, 32); 73f(540705, 33); 74f(1032255, 63); 75f(1048640, 64); 76f(1065025, 65); 77f(2080895, 127); 78f(2097280, 128); 79f(2113665, 129); 80f(4178175, 255); 81f(4194560, 256); 82f(4210945, 257); 83f(8372735, 511); 84f(8389120, 512); 85f(8405505, 513); 86f(16761855, 1023); 87f(16778240, 1024); 88f(16794625, 1025); 89f(33540095, 2047); 90f(33556480, 2048); 91f(33572865, 2049); 92f(67096575, 4095); 93f(67112960, 4096); 94f(67129345, 4097); 95f(134209535, 8191); 96f(134225920, 8192); 97f(134242305, 8193); 98f(268435455, 16383); 99f(268451840, 16384); 100f(268468225, 16385); 101x = 32767; 102f(0, 0); 103f(32767, 1); 104f(65534, 2); 105f(98301, 3); 106f(131068, 4); 107f(163835, 5); 108f(229369, 7); 109f(262136, 8); 110f(294903, 9); 111f(491505, 15); 112f(524272, 16); 113f(557039, 17); 114f(1015777, 31); 115f(1048544, 32); 116f(1081311, 33); 117f(2064321, 63); 118f(2097088, 64); 119f(2129855, 65); 120f(4161409, 127); 121f(4194176, 128); 122f(4226943, 129); 123f(8355585, 255); 124f(8388352, 256); 125f(8421119, 257); 126f(16743937, 511); 127f(16776704, 512); 128f(16809471, 513); 129f(33520641, 1023); 130f(33553408, 1024); 131f(33586175, 1025); 132f(67074049, 2047); 133f(67106816, 2048); 134f(67139583, 2049); 135f(134180865, 4095); 136f(134213632, 4096); 137f(134246399, 4097); 138f(268394497, 8191); 139f(268427264, 8192); 140f(268460031, 8193); 141f(536821761, 16383); 142f(536854528, 16384); 143f(536887295, 16385); 144f(1073676289, 32767); 145x = 32768; 146f(0, 0); 147f(32768, 1); 148f(65536, 2); 149f(98304, 3); 150f(131072, 4); 151f(163840, 5); 152f(229376, 7); 153f(262144, 8); 154f(294912, 9); 155f(491520, 15); 156f(524288, 16); 157f(557056, 17); 158f(1015808, 31); 159f(1048576, 32); 160f(1081344, 33); 161f(2064384, 63); 162f(2097152, 64); 163f(2129920, 65); 164f(4161536, 127); 165f(4194304, 128); 166f(4227072, 129); 167f(8355840, 255); 168f(8388608, 256); 169f(8421376, 257); 170f(16744448, 511); 171f(16777216, 512); 172f(16809984, 513); 173f(33521664, 1023); 174f(33554432, 1024); 175f(33587200, 1025); 176f(67076096, 2047); 177f(67108864, 2048); 178f(67141632, 2049); 179f(134184960, 4095); 180f(134217728, 4096); 181f(134250496, 4097); 182f(268402688, 8191); 183f(268435456, 8192); 184f(268468224, 8193); 185f(536838144, 16383); 186f(536870912, 16384); 187f(536903680, 16385); 188f(1073709056, 32767); 189f(1073741824, 32768); 190x = 32769; 191f(0, 0); 192f(32769, 1); 193f(65538, 2); 194f(98307, 3); 195f(131076, 4); 196f(163845, 5); 197f(229383, 7); 198f(262152, 8); 199f(294921, 9); 200f(491535, 15); 201f(524304, 16); 202f(557073, 17); 203f(1015839, 31); 204f(1048608, 32); 205f(1081377, 33); 206f(2064447, 63); 207f(2097216, 64); 208f(2129985, 65); 209f(4161663, 127); 210f(4194432, 128); 211f(4227201, 129); 212f(8356095, 255); 213f(8388864, 256); 214f(8421633, 257); 215f(16744959, 511); 216f(16777728, 512); 217f(16810497, 513); 218f(33522687, 1023); 219f(33555456, 1024); 220f(33588225, 1025); 221f(67078143, 2047); 222f(67110912, 2048); 223f(67143681, 2049); 224f(134189055, 4095); 225f(134221824, 4096); 226f(134254593, 4097); 227f(268410879, 8191); 228f(268443648, 8192); 229f(268476417, 8193); 230f(536854527, 16383); 231f(536887296, 16384); 232f(536920065, 16385); 233f(1073741823, 32767); 234f(1073774592, 32768); 235f(1073807361, 32769); 236x = 65535; 237f(0, 0); 238f(65535, 1); 239f(131070, 2); 240f(196605, 3); 241f(262140, 4); 242f(327675, 5); 243f(458745, 7); 244f(524280, 8); 245f(589815, 9); 246f(983025, 15); 247f(1048560, 16); 248f(1114095, 17); 249f(2031585, 31); 250f(2097120, 32); 251f(2162655, 33); 252f(4128705, 63); 253f(4194240, 64); 254f(4259775, 65); 255f(8322945, 127); 256f(8388480, 128); 257f(8454015, 129); 258f(16711425, 255); 259f(16776960, 256); 260f(16842495, 257); 261f(33488385, 511); 262f(33553920, 512); 263f(33619455, 513); 264f(67042305, 1023); 265f(67107840, 1024); 266f(67173375, 1025); 267f(134150145, 2047); 268f(134215680, 2048); 269f(134281215, 2049); 270f(268365825, 4095); 271f(268431360, 4096); 272f(268496895, 4097); 273f(536797185, 8191); 274f(536862720, 8192); 275f(536928255, 8193); 276f(1073659905, 16383); 277f(1073725440, 16384); 278f(1073790975, 16385); 279f(2147385345, 32767); 280f(2147450880, 32768); 281f(2147516415, 32769); 282f(4294836225, 65535); 283x = 65536; 284f(0, 0); 285f(65536, 1); 286f(131072, 2); 287f(196608, 3); 288f(262144, 4); 289f(327680, 5); 290f(458752, 7); 291f(524288, 8); 292f(589824, 9); 293f(983040, 15); 294f(1048576, 16); 295f(1114112, 17); 296f(2031616, 31); 297f(2097152, 32); 298f(2162688, 33); 299f(4128768, 63); 300f(4194304, 64); 301f(4259840, 65); 302f(8323072, 127); 303f(8388608, 128); 304f(8454144, 129); 305f(16711680, 255); 306f(16777216, 256); 307f(16842752, 257); 308f(33488896, 511); 309f(33554432, 512); 310f(33619968, 513); 311f(67043328, 1023); 312f(67108864, 1024); 313f(67174400, 1025); 314f(134152192, 2047); 315f(134217728, 2048); 316f(134283264, 2049); 317f(268369920, 4095); 318f(268435456, 4096); 319f(268500992, 4097); 320f(536805376, 8191); 321f(536870912, 8192); 322f(536936448, 8193); 323f(1073676288, 16383); 324f(1073741824, 16384); 325f(1073807360, 16385); 326f(2147418112, 32767); 327f(2147483648, 32768); 328f(2147549184, 32769); 329f(4294901760, 65535); 330f(4294967296, 65536); 331x = 65537; 332f(0, 0); 333f(65537, 1); 334f(131074, 2); 335f(196611, 3); 336f(262148, 4); 337f(327685, 5); 338f(458759, 7); 339f(524296, 8); 340f(589833, 9); 341f(983055, 15); 342f(1048592, 16); 343f(1114129, 17); 344f(2031647, 31); 345f(2097184, 32); 346f(2162721, 33); 347f(4128831, 63); 348f(4194368, 64); 349f(4259905, 65); 350f(8323199, 127); 351f(8388736, 128); 352f(8454273, 129); 353f(16711935, 255); 354f(16777472, 256); 355f(16843009, 257); 356f(33489407, 511); 357f(33554944, 512); 358f(33620481, 513); 359f(67044351, 1023); 360f(67109888, 1024); 361f(67175425, 1025); 362f(134154239, 2047); 363f(134219776, 2048); 364f(134285313, 2049); 365f(268374015, 4095); 366f(268439552, 4096); 367f(268505089, 4097); 368f(536813567, 8191); 369f(536879104, 8192); 370f(536944641, 8193); 371f(1073692671, 16383); 372f(1073758208, 16384); 373f(1073823745, 16385); 374f(2147450879, 32767); 375f(2147516416, 32768); 376f(2147581953, 32769); 377f(4294967295, 65535); 378f(4295032832, 65536); 379f(4295098369, 65537); 380x = 131071; 381f(0, 0); 382f(131071, 1); 383f(262142, 2); 384f(393213, 3); 385f(524284, 4); 386f(655355, 5); 387f(917497, 7); 388f(1048568, 8); 389f(1179639, 9); 390f(1966065, 15); 391f(2097136, 16); 392f(2228207, 17); 393f(4063201, 31); 394f(4194272, 32); 395f(4325343, 33); 396f(8257473, 63); 397f(8388544, 64); 398f(8519615, 65); 399f(16646017, 127); 400f(16777088, 128); 401f(16908159, 129); 402f(33423105, 255); 403f(33554176, 256); 404f(33685247, 257); 405f(66977281, 511); 406f(67108352, 512); 407f(67239423, 513); 408f(134085633, 1023); 409f(134216704, 1024); 410f(134347775, 1025); 411f(268302337, 2047); 412f(268433408, 2048); 413f(268564479, 2049); 414f(536735745, 4095); 415f(536866816, 4096); 416f(536997887, 4097); 417f(1073602561, 8191); 418f(1073733632, 8192); 419f(1073864703, 8193); 420f(2147336193, 16383); 421f(2147467264, 16384); 422f(2147598335, 16385); 423f(4294803457, 32767); 424f(4294934528, 32768); 425f(4295065599, 32769); 426f(8589737985, 65535); 427f(8589869056, 65536); 428f(8590000127, 65537); 429f(17179607041, 131071); 430x = 131072; 431f(0, 0); 432f(131072, 1); 433f(262144, 2); 434f(393216, 3); 435f(524288, 4); 436f(655360, 5); 437f(917504, 7); 438f(1048576, 8); 439f(1179648, 9); 440f(1966080, 15); 441f(2097152, 16); 442f(2228224, 17); 443f(4063232, 31); 444f(4194304, 32); 445f(4325376, 33); 446f(8257536, 63); 447f(8388608, 64); 448f(8519680, 65); 449f(16646144, 127); 450f(16777216, 128); 451f(16908288, 129); 452f(33423360, 255); 453f(33554432, 256); 454f(33685504, 257); 455f(66977792, 511); 456f(67108864, 512); 457f(67239936, 513); 458f(134086656, 1023); 459f(134217728, 1024); 460f(134348800, 1025); 461f(268304384, 2047); 462f(268435456, 2048); 463f(268566528, 2049); 464f(536739840, 4095); 465f(536870912, 4096); 466f(537001984, 4097); 467f(1073610752, 8191); 468f(1073741824, 8192); 469f(1073872896, 8193); 470f(2147352576, 16383); 471f(2147483648, 16384); 472f(2147614720, 16385); 473f(4294836224, 32767); 474f(4294967296, 32768); 475f(4295098368, 32769); 476f(8589803520, 65535); 477f(8589934592, 65536); 478f(8590065664, 65537); 479f(17179738112, 131071); 480f(17179869184, 131072); 481x = 131073; 482f(0, 0); 483f(131073, 1); 484f(262146, 2); 485f(393219, 3); 486f(524292, 4); 487f(655365, 5); 488f(917511, 7); 489f(1048584, 8); 490f(1179657, 9); 491f(1966095, 15); 492f(2097168, 16); 493f(2228241, 17); 494f(4063263, 31); 495f(4194336, 32); 496f(4325409, 33); 497f(8257599, 63); 498f(8388672, 64); 499f(8519745, 65); 500f(16646271, 127); 501f(16777344, 128); 502f(16908417, 129); 503f(33423615, 255); 504f(33554688, 256); 505f(33685761, 257); 506f(66978303, 511); 507f(67109376, 512); 508f(67240449, 513); 509f(134087679, 1023); 510f(134218752, 1024); 511f(134349825, 1025); 512f(268306431, 2047); 513f(268437504, 2048); 514f(268568577, 2049); 515f(536743935, 4095); 516f(536875008, 4096); 517f(537006081, 4097); 518f(1073618943, 8191); 519f(1073750016, 8192); 520f(1073881089, 8193); 521f(2147368959, 16383); 522f(2147500032, 16384); 523f(2147631105, 16385); 524f(4294868991, 32767); 525f(4295000064, 32768); 526f(4295131137, 32769); 527f(8589869055, 65535); 528f(8590000128, 65536); 529f(8590131201, 65537); 530f(17179869183, 131071); 531f(17180000256, 131072); 532f(17180131329, 131073); 533