Source code

Revision control

Copy as Markdown

Other Tools

function SameValue(x, y) {
if (x === y) {
return (x !== 0) || (1 / x === 1 / y);
}
return (x !== x && y !== y);
}
var xs = [
NaN,
+0,
-0,
1,
1.5,
-1.5,
Infinity,
-Infinity,
];
// Object.is(input, NaN) is folded to |input !== input|.
function testNaN() {
for (var i = 0; i < 500; ++i) {
var x = xs[i & 7];
assertEq(typeof x, "number");
assertEq(Object.is(NaN, x), x !== x);
assertEq(Object.is(x, NaN), x !== x);
}
}
for (let i = 0; i < 2; ++i) testNaN();
// Object.is(input, +0) is folded to a bitwise comparison.
function testPositiveZero() {
for (var i = 0; i < 500; ++i) {
var x = xs[i & 7];
assertEq(typeof x, "number");
assertEq(Object.is(+0, x), SameValue(x, +0));
assertEq(Object.is(x, +0), SameValue(x, +0));
}
}
for (let i = 0; i < 2; ++i) testPositiveZero();
// Object.is(input, -0) is folded to a bitwise comparison.
function testNegativeZero() {
for (var i = 0; i < 500; ++i) {
var x = xs[i & 7];
assertEq(typeof x, "number");
assertEq(Object.is(-0, x), SameValue(x, -0));
assertEq(Object.is(x, -0), SameValue(x, -0));
}
}
for (let i = 0; i < 2; ++i) testNegativeZero();
// Object.is(input, int32) is folded to |input === int32|, when int32 isn't 0.
function testInt32() {
for (var i = 0; i < 500; ++i) {
var x = xs[i & 7];
assertEq(typeof x, "number");
assertEq(Object.is(1, x), x === 1);
assertEq(Object.is(x, 1), x === 1);
}
}
for (let i = 0; i < 2; ++i) testInt32();
// Object.is(input, double) is folded to |input === double|, when double is
// neither NaN, nor +/-0.
function testDouble() {
for (var i = 0; i < 500; ++i) {
var x = xs[i & 7];
assertEq(typeof x, "number");
assertEq(Object.is(1.5, x), x === 1.5);
assertEq(Object.is(x, 1.5), x === 1.5);
}
}
for (let i = 0; i < 2; ++i) testDouble();