//@ runBigIntEnabled

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

