492 lines
7.4 KiB
JavaScript
492 lines
7.4 KiB
JavaScript
|
// Copyright 2008 the V8 project authors. All rights reserved.
|
||
|
// Redistribution and use in source and binary forms, with or without
|
||
|
// modification, are permitted provided that the following conditions are
|
||
|
// met:
|
||
|
//
|
||
|
// * Redistributions of source code must retain the above copyright
|
||
|
// notice, this list of conditions and the following disclaimer.
|
||
|
// * Redistributions in binary form must reproduce the above
|
||
|
// copyright notice, this list of conditions and the following
|
||
|
// disclaimer in the documentation and/or other materials provided
|
||
|
// with the distribution.
|
||
|
// * Neither the name of Google Inc. nor the names of its
|
||
|
// contributors may be used to endorse or promote products derived
|
||
|
// from this software without specific prior written permission.
|
||
|
//
|
||
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||
|
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||
|
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||
|
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||
|
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||
|
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||
|
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||
|
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||
|
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||
|
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||
|
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||
|
|
||
|
var x;
|
||
|
|
||
|
// Converts a number to string respecting -0.
|
||
|
function stringify(n) {
|
||
|
if ((1 / n) === -Infinity) return "-0";
|
||
|
return String(n);
|
||
|
}
|
||
|
|
||
|
function f(expected, y) {
|
||
|
function testEval(string, x, y) {
|
||
|
var mulFunction = Function("x, y", "return " + string);
|
||
|
return mulFunction(x, y);
|
||
|
}
|
||
|
function mulTest(expected, x, y) {
|
||
|
assertEquals(expected, x * y);
|
||
|
assertEquals(expected, testEval(stringify(x) + " * y", x, y));
|
||
|
assertEquals(expected, testEval("x * " + stringify(y), x, y));
|
||
|
assertEquals(expected, testEval(stringify(x) + " * " + stringify(y), x, y));
|
||
|
}
|
||
|
mulTest(expected, x, y);
|
||
|
mulTest(-expected, -x, y);
|
||
|
mulTest(-expected, x, -y);
|
||
|
mulTest(expected, -x, -y);
|
||
|
if (x === y) return; // Symmetric cases not necessary.
|
||
|
mulTest(expected, y, x);
|
||
|
mulTest(-expected, -y, x);
|
||
|
mulTest(-expected, y, -x);
|
||
|
mulTest(expected, -y, -x);
|
||
|
}
|
||
|
|
||
|
x = 0;
|
||
|
f(0, 0);
|
||
|
x = 1;
|
||
|
f(0, 0);
|
||
|
f(1, 1);
|
||
|
x = 2;
|
||
|
f(0, 0);
|
||
|
f(2, 1);
|
||
|
f(4, 2);
|
||
|
x = 3;
|
||
|
f(0, 0);
|
||
|
f(3, 1);
|
||
|
f(6, 2);
|
||
|
f(9, 3);
|
||
|
x = 4;
|
||
|
f(0, 0);
|
||
|
f(4, 1);
|
||
|
f(8, 2);
|
||
|
f(12, 3);
|
||
|
f(16, 4);
|
||
|
x = 5;
|
||
|
f(0, 0);
|
||
|
f(5, 1);
|
||
|
f(10, 2);
|
||
|
f(15, 3);
|
||
|
f(20, 4);
|
||
|
f(25, 5);
|
||
|
x = 7;
|
||
|
f(0, 0);
|
||
|
f(7, 1);
|
||
|
f(14, 2);
|
||
|
f(21, 3);
|
||
|
f(28, 4);
|
||
|
f(35, 5);
|
||
|
f(49, 7);
|
||
|
x = 8;
|
||
|
f(0, 0);
|
||
|
f(8, 1);
|
||
|
f(16, 2);
|
||
|
f(24, 3);
|
||
|
f(32, 4);
|
||
|
f(40, 5);
|
||
|
f(56, 7);
|
||
|
f(64, 8);
|
||
|
x = 9;
|
||
|
f(0, 0);
|
||
|
f(9, 1);
|
||
|
f(18, 2);
|
||
|
f(27, 3);
|
||
|
f(36, 4);
|
||
|
f(45, 5);
|
||
|
f(63, 7);
|
||
|
f(72, 8);
|
||
|
f(81, 9);
|
||
|
x = 15;
|
||
|
f(0, 0);
|
||
|
f(15, 1);
|
||
|
f(30, 2);
|
||
|
f(45, 3);
|
||
|
f(60, 4);
|
||
|
f(75, 5);
|
||
|
f(105, 7);
|
||
|
f(120, 8);
|
||
|
f(135, 9);
|
||
|
f(225, 15);
|
||
|
x = 16;
|
||
|
f(0, 0);
|
||
|
f(16, 1);
|
||
|
f(32, 2);
|
||
|
f(48, 3);
|
||
|
f(64, 4);
|
||
|
f(80, 5);
|
||
|
f(112, 7);
|
||
|
f(128, 8);
|
||
|
f(144, 9);
|
||
|
f(240, 15);
|
||
|
f(256, 16);
|
||
|
x = 17;
|
||
|
f(0, 0);
|
||
|
f(17, 1);
|
||
|
f(34, 2);
|
||
|
f(51, 3);
|
||
|
f(68, 4);
|
||
|
f(85, 5);
|
||
|
f(119, 7);
|
||
|
f(136, 8);
|
||
|
f(153, 9);
|
||
|
f(255, 15);
|
||
|
f(272, 16);
|
||
|
f(289, 17);
|
||
|
x = 31;
|
||
|
f(0, 0);
|
||
|
f(31, 1);
|
||
|
f(62, 2);
|
||
|
f(93, 3);
|
||
|
f(124, 4);
|
||
|
f(155, 5);
|
||
|
f(217, 7);
|
||
|
f(248, 8);
|
||
|
f(279, 9);
|
||
|
f(465, 15);
|
||
|
f(496, 16);
|
||
|
f(527, 17);
|
||
|
f(961, 31);
|
||
|
x = 32;
|
||
|
f(0, 0);
|
||
|
f(32, 1);
|
||
|
f(64, 2);
|
||
|
f(96, 3);
|
||
|
f(128, 4);
|
||
|
f(160, 5);
|
||
|
f(224, 7);
|
||
|
f(256, 8);
|
||
|
f(288, 9);
|
||
|
f(480, 15);
|
||
|
f(512, 16);
|
||
|
f(544, 17);
|
||
|
f(992, 31);
|
||
|
f(1024, 32);
|
||
|
x = 33;
|
||
|
f(0, 0);
|
||
|
f(33, 1);
|
||
|
f(66, 2);
|
||
|
f(99, 3);
|
||
|
f(132, 4);
|
||
|
f(165, 5);
|
||
|
f(231, 7);
|
||
|
f(264, 8);
|
||
|
f(297, 9);
|
||
|
f(495, 15);
|
||
|
f(528, 16);
|
||
|
f(561, 17);
|
||
|
f(1023, 31);
|
||
|
f(1056, 32);
|
||
|
f(1089, 33);
|
||
|
x = 63;
|
||
|
f(0, 0);
|
||
|
f(63, 1);
|
||
|
f(126, 2);
|
||
|
f(189, 3);
|
||
|
f(252, 4);
|
||
|
f(315, 5);
|
||
|
f(441, 7);
|
||
|
f(504, 8);
|
||
|
f(567, 9);
|
||
|
f(945, 15);
|
||
|
f(1008, 16);
|
||
|
f(1071, 17);
|
||
|
f(1953, 31);
|
||
|
f(2016, 32);
|
||
|
f(2079, 33);
|
||
|
f(3969, 63);
|
||
|
x = 64;
|
||
|
f(0, 0);
|
||
|
f(64, 1);
|
||
|
f(128, 2);
|
||
|
f(192, 3);
|
||
|
f(256, 4);
|
||
|
f(320, 5);
|
||
|
f(448, 7);
|
||
|
f(512, 8);
|
||
|
f(576, 9);
|
||
|
f(960, 15);
|
||
|
f(1024, 16);
|
||
|
f(1088, 17);
|
||
|
f(1984, 31);
|
||
|
f(2048, 32);
|
||
|
f(2112, 33);
|
||
|
f(4032, 63);
|
||
|
f(4096, 64);
|
||
|
x = 65;
|
||
|
f(0, 0);
|
||
|
f(65, 1);
|
||
|
f(130, 2);
|
||
|
f(195, 3);
|
||
|
f(260, 4);
|
||
|
f(325, 5);
|
||
|
f(455, 7);
|
||
|
f(520, 8);
|
||
|
f(585, 9);
|
||
|
f(975, 15);
|
||
|
f(1040, 16);
|
||
|
f(1105, 17);
|
||
|
f(2015, 31);
|
||
|
f(2080, 32);
|
||
|
f(2145, 33);
|
||
|
f(4095, 63);
|
||
|
f(4160, 64);
|
||
|
f(4225, 65);
|
||
|
x = 127;
|
||
|
f(0, 0);
|
||
|
f(127, 1);
|
||
|
f(254, 2);
|
||
|
f(381, 3);
|
||
|
f(508, 4);
|
||
|
f(635, 5);
|
||
|
f(889, 7);
|
||
|
f(1016, 8);
|
||
|
f(1143, 9);
|
||
|
f(1905, 15);
|
||
|
f(2032, 16);
|
||
|
f(2159, 17);
|
||
|
f(3937, 31);
|
||
|
f(4064, 32);
|
||
|
f(4191, 33);
|
||
|
f(8001, 63);
|
||
|
f(8128, 64);
|
||
|
f(8255, 65);
|
||
|
f(16129, 127);
|
||
|
x = 128;
|
||
|
f(0, 0);
|
||
|
f(128, 1);
|
||
|
f(256, 2);
|
||
|
f(384, 3);
|
||
|
f(512, 4);
|
||
|
f(640, 5);
|
||
|
f(896, 7);
|
||
|
f(1024, 8);
|
||
|
f(1152, 9);
|
||
|
f(1920, 15);
|
||
|
f(2048, 16);
|
||
|
f(2176, 17);
|
||
|
f(3968, 31);
|
||
|
f(4096, 32);
|
||
|
f(4224, 33);
|
||
|
f(8064, 63);
|
||
|
f(8192, 64);
|
||
|
f(8320, 65);
|
||
|
f(16256, 127);
|
||
|
f(16384, 128);
|
||
|
x = 129;
|
||
|
f(0, 0);
|
||
|
f(129, 1);
|
||
|
f(258, 2);
|
||
|
f(387, 3);
|
||
|
f(516, 4);
|
||
|
f(645, 5);
|
||
|
f(903, 7);
|
||
|
f(1032, 8);
|
||
|
f(1161, 9);
|
||
|
f(1935, 15);
|
||
|
f(2064, 16);
|
||
|
f(2193, 17);
|
||
|
f(3999, 31);
|
||
|
f(4128, 32);
|
||
|
f(4257, 33);
|
||
|
f(8127, 63);
|
||
|
f(8256, 64);
|
||
|
f(8385, 65);
|
||
|
f(16383, 127);
|
||
|
f(16512, 128);
|
||
|
f(16641, 129);
|
||
|
x = 255;
|
||
|
f(0, 0);
|
||
|
f(255, 1);
|
||
|
f(510, 2);
|
||
|
f(765, 3);
|
||
|
f(1020, 4);
|
||
|
f(1275, 5);
|
||
|
f(1785, 7);
|
||
|
f(2040, 8);
|
||
|
f(2295, 9);
|
||
|
f(3825, 15);
|
||
|
f(4080, 16);
|
||
|
f(4335, 17);
|
||
|
f(7905, 31);
|
||
|
f(8160, 32);
|
||
|
f(8415, 33);
|
||
|
f(16065, 63);
|
||
|
f(16320, 64);
|
||
|
f(16575, 65);
|
||
|
f(32385, 127);
|
||
|
f(32640, 128);
|
||
|
f(32895, 129);
|
||
|
f(65025, 255);
|
||
|
x = 256;
|
||
|
f(0, 0);
|
||
|
f(256, 1);
|
||
|
f(512, 2);
|
||
|
f(768, 3);
|
||
|
f(1024, 4);
|
||
|
f(1280, 5);
|
||
|
f(1792, 7);
|
||
|
f(2048, 8);
|
||
|
f(2304, 9);
|
||
|
f(3840, 15);
|
||
|
f(4096, 16);
|
||
|
f(4352, 17);
|
||
|
f(7936, 31);
|
||
|
f(8192, 32);
|
||
|
f(8448, 33);
|
||
|
f(16128, 63);
|
||
|
f(16384, 64);
|
||
|
f(16640, 65);
|
||
|
f(32512, 127);
|
||
|
f(32768, 128);
|
||
|
f(33024, 129);
|
||
|
f(65280, 255);
|
||
|
f(65536, 256);
|
||
|
x = 257;
|
||
|
f(0, 0);
|
||
|
f(257, 1);
|
||
|
f(514, 2);
|
||
|
f(771, 3);
|
||
|
f(1028, 4);
|
||
|
f(1285, 5);
|
||
|
f(1799, 7);
|
||
|
f(2056, 8);
|
||
|
f(2313, 9);
|
||
|
f(3855, 15);
|
||
|
f(4112, 16);
|
||
|
f(4369, 17);
|
||
|
f(7967, 31);
|
||
|
f(8224, 32);
|
||
|
f(8481, 33);
|
||
|
f(16191, 63);
|
||
|
f(16448, 64);
|
||
|
f(16705, 65);
|
||
|
f(32639, 127);
|
||
|
f(32896, 128);
|
||
|
f(33153, 129);
|
||
|
f(65535, 255);
|
||
|
f(65792, 256);
|
||
|
f(66049, 257);
|
||
|
x = 511;
|
||
|
f(0, 0);
|
||
|
f(511, 1);
|
||
|
f(1022, 2);
|
||
|
f(1533, 3);
|
||
|
f(2044, 4);
|
||
|
f(2555, 5);
|
||
|
f(3577, 7);
|
||
|
f(4088, 8);
|
||
|
f(4599, 9);
|
||
|
f(7665, 15);
|
||
|
f(8176, 16);
|
||
|
f(8687, 17);
|
||
|
f(15841, 31);
|
||
|
f(16352, 32);
|
||
|
f(16863, 33);
|
||
|
f(32193, 63);
|
||
|
f(32704, 64);
|
||
|
f(33215, 65);
|
||
|
f(64897, 127);
|
||
|
f(65408, 128);
|
||
|
f(65919, 129);
|
||
|
f(130305, 255);
|
||
|
f(130816, 256);
|
||
|
f(131327, 257);
|
||
|
f(261121, 511);
|
||
|
x = 512;
|
||
|
f(0, 0);
|
||
|
f(512, 1);
|
||
|
f(1024, 2);
|
||
|
f(1536, 3);
|
||
|
f(2048, 4);
|
||
|
f(2560, 5);
|
||
|
f(3584, 7);
|
||
|
f(4096, 8);
|
||
|
f(4608, 9);
|
||
|
f(7680, 15);
|
||
|
f(8192, 16);
|
||
|
f(8704, 17);
|
||
|
f(15872, 31);
|
||
|
f(16384, 32);
|
||
|
f(16896, 33);
|
||
|
f(32256, 63);
|
||
|
f(32768, 64);
|
||
|
f(33280, 65);
|
||
|
f(65024, 127);
|
||
|
f(65536, 128);
|
||
|
f(66048, 129);
|
||
|
f(130560, 255);
|
||
|
f(131072, 256);
|
||
|
f(131584, 257);
|
||
|
f(261632, 511);
|
||
|
f(262144, 512);
|
||
|
x = 513;
|
||
|
f(0, 0);
|
||
|
f(513, 1);
|
||
|
f(1026, 2);
|
||
|
f(1539, 3);
|
||
|
f(2052, 4);
|
||
|
f(2565, 5);
|
||
|
f(3591, 7);
|
||
|
f(4104, 8);
|
||
|
f(4617, 9);
|
||
|
f(7695, 15);
|
||
|
f(8208, 16);
|
||
|
f(8721, 17);
|
||
|
f(15903, 31);
|
||
|
f(16416, 32);
|
||
|
f(16929, 33);
|
||
|
f(32319, 63);
|
||
|
f(32832, 64);
|
||
|
f(33345, 65);
|
||
|
f(65151, 127);
|
||
|
f(65664, 128);
|
||
|
f(66177, 129);
|
||
|
f(130815, 255);
|
||
|
f(131328, 256);
|
||
|
f(131841, 257);
|
||
|
f(262143, 511);
|
||
|
f(262656, 512);
|
||
|
f(263169, 513);
|
||
|
x = 1023;
|
||
|
f(0, 0);
|
||
|
f(1023, 1);
|
||
|
f(2046, 2);
|
||
|
f(3069, 3);
|
||
|
f(4092, 4);
|
||
|
f(5115, 5);
|
||
|
f(7161, 7);
|
||
|
f(8184, 8);
|
||
|
f(9207, 9);
|
||
|
f(15345, 15);
|
||
|
f(16368, 16);
|
||
|
f(17391, 17);
|
||
|
f(31713, 31);
|
||
|
f(32736, 32);
|
||
|
f(33759, 33);
|
||
|
f(64449, 63);
|
||
|
f(65472, 64);
|
||
|
f(66495, 65);
|
||
|
f(129921, 127);
|
||
|
f(130944, 128);
|
||
|
f(131967, 129);
|
||
|
f(260865, 255);
|
||
|
f(261888, 256);
|
||
|
f(262911, 257);
|
||
|
f(522753, 511);
|
||
|
f(523776, 512);
|
||
|
f(524799, 513);
|
||
|
f(1046529, 1023);
|