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