| //@ 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"); |
| |