Source code

Revision control

Copy as Markdown

Other Tools

// Test comparison between Boolean x {String, Double}.
// Boolean R String <=> ToNumber(Boolean) R ToNumber(String)
// Boolean R Number <=> ToNumber(Boolean) R Number
// The entries in the first halves of xs, ys, and zs should be loose-equal to each other.
var xs = [
// ToNumber(bool) == 0
false, false, false, false,
// ToNumber(bool) == 1
true, true, true, true,
// Filler
false, false, false, false,
true, true, true, true,
];
var ys = [
// ToNumber(str) == 0
"", "0", "0.0", ".0",
// ToNumber(str) == 1
"1", "1.0", "0x1", " 1\t\r\n",
// ToNumber(str) != {0, 1}
// (Duplicate entries to ensure they're neither equal to |true| nor to |false|.)
"not-a-number", "NaN", "Infinity", "2",
"not-a-number", "NaN", "Infinity", "2",
];
function Double(x) {
// numberToDouble always returns a Double valued number.
return numberToDouble(x);
}
var zs = [
// = 0
Double(0), Double(0), -0, -0,
// = 1
Double(1), Double(1), Double(1), Double(1),
// != {0, 1}
// (Duplicate entries to ensure they're neither equal to |true| nor to |false|.)
NaN, Infinity, Double(2), Double(-1.5),
NaN, Infinity, Double(2), Double(-1.5),
];
function testLooseEqual() {
for (var i = 0; i < 100; ++i) {
var j = i % xs.length;
var x = xs[j];
var y = ys[j];
var z = zs[j];
var r = j < (xs.length >> 1);
assertEq(x == y, r);
assertEq(y == x, r);
assertEq(x == z, r);
assertEq(z == x, r);
}
}
testLooseEqual();
function testLooseNotEqual() {
for (var i = 0; i < 100; ++i) {
var j = i % xs.length;
var x = xs[j];
var y = ys[j];
var z = zs[j];
var r = j < (xs.length >> 1);
assertEq(x != y, !r);
assertEq(y != x, !r);
assertEq(x != z, !r);
assertEq(z != x, !r);
}
}
testLooseNotEqual();
function testLessThan() {
for (var i = 0; i < 100; ++i) {
var j = i % xs.length;
var x = xs[j];
var y = ys[j];
var z = zs[j];
assertEq(x < y, +x < +y);
assertEq(y < x, +y < +x);
assertEq(x < z, +x < +z);
assertEq(z < x, +z < +x);
}
}
testLessThan();
function testLessThanEqual() {
for (var i = 0; i < 100; ++i) {
var j = i % xs.length;
var x = xs[j];
var y = ys[j];
var z = zs[j];
assertEq(x <= y, +x <= +y);
assertEq(y <= x, +y <= +x);
assertEq(x <= z, +x <= +z);
assertEq(z <= x, +z <= +x);
}
}
testLessThanEqual();
function testGreaterThan() {
for (var i = 0; i < 100; ++i) {
var j = i % xs.length;
var x = xs[j];
var y = ys[j];
var z = zs[j];
assertEq(x > y, +x > +y);
assertEq(y > x, +y > +x);
assertEq(x > z, +x > +z);
assertEq(z > x, +z > +x);
}
}
testGreaterThan();
function testGreaterThanEqual() {
for (var i = 0; i < 100; ++i) {
var j = i % xs.length;
var x = xs[j];
var y = ys[j];
var z = zs[j];
assertEq(x >= y, +x >= +y);
assertEq(y >= x, +y >= +x);
assertEq(x >= z, +x >= +z);
assertEq(z >= x, +z >= +x);
}
}
testGreaterThanEqual();