blob: 74ac48a589e3330c0c6c755032661740c4b06ce7 [file] [log] [blame]
//@ 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, Symbol("foo"), "BingInt - Symbol");
assertThrowTypeError(Symbol("bar"), 18757382984821n, "Symbol - BigInt");
assertThrowTypeError(30n, 3320, "BingInt - Int32");
assertThrowTypeError(33256, 18757382984821n, "Int32 - BigInt");
assertThrowTypeError(30n, 0.543, "BingInt - Double");
assertThrowTypeError(230.19293, 18757382984821n, "Double - BigInt");
assertThrowTypeError(18757382984821n, "abc", "BigInt - String");
assertThrowTypeError("def", 18757382984821n, "String - BigInt");
assertThrowTypeError(18757382984821n, "", "BigInt - Empty String");
assertThrowTypeError("", 18757382984821n, "Empty - BigInt");
assertThrowTypeError(18757382984821n, NaN, "BigInt - NaN");
assertThrowTypeError(NaN, 18757382984821n, "NaN - BigInt");
assertThrowTypeError(18757382984821n, undefined, "BigInt - undefined");
assertThrowTypeError(undefined, 18757382984821n, "undefined - BigInt");
assertThrowTypeError(18757382984821n, true, "BigInt - true");
assertThrowTypeError(true, 18757382984821n, "true - BigInt");
assertThrowTypeError(18757382984821n, false, "BigInt - false");
assertThrowTypeError(false, 18757382984821n, "false - BigInt");
assertThrowTypeError(18757382984821n, +Infinity, "BigInt - Infinity");
assertThrowTypeError(+Infinity, 18757382984821n, "Infinity - BigInt");
assertThrowTypeError(18757382984821n, -Infinity, "BigInt - -Infinity");
assertThrowTypeError(-Infinity, 18757382984821n, "-Infinity - BigInt");
// Error when returning from object
let o = {
valueOf: function () { return Symbol("Foo"); }
};
assertThrowTypeError(30n, o, "BingInt - Object.valueOf returning Symbol");
assertThrowTypeError(o, 18757382984821n, "Object.valueOf returning Symbol - BigInt");
o = {
valueOf: function () { return 33256; }
};
assertThrowTypeError(30n, o, "BingInt - Object.valueOf returning Int32");
assertThrowTypeError(o, 18757382984821n, "Object.valueOf returning Int32 - BigInt");
o = {
valueOf: function () { return 0.453; }
};
assertThrowTypeError(30n, o, "BingInt - Object.valueOf returning Double");
assertThrowTypeError(o, 18757382984821n, "Object.valueOf returning Double - BigInt");
o = {
valueOf: function () { return ""; }
};
assertThrowTypeError(30n, o, "BingInt - Object.valueOf returning String");
assertThrowTypeError(o, 18757382984821n, "Object.valueOf returning String - BigInt");
o = {
toString: function () { return Symbol("Foo"); }
};
assertThrowTypeError(30n, o, "BingInt - Object.toString returning Symbol");
assertThrowTypeError(o, 18757382984821n, "Object.toString returning Symbol - BigInt");
o = {
toString: function () { return 33256; }
};
assertThrowTypeError(30n, o, "BingInt - Object.toString returning Int32");
assertThrowTypeError(o, 18757382984821n, "Object.toString returning Int32 - BigInt");
o = {
toString: function () { return 0.453; }
};
assertThrowTypeError(30n, o, "BingInt - Object.toString returning Double");
assertThrowTypeError(o, 18757382984821n, "Object.toString returning Double - BigInt");
o = {
toString: function () { return "abc"; }
};
assertThrowTypeError(30n, o, "BingInt - Object.toString returning String");
assertThrowTypeError(o, 18757382984821n, "Object.toString returning String - BigInt");
o = {
[Symbol.toPrimitive]: function () { return Symbol("Foo"); }
};
assertThrowTypeError(30n, o, "BingInt - Object.@@toPrimitive returning Symbol");
assertThrowTypeError(o, 18757382984821n, "Object.@@toPrimitive returning Symbol - BigInt");
o = {
[Symbol.toPrimitive]: function () { return 33256; }
};
assertThrowTypeError(30n, o, "BingInt - Object.@@toPrimitive returning Int32");
assertThrowTypeError(o, 18757382984821n, "Object.@@toPrimitive returning Int32 - BigInt");
o = {
[Symbol.toPrimitive]: function () { return 0.453; }
};
assertThrowTypeError(30n, o, "BingInt - Object.@@toPrimitive returning Double");
assertThrowTypeError(o, 18757382984821n, "Object.@@toPrimitive returning Double - BigInt");
o = {
[Symbol.toPrimitive]: function () { return "Abc"; }
};
assertThrowTypeError(30n, o, "BingInt - Object.@@toPrimitive returning String");
assertThrowTypeError(o, 18757382984821n, "Object.@@toPrimitive returning String - BigInt");