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 = 1048577; |
| 59 | f(0, 0); |
| 60 | f(1048577, 1); |
| 61 | f(2097154, 2); |
| 62 | f(3145731, 3); |
| 63 | f(4194308, 4); |
| 64 | f(5242885, 5); |
| 65 | f(7340039, 7); |
| 66 | f(8388616, 8); |
| 67 | f(9437193, 9); |
| 68 | f(15728655, 15); |
| 69 | f(16777232, 16); |
| 70 | f(17825809, 17); |
| 71 | f(32505887, 31); |
| 72 | f(33554464, 32); |
| 73 | f(34603041, 33); |
| 74 | f(66060351, 63); |
| 75 | f(67108928, 64); |
| 76 | f(68157505, 65); |
| 77 | f(133169279, 127); |
| 78 | f(134217856, 128); |
| 79 | f(135266433, 129); |
| 80 | f(267387135, 255); |
| 81 | f(268435712, 256); |
| 82 | f(269484289, 257); |
| 83 | f(535822847, 511); |
| 84 | f(536871424, 512); |
| 85 | f(537920001, 513); |
| 86 | f(1072694271, 1023); |
| 87 | f(1073742848, 1024); |
| 88 | f(1074791425, 1025); |
| 89 | f(2146437119, 2047); |
| 90 | f(2147485696, 2048); |
| 91 | f(2148534273, 2049); |
| 92 | f(4293922815, 4095); |
| 93 | f(4294971392, 4096); |
| 94 | f(4296019969, 4097); |
| 95 | f(8588894207, 8191); |
| 96 | f(8589942784, 8192); |
| 97 | f(8590991361, 8193); |
| 98 | f(17178836991, 16383); |
| 99 | f(17179885568, 16384); |
| 100 | f(17180934145, 16385); |
| 101 | f(34358722559, 32767); |
| 102 | f(34359771136, 32768); |
| 103 | f(34360819713, 32769); |
| 104 | f(68718493695, 65535); |
| 105 | f(68719542272, 65536); |
| 106 | f(68720590849, 65537); |
| 107 | f(137438035967, 131071); |
| 108 | f(137439084544, 131072); |
| 109 | f(137440133121, 131073); |
| 110 | f(274877120511, 262143); |
| 111 | f(274878169088, 262144); |
| 112 | f(274879217665, 262145); |
| 113 | f(549755289599, 524287); |
| 114 | f(549756338176, 524288); |
| 115 | f(549757386753, 524289); |
| 116 | f(1099511627775, 1048575); |
| 117 | f(1099512676352, 1048576); |
| 118 | f(1099513724929, 1048577); |
| 119 | x = 2097151; |
| 120 | f(0, 0); |
| 121 | f(2097151, 1); |
| 122 | f(4194302, 2); |
| 123 | f(6291453, 3); |
| 124 | f(8388604, 4); |
| 125 | f(10485755, 5); |
| 126 | f(14680057, 7); |
| 127 | f(16777208, 8); |
| 128 | f(18874359, 9); |
| 129 | f(31457265, 15); |
| 130 | f(33554416, 16); |
| 131 | f(35651567, 17); |
| 132 | f(65011681, 31); |
| 133 | f(67108832, 32); |
| 134 | f(69205983, 33); |
| 135 | f(132120513, 63); |
| 136 | f(134217664, 64); |
| 137 | f(136314815, 65); |
| 138 | f(266338177, 127); |
| 139 | f(268435328, 128); |
| 140 | f(270532479, 129); |
| 141 | f(534773505, 255); |
| 142 | f(536870656, 256); |
| 143 | f(538967807, 257); |
| 144 | f(1071644161, 511); |
| 145 | f(1073741312, 512); |
| 146 | f(1075838463, 513); |
| 147 | f(2145385473, 1023); |
| 148 | f(2147482624, 1024); |
| 149 | f(2149579775, 1025); |
| 150 | f(4292868097, 2047); |
| 151 | f(4294965248, 2048); |
| 152 | f(4297062399, 2049); |
| 153 | f(8587833345, 4095); |
| 154 | f(8589930496, 4096); |
| 155 | f(8592027647, 4097); |
| 156 | f(17177763841, 8191); |
| 157 | f(17179860992, 8192); |
| 158 | f(17181958143, 8193); |
| 159 | f(34357624833, 16383); |
| 160 | f(34359721984, 16384); |
| 161 | f(34361819135, 16385); |
| 162 | f(68717346817, 32767); |
| 163 | f(68719443968, 32768); |
| 164 | f(68721541119, 32769); |
| 165 | f(137436790785, 65535); |
| 166 | f(137438887936, 65536); |
| 167 | f(137440985087, 65537); |
| 168 | f(274875678721, 131071); |
| 169 | f(274877775872, 131072); |
| 170 | f(274879873023, 131073); |
| 171 | f(549753454593, 262143); |
| 172 | f(549755551744, 262144); |
| 173 | f(549757648895, 262145); |
| 174 | f(1099509006337, 524287); |
| 175 | f(1099511103488, 524288); |
| 176 | f(1099513200639, 524289); |
| 177 | f(2199020109825, 1048575); |
| 178 | f(2199022206976, 1048576); |
| 179 | f(2199024304127, 1048577); |
| 180 | f(4398042316801, 2097151); |
| 181 | x = 2097152; |
| 182 | f(0, 0); |
| 183 | f(2097152, 1); |
| 184 | f(4194304, 2); |
| 185 | f(6291456, 3); |
| 186 | f(8388608, 4); |
| 187 | f(10485760, 5); |
| 188 | f(14680064, 7); |
| 189 | f(16777216, 8); |
| 190 | f(18874368, 9); |
| 191 | f(31457280, 15); |
| 192 | f(33554432, 16); |
| 193 | f(35651584, 17); |
| 194 | f(65011712, 31); |
| 195 | f(67108864, 32); |
| 196 | f(69206016, 33); |
| 197 | f(132120576, 63); |
| 198 | f(134217728, 64); |
| 199 | f(136314880, 65); |
| 200 | f(266338304, 127); |
| 201 | f(268435456, 128); |
| 202 | f(270532608, 129); |
| 203 | f(534773760, 255); |
| 204 | f(536870912, 256); |
| 205 | f(538968064, 257); |
| 206 | f(1071644672, 511); |
| 207 | f(1073741824, 512); |
| 208 | f(1075838976, 513); |
| 209 | f(2145386496, 1023); |
| 210 | f(2147483648, 1024); |
| 211 | f(2149580800, 1025); |
| 212 | f(4292870144, 2047); |
| 213 | f(4294967296, 2048); |
| 214 | f(4297064448, 2049); |
| 215 | f(8587837440, 4095); |
| 216 | f(8589934592, 4096); |
| 217 | f(8592031744, 4097); |
| 218 | f(17177772032, 8191); |
| 219 | f(17179869184, 8192); |
| 220 | f(17181966336, 8193); |
| 221 | f(34357641216, 16383); |
| 222 | f(34359738368, 16384); |
| 223 | f(34361835520, 16385); |
| 224 | f(68717379584, 32767); |
| 225 | f(68719476736, 32768); |
| 226 | f(68721573888, 32769); |
| 227 | f(137436856320, 65535); |
| 228 | f(137438953472, 65536); |
| 229 | f(137441050624, 65537); |
| 230 | f(274875809792, 131071); |
| 231 | f(274877906944, 131072); |
| 232 | f(274880004096, 131073); |
| 233 | f(549753716736, 262143); |
| 234 | f(549755813888, 262144); |
| 235 | f(549757911040, 262145); |
| 236 | f(1099509530624, 524287); |
| 237 | f(1099511627776, 524288); |
| 238 | f(1099513724928, 524289); |
| 239 | f(2199021158400, 1048575); |
| 240 | f(2199023255552, 1048576); |
| 241 | f(2199025352704, 1048577); |
| 242 | f(4398044413952, 2097151); |
| 243 | f(4398046511104, 2097152); |
| 244 | x = 2097153; |
| 245 | f(0, 0); |
| 246 | f(2097153, 1); |
| 247 | f(4194306, 2); |
| 248 | f(6291459, 3); |
| 249 | f(8388612, 4); |
| 250 | f(10485765, 5); |
| 251 | f(14680071, 7); |
| 252 | f(16777224, 8); |
| 253 | f(18874377, 9); |
| 254 | f(31457295, 15); |
| 255 | f(33554448, 16); |
| 256 | f(35651601, 17); |
| 257 | f(65011743, 31); |
| 258 | f(67108896, 32); |
| 259 | f(69206049, 33); |
| 260 | f(132120639, 63); |
| 261 | f(134217792, 64); |
| 262 | f(136314945, 65); |
| 263 | f(266338431, 127); |
| 264 | f(268435584, 128); |
| 265 | f(270532737, 129); |
| 266 | f(534774015, 255); |
| 267 | f(536871168, 256); |
| 268 | f(538968321, 257); |
| 269 | f(1071645183, 511); |
| 270 | f(1073742336, 512); |
| 271 | f(1075839489, 513); |
| 272 | f(2145387519, 1023); |
| 273 | f(2147484672, 1024); |
| 274 | f(2149581825, 1025); |
| 275 | f(4292872191, 2047); |
| 276 | f(4294969344, 2048); |
| 277 | f(4297066497, 2049); |
| 278 | f(8587841535, 4095); |
| 279 | f(8589938688, 4096); |
| 280 | f(8592035841, 4097); |
| 281 | f(17177780223, 8191); |
| 282 | f(17179877376, 8192); |
| 283 | f(17181974529, 8193); |
| 284 | f(34357657599, 16383); |
| 285 | f(34359754752, 16384); |
| 286 | f(34361851905, 16385); |
| 287 | f(68717412351, 32767); |
| 288 | f(68719509504, 32768); |
| 289 | f(68721606657, 32769); |
| 290 | f(137436921855, 65535); |
| 291 | f(137439019008, 65536); |
| 292 | f(137441116161, 65537); |
| 293 | f(274875940863, 131071); |
| 294 | f(274878038016, 131072); |
| 295 | f(274880135169, 131073); |
| 296 | f(549753978879, 262143); |
| 297 | f(549756076032, 262144); |
| 298 | f(549758173185, 262145); |
| 299 | f(1099510054911, 524287); |
| 300 | f(1099512152064, 524288); |
| 301 | f(1099514249217, 524289); |
| 302 | f(2199022206975, 1048575); |
| 303 | f(2199024304128, 1048576); |
| 304 | f(2199026401281, 1048577); |
| 305 | f(4398046511103, 2097151); |
| 306 | f(4398048608256, 2097152); |
| 307 | f(4398050705409, 2097153); |
| 308 | x = 4194303; |
| 309 | f(0, 0); |
| 310 | f(4194303, 1); |
| 311 | f(8388606, 2); |
| 312 | f(12582909, 3); |
| 313 | f(16777212, 4); |
| 314 | f(20971515, 5); |
| 315 | f(29360121, 7); |
| 316 | f(33554424, 8); |
| 317 | f(37748727, 9); |
| 318 | f(62914545, 15); |
| 319 | f(67108848, 16); |
| 320 | f(71303151, 17); |
| 321 | f(130023393, 31); |
| 322 | f(134217696, 32); |
| 323 | f(138411999, 33); |
| 324 | f(264241089, 63); |
| 325 | f(268435392, 64); |
| 326 | f(272629695, 65); |
| 327 | f(532676481, 127); |
| 328 | f(536870784, 128); |
| 329 | f(541065087, 129); |
| 330 | f(1069547265, 255); |
| 331 | f(1073741568, 256); |
| 332 | f(1077935871, 257); |
| 333 | f(2143288833, 511); |
| 334 | f(2147483136, 512); |
| 335 | f(2151677439, 513); |
| 336 | f(4290771969, 1023); |
| 337 | f(4294966272, 1024); |
| 338 | f(4299160575, 1025); |
| 339 | f(8585738241, 2047); |
| 340 | f(8589932544, 2048); |
| 341 | f(8594126847, 2049); |
| 342 | f(17175670785, 4095); |
| 343 | f(17179865088, 4096); |
| 344 | f(17184059391, 4097); |
| 345 | f(34355535873, 8191); |
| 346 | f(34359730176, 8192); |
| 347 | f(34363924479, 8193); |
| 348 | f(68715266049, 16383); |
| 349 | f(68719460352, 16384); |
| 350 | f(68723654655, 16385); |
| 351 | f(137434726401, 32767); |
| 352 | f(137438920704, 32768); |
| 353 | f(137443115007, 32769); |
| 354 | f(274873647105, 65535); |
| 355 | f(274877841408, 65536); |
| 356 | f(274882035711, 65537); |
| 357 | f(549751488513, 131071); |
| 358 | f(549755682816, 131072); |
| 359 | f(549759877119, 131073); |
| 360 | f(1099507171329, 262143); |
| 361 | f(1099511365632, 262144); |
| 362 | f(1099515559935, 262145); |
| 363 | f(2199018536961, 524287); |
| 364 | f(2199022731264, 524288); |
| 365 | f(2199026925567, 524289); |
| 366 | f(4398041268225, 1048575); |
| 367 | f(4398045462528, 1048576); |
| 368 | f(4398049656831, 1048577); |
| 369 | f(8796086730753, 2097151); |
| 370 | f(8796090925056, 2097152); |
| 371 | f(8796095119359, 2097153); |
| 372 | f(17592177655809, 4194303); |
| 373 | x = 4194304; |
| 374 | f(0, 0); |
| 375 | f(4194304, 1); |
| 376 | f(8388608, 2); |
| 377 | f(12582912, 3); |
| 378 | f(16777216, 4); |
| 379 | f(20971520, 5); |
| 380 | f(29360128, 7); |
| 381 | f(33554432, 8); |
| 382 | f(37748736, 9); |
| 383 | f(62914560, 15); |
| 384 | f(67108864, 16); |
| 385 | f(71303168, 17); |
| 386 | f(130023424, 31); |
| 387 | f(134217728, 32); |
| 388 | f(138412032, 33); |
| 389 | f(264241152, 63); |
| 390 | f(268435456, 64); |
| 391 | f(272629760, 65); |
| 392 | f(532676608, 127); |
| 393 | f(536870912, 128); |
| 394 | f(541065216, 129); |
| 395 | f(1069547520, 255); |
| 396 | f(1073741824, 256); |
| 397 | f(1077936128, 257); |
| 398 | f(2143289344, 511); |
| 399 | f(2147483648, 512); |
| 400 | f(2151677952, 513); |
| 401 | f(4290772992, 1023); |
| 402 | f(4294967296, 1024); |
| 403 | f(4299161600, 1025); |
| 404 | f(8585740288, 2047); |
| 405 | f(8589934592, 2048); |
| 406 | f(8594128896, 2049); |
| 407 | f(17175674880, 4095); |
| 408 | f(17179869184, 4096); |
| 409 | f(17184063488, 4097); |
| 410 | f(34355544064, 8191); |
| 411 | f(34359738368, 8192); |
| 412 | f(34363932672, 8193); |
| 413 | f(68715282432, 16383); |
| 414 | f(68719476736, 16384); |
| 415 | f(68723671040, 16385); |
| 416 | f(137434759168, 32767); |
| 417 | f(137438953472, 32768); |
| 418 | f(137443147776, 32769); |
| 419 | f(274873712640, 65535); |
| 420 | f(274877906944, 65536); |
| 421 | f(274882101248, 65537); |
| 422 | f(549751619584, 131071); |
| 423 | f(549755813888, 131072); |
| 424 | f(549760008192, 131073); |
| 425 | f(1099507433472, 262143); |
| 426 | f(1099511627776, 262144); |
| 427 | f(1099515822080, 262145); |
| 428 | f(2199019061248, 524287); |
| 429 | f(2199023255552, 524288); |
| 430 | f(2199027449856, 524289); |
| 431 | f(4398042316800, 1048575); |
| 432 | f(4398046511104, 1048576); |
| 433 | f(4398050705408, 1048577); |
| 434 | f(8796088827904, 2097151); |
| 435 | f(8796093022208, 2097152); |
| 436 | f(8796097216512, 2097153); |
| 437 | f(17592181850112, 4194303); |
| 438 | f(17592186044416, 4194304); |
| 439 | x = 4194305; |
| 440 | f(0, 0); |
| 441 | f(4194305, 1); |
| 442 | f(8388610, 2); |
| 443 | f(12582915, 3); |
| 444 | f(16777220, 4); |
| 445 | f(20971525, 5); |
| 446 | f(29360135, 7); |
| 447 | f(33554440, 8); |
| 448 | f(37748745, 9); |
| 449 | f(62914575, 15); |
| 450 | f(67108880, 16); |
| 451 | f(71303185, 17); |
| 452 | f(130023455, 31); |
| 453 | f(134217760, 32); |
| 454 | f(138412065, 33); |
| 455 | f(264241215, 63); |
| 456 | f(268435520, 64); |
| 457 | f(272629825, 65); |
| 458 | f(532676735, 127); |
| 459 | f(536871040, 128); |
| 460 | f(541065345, 129); |
| 461 | f(1069547775, 255); |
| 462 | f(1073742080, 256); |
| 463 | f(1077936385, 257); |
| 464 | f(2143289855, 511); |
| 465 | f(2147484160, 512); |
| 466 | f(2151678465, 513); |
| 467 | f(4290774015, 1023); |
| 468 | f(4294968320, 1024); |
| 469 | f(4299162625, 1025); |
| 470 | f(8585742335, 2047); |
| 471 | f(8589936640, 2048); |
| 472 | f(8594130945, 2049); |
| 473 | f(17175678975, 4095); |
| 474 | f(17179873280, 4096); |
| 475 | f(17184067585, 4097); |
| 476 | f(34355552255, 8191); |
| 477 | f(34359746560, 8192); |
| 478 | f(34363940865, 8193); |
| 479 | f(68715298815, 16383); |
| 480 | f(68719493120, 16384); |
| 481 | f(68723687425, 16385); |
| 482 | f(137434791935, 32767); |
| 483 | f(137438986240, 32768); |
| 484 | f(137443180545, 32769); |
| 485 | f(274873778175, 65535); |
| 486 | f(274877972480, 65536); |
| 487 | f(274882166785, 65537); |
| 488 | f(549751750655, 131071); |
| 489 | f(549755944960, 131072); |
| 490 | f(549760139265, 131073); |
| 491 | f(1099507695615, 262143); |
| 492 | f(1099511889920, 262144); |
| 493 | f(1099516084225, 262145); |
| 494 | f(2199019585535, 524287); |
| 495 | f(2199023779840, 524288); |
| 496 | f(2199027974145, 524289); |
| 497 | f(4398043365375, 1048575); |
| 498 | f(4398047559680, 1048576); |
| 499 | f(4398051753985, 1048577); |
| 500 | f(8796090925055, 2097151); |
| 501 | f(8796095119360, 2097152); |
| 502 | f(8796099313665, 2097153); |
| 503 | f(17592186044415, 4194303); |
| 504 | f(17592190238720, 4194304); |
| 505 | f(17592194433025, 4194305); |