Ben Murdoch | b8a8cc1 | 2014-11-26 15:28:44 +0000 | [diff] [blame] | 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 | |
| 28 | var x; |
| 29 | |
| 30 | // Converts a number to string respecting -0. |
| 31 | function stringify(n) { |
| 32 | if ((1 / n) === -Infinity) return "-0"; |
| 33 | return String(n); |
| 34 | } |
| 35 | |
| 36 | function 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 | |
| 58 | x = 4294967296; |
| 59 | f(0, 0); |
| 60 | f(4294967296, 1); |
| 61 | f(8589934592, 2); |
| 62 | f(12884901888, 3); |
| 63 | f(17179869184, 4); |
| 64 | f(21474836480, 5); |
| 65 | f(30064771072, 7); |
| 66 | f(34359738368, 8); |
| 67 | f(38654705664, 9); |
| 68 | f(64424509440, 15); |
| 69 | f(68719476736, 16); |
| 70 | f(73014444032, 17); |
| 71 | f(133143986176, 31); |
| 72 | f(137438953472, 32); |
| 73 | f(141733920768, 33); |
| 74 | f(270582939648, 63); |
| 75 | f(274877906944, 64); |
| 76 | f(279172874240, 65); |
| 77 | f(545460846592, 127); |
| 78 | f(549755813888, 128); |
| 79 | f(554050781184, 129); |
| 80 | f(1095216660480, 255); |
| 81 | f(1099511627776, 256); |
| 82 | f(1103806595072, 257); |
| 83 | f(2194728288256, 511); |
| 84 | f(2199023255552, 512); |
| 85 | f(2203318222848, 513); |
| 86 | f(4393751543808, 1023); |
| 87 | f(4398046511104, 1024); |
| 88 | f(4402341478400, 1025); |
| 89 | f(8791798054912, 2047); |
| 90 | f(8796093022208, 2048); |
| 91 | f(8800387989504, 2049); |
| 92 | f(17587891077120, 4095); |
| 93 | f(17592186044416, 4096); |
| 94 | f(17596481011712, 4097); |
| 95 | f(35180077121536, 8191); |
| 96 | f(35184372088832, 8192); |
| 97 | f(35188667056128, 8193); |
| 98 | f(70364449210368, 16383); |
| 99 | f(70368744177664, 16384); |
| 100 | f(70373039144960, 16385); |
| 101 | f(140733193388032, 32767); |
| 102 | f(140737488355328, 32768); |
| 103 | f(140741783322624, 32769); |
| 104 | f(281470681743360, 65535); |
| 105 | f(281474976710656, 65536); |
| 106 | f(281479271677952, 65537); |
| 107 | f(562945658454016, 131071); |
| 108 | f(562949953421312, 131072); |
| 109 | f(562954248388608, 131073); |
| 110 | f(1125895611875328, 262143); |
| 111 | f(1125899906842624, 262144); |
| 112 | f(1125904201809920, 262145); |
| 113 | x = 4294967297; |
| 114 | f(0, 0); |
| 115 | f(4294967297, 1); |
| 116 | f(8589934594, 2); |
| 117 | f(12884901891, 3); |
| 118 | f(17179869188, 4); |
| 119 | f(21474836485, 5); |
| 120 | f(30064771079, 7); |
| 121 | f(34359738376, 8); |
| 122 | f(38654705673, 9); |
| 123 | f(64424509455, 15); |
| 124 | f(68719476752, 16); |
| 125 | f(73014444049, 17); |
| 126 | f(133143986207, 31); |
| 127 | f(137438953504, 32); |
| 128 | f(141733920801, 33); |
| 129 | f(270582939711, 63); |
| 130 | f(274877907008, 64); |
| 131 | f(279172874305, 65); |
| 132 | f(545460846719, 127); |
| 133 | f(549755814016, 128); |
| 134 | f(554050781313, 129); |
| 135 | f(1095216660735, 255); |
| 136 | f(1099511628032, 256); |
| 137 | f(1103806595329, 257); |
| 138 | f(2194728288767, 511); |
| 139 | f(2199023256064, 512); |
| 140 | f(2203318223361, 513); |
| 141 | f(4393751544831, 1023); |
| 142 | f(4398046512128, 1024); |
| 143 | f(4402341479425, 1025); |
| 144 | f(8791798056959, 2047); |
| 145 | f(8796093024256, 2048); |
| 146 | f(8800387991553, 2049); |
| 147 | f(17587891081215, 4095); |
| 148 | f(17592186048512, 4096); |
| 149 | f(17596481015809, 4097); |
| 150 | f(35180077129727, 8191); |
| 151 | f(35184372097024, 8192); |
| 152 | f(35188667064321, 8193); |
| 153 | f(70364449226751, 16383); |
| 154 | f(70368744194048, 16384); |
| 155 | f(70373039161345, 16385); |
| 156 | f(140733193420799, 32767); |
| 157 | f(140737488388096, 32768); |
| 158 | f(140741783355393, 32769); |
| 159 | f(281470681808895, 65535); |
| 160 | f(281474976776192, 65536); |
| 161 | f(281479271743489, 65537); |
| 162 | f(562945658585087, 131071); |
| 163 | f(562949953552384, 131072); |
| 164 | f(562954248519681, 131073); |
| 165 | f(1125895612137471, 262143); |
| 166 | f(1125899907104768, 262144); |
| 167 | f(1125904202072065, 262145); |
| 168 | x = 8589934591; |
| 169 | f(0, 0); |
| 170 | f(8589934591, 1); |
| 171 | f(17179869182, 2); |
| 172 | f(25769803773, 3); |
| 173 | f(34359738364, 4); |
| 174 | f(42949672955, 5); |
| 175 | f(60129542137, 7); |
| 176 | f(68719476728, 8); |
| 177 | f(77309411319, 9); |
| 178 | f(128849018865, 15); |
| 179 | f(137438953456, 16); |
| 180 | f(146028888047, 17); |
| 181 | f(266287972321, 31); |
| 182 | f(274877906912, 32); |
| 183 | f(283467841503, 33); |
| 184 | f(541165879233, 63); |
| 185 | f(549755813824, 64); |
| 186 | f(558345748415, 65); |
| 187 | f(1090921693057, 127); |
| 188 | f(1099511627648, 128); |
| 189 | f(1108101562239, 129); |
| 190 | f(2190433320705, 255); |
| 191 | f(2199023255296, 256); |
| 192 | f(2207613189887, 257); |
| 193 | f(4389456576001, 511); |
| 194 | f(4398046510592, 512); |
| 195 | f(4406636445183, 513); |
| 196 | f(8787503086593, 1023); |
| 197 | f(8796093021184, 1024); |
| 198 | f(8804682955775, 1025); |
| 199 | f(17583596107777, 2047); |
| 200 | f(17592186042368, 2048); |
| 201 | f(17600775976959, 2049); |
| 202 | f(35175782150145, 4095); |
| 203 | f(35184372084736, 4096); |
| 204 | f(35192962019327, 4097); |
| 205 | f(70360154234881, 8191); |
| 206 | f(70368744169472, 8192); |
| 207 | f(70377334104063, 8193); |
| 208 | f(140728898404353, 16383); |
| 209 | f(140737488338944, 16384); |
| 210 | f(140746078273535, 16385); |
| 211 | f(281466386743297, 32767); |
| 212 | f(281474976677888, 32768); |
| 213 | f(281483566612479, 32769); |
| 214 | f(562941363421185, 65535); |
| 215 | f(562949953355776, 65536); |
| 216 | f(562958543290367, 65537); |
| 217 | f(1125891316776961, 131071); |
| 218 | f(1125899906711552, 131072); |
| 219 | f(1125908496646143, 131073); |
| 220 | x = 8589934592; |
| 221 | f(0, 0); |
| 222 | f(8589934592, 1); |
| 223 | f(17179869184, 2); |
| 224 | f(25769803776, 3); |
| 225 | f(34359738368, 4); |
| 226 | f(42949672960, 5); |
| 227 | f(60129542144, 7); |
| 228 | f(68719476736, 8); |
| 229 | f(77309411328, 9); |
| 230 | f(128849018880, 15); |
| 231 | f(137438953472, 16); |
| 232 | f(146028888064, 17); |
| 233 | f(266287972352, 31); |
| 234 | f(274877906944, 32); |
| 235 | f(283467841536, 33); |
| 236 | f(541165879296, 63); |
| 237 | f(549755813888, 64); |
| 238 | f(558345748480, 65); |
| 239 | f(1090921693184, 127); |
| 240 | f(1099511627776, 128); |
| 241 | f(1108101562368, 129); |
| 242 | f(2190433320960, 255); |
| 243 | f(2199023255552, 256); |
| 244 | f(2207613190144, 257); |
| 245 | f(4389456576512, 511); |
| 246 | f(4398046511104, 512); |
| 247 | f(4406636445696, 513); |
| 248 | f(8787503087616, 1023); |
| 249 | f(8796093022208, 1024); |
| 250 | f(8804682956800, 1025); |
| 251 | f(17583596109824, 2047); |
| 252 | f(17592186044416, 2048); |
| 253 | f(17600775979008, 2049); |
| 254 | f(35175782154240, 4095); |
| 255 | f(35184372088832, 4096); |
| 256 | f(35192962023424, 4097); |
| 257 | f(70360154243072, 8191); |
| 258 | f(70368744177664, 8192); |
| 259 | f(70377334112256, 8193); |
| 260 | f(140728898420736, 16383); |
| 261 | f(140737488355328, 16384); |
| 262 | f(140746078289920, 16385); |
| 263 | f(281466386776064, 32767); |
| 264 | f(281474976710656, 32768); |
| 265 | f(281483566645248, 32769); |
| 266 | f(562941363486720, 65535); |
| 267 | f(562949953421312, 65536); |
| 268 | f(562958543355904, 65537); |
| 269 | f(1125891316908032, 131071); |
| 270 | f(1125899906842624, 131072); |
| 271 | f(1125908496777216, 131073); |
| 272 | x = 8589934593; |
| 273 | f(0, 0); |
| 274 | f(8589934593, 1); |
| 275 | f(17179869186, 2); |
| 276 | f(25769803779, 3); |
| 277 | f(34359738372, 4); |
| 278 | f(42949672965, 5); |
| 279 | f(60129542151, 7); |
| 280 | f(68719476744, 8); |
| 281 | f(77309411337, 9); |
| 282 | f(128849018895, 15); |
| 283 | f(137438953488, 16); |
| 284 | f(146028888081, 17); |
| 285 | f(266287972383, 31); |
| 286 | f(274877906976, 32); |
| 287 | f(283467841569, 33); |
| 288 | f(541165879359, 63); |
| 289 | f(549755813952, 64); |
| 290 | f(558345748545, 65); |
| 291 | f(1090921693311, 127); |
| 292 | f(1099511627904, 128); |
| 293 | f(1108101562497, 129); |
| 294 | f(2190433321215, 255); |
| 295 | f(2199023255808, 256); |
| 296 | f(2207613190401, 257); |
| 297 | f(4389456577023, 511); |
| 298 | f(4398046511616, 512); |
| 299 | f(4406636446209, 513); |
| 300 | f(8787503088639, 1023); |
| 301 | f(8796093023232, 1024); |
| 302 | f(8804682957825, 1025); |
| 303 | f(17583596111871, 2047); |
| 304 | f(17592186046464, 2048); |
| 305 | f(17600775981057, 2049); |
| 306 | f(35175782158335, 4095); |
| 307 | f(35184372092928, 4096); |
| 308 | f(35192962027521, 4097); |
| 309 | f(70360154251263, 8191); |
| 310 | f(70368744185856, 8192); |
| 311 | f(70377334120449, 8193); |
| 312 | f(140728898437119, 16383); |
| 313 | f(140737488371712, 16384); |
| 314 | f(140746078306305, 16385); |
| 315 | f(281466386808831, 32767); |
| 316 | f(281474976743424, 32768); |
| 317 | f(281483566678017, 32769); |
| 318 | f(562941363552255, 65535); |
| 319 | f(562949953486848, 65536); |
| 320 | f(562958543421441, 65537); |
| 321 | f(1125891317039103, 131071); |
| 322 | f(1125899906973696, 131072); |
| 323 | f(1125908496908289, 131073); |
| 324 | x = 17179869183; |
| 325 | f(0, 0); |
| 326 | f(17179869183, 1); |
| 327 | f(34359738366, 2); |
| 328 | f(51539607549, 3); |
| 329 | f(68719476732, 4); |
| 330 | f(85899345915, 5); |
| 331 | f(120259084281, 7); |
| 332 | f(137438953464, 8); |
| 333 | f(154618822647, 9); |
| 334 | f(257698037745, 15); |
| 335 | f(274877906928, 16); |
| 336 | f(292057776111, 17); |
| 337 | f(532575944673, 31); |
| 338 | f(549755813856, 32); |
| 339 | f(566935683039, 33); |
| 340 | f(1082331758529, 63); |
| 341 | f(1099511627712, 64); |
| 342 | f(1116691496895, 65); |
| 343 | f(2181843386241, 127); |
| 344 | f(2199023255424, 128); |
| 345 | f(2216203124607, 129); |
| 346 | f(4380866641665, 255); |
| 347 | f(4398046510848, 256); |
| 348 | f(4415226380031, 257); |
| 349 | f(8778913152513, 511); |
| 350 | f(8796093021696, 512); |
| 351 | f(8813272890879, 513); |
| 352 | f(17575006174209, 1023); |
| 353 | f(17592186043392, 1024); |
| 354 | f(17609365912575, 1025); |
| 355 | f(35167192217601, 2047); |
| 356 | f(35184372086784, 2048); |
| 357 | f(35201551955967, 2049); |
| 358 | f(70351564304385, 4095); |
| 359 | f(70368744173568, 4096); |
| 360 | f(70385924042751, 4097); |
| 361 | f(140720308477953, 8191); |
| 362 | f(140737488347136, 8192); |
| 363 | f(140754668216319, 8193); |
| 364 | f(281457796825089, 16383); |
| 365 | f(281474976694272, 16384); |
| 366 | f(281492156563455, 16385); |
| 367 | f(562932773519361, 32767); |
| 368 | f(562949953388544, 32768); |
| 369 | f(562967133257727, 32769); |
| 370 | f(1125882726907905, 65535); |
| 371 | f(1125899906777088, 65536); |
| 372 | f(1125917086646271, 65537); |
| 373 | x = 17179869184; |
| 374 | f(0, 0); |
| 375 | f(17179869184, 1); |
| 376 | f(34359738368, 2); |
| 377 | f(51539607552, 3); |
| 378 | f(68719476736, 4); |
| 379 | f(85899345920, 5); |
| 380 | f(120259084288, 7); |
| 381 | f(137438953472, 8); |
| 382 | f(154618822656, 9); |
| 383 | f(257698037760, 15); |
| 384 | f(274877906944, 16); |
| 385 | f(292057776128, 17); |
| 386 | f(532575944704, 31); |
| 387 | f(549755813888, 32); |
| 388 | f(566935683072, 33); |
| 389 | f(1082331758592, 63); |
| 390 | f(1099511627776, 64); |
| 391 | f(1116691496960, 65); |
| 392 | f(2181843386368, 127); |
| 393 | f(2199023255552, 128); |
| 394 | f(2216203124736, 129); |
| 395 | f(4380866641920, 255); |
| 396 | f(4398046511104, 256); |
| 397 | f(4415226380288, 257); |
| 398 | f(8778913153024, 511); |
| 399 | f(8796093022208, 512); |
| 400 | f(8813272891392, 513); |
| 401 | f(17575006175232, 1023); |
| 402 | f(17592186044416, 1024); |
| 403 | f(17609365913600, 1025); |
| 404 | f(35167192219648, 2047); |
| 405 | f(35184372088832, 2048); |
| 406 | f(35201551958016, 2049); |
| 407 | f(70351564308480, 4095); |
| 408 | f(70368744177664, 4096); |
| 409 | f(70385924046848, 4097); |
| 410 | f(140720308486144, 8191); |
| 411 | f(140737488355328, 8192); |
| 412 | f(140754668224512, 8193); |
| 413 | f(281457796841472, 16383); |
| 414 | f(281474976710656, 16384); |
| 415 | f(281492156579840, 16385); |
| 416 | f(562932773552128, 32767); |
| 417 | f(562949953421312, 32768); |
| 418 | f(562967133290496, 32769); |
| 419 | f(1125882726973440, 65535); |
| 420 | f(1125899906842624, 65536); |
| 421 | f(1125917086711808, 65537); |
| 422 | x = 17179869185; |
| 423 | f(0, 0); |
| 424 | f(17179869185, 1); |
| 425 | f(34359738370, 2); |
| 426 | f(51539607555, 3); |
| 427 | f(68719476740, 4); |
| 428 | f(85899345925, 5); |
| 429 | f(120259084295, 7); |
| 430 | f(137438953480, 8); |
| 431 | f(154618822665, 9); |
| 432 | f(257698037775, 15); |
| 433 | f(274877906960, 16); |
| 434 | f(292057776145, 17); |
| 435 | f(532575944735, 31); |
| 436 | f(549755813920, 32); |
| 437 | f(566935683105, 33); |
| 438 | f(1082331758655, 63); |
| 439 | f(1099511627840, 64); |
| 440 | f(1116691497025, 65); |
| 441 | f(2181843386495, 127); |
| 442 | f(2199023255680, 128); |
| 443 | f(2216203124865, 129); |
| 444 | f(4380866642175, 255); |
| 445 | f(4398046511360, 256); |
| 446 | f(4415226380545, 257); |
| 447 | f(8778913153535, 511); |
| 448 | f(8796093022720, 512); |
| 449 | f(8813272891905, 513); |
| 450 | f(17575006176255, 1023); |
| 451 | f(17592186045440, 1024); |
| 452 | f(17609365914625, 1025); |
| 453 | f(35167192221695, 2047); |
| 454 | f(35184372090880, 2048); |
| 455 | f(35201551960065, 2049); |
| 456 | f(70351564312575, 4095); |
| 457 | f(70368744181760, 4096); |
| 458 | f(70385924050945, 4097); |
| 459 | f(140720308494335, 8191); |
| 460 | f(140737488363520, 8192); |
| 461 | f(140754668232705, 8193); |
| 462 | f(281457796857855, 16383); |
| 463 | f(281474976727040, 16384); |
| 464 | f(281492156596225, 16385); |
| 465 | f(562932773584895, 32767); |
| 466 | f(562949953454080, 32768); |
| 467 | f(562967133323265, 32769); |
| 468 | f(1125882727038975, 65535); |
| 469 | f(1125899906908160, 65536); |
| 470 | f(1125917086777345, 65537); |