function assert(a, message) {
    if (!a)
        throw new Error(message);
}

function assertThrowTypeError(a, b, message) {
    try {
        let n = a | b;
        assert(false, message + ": Should throw TypeError, but executed without exception");
    } catch (e) {
        assert(e instanceof TypeError, message + ": expected TypeError, got: " + e);
    }
}

assertThrowTypeError(30n, "foo", "BigInt | String");
assertThrowTypeError("bar", 18757382984821n, "String | BigInt");
assertThrowTypeError(30n, Symbol("foo"), "BigInt | Symbol");
assertThrowTypeError(Symbol("bar"), 18757382984821n, "Symbol | BigInt");
assertThrowTypeError(30n, 3320, "BigInt | Int32");
assertThrowTypeError(33256, 18757382984821n, "Int32 | BigInt");
assertThrowTypeError(30n, 0.543, "BigInt | Double");
assertThrowTypeError(230.19293, 18757382984821n, "Double | BigInt");
assertThrowTypeError(30n, NaN, "BigInt | NaN");
assertThrowTypeError(NaN, 18757382984821n, "NaN | BigInt");
assertThrowTypeError(30n, NaN, "BigInt | NaN");
assertThrowTypeError(NaN, 18757382984821n, "NaN | BigInt");
assertThrowTypeError(30n, +Infinity, "BigInt | +Infinity");
assertThrowTypeError(+Infinity, 18757382984821n, "+Infinity | BigInt");
assertThrowTypeError(30n, -Infinity, "BigInt | -Infinity");
assertThrowTypeError(-Infinity, 18757382984821n, "-Infinity | BigInt");
assertThrowTypeError(30n, null, "BigInt | null");
assertThrowTypeError(null, 18757382984821n, "null | BigInt");
assertThrowTypeError(30n, undefined, "BigInt | undefined");
assertThrowTypeError(undefined, 18757382984821n, "undefined | BigInt");
assertThrowTypeError(30n, true, "BigInt | true");
assertThrowTypeError(true, 18757382984821n, "true | BigInt");
assertThrowTypeError(30n, false, "BigInt | false");
assertThrowTypeError(false, 18757382984821n, "false | BigInt");

// Error when returning from object

let o = {
    valueOf: function () { return Symbol("Foo"); }
};

assertThrowTypeError(30n, o, "BigInt | Object.valueOf returning Symbol");
assertThrowTypeError(o, 18757382984821n, "Object.valueOf returning Symbol | BigInt");

o = {
    valueOf: function () { return 33256; }
};

assertThrowTypeError(30n, o, "BigInt | Object.valueOf returning Int32");
assertThrowTypeError(o, 18757382984821n, "Object.valueOf returning Int32 | BigInt");

o = {
    valueOf: function () { return 0.453; }
};

assertThrowTypeError(30n, o, "BigInt | Object.valueOf returning Double");
assertThrowTypeError(o, 18757382984821n, "Object.valueOf returning Double | BigInt");

o = {
    toString: function () { return Symbol("Foo"); }
};

assertThrowTypeError(30n, o, "BigInt | Object.toString returning Symbol");
assertThrowTypeError(o, 18757382984821n, "Object.toString returning Symbol | BigInt");

o = {
    toString: function () { return 33256; }
};

assertThrowTypeError(30n, o, "BigInt | Object.toString returning Int32");
assertThrowTypeError(o, 18757382984821n, "Object.toString returning Int32 | BigInt");

o = {
    toString: function () { return 0.453; }
};

assertThrowTypeError(30n, o, "BigInt | Object.toString returning Double");
assertThrowTypeError(o, 18757382984821n, "Object.toString returning Double | BigInt");

o = {
    [Symbol.toPrimitive]: function () { return Symbol("Foo"); }
};

assertThrowTypeError(30n, o, "BigInt | Object.@@toPrimitive returning Symbol");
assertThrowTypeError(o, 18757382984821n, "Object.@@toPrimitive returning Symbol | BigInt");

o = {
    [Symbol.toPrimitive]: function () { return 33256; }
};

assertThrowTypeError(30n, o, "BigInt | Object.@@toPrimitive returning Int32");
assertThrowTypeError(o, 18757382984821n, "Object.@@toPrimitive returning Int32 | BigInt");

o = {
    [Symbol.toPrimitive]: function () { return 0.453; }
};

assertThrowTypeError(30n, o, "BigInt | Object.@@toPrimitive returning Double");
assertThrowTypeError(o, 18757382984821n, "Object.@@toPrimitive returning Double | BigInt");

