Commit 0c6fbad8 authored by lrn@chromium.org's avatar lrn@chromium.org

Add more tests to mul-exhaustive for constant left/right operands.

Make MJSUnit able to distinguish 0 and -0.

Review URL: http://codereview.chromium.org/6688062

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@7368 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent 94c1058b
......@@ -29,7 +29,11 @@
function test(expected_sqrt, value) {
assertEquals(expected_sqrt, Math.sqrt(value));
if (isFinite(value)) {
if (isFinite(value)) {
if ((1 / value) != -Infinity) {
// Math.pow(-0, 0.5) must be zero, but Math.sqrt(-0) is -0.
expected_sqrt = 0;
}
assertEquals(expected_sqrt, Math.pow(value, 0.5));
}
}
......
......@@ -41,15 +41,62 @@ MjsUnitAssertionError.prototype.toString = function () {
* the f-word and ignore all other lines.
*/
function MjsUnitToString(value) {
switch (typeof value) {
case "string":
return JSON.stringify(value);
case "number":
if (value === 0 && (1 / value) < 0) return "-0";
case "boolean":
case "null":
case "undefined":
case "function":
return String(value);
case "object":
if (value === null) return "null";
var clazz = Object.prototype.toString.call(value);
clazz = clazz.substring(8, clazz.length - 1);
switch (clazz) {
case "Number":
case "String":
case "Boolean":
case "Date":
return clazz + "(" + MjsUnitToString(value.valueOf()) + ")";
case "RegExp":
return value.toString();
case "Array":
return "[" + value.map(MjsUnitArrayElementToString).join(",") + "]";
case "Object":
break;
default:
return clazz + "()";
}
// [[Class]] is "Object".
var constructor = value.constructor.name;
if (name) return name + "()";
return "Object()";
default:
return "-- unknown value --";
}
}
function MjsUnitArrayElementToString(value, index, array) {
if (value === undefined && !(index in array)) return "";
return MjsUnitToString(value);
}
function fail(expected, found, name_opt) {
var start;
var message = "Fail" + "ure";
if (name_opt) {
// Fix this when we ditch the old test runner.
start = "Fail" + "ure (" + name_opt + "): ";
} else {
start = "Fail" + "ure:";
message += " (" + name_opt + ")";
}
throw new MjsUnitAssertionError(start + " expected <" + expected + "> found <" + found + ">");
message += ": expected <" + MjsUnitToString(expected) +
"> found <" + MjsUnitToString(found) + ">";
throw new MjsUnitAssertionError(message);
}
......@@ -73,13 +120,17 @@ function deepObjectEquals(a, b) {
function deepEquals(a, b) {
if (a == b) return true;
if (a == b) {
// Check for -0.
if (a === 0 && b === 0) return (1 / a) === (1 / b);
return true;
}
if (typeof a == "number" && typeof b == "number" && isNaN(a) && isNaN(b)) {
return true;
}
if (a == null || b == null) return false;
if (a.constructor === RegExp || b.constructor === RegExp) {
return (a.constructor === b.constructor) && (a.toString === b.toString);
return (a.constructor === b.constructor) && (a.toString() === b.toString());
}
if ((typeof a) !== 'object' || (typeof b) !== 'object' ||
(a === null) || (b === null))
......@@ -205,7 +256,7 @@ function assertDoesNotThrow(code) {
function assertUnreachable(name_opt) {
// Fix this when we ditch the old test runner.
var message = "Fail" + "ure: unreachable"
var message = "Fail" + "ure: unreachable";
if (name_opt) {
message += " - " + name_opt;
}
......
......@@ -26,41 +26,64 @@
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
var x;
var y;
var a;
function f(a, y) {
assertEquals(a, x * y);
assertEquals(a, -x * -y);
assertEquals(-a, -x * y);
assertEquals(-a, x * -y);
assertEquals(a, y * x);
assertEquals(a, -y * -x);
assertEquals(-a, y * -x);
assertEquals(-a, -y * 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);
......@@ -68,6 +91,7 @@ f(28, 4);
f(35, 5);
f(49, 7);
x = 8;
f(0, 0);
f(8, 1);
f(16, 2);
f(24, 3);
......@@ -76,6 +100,7 @@ f(40, 5);
f(56, 7);
f(64, 8);
x = 9;
f(0, 0);
f(9, 1);
f(18, 2);
f(27, 3);
......@@ -85,6 +110,7 @@ f(63, 7);
f(72, 8);
f(81, 9);
x = 15;
f(0, 0);
f(15, 1);
f(30, 2);
f(45, 3);
......@@ -95,6 +121,7 @@ f(120, 8);
f(135, 9);
f(225, 15);
x = 16;
f(0, 0);
f(16, 1);
f(32, 2);
f(48, 3);
......@@ -106,6 +133,7 @@ f(144, 9);
f(240, 15);
f(256, 16);
x = 17;
f(0, 0);
f(17, 1);
f(34, 2);
f(51, 3);
......@@ -118,6 +146,7 @@ f(255, 15);
f(272, 16);
f(289, 17);
x = 31;
f(0, 0);
f(31, 1);
f(62, 2);
f(93, 3);
......@@ -131,6 +160,7 @@ f(496, 16);
f(527, 17);
f(961, 31);
x = 32;
f(0, 0);
f(32, 1);
f(64, 2);
f(96, 3);
......@@ -145,6 +175,7 @@ f(544, 17);
f(992, 31);
f(1024, 32);
x = 33;
f(0, 0);
f(33, 1);
f(66, 2);
f(99, 3);
......@@ -160,6 +191,7 @@ f(1023, 31);
f(1056, 32);
f(1089, 33);
x = 63;
f(0, 0);
f(63, 1);
f(126, 2);
f(189, 3);
......@@ -176,6 +208,7 @@ f(2016, 32);
f(2079, 33);
f(3969, 63);
x = 64;
f(0, 0);
f(64, 1);
f(128, 2);
f(192, 3);
......@@ -193,6 +226,7 @@ f(2112, 33);
f(4032, 63);
f(4096, 64);
x = 65;
f(0, 0);
f(65, 1);
f(130, 2);
f(195, 3);
......@@ -211,6 +245,7 @@ f(4095, 63);
f(4160, 64);
f(4225, 65);
x = 127;
f(0, 0);
f(127, 1);
f(254, 2);
f(381, 3);
......@@ -230,6 +265,7 @@ f(8128, 64);
f(8255, 65);
f(16129, 127);
x = 128;
f(0, 0);
f(128, 1);
f(256, 2);
f(384, 3);
......@@ -250,6 +286,7 @@ f(8320, 65);
f(16256, 127);
f(16384, 128);
x = 129;
f(0, 0);
f(129, 1);
f(258, 2);
f(387, 3);
......@@ -271,6 +308,7 @@ f(16383, 127);
f(16512, 128);
f(16641, 129);
x = 255;
f(0, 0);
f(255, 1);
f(510, 2);
f(765, 3);
......@@ -293,6 +331,7 @@ f(32640, 128);
f(32895, 129);
f(65025, 255);
x = 256;
f(0, 0);
f(256, 1);
f(512, 2);
f(768, 3);
......@@ -316,6 +355,7 @@ f(33024, 129);
f(65280, 255);
f(65536, 256);
x = 257;
f(0, 0);
f(257, 1);
f(514, 2);
f(771, 3);
......@@ -340,6 +380,7 @@ f(65535, 255);
f(65792, 256);
f(66049, 257);
x = 511;
f(0, 0);
f(511, 1);
f(1022, 2);
f(1533, 3);
......@@ -365,6 +406,7 @@ f(130816, 256);
f(131327, 257);
f(261121, 511);
x = 512;
f(0, 0);
f(512, 1);
f(1024, 2);
f(1536, 3);
......@@ -391,6 +433,7 @@ f(131584, 257);
f(261632, 511);
f(262144, 512);
x = 513;
f(0, 0);
f(513, 1);
f(1026, 2);
f(1539, 3);
......@@ -418,6 +461,7 @@ f(262143, 511);
f(262656, 512);
f(263169, 513);
x = 1023;
f(0, 0);
f(1023, 1);
f(2046, 2);
f(3069, 3);
......@@ -446,6 +490,7 @@ f(523776, 512);
f(524799, 513);
f(1046529, 1023);
x = 1024;
f(0, 0);
f(1024, 1);
f(2048, 2);
f(3072, 3);
......@@ -475,6 +520,7 @@ f(525312, 513);
f(1047552, 1023);
f(1048576, 1024);
x = 1025;
f(0, 0);
f(1025, 1);
f(2050, 2);
f(3075, 3);
......@@ -505,6 +551,7 @@ f(1048575, 1023);
f(1049600, 1024);
f(1050625, 1025);
x = 2047;
f(0, 0);
f(2047, 1);
f(4094, 2);
f(6141, 3);
......@@ -536,6 +583,7 @@ f(2096128, 1024);
f(2098175, 1025);
f(4190209, 2047);
x = 2048;
f(0, 0);
f(2048, 1);
f(4096, 2);
f(6144, 3);
......@@ -568,6 +616,7 @@ f(2099200, 1025);
f(4192256, 2047);
f(4194304, 2048);
x = 2049;
f(0, 0);
f(2049, 1);
f(4098, 2);
f(6147, 3);
......@@ -601,6 +650,7 @@ f(4194303, 2047);
f(4196352, 2048);
f(4198401, 2049);
x = 4095;
f(0, 0);
f(4095, 1);
f(8190, 2);
f(12285, 3);
......@@ -635,6 +685,7 @@ f(8386560, 2048);
f(8390655, 2049);
f(16769025, 4095);
x = 4096;
f(0, 0);
f(4096, 1);
f(8192, 2);
f(12288, 3);
......@@ -670,6 +721,7 @@ f(8392704, 2049);
f(16773120, 4095);
f(16777216, 4096);
x = 4097;
f(0, 0);
f(4097, 1);
f(8194, 2);
f(12291, 3);
......@@ -706,6 +758,7 @@ f(16777215, 4095);
f(16781312, 4096);
f(16785409, 4097);
x = 8191;
f(0, 0);
f(8191, 1);
f(16382, 2);
f(24573, 3);
......@@ -743,6 +796,7 @@ f(33550336, 4096);
f(33558527, 4097);
f(67092481, 8191);
x = 8192;
f(0, 0);
f(8192, 1);
f(16384, 2);
f(24576, 3);
......@@ -781,6 +835,7 @@ f(33562624, 4097);
f(67100672, 8191);
f(67108864, 8192);
x = 8193;
f(0, 0);
f(8193, 1);
f(16386, 2);
f(24579, 3);
......@@ -820,6 +875,7 @@ f(67108863, 8191);
f(67117056, 8192);
f(67125249, 8193);
x = 16383;
f(0, 0);
f(16383, 1);
f(32766, 2);
f(49149, 3);
......@@ -860,6 +916,7 @@ f(134209536, 8192);
f(134225919, 8193);
f(268402689, 16383);
x = 16384;
f(0, 0);
f(16384, 1);
f(32768, 2);
f(49152, 3);
......@@ -901,6 +958,7 @@ f(134234112, 8193);
f(268419072, 16383);
f(268435456, 16384);
x = 16385;
f(0, 0);
f(16385, 1);
f(32770, 2);
f(49155, 3);
......@@ -943,6 +1001,7 @@ f(268435455, 16383);
f(268451840, 16384);
f(268468225, 16385);
x = 32767;
f(0, 0);
f(32767, 1);
f(65534, 2);
f(98301, 3);
......@@ -986,6 +1045,7 @@ f(536854528, 16384);
f(536887295, 16385);
f(1073676289, 32767);
x = 32768;
f(0, 0);
f(32768, 1);
f(65536, 2);
f(98304, 3);
......@@ -1030,6 +1090,7 @@ f(536903680, 16385);
f(1073709056, 32767);
f(1073741824, 32768);
x = 32769;
f(0, 0);
f(32769, 1);
f(65538, 2);
f(98307, 3);
......@@ -1075,6 +1136,7 @@ f(1073741823, 32767);
f(1073774592, 32768);
f(1073807361, 32769);
x = 65535;
f(0, 0);
f(65535, 1);
f(131070, 2);
f(196605, 3);
......@@ -1121,6 +1183,7 @@ f(2147450880, 32768);
f(2147516415, 32769);
f(4294836225, 65535);
x = 65536;
f(0, 0);
f(65536, 1);
f(131072, 2);
f(196608, 3);
......@@ -1168,6 +1231,7 @@ f(2147549184, 32769);
f(4294901760, 65535);
f(4294967296, 65536);
x = 65537;
f(0, 0);
f(65537, 1);
f(131074, 2);
f(196611, 3);
......@@ -1216,6 +1280,7 @@ f(4294967295, 65535);
f(4295032832, 65536);
f(4295098369, 65537);
x = 131071;
f(0, 0);
f(131071, 1);
f(262142, 2);
f(393213, 3);
......@@ -1265,6 +1330,7 @@ f(8589869056, 65536);
f(8590000127, 65537);
f(17179607041, 131071);
x = 131072;
f(0, 0);
f(131072, 1);
f(262144, 2);
f(393216, 3);
......@@ -1315,6 +1381,7 @@ f(8590065664, 65537);
f(17179738112, 131071);
f(17179869184, 131072);
x = 131073;
f(0, 0);
f(131073, 1);
f(262146, 2);
f(393219, 3);
......@@ -1366,6 +1433,7 @@ f(17179869183, 131071);
f(17180000256, 131072);
f(17180131329, 131073);
x = 262143;
f(0, 0);
f(262143, 1);
f(524286, 2);
f(786429, 3);
......@@ -1418,6 +1486,7 @@ f(34359607296, 131072);
f(34359869439, 131073);
f(68718952449, 262143);
x = 262144;
f(0, 0);
f(262144, 1);
f(524288, 2);
f(786432, 3);
......@@ -1471,6 +1540,7 @@ f(34360000512, 131073);
f(68719214592, 262143);
f(68719476736, 262144);
x = 262145;
f(0, 0);
f(262145, 1);
f(524290, 2);
f(786435, 3);
......@@ -1525,6 +1595,7 @@ f(68719476735, 262143);
f(68719738880, 262144);
f(68720001025, 262145);
x = 524287;
f(0, 0);
f(524287, 1);
f(1048574, 2);
f(1572861, 3);
......@@ -1580,6 +1651,7 @@ f(137438691328, 262144);
f(137439215615, 262145);
f(274876858369, 524287);
x = 524288;
f(0, 0);
f(524288, 1);
f(1048576, 2);
f(1572864, 3);
......@@ -1636,6 +1708,7 @@ f(137439477760, 262145);
f(274877382656, 524287);
f(274877906944, 524288);
x = 524289;
f(0, 0);
f(524289, 1);
f(1048578, 2);
f(1572867, 3);
......@@ -1693,6 +1766,7 @@ f(274877906943, 524287);
f(274878431232, 524288);
f(274878955521, 524289);
x = 1048575;
f(0, 0);
f(1048575, 1);
f(2097150, 2);
f(3145725, 3);
......@@ -1751,6 +1825,7 @@ f(549755289600, 524288);
f(549756338175, 524289);
f(1099509530625, 1048575);
x = 1048576;
f(0, 0);
f(1048576, 1);
f(2097152, 2);
f(3145728, 3);
......@@ -1810,6 +1885,7 @@ f(549756862464, 524289);
f(1099510579200, 1048575);
f(1099511627776, 1048576);
x = 1048577;
f(0, 0);
f(1048577, 1);
f(2097154, 2);
f(3145731, 3);
......@@ -1870,6 +1946,7 @@ f(1099511627775, 1048575);
f(1099512676352, 1048576);
f(1099513724929, 1048577);
x = 2097151;
f(0, 0);
f(2097151, 1);
f(4194302, 2);
f(6291453, 3);
......@@ -1931,6 +2008,7 @@ f(2199022206976, 1048576);
f(2199024304127, 1048577);
f(4398042316801, 2097151);
x = 2097152;
f(0, 0);
f(2097152, 1);
f(4194304, 2);
f(6291456, 3);
......@@ -1993,6 +2071,7 @@ f(2199025352704, 1048577);
f(4398044413952, 2097151);
f(4398046511104, 2097152);
x = 2097153;
f(0, 0);
f(2097153, 1);
f(4194306, 2);
f(6291459, 3);
......@@ -2056,6 +2135,7 @@ f(4398046511103, 2097151);
f(4398048608256, 2097152);
f(4398050705409, 2097153);
x = 4194303;
f(0, 0);
f(4194303, 1);
f(8388606, 2);
f(12582909, 3);
......@@ -2120,6 +2200,7 @@ f(8796090925056, 2097152);
f(8796095119359, 2097153);
f(17592177655809, 4194303);
x = 4194304;
f(0, 0);
f(4194304, 1);
f(8388608, 2);
f(12582912, 3);
......@@ -2185,6 +2266,7 @@ f(8796097216512, 2097153);
f(17592181850112, 4194303);
f(17592186044416, 4194304);
x = 4194305;
f(0, 0);
f(4194305, 1);
f(8388610, 2);
f(12582915, 3);
......@@ -2251,6 +2333,7 @@ f(17592186044415, 4194303);
f(17592190238720, 4194304);
f(17592194433025, 4194305);
x = 8388607;
f(0, 0);
f(8388607, 1);
f(16777214, 2);
f(25165821, 3);
......@@ -2318,6 +2401,7 @@ f(35184367894528, 4194304);
f(35184376283135, 4194305);
f(70368727400449, 8388607);
x = 8388608;
f(0, 0);
f(8388608, 1);
f(16777216, 2);
f(25165824, 3);
......@@ -2386,6 +2470,7 @@ f(35184380477440, 4194305);
f(70368735789056, 8388607);
f(70368744177664, 8388608);
x = 8388609;
f(0, 0);
f(8388609, 1);
f(16777218, 2);
f(25165827, 3);
......@@ -2455,6 +2540,7 @@ f(70368744177663, 8388607);
f(70368752566272, 8388608);
f(70368760954881, 8388609);
x = 16777215;
f(0, 0);
f(16777215, 1);
f(33554430, 2);
f(50331645, 3);
......@@ -2525,6 +2611,7 @@ f(140737479966720, 8388608);
f(140737496743935, 8388609);
f(281474943156225, 16777215);
x = 16777216;
f(0, 0);
f(16777216, 1);
f(33554432, 2);
f(50331648, 3);
......@@ -2596,6 +2683,7 @@ f(140737505132544, 8388609);
f(281474959933440, 16777215);
f(281474976710656, 16777216);
x = 16777217;
f(0, 0);
f(16777217, 1);
f(33554434, 2);
f(50331651, 3);
......@@ -2668,6 +2756,7 @@ f(281474976710655, 16777215);
f(281474993487872, 16777216);
f(281475010265089, 16777217);
x = 33554431;
f(0, 0);
f(33554431, 1);
f(67108862, 2);
f(100663293, 3);
......@@ -2741,6 +2830,7 @@ f(562949936644096, 16777216);
f(562949970198527, 16777217);
f(1125899839733761, 33554431);
x = 33554432;
f(0, 0);
f(33554432, 1);
f(67108864, 2);
f(100663296, 3);
......@@ -2815,6 +2905,7 @@ f(562949986975744, 16777217);
f(1125899873288192, 33554431);
f(1125899906842624, 33554432);
x = 33554433;
f(0, 0);
f(33554433, 1);
f(67108866, 2);
f(100663299, 3);
......@@ -2890,6 +2981,7 @@ f(1125899906842623, 33554431);
f(1125899940397056, 33554432);
f(1125899973951489, 33554433);
x = 67108863;
f(0, 0);
f(67108863, 1);
f(134217726, 2);
f(201326589, 3);
......@@ -2962,6 +3054,7 @@ f(1125899822956545, 16777215);
f(1125899890065408, 16777216);
f(1125899957174271, 16777217);
x = 67108864;
f(0, 0);
f(67108864, 1);
f(134217728, 2);
f(201326592, 3);
......@@ -3034,6 +3127,7 @@ f(1125899839733760, 16777215);
f(1125899906842624, 16777216);
f(1125899973951488, 16777217);
x = 67108865;
f(0, 0);
f(67108865, 1);
f(134217730, 2);
f(201326595, 3);
......@@ -3106,6 +3200,7 @@ f(1125899856510975, 16777215);
f(1125899923619840, 16777216);
f(1125899990728705, 16777217);
x = 134217727;
f(0, 0);
f(134217727, 1);
f(268435454, 2);
f(402653181, 3);
......@@ -3175,6 +3270,7 @@ f(1125899764236289, 8388607);
f(1125899898454016, 8388608);
f(1125900032671743, 8388609);
x = 134217728;
f(0, 0);
f(134217728, 1);
f(268435456, 2);
f(402653184, 3);
......@@ -3244,6 +3340,7 @@ f(1125899772624896, 8388607);
f(1125899906842624, 8388608);
f(1125900041060352, 8388609);
x = 134217729;
f(0, 0);
f(134217729, 1);
f(268435458, 2);
f(402653187, 3);
......@@ -3313,6 +3410,7 @@ f(1125899781013503, 8388607);
f(1125899915231232, 8388608);
f(1125900049448961, 8388609);
x = 268435455;
f(0, 0);
f(268435455, 1);
f(536870910, 2);
f(805306365, 3);
......@@ -3379,6 +3477,7 @@ f(1125899634212865, 4194303);
f(1125899902648320, 4194304);
f(1125900171083775, 4194305);
x = 268435456;
f(0, 0);
f(268435456, 1);
f(536870912, 2);
f(805306368, 3);
......@@ -3445,6 +3544,7 @@ f(1125899638407168, 4194303);
f(1125899906842624, 4194304);
f(1125900175278080, 4194305);
x = 268435457;
f(0, 0);
f(268435457, 1);
f(536870914, 2);
f(805306371, 3);
......@@ -3511,6 +3611,7 @@ f(1125899642601471, 4194303);
f(1125899911036928, 4194304);
f(1125900179472385, 4194305);
x = 536870911;
f(0, 0);
f(536870911, 1);
f(1073741822, 2);
f(1610612733, 3);
......@@ -3574,6 +3675,7 @@ f(1125899367874561, 2097151);
f(1125899904745472, 2097152);
f(1125900441616383, 2097153);
x = 536870912;
f(0, 0);
f(536870912, 1);
f(1073741824, 2);
f(1610612736, 3);
......@@ -3637,6 +3739,7 @@ f(1125899369971712, 2097151);
f(1125899906842624, 2097152);
f(1125900443713536, 2097153);
x = 536870913;
f(0, 0);
f(536870913, 1);
f(1073741826, 2);
f(1610612739, 3);
......@@ -3700,6 +3803,7 @@ f(1125899372068863, 2097151);
f(1125899908939776, 2097152);
f(1125900445810689, 2097153);
x = 1073741823;
f(0, 0);
f(1073741823, 1);
f(2147483646, 2);
f(3221225469, 3);
......@@ -3760,6 +3864,7 @@ f(1125898832052225, 1048575);
f(1125899905794048, 1048576);
f(1125900979535871, 1048577);
x = 1073741824;
f(0, 0);
f(1073741824, 1);
f(2147483648, 2);
f(3221225472, 3);
......@@ -3820,6 +3925,7 @@ f(1125898833100800, 1048575);
f(1125899906842624, 1048576);
f(1125900980584448, 1048577);
x = 1073741825;
f(0, 0);
f(1073741825, 1);
f(2147483650, 2);
f(3221225475, 3);
......@@ -3880,6 +3986,7 @@ f(1125898834149375, 1048575);
f(1125899907891200, 1048576);
f(1125900981633025, 1048577);
x = 2147483647;
f(0, 0);
f(2147483647, 1);
f(4294967294, 2);
f(6442450941, 3);
......@@ -3937,6 +4044,7 @@ f(1125897758834689, 524287);
f(1125899906318336, 524288);
f(1125902053801983, 524289);
x = 2147483648;
f(0, 0);
f(2147483648, 1);
f(4294967296, 2);
f(6442450944, 3);
......@@ -3994,6 +4102,7 @@ f(1125897759358976, 524287);
f(1125899906842624, 524288);
f(1125902054326272, 524289);
x = 2147483649;
f(0, 0);
f(2147483649, 1);
f(4294967298, 2);
f(6442450947, 3);
......@@ -4051,6 +4160,7 @@ f(1125897759883263, 524287);
f(1125899907366912, 524288);
f(1125902054850561, 524289);
x = 4294967295;
f(0, 0);
f(4294967295, 1);
f(8589934590, 2);
f(12884901885, 3);
......@@ -4105,6 +4215,7 @@ f(1125895611613185, 262143);
f(1125899906580480, 262144);
f(1125904201547775, 262145);
x = 4294967296;
f(0, 0);
f(4294967296, 1);
f(8589934592, 2);
f(12884901888, 3);
......@@ -4159,6 +4270,7 @@ f(1125895611875328, 262143);
f(1125899906842624, 262144);
f(1125904201809920, 262145);
x = 4294967297;
f(0, 0);
f(4294967297, 1);
f(8589934594, 2);
f(12884901891, 3);
......@@ -4213,6 +4325,7 @@ f(1125895612137471, 262143);
f(1125899907104768, 262144);
f(1125904202072065, 262145);
x = 8589934591;
f(0, 0);
f(8589934591, 1);
f(17179869182, 2);
f(25769803773, 3);
......@@ -4264,6 +4377,7 @@ f(1125891316776961, 131071);
f(1125899906711552, 131072);
f(1125908496646143, 131073);
x = 8589934592;
f(0, 0);
f(8589934592, 1);
f(17179869184, 2);
f(25769803776, 3);
......@@ -4315,6 +4429,7 @@ f(1125891316908032, 131071);
f(1125899906842624, 131072);
f(1125908496777216, 131073);
x = 8589934593;
f(0, 0);
f(8589934593, 1);
f(17179869186, 2);
f(25769803779, 3);
......@@ -4366,6 +4481,7 @@ f(1125891317039103, 131071);
f(1125899906973696, 131072);
f(1125908496908289, 131073);
x = 17179869183;
f(0, 0);
f(17179869183, 1);
f(34359738366, 2);
f(51539607549, 3);
......@@ -4414,6 +4530,7 @@ f(1125882726907905, 65535);
f(1125899906777088, 65536);
f(1125917086646271, 65537);
x = 17179869184;
f(0, 0);
f(17179869184, 1);
f(34359738368, 2);
f(51539607552, 3);
......@@ -4462,6 +4579,7 @@ f(1125882726973440, 65535);
f(1125899906842624, 65536);
f(1125917086711808, 65537);
x = 17179869185;
f(0, 0);
f(17179869185, 1);
f(34359738370, 2);
f(51539607555, 3);
......
......@@ -26,7 +26,7 @@
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
function IsNegativeZero(x) {
assertEquals(0, x);
assertTrue(x == 0); // Is 0 or -0.
var y = 1 / x;
assertFalse(isFinite(y));
return y < 0;
......
......@@ -109,5 +109,5 @@ function foo(x) {
return -x;
}
assertEquals(0, foo(x));
assertEquals(0, foo(x));
assertEquals(-0, foo(x));
assertEquals(-0, foo(x));
......@@ -190,7 +190,7 @@ assertEquals(100, toNumber("000100"));
assertEquals(Infinity, toNumber("1e999"), "1e999");
assertEquals(-Infinity, toNumber("-1e999"));
assertEquals(0, toNumber("1e-999"));
assertEquals(0, toNumber("-1e-999"));
assertEquals(-0, toNumber("-1e-999"));
assertEquals(Infinity, 1 / toNumber("1e-999"), "1e-999");
assertEquals(-Infinity, 1 / toNumber("-1e-999"));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment