blob: 59ba0286f8028e597b62f92b7d0bde1ff63fa6fe [file] [log] [blame]
//@ runBigIntEnabled
function assert(a, e, m) {
if (a !== e)
throw new Error(m);
}
function testEquals(a, b, e) {
assert(a == b, e, a + " == " + b + " should be " + e);
assert(b == a, e, b + " == " + a + " should be " + e);
}
function testEqualsWithMessage(a, b, e, m) {
assert(a == b, e, m);
assert(b == a, e, m);
}
// BigInt - BigInt
testEquals(1n, 1n, true);
testEquals(1928392129312n, 1n, false);
testEquals(0n, 1n, false);
testEquals(0n, 0n, true);
testEquals(817283912931n, 817283912931n, true);
testEquals(0xFFD817283AF9129E31n, 0xFFD817283AF9129E31n, true);
testEquals(0xAFFD817283AF9129E31n, 0xFFD817283AF9129E31n, false);
testEquals(4719490697266344402481n, BigInt("-4719490697266344402481"), false);
testEquals(BigInt("-4719490697266344402481"), BigInt("4719490697266344402481"), false);
testEquals(BigInt("-4719490697266344402481"), BigInt("-4719490697266344402481"), true);
testEquals(BigInt("-17"), BigInt("-17"), true);
// BigInt - String
testEquals(1n, "1", true);
testEquals(1928392129312n, "1", false);
testEquals(0n, "1", false);
testEquals(0n, "0", true);
testEquals(817283912931n, "817283912931", true);
testEquals(0xFFD817283AF9129E31n, "4719490697266344402481", true);
testEquals(0xAFFD817283AF9129E31n, "4719490697266344402481", false);
// BigInt - Number
testEquals(0n, 0, true);
testEquals(0n, -0, true);
testEquals(-0, 0n, true);
testEquals(0n, 0.000000000001, false);
testEquals(0n, 1, false);
testEquals(1, 0n, false);
testEquals(1n, 0.999999999999, false);
testEquals(1n, 1, true);
testEquals(0n, Number.MIN_VALUE, false);
testEquals(0n, -Number.MIN_VALUE, false);
testEquals(BigInt("-10"), Number.MIN_VALUE, false);
testEquals(1n, Number.MAX_VALUE, false);
testEquals(1n, -Number.MAX_VALUE, false);
testEquals(0xfffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffn, Number.MAX_VALUE, false);
testEquals(0xfffffffffffff800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000n, Number.MAX_VALUE, true);
testEquals(0xfffffffffffff800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001n, Number.MAX_VALUE, false);
testEquals(230000000000000000000, 230000000000000000000n, true);
testEquals(10n, NaN, false);
testEquals(10n, undefined, false);
testEquals(10n, null, false);
testEquals(10n, Infinity, false);
testEquals(10n, -Infinity, false);
testEquals(BigInt("-2147483648"), -2147483648, true); // Testing INT32_MIN
testEquals(BigInt("-2147483647"), -2147483648, false);
testEquals(BigInt("2147483647"), -2147483648, false);
testEquals(BigInt("2147483648"), -2147483648, false);
testEquals(BigInt("2147483647"), 2147483647, true);
testEquals(BigInt("2147483648"), 2147483647, false);
// BigInt - Boolean
testEquals(BigInt("-1"), false, false);
testEquals(BigInt("-1"), true, false);
testEquals(0n, false, true);
testEquals(0n, true, false);
testEquals(1n, false, false);
testEquals(1n, true, true);
testEquals(2n, false, false);
testEquals(2n, true, false);
// BigInt - Object
testEquals(0n, Object(0n), true);
testEquals(0n, Object(1n), false);
testEquals(1n, Object(0n), false);
testEquals(1n, Object(1n), true);
testEquals(2n, Object(0n), false);
testEquals(2n, Object(1n), false);
testEquals(2n, Object(2n), true);
testEquals(0n, {}, false);
testEquals(0n, {valueOf: function() { return 0n; }}, true);
testEquals(0n, {valueOf: function() { return 1n; }}, false);
testEquals(0n, {toString: function() { return "0"; }}, true);
testEquals(0n, {toString: function() { return "1"; }}, false);
testEquals(900719925474099101n, {valueOf: function() { return 900719925474099101n; }}, true);
testEquals(900719925474099101n, {valueOf: function() { return 900719925474099102n; }}, false);
testEquals(900719925474099101n, {toString: function() { return "900719925474099101"; }}, true);
testEquals(900719925474099101n, {toString: function() { return "900719925474099102"; }}, false);
try {
let o = {valueOf: function() { throw new Error("my error"); }};
o == 1n;
throw new Error("Exception in ToPrimitive not catched");
} catch(e) {
assert(e.message, "my error", "Wrong exception in ToPrimitive");
}
try {
let o = {toString: function() { throw new Error("my error"); }};
o == 1n;
throw new Error("Exception in ToString not catched");
} catch(e) {
assert(e.message, "my error", "Wrong exception in ToString");
}
// BigInt - Symbol
testEqualsWithMessage(0n, Symbol("1"), false, "0n == Symbol(1)");
testEqualsWithMessage(Symbol("1"), 0n, false, "Symbol(1) == 0n");
testEqualsWithMessage(1n, Symbol("1"), false, "1n == Symbol(1)");
testEqualsWithMessage(Symbol("1"), 1n, false, "Symbol(1) == 1n");