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 = 262143; 59f(0, 0); 60f(262143, 1); 61f(524286, 2); 62f(786429, 3); 63f(1048572, 4); 64f(1310715, 5); 65f(1835001, 7); 66f(2097144, 8); 67f(2359287, 9); 68f(3932145, 15); 69f(4194288, 16); 70f(4456431, 17); 71f(8126433, 31); 72f(8388576, 32); 73f(8650719, 33); 74f(16515009, 63); 75f(16777152, 64); 76f(17039295, 65); 77f(33292161, 127); 78f(33554304, 128); 79f(33816447, 129); 80f(66846465, 255); 81f(67108608, 256); 82f(67370751, 257); 83f(133955073, 511); 84f(134217216, 512); 85f(134479359, 513); 86f(268172289, 1023); 87f(268434432, 1024); 88f(268696575, 1025); 89f(536606721, 2047); 90f(536868864, 2048); 91f(537131007, 2049); 92f(1073475585, 4095); 93f(1073737728, 4096); 94f(1073999871, 4097); 95f(2147213313, 8191); 96f(2147475456, 8192); 97f(2147737599, 8193); 98f(4294688769, 16383); 99f(4294950912, 16384); 100f(4295213055, 16385); 101f(8589639681, 32767); 102f(8589901824, 32768); 103f(8590163967, 32769); 104f(17179541505, 65535); 105f(17179803648, 65536); 106f(17180065791, 65537); 107f(34359345153, 131071); 108f(34359607296, 131072); 109f(34359869439, 131073); 110f(68718952449, 262143); 111x = 262144; 112f(0, 0); 113f(262144, 1); 114f(524288, 2); 115f(786432, 3); 116f(1048576, 4); 117f(1310720, 5); 118f(1835008, 7); 119f(2097152, 8); 120f(2359296, 9); 121f(3932160, 15); 122f(4194304, 16); 123f(4456448, 17); 124f(8126464, 31); 125f(8388608, 32); 126f(8650752, 33); 127f(16515072, 63); 128f(16777216, 64); 129f(17039360, 65); 130f(33292288, 127); 131f(33554432, 128); 132f(33816576, 129); 133f(66846720, 255); 134f(67108864, 256); 135f(67371008, 257); 136f(133955584, 511); 137f(134217728, 512); 138f(134479872, 513); 139f(268173312, 1023); 140f(268435456, 1024); 141f(268697600, 1025); 142f(536608768, 2047); 143f(536870912, 2048); 144f(537133056, 2049); 145f(1073479680, 4095); 146f(1073741824, 4096); 147f(1074003968, 4097); 148f(2147221504, 8191); 149f(2147483648, 8192); 150f(2147745792, 8193); 151f(4294705152, 16383); 152f(4294967296, 16384); 153f(4295229440, 16385); 154f(8589672448, 32767); 155f(8589934592, 32768); 156f(8590196736, 32769); 157f(17179607040, 65535); 158f(17179869184, 65536); 159f(17180131328, 65537); 160f(34359476224, 131071); 161f(34359738368, 131072); 162f(34360000512, 131073); 163f(68719214592, 262143); 164f(68719476736, 262144); 165x = 262145; 166f(0, 0); 167f(262145, 1); 168f(524290, 2); 169f(786435, 3); 170f(1048580, 4); 171f(1310725, 5); 172f(1835015, 7); 173f(2097160, 8); 174f(2359305, 9); 175f(3932175, 15); 176f(4194320, 16); 177f(4456465, 17); 178f(8126495, 31); 179f(8388640, 32); 180f(8650785, 33); 181f(16515135, 63); 182f(16777280, 64); 183f(17039425, 65); 184f(33292415, 127); 185f(33554560, 128); 186f(33816705, 129); 187f(66846975, 255); 188f(67109120, 256); 189f(67371265, 257); 190f(133956095, 511); 191f(134218240, 512); 192f(134480385, 513); 193f(268174335, 1023); 194f(268436480, 1024); 195f(268698625, 1025); 196f(536610815, 2047); 197f(536872960, 2048); 198f(537135105, 2049); 199f(1073483775, 4095); 200f(1073745920, 4096); 201f(1074008065, 4097); 202f(2147229695, 8191); 203f(2147491840, 8192); 204f(2147753985, 8193); 205f(4294721535, 16383); 206f(4294983680, 16384); 207f(4295245825, 16385); 208f(8589705215, 32767); 209f(8589967360, 32768); 210f(8590229505, 32769); 211f(17179672575, 65535); 212f(17179934720, 65536); 213f(17180196865, 65537); 214f(34359607295, 131071); 215f(34359869440, 131072); 216f(34360131585, 131073); 217f(68719476735, 262143); 218f(68719738880, 262144); 219f(68720001025, 262145); 220x = 524287; 221f(0, 0); 222f(524287, 1); 223f(1048574, 2); 224f(1572861, 3); 225f(2097148, 4); 226f(2621435, 5); 227f(3670009, 7); 228f(4194296, 8); 229f(4718583, 9); 230f(7864305, 15); 231f(8388592, 16); 232f(8912879, 17); 233f(16252897, 31); 234f(16777184, 32); 235f(17301471, 33); 236f(33030081, 63); 237f(33554368, 64); 238f(34078655, 65); 239f(66584449, 127); 240f(67108736, 128); 241f(67633023, 129); 242f(133693185, 255); 243f(134217472, 256); 244f(134741759, 257); 245f(267910657, 511); 246f(268434944, 512); 247f(268959231, 513); 248f(536345601, 1023); 249f(536869888, 1024); 250f(537394175, 1025); 251f(1073215489, 2047); 252f(1073739776, 2048); 253f(1074264063, 2049); 254f(2146955265, 4095); 255f(2147479552, 4096); 256f(2148003839, 4097); 257f(4294434817, 8191); 258f(4294959104, 8192); 259f(4295483391, 8193); 260f(8589393921, 16383); 261f(8589918208, 16384); 262f(8590442495, 16385); 263f(17179312129, 32767); 264f(17179836416, 32768); 265f(17180360703, 32769); 266f(34359148545, 65535); 267f(34359672832, 65536); 268f(34360197119, 65537); 269f(68718821377, 131071); 270f(68719345664, 131072); 271f(68719869951, 131073); 272f(137438167041, 262143); 273f(137438691328, 262144); 274f(137439215615, 262145); 275f(274876858369, 524287); 276x = 524288; 277f(0, 0); 278f(524288, 1); 279f(1048576, 2); 280f(1572864, 3); 281f(2097152, 4); 282f(2621440, 5); 283f(3670016, 7); 284f(4194304, 8); 285f(4718592, 9); 286f(7864320, 15); 287f(8388608, 16); 288f(8912896, 17); 289f(16252928, 31); 290f(16777216, 32); 291f(17301504, 33); 292f(33030144, 63); 293f(33554432, 64); 294f(34078720, 65); 295f(66584576, 127); 296f(67108864, 128); 297f(67633152, 129); 298f(133693440, 255); 299f(134217728, 256); 300f(134742016, 257); 301f(267911168, 511); 302f(268435456, 512); 303f(268959744, 513); 304f(536346624, 1023); 305f(536870912, 1024); 306f(537395200, 1025); 307f(1073217536, 2047); 308f(1073741824, 2048); 309f(1074266112, 2049); 310f(2146959360, 4095); 311f(2147483648, 4096); 312f(2148007936, 4097); 313f(4294443008, 8191); 314f(4294967296, 8192); 315f(4295491584, 8193); 316f(8589410304, 16383); 317f(8589934592, 16384); 318f(8590458880, 16385); 319f(17179344896, 32767); 320f(17179869184, 32768); 321f(17180393472, 32769); 322f(34359214080, 65535); 323f(34359738368, 65536); 324f(34360262656, 65537); 325f(68718952448, 131071); 326f(68719476736, 131072); 327f(68720001024, 131073); 328f(137438429184, 262143); 329f(137438953472, 262144); 330f(137439477760, 262145); 331f(274877382656, 524287); 332f(274877906944, 524288); 333x = 524289; 334f(0, 0); 335f(524289, 1); 336f(1048578, 2); 337f(1572867, 3); 338f(2097156, 4); 339f(2621445, 5); 340f(3670023, 7); 341f(4194312, 8); 342f(4718601, 9); 343f(7864335, 15); 344f(8388624, 16); 345f(8912913, 17); 346f(16252959, 31); 347f(16777248, 32); 348f(17301537, 33); 349f(33030207, 63); 350f(33554496, 64); 351f(34078785, 65); 352f(66584703, 127); 353f(67108992, 128); 354f(67633281, 129); 355f(133693695, 255); 356f(134217984, 256); 357f(134742273, 257); 358f(267911679, 511); 359f(268435968, 512); 360f(268960257, 513); 361f(536347647, 1023); 362f(536871936, 1024); 363f(537396225, 1025); 364f(1073219583, 2047); 365f(1073743872, 2048); 366f(1074268161, 2049); 367f(2146963455, 4095); 368f(2147487744, 4096); 369f(2148012033, 4097); 370f(4294451199, 8191); 371f(4294975488, 8192); 372f(4295499777, 8193); 373f(8589426687, 16383); 374f(8589950976, 16384); 375f(8590475265, 16385); 376f(17179377663, 32767); 377f(17179901952, 32768); 378f(17180426241, 32769); 379f(34359279615, 65535); 380f(34359803904, 65536); 381f(34360328193, 65537); 382f(68719083519, 131071); 383f(68719607808, 131072); 384f(68720132097, 131073); 385f(137438691327, 262143); 386f(137439215616, 262144); 387f(137439739905, 262145); 388f(274877906943, 524287); 389f(274878431232, 524288); 390f(274878955521, 524289); 391x = 1048575; 392f(0, 0); 393f(1048575, 1); 394f(2097150, 2); 395f(3145725, 3); 396f(4194300, 4); 397f(5242875, 5); 398f(7340025, 7); 399f(8388600, 8); 400f(9437175, 9); 401f(15728625, 15); 402f(16777200, 16); 403f(17825775, 17); 404f(32505825, 31); 405f(33554400, 32); 406f(34602975, 33); 407f(66060225, 63); 408f(67108800, 64); 409f(68157375, 65); 410f(133169025, 127); 411f(134217600, 128); 412f(135266175, 129); 413f(267386625, 255); 414f(268435200, 256); 415f(269483775, 257); 416f(535821825, 511); 417f(536870400, 512); 418f(537918975, 513); 419f(1072692225, 1023); 420f(1073740800, 1024); 421f(1074789375, 1025); 422f(2146433025, 2047); 423f(2147481600, 2048); 424f(2148530175, 2049); 425f(4293914625, 4095); 426f(4294963200, 4096); 427f(4296011775, 4097); 428f(8588877825, 8191); 429f(8589926400, 8192); 430f(8590974975, 8193); 431f(17178804225, 16383); 432f(17179852800, 16384); 433f(17180901375, 16385); 434f(34358657025, 32767); 435f(34359705600, 32768); 436f(34360754175, 32769); 437f(68718362625, 65535); 438f(68719411200, 65536); 439f(68720459775, 65537); 440f(137437773825, 131071); 441f(137438822400, 131072); 442f(137439870975, 131073); 443f(274876596225, 262143); 444f(274877644800, 262144); 445f(274878693375, 262145); 446f(549754241025, 524287); 447f(549755289600, 524288); 448f(549756338175, 524289); 449f(1099509530625, 1048575); 450x = 1048576; 451f(0, 0); 452f(1048576, 1); 453f(2097152, 2); 454f(3145728, 3); 455f(4194304, 4); 456f(5242880, 5); 457f(7340032, 7); 458f(8388608, 8); 459f(9437184, 9); 460f(15728640, 15); 461f(16777216, 16); 462f(17825792, 17); 463f(32505856, 31); 464f(33554432, 32); 465f(34603008, 33); 466f(66060288, 63); 467f(67108864, 64); 468f(68157440, 65); 469f(133169152, 127); 470f(134217728, 128); 471f(135266304, 129); 472f(267386880, 255); 473f(268435456, 256); 474f(269484032, 257); 475f(535822336, 511); 476f(536870912, 512); 477f(537919488, 513); 478f(1072693248, 1023); 479f(1073741824, 1024); 480f(1074790400, 1025); 481f(2146435072, 2047); 482f(2147483648, 2048); 483f(2148532224, 2049); 484f(4293918720, 4095); 485f(4294967296, 4096); 486f(4296015872, 4097); 487f(8588886016, 8191); 488f(8589934592, 8192); 489f(8590983168, 8193); 490f(17178820608, 16383); 491f(17179869184, 16384); 492f(17180917760, 16385); 493f(34358689792, 32767); 494f(34359738368, 32768); 495f(34360786944, 32769); 496f(68718428160, 65535); 497f(68719476736, 65536); 498f(68720525312, 65537); 499f(137437904896, 131071); 500f(137438953472, 131072); 501f(137440002048, 131073); 502f(274876858368, 262143); 503f(274877906944, 262144); 504f(274878955520, 262145); 505f(549754765312, 524287); 506f(549755813888, 524288); 507f(549756862464, 524289); 508f(1099510579200, 1048575); 509f(1099511627776, 1048576); 510