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

