[JSC] Do not use asArrayModes() with Structures because it discards TypedArray inform...
[WebKit-https.git] / JSTests / stress / big-int-addition-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"), "BigInt + Symbol");
18 assertThrowTypeError(Symbol("bar"), 18757382984821n, "Symbol + BigInt");
19 assertThrowTypeError(30n, 3320, "BigInt + Int32");
20 assertThrowTypeError(33256, 18757382984821n, "Int32 + BigInt");
21 assertThrowTypeError(30n, 0.543, "BigInt + Double");
22 assertThrowTypeError(230.19293, 18757382984821n, "Double + BigInt");
23 assertThrowTypeError(30n, NaN, "BigInt + NaN");
24 assertThrowTypeError(NaN, 18757382984821n, "NaN + BigInt");
25 assertThrowTypeError(30n, NaN, "BigInt + NaN");
26 assertThrowTypeError(NaN, 18757382984821n, "NaN + BigInt");
27 assertThrowTypeError(30n, +Infinity, "BigInt + NaN");
28 assertThrowTypeError(+Infinity, 18757382984821n, "NaN + BigInt");
29 assertThrowTypeError(30n, -Infinity, "BigInt + -Infinity");
30 assertThrowTypeError(-Infinity, 18757382984821n, "-Infinity + BigInt");
31 assertThrowTypeError(30n, null, "BigInt + null");
32 assertThrowTypeError(null, 18757382984821n, "null + BigInt");
33 assertThrowTypeError(30n, undefined, "BigInt + undefined");
34 assertThrowTypeError(undefined, 18757382984821n, "undefined + BigInt");
35 assertThrowTypeError(30n, true, "BigInt + true");
36 assertThrowTypeError(true, 18757382984821n, "true + BigInt");
37 assertThrowTypeError(30n, false, "BigInt + false");
38 assertThrowTypeError(false, 18757382984821n, "false + BigInt");
39
40 // Error when returning from object
41
42 let o = {
43     valueOf: function () { return Symbol("Foo"); }
44 };
45
46 assertThrowTypeError(30n, o, "BigInt + 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, "BigInt + 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, "BigInt + Object.valueOf returning Double");
61 assertThrowTypeError(o, 18757382984821n, "Object.valueOf returning Double + BigInt");
62
63 o = {
64     toString: function () { return Symbol("Foo"); }
65 };
66
67 assertThrowTypeError(30n, o, "BigInt + Object.toString returning Symbol");
68 assertThrowTypeError(o, 18757382984821n, "Object.toString returning Symbol + BigInt");
69
70 o = {
71     toString: function () { return 33256; }
72 };
73
74 assertThrowTypeError(30n, o, "BigInt + Object.toString returning Int32");
75 assertThrowTypeError(o, 18757382984821n, "Object.toString returning Int32 + BigInt");
76
77 o = {
78     toString: function () { return 0.453; }
79 };
80
81 assertThrowTypeError(30n, o, "BigInt + Object.toString returning Double");
82 assertThrowTypeError(o, 18757382984821n, "Object.toString returning Double + BigInt");
83
84 o = {
85     [Symbol.toPrimitive]: function () { return Symbol("Foo"); }
86 };
87
88 assertThrowTypeError(30n, o, "BigInt + Object.@@toPrimitive returning Symbol");
89 assertThrowTypeError(o, 18757382984821n, "Object.@@toPrimitive returning Symbol + BigInt");
90
91 o = {
92     [Symbol.toPrimitive]: function () { return 33256; }
93 };
94
95 assertThrowTypeError(30n, o, "BigInt + Object.@@toPrimitive returning Int32");
96 assertThrowTypeError(o, 18757382984821n, "Object.@@toPrimitive returning Int32 + BigInt");
97
98 o = {
99     [Symbol.toPrimitive]: function () { return 0.453; }
100 };
101
102 assertThrowTypeError(30n, o, "BigInt + Object.@@toPrimitive returning Double");
103 assertThrowTypeError(o, 18757382984821n, "Object.@@toPrimitive returning Double + BigInt");
104