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

