[ARM,MIPS] Skip slow tests
[WebKit-https.git] / JSTests / stress / big-int-left-shift-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, "foo", "BigInt << String");
18 assertThrowTypeError("bar", 18757382984821n, "String << BigInt");
19 assertThrowTypeError(30n, Symbol("foo"), "BigInt << Symbol");
20 assertThrowTypeError(Symbol("bar"), 18757382984821n, "Symbol << BigInt");
21 assertThrowTypeError(30n, 3320, "BigInt << Int32");
22 assertThrowTypeError(33256, 18757382984821n, "Int32 << BigInt");
23 assertThrowTypeError(30n, 0.543, "BigInt << Double");
24 assertThrowTypeError(230.19293, 18757382984821n, "Double << BigInt");
25 assertThrowTypeError(30n, NaN, "BigInt << NaN");
26 assertThrowTypeError(NaN, 18757382984821n, "NaN << BigInt");
27 assertThrowTypeError(30n, +Infinity, "BigInt << +Infinity");
28 assertThrowTypeError(+Infinity, 18757382984821n, "+Infinity << 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