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 = 134217728; 59f(0, 0); 60f(134217728, 1); 61f(268435456, 2); 62f(402653184, 3); 63f(536870912, 4); 64f(671088640, 5); 65f(939524096, 7); 66f(1073741824, 8); 67f(1207959552, 9); 68f(2013265920, 15); 69f(2147483648, 16); 70f(2281701376, 17); 71f(4160749568, 31); 72f(4294967296, 32); 73f(4429185024, 33); 74f(8455716864, 63); 75f(8589934592, 64); 76f(8724152320, 65); 77f(17045651456, 127); 78f(17179869184, 128); 79f(17314086912, 129); 80f(34225520640, 255); 81f(34359738368, 256); 82f(34493956096, 257); 83f(68585259008, 511); 84f(68719476736, 512); 85f(68853694464, 513); 86f(137304735744, 1023); 87f(137438953472, 1024); 88f(137573171200, 1025); 89f(274743689216, 2047); 90f(274877906944, 2048); 91f(275012124672, 2049); 92f(549621596160, 4095); 93f(549755813888, 4096); 94f(549890031616, 4097); 95f(1099377410048, 8191); 96f(1099511627776, 8192); 97f(1099645845504, 8193); 98f(2198889037824, 16383); 99f(2199023255552, 16384); 100f(2199157473280, 16385); 101f(4397912293376, 32767); 102f(4398046511104, 32768); 103f(4398180728832, 32769); 104f(8795958804480, 65535); 105f(8796093022208, 65536); 106f(8796227239936, 65537); 107f(17592051826688, 131071); 108f(17592186044416, 131072); 109f(17592320262144, 131073); 110f(35184237871104, 262143); 111f(35184372088832, 262144); 112f(35184506306560, 262145); 113f(70368609959936, 524287); 114f(70368744177664, 524288); 115f(70368878395392, 524289); 116f(140737354137600, 1048575); 117f(140737488355328, 1048576); 118f(140737622573056, 1048577); 119f(281474842492928, 2097151); 120f(281474976710656, 2097152); 121f(281475110928384, 2097153); 122f(562949819203584, 4194303); 123f(562949953421312, 4194304); 124f(562950087639040, 4194305); 125f(1125899772624896, 8388607); 126f(1125899906842624, 8388608); 127f(1125900041060352, 8388609); 128x = 134217729; 129f(0, 0); 130f(134217729, 1); 131f(268435458, 2); 132f(402653187, 3); 133f(536870916, 4); 134f(671088645, 5); 135f(939524103, 7); 136f(1073741832, 8); 137f(1207959561, 9); 138f(2013265935, 15); 139f(2147483664, 16); 140f(2281701393, 17); 141f(4160749599, 31); 142f(4294967328, 32); 143f(4429185057, 33); 144f(8455716927, 63); 145f(8589934656, 64); 146f(8724152385, 65); 147f(17045651583, 127); 148f(17179869312, 128); 149f(17314087041, 129); 150f(34225520895, 255); 151f(34359738624, 256); 152f(34493956353, 257); 153f(68585259519, 511); 154f(68719477248, 512); 155f(68853694977, 513); 156f(137304736767, 1023); 157f(137438954496, 1024); 158f(137573172225, 1025); 159f(274743691263, 2047); 160f(274877908992, 2048); 161f(275012126721, 2049); 162f(549621600255, 4095); 163f(549755817984, 4096); 164f(549890035713, 4097); 165f(1099377418239, 8191); 166f(1099511635968, 8192); 167f(1099645853697, 8193); 168f(2198889054207, 16383); 169f(2199023271936, 16384); 170f(2199157489665, 16385); 171f(4397912326143, 32767); 172f(4398046543872, 32768); 173f(4398180761601, 32769); 174f(8795958870015, 65535); 175f(8796093087744, 65536); 176f(8796227305473, 65537); 177f(17592051957759, 131071); 178f(17592186175488, 131072); 179f(17592320393217, 131073); 180f(35184238133247, 262143); 181f(35184372350976, 262144); 182f(35184506568705, 262145); 183f(70368610484223, 524287); 184f(70368744701952, 524288); 185f(70368878919681, 524289); 186f(140737355186175, 1048575); 187f(140737489403904, 1048576); 188f(140737623621633, 1048577); 189f(281474844590079, 2097151); 190f(281474978807808, 2097152); 191f(281475113025537, 2097153); 192f(562949823397887, 4194303); 193f(562949957615616, 4194304); 194f(562950091833345, 4194305); 195f(1125899781013503, 8388607); 196f(1125899915231232, 8388608); 197f(1125900049448961, 8388609); 198x = 268435455; 199f(0, 0); 200f(268435455, 1); 201f(536870910, 2); 202f(805306365, 3); 203f(1073741820, 4); 204f(1342177275, 5); 205f(1879048185, 7); 206f(2147483640, 8); 207f(2415919095, 9); 208f(4026531825, 15); 209f(4294967280, 16); 210f(4563402735, 17); 211f(8321499105, 31); 212f(8589934560, 32); 213f(8858370015, 33); 214f(16911433665, 63); 215f(17179869120, 64); 216f(17448304575, 65); 217f(34091302785, 127); 218f(34359738240, 128); 219f(34628173695, 129); 220f(68451041025, 255); 221f(68719476480, 256); 222f(68987911935, 257); 223f(137170517505, 511); 224f(137438952960, 512); 225f(137707388415, 513); 226f(274609470465, 1023); 227f(274877905920, 1024); 228f(275146341375, 1025); 229f(549487376385, 2047); 230f(549755811840, 2048); 231f(550024247295, 2049); 232f(1099243188225, 4095); 233f(1099511623680, 4096); 234f(1099780059135, 4097); 235f(2198754811905, 8191); 236f(2199023247360, 8192); 237f(2199291682815, 8193); 238f(4397778059265, 16383); 239f(4398046494720, 16384); 240f(4398314930175, 16385); 241f(8795824553985, 32767); 242f(8796092989440, 32768); 243f(8796361424895, 32769); 244f(17591917543425, 65535); 245f(17592185978880, 65536); 246f(17592454414335, 65537); 247f(35184103522305, 131071); 248f(35184371957760, 131072); 249f(35184640393215, 131073); 250f(70368475480065, 262143); 251f(70368743915520, 262144); 252f(70369012350975, 262145); 253f(140737219395585, 524287); 254f(140737487831040, 524288); 255f(140737756266495, 524289); 256f(281474707226625, 1048575); 257f(281474975662080, 1048576); 258f(281475244097535, 1048577); 259f(562949682888705, 2097151); 260f(562949951324160, 2097152); 261f(562950219759615, 2097153); 262f(1125899634212865, 4194303); 263f(1125899902648320, 4194304); 264f(1125900171083775, 4194305); 265x = 268435456; 266f(0, 0); 267f(268435456, 1); 268f(536870912, 2); 269f(805306368, 3); 270f(1073741824, 4); 271f(1342177280, 5); 272f(1879048192, 7); 273f(2147483648, 8); 274f(2415919104, 9); 275f(4026531840, 15); 276f(4294967296, 16); 277f(4563402752, 17); 278f(8321499136, 31); 279f(8589934592, 32); 280f(8858370048, 33); 281f(16911433728, 63); 282f(17179869184, 64); 283f(17448304640, 65); 284f(34091302912, 127); 285f(34359738368, 128); 286f(34628173824, 129); 287f(68451041280, 255); 288f(68719476736, 256); 289f(68987912192, 257); 290f(137170518016, 511); 291f(137438953472, 512); 292f(137707388928, 513); 293f(274609471488, 1023); 294f(274877906944, 1024); 295f(275146342400, 1025); 296f(549487378432, 2047); 297f(549755813888, 2048); 298f(550024249344, 2049); 299f(1099243192320, 4095); 300f(1099511627776, 4096); 301f(1099780063232, 4097); 302f(2198754820096, 8191); 303f(2199023255552, 8192); 304f(2199291691008, 8193); 305f(4397778075648, 16383); 306f(4398046511104, 16384); 307f(4398314946560, 16385); 308f(8795824586752, 32767); 309f(8796093022208, 32768); 310f(8796361457664, 32769); 311f(17591917608960, 65535); 312f(17592186044416, 65536); 313f(17592454479872, 65537); 314f(35184103653376, 131071); 315f(35184372088832, 131072); 316f(35184640524288, 131073); 317f(70368475742208, 262143); 318f(70368744177664, 262144); 319f(70369012613120, 262145); 320f(140737219919872, 524287); 321f(140737488355328, 524288); 322f(140737756790784, 524289); 323f(281474708275200, 1048575); 324f(281474976710656, 1048576); 325f(281475245146112, 1048577); 326f(562949684985856, 2097151); 327f(562949953421312, 2097152); 328f(562950221856768, 2097153); 329f(1125899638407168, 4194303); 330f(1125899906842624, 4194304); 331f(1125900175278080, 4194305); 332x = 268435457; 333f(0, 0); 334f(268435457, 1); 335f(536870914, 2); 336f(805306371, 3); 337f(1073741828, 4); 338f(1342177285, 5); 339f(1879048199, 7); 340f(2147483656, 8); 341f(2415919113, 9); 342f(4026531855, 15); 343f(4294967312, 16); 344f(4563402769, 17); 345f(8321499167, 31); 346f(8589934624, 32); 347f(8858370081, 33); 348f(16911433791, 63); 349f(17179869248, 64); 350f(17448304705, 65); 351f(34091303039, 127); 352f(34359738496, 128); 353f(34628173953, 129); 354f(68451041535, 255); 355f(68719476992, 256); 356f(68987912449, 257); 357f(137170518527, 511); 358f(137438953984, 512); 359f(137707389441, 513); 360f(274609472511, 1023); 361f(274877907968, 1024); 362f(275146343425, 1025); 363f(549487380479, 2047); 364f(549755815936, 2048); 365f(550024251393, 2049); 366f(1099243196415, 4095); 367f(1099511631872, 4096); 368f(1099780067329, 4097); 369f(2198754828287, 8191); 370f(2199023263744, 8192); 371f(2199291699201, 8193); 372f(4397778092031, 16383); 373f(4398046527488, 16384); 374f(4398314962945, 16385); 375f(8795824619519, 32767); 376f(8796093054976, 32768); 377f(8796361490433, 32769); 378f(17591917674495, 65535); 379f(17592186109952, 65536); 380f(17592454545409, 65537); 381f(35184103784447, 131071); 382f(35184372219904, 131072); 383f(35184640655361, 131073); 384f(70368476004351, 262143); 385f(70368744439808, 262144); 386f(70369012875265, 262145); 387f(140737220444159, 524287); 388f(140737488879616, 524288); 389f(140737757315073, 524289); 390f(281474709323775, 1048575); 391f(281474977759232, 1048576); 392f(281475246194689, 1048577); 393f(562949687083007, 2097151); 394f(562949955518464, 2097152); 395f(562950223953921, 2097153); 396f(1125899642601471, 4194303); 397f(1125899911036928, 4194304); 398f(1125900179472385, 4194305); 399x = 536870911; 400f(0, 0); 401f(536870911, 1); 402f(1073741822, 2); 403f(1610612733, 3); 404f(2147483644, 4); 405f(2684354555, 5); 406f(3758096377, 7); 407f(4294967288, 8); 408f(4831838199, 9); 409f(8053063665, 15); 410f(8589934576, 16); 411f(9126805487, 17); 412f(16642998241, 31); 413f(17179869152, 32); 414f(17716740063, 33); 415f(33822867393, 63); 416f(34359738304, 64); 417f(34896609215, 65); 418f(68182605697, 127); 419f(68719476608, 128); 420f(69256347519, 129); 421f(136902082305, 255); 422f(137438953216, 256); 423f(137975824127, 257); 424f(274341035521, 511); 425f(274877906432, 512); 426f(275414777343, 513); 427f(549218941953, 1023); 428f(549755812864, 1024); 429f(550292683775, 1025); 430f(1098974754817, 2047); 431f(1099511625728, 2048); 432f(1100048496639, 2049); 433f(2198486380545, 4095); 434f(2199023251456, 4096); 435f(2199560122367, 4097); 436f(4397509632001, 8191); 437f(4398046502912, 8192); 438f(4398583373823, 8193); 439f(8795556134913, 16383); 440f(8796093005824, 16384); 441f(8796629876735, 16385); 442f(17591649140737, 32767); 443f(17592186011648, 32768); 444f(17592722882559, 32769); 445f(35183835152385, 65535); 446f(35184372023296, 65536); 447f(35184908894207, 65537); 448f(70368207175681, 131071); 449f(70368744046592, 131072); 450f(70369280917503, 131073); 451f(140736951222273, 262143); 452f(140737488093184, 262144); 453f(140738024964095, 262145); 454f(281474439315457, 524287); 455f(281474976186368, 524288); 456f(281475513057279, 524289); 457f(562949415501825, 1048575); 458f(562949952372736, 1048576); 459f(562950489243647, 1048577); 460f(1125899367874561, 2097151); 461f(1125899904745472, 2097152); 462f(1125900441616383, 2097153); 463x = 536870912; 464f(0, 0); 465f(536870912, 1); 466f(1073741824, 2); 467f(1610612736, 3); 468f(2147483648, 4); 469f(2684354560, 5); 470f(3758096384, 7); 471f(4294967296, 8); 472f(4831838208, 9); 473f(8053063680, 15); 474f(8589934592, 16); 475f(9126805504, 17); 476f(16642998272, 31); 477f(17179869184, 32); 478f(17716740096, 33); 479f(33822867456, 63); 480f(34359738368, 64); 481f(34896609280, 65); 482f(68182605824, 127); 483f(68719476736, 128); 484f(69256347648, 129); 485f(136902082560, 255); 486f(137438953472, 256); 487f(137975824384, 257); 488f(274341036032, 511); 489f(274877906944, 512); 490f(275414777856, 513); 491f(549218942976, 1023); 492f(549755813888, 1024); 493f(550292684800, 1025); 494f(1098974756864, 2047); 495f(1099511627776, 2048); 496f(1100048498688, 2049); 497f(2198486384640, 4095); 498f(2199023255552, 4096); 499f(2199560126464, 4097); 500f(4397509640192, 8191); 501f(4398046511104, 8192); 502f(4398583382016, 8193); 503f(8795556151296, 16383); 504f(8796093022208, 16384); 505f(8796629893120, 16385); 506f(17591649173504, 32767); 507f(17592186044416, 32768); 508f(17592722915328, 32769); 509f(35183835217920, 65535); 510f(35184372088832, 65536); 511f(35184908959744, 65537); 512f(70368207306752, 131071); 513f(70368744177664, 131072); 514f(70369281048576, 131073); 515f(140736951484416, 262143); 516f(140737488355328, 262144); 517f(140738025226240, 262145); 518f(281474439839744, 524287); 519f(281474976710656, 524288); 520f(281475513581568, 524289); 521f(562949416550400, 1048575); 522f(562949953421312, 1048576); 523f(562950490292224, 1048577); 524f(1125899369971712, 2097151); 525f(1125899906842624, 2097152); 526f(1125900443713536, 2097153); 527