Invalid flags in a RegExp literal should be an early SyntaxError
[WebKit-https.git] / JSTests / stress / big-int-subtraction-type-error.js
1 //@ runBigIntEnabled
2
3 function assert(a, message) {
4     if (!a)
5         throw new Error(message);
6 }
7
8 function assertThrowTypeError(a, b, message) {
9     try {
10         let n = a - b;
11         assert(false, message + ": Should throw TypeError, but executed without exception");
12     } catch (e) {
13         assert(e instanceof TypeError, message + ": expected TypeError, got: " + e);
14     }
15 }
16
17 assertThrowTypeError(30n, Symbol("foo"), "BingInt - Symbol");
18 assertThrowTypeError(Symbol("bar"), 18757382984821n, "Symbol - BigInt");
19 assertThrowTypeError(30n, 3320, "BingInt - Int32");
20 assertThrowTypeError(33256, 18757382984821n, "Int32 - BigInt");
21 assertThrowTypeError(30n, 0.543, "BingInt - Double");
22 assertThrowTypeError(230.19293, 18757382984821n, "Double - BigInt");
23 assertThrowTypeError(18757382984821n, "abc", "BigInt - String");
24 assertThrowTypeError("def", 18757382984821n, "String - BigInt");
25 assertThrowTypeError(18757382984821n, "", "BigInt - Empty String");
26 assertThrowTypeError("", 18757382984821n, "Empty - BigInt");
27 assertThrowTypeError(18757382984821n, NaN, "BigInt - NaN");
28 assertThrowTypeError(NaN, 18757382984821n, "NaN - BigInt");
29 assertThrowTypeError(18757382984821n, undefined, "BigInt - undefined");
30 assertThrowTypeError(undefined, 18757382984821n, "undefined - BigInt");
31 assertThrowTypeError(18757382984821n, true, "BigInt - true");
32 assertThrowTypeError(true, 18757382984821n, "true - BigInt");
33 assertThrowTypeError(18757382984821n, false, "BigInt - false");
34 assertThrowTypeError(false, 18757382984821n, "false - BigInt");
35 assertThrowTypeError(18757382984821n, +Infinity, "BigInt - Infinity");
36 assertThrowTypeError(+Infinity, 18757382984821n, "Infinity - BigInt");
37 assertThrowTypeError(18757382984821n, -Infinity, "BigInt - -Infinity");
38 assertThrowTypeError(-Infinity, 18757382984821n, "-Infinity - BigInt");
39
40 // Error when returning from object
41
42 let o = {
43     valueOf: function () { return Symbol("Foo"); }
44 };
45
46 assertThrowTypeError(30n, o, "BingInt - Object.valueOf returning Symbol");
47 assertThrowTypeError(o, 18757382984821n, "Object.valueOf returning Symbol - BigInt");
48
49 o = {
50     valueOf: function () { return 33256; }
51 };
52
53 assertThrowTypeError(30n, o, "BingInt - Object.valueOf returning Int32");
54 assertThrowTypeError(o, 18757382984821n, "Object.valueOf returning Int32 - BigInt");
55
56 o = {
57     valueOf: function () { return 0.453; }
58 };
59
60 assertThrowTypeError(30n, o, "BingInt - Object.valueOf returning Double");
61 assertThrowTypeError(o, 18757382984821n, "Object.valueOf returning Double - BigInt");
62
63 o = {
64     valueOf: function () { return ""; }
65 };
66
67 assertThrowTypeError(30n, o, "BingInt - Object.valueOf returning String");
68 assertThrowTypeError(o, 18757382984821n, "Object.valueOf returning String - BigInt");
69
70 o = {
71     toString: function () { return Symbol("Foo"); }
72 };
73
74 assertThrowTypeError(30n, o, "BingInt - Object.toString returning Symbol");
75 assertThrowTypeError(o, 18757382984821n, "Object.toString returning Symbol - BigInt");
76
77 o = {
78     toString: function () { return 33256; }
79 };
80
81 assertThrowTypeError(30n, o, "BingInt - Object.toString returning Int32");
82 assertThrowTypeError(o, 18757382984821n, "Object.toString returning Int32 - BigInt");
83
84 o = {
85     toString: function () { return 0.453; }
86 };
87
88 assertThrowTypeError(30n, o, "BingInt - Object.toString returning Double");
89 assertThrowTypeError(o, 18757382984821n, "Object.toString returning Double - BigInt");
90
91 o = {
92     toString: function () { return "abc"; }
93 };
94
95 assertThrowTypeError(30n, o, "BingInt - Object.toString returning String");
96 assertThrowTypeError(o, 18757382984821n, "Object.toString returning String - BigInt");
97
98 o = {
99     [Symbol.toPrimitive]: function () { return Symbol("Foo"); }
100 };
101
102 assertThrowTypeError(30n, o, "BingInt - Object.@@toPrimitive returning Symbol");
103 assertThrowTypeError(o, 18757382984821n, "Object.@@toPrimitive returning Symbol - BigInt");
104
105 o = {
106     [Symbol.toPrimitive]: function () { return 33256; }
107 };
108
109 assertThrowTypeError(30n, o, "BingInt - Object.@@toPrimitive returning Int32");
110 assertThrowTypeError(o, 18757382984821n, "Object.@@toPrimitive returning Int32 - BigInt");
111
112 o = {
113     [Symbol.toPrimitive]: function () { return 0.453; }
114 };
115
116 assertThrowTypeError(30n, o, "BingInt - Object.@@toPrimitive returning Double");
117 assertThrowTypeError(o, 18757382984821n, "Object.@@toPrimitive returning Double - BigInt");
118
119 o = {
120     [Symbol.toPrimitive]: function () { return "Abc"; }
121 };
122
123 assertThrowTypeError(30n, o, "BingInt - Object.@@toPrimitive returning String");
124 assertThrowTypeError(o, 18757382984821n, "Object.@@toPrimitive returning String - BigInt");
125