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, 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 + NaN");
assertThrowTypeError(+Infinity, 18757382984821n, "NaN + 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");

