[JSC] Do not use asArrayModes() with Structures because it discards TypedArray inform...
[WebKit-https.git] / JSTests / stress / big-int-equals-basic.js
1 //@ runBigIntEnabled
2
3 function assert(a, e, m) {
4     if (a !== e)
5         throw new Error(m);
6 }
7
8 function testEquals(a, b, e) {
9     assert(a == b, e, a + " == " + b + " should be " + e);
10     assert(b == a, e, b + " == " + a + " should be " + e);
11 }
12
13 function testEqualsWithMessage(a, b, e, m) {
14     assert(a == b, e, m);
15     assert(b == a, e, m);
16 }
17
18 // BigInt - BigInt
19 testEquals(1n, 1n, true);
20 testEquals(1928392129312n, 1n, false);
21 testEquals(0n, 1n, false);
22 testEquals(0n, 0n, true);
23 testEquals(817283912931n, 817283912931n, true);
24 testEquals(0xFFD817283AF9129E31n, 0xFFD817283AF9129E31n, true);
25 testEquals(0xAFFD817283AF9129E31n, 0xFFD817283AF9129E31n, false);
26 testEquals(4719490697266344402481n, BigInt("-4719490697266344402481"), false);
27 testEquals(BigInt("-4719490697266344402481"), BigInt("4719490697266344402481"), false);
28 testEquals(BigInt("-4719490697266344402481"), BigInt("-4719490697266344402481"), true);
29 testEquals(BigInt("-17"), BigInt("-17"), true);
30
31 // BigInt - String
32
33 testEquals(1n, "1", true);
34 testEquals(1928392129312n, "1", false);
35 testEquals(0n, "1", false);
36 testEquals(0n, "0", true);
37 testEquals(817283912931n, "817283912931", true);
38 testEquals(0xFFD817283AF9129E31n, "4719490697266344402481", true);
39 testEquals(0xAFFD817283AF9129E31n, "4719490697266344402481", false);
40
41 // BigInt - Number
42
43 testEquals(0n, 0, true);
44 testEquals(0n, -0, true);
45 testEquals(-0, 0n, true);
46 testEquals(0n, 0.000000000001, false);
47 testEquals(0n, 1, false);
48 testEquals(1, 0n, false);
49 testEquals(1n, 0.999999999999, false);
50 testEquals(1n, 1, true);
51 testEquals(0n, Number.MIN_VALUE, false);
52 testEquals(0n, -Number.MIN_VALUE, false);
53 testEquals(BigInt("-10"), Number.MIN_VALUE, false);
54 testEquals(1n, Number.MAX_VALUE, false);
55 testEquals(1n, -Number.MAX_VALUE, false);
56 testEquals(0xfffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffn, Number.MAX_VALUE, false);
57 testEquals(0xfffffffffffff800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000n, Number.MAX_VALUE, true);
58 testEquals(0xfffffffffffff800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001n, Number.MAX_VALUE, false);
59 testEquals(230000000000000000000, 230000000000000000000n, true);
60 testEquals(10n, NaN, false);
61 testEquals(10n, undefined, false);
62 testEquals(10n, null, false);
63 testEquals(10n, Infinity, false);
64 testEquals(10n, -Infinity, false);
65 testEquals(BigInt("-2147483648"), -2147483648, true); // Testing INT32_MIN
66 testEquals(BigInt("-2147483647"), -2147483648, false);
67 testEquals(BigInt("2147483647"), -2147483648, false);
68 testEquals(BigInt("2147483648"), -2147483648, false);
69 testEquals(BigInt("2147483647"), 2147483647, true);
70 testEquals(BigInt("2147483648"), 2147483647, false);
71
72 // BigInt - Boolean
73
74 testEquals(BigInt("-1"), false, false);
75 testEquals(BigInt("-1"), true, false);
76 testEquals(0n, false, true);
77 testEquals(0n, true, false);
78 testEquals(1n, false, false);
79 testEquals(1n, true, true);
80 testEquals(2n, false, false);
81 testEquals(2n, true, false);
82
83 // BigInt - Object
84
85 testEquals(0n, Object(0n), true);
86 testEquals(0n, Object(1n), false);
87 testEquals(1n, Object(0n), false);
88 testEquals(1n, Object(1n), true);
89 testEquals(2n, Object(0n), false);
90 testEquals(2n, Object(1n), false);
91 testEquals(2n, Object(2n), true);
92 testEquals(0n, {}, false);
93 testEquals(0n, {valueOf: function() { return 0n; }}, true);
94 testEquals(0n, {valueOf: function() { return 1n; }}, false);
95 testEquals(0n, {toString: function() { return "0"; }}, true);
96 testEquals(0n, {toString: function() { return "1"; }}, false);
97 testEquals(900719925474099101n, {valueOf: function() { return 900719925474099101n; }}, true);
98 testEquals(900719925474099101n, {valueOf: function() { return 900719925474099102n; }}, false);
99 testEquals(900719925474099101n, {toString: function() { return "900719925474099101"; }}, true);
100 testEquals(900719925474099101n, {toString: function() { return "900719925474099102"; }}, false);
101
102 try {
103     let o = {valueOf: function() { throw new Error("my error"); }};
104     o == 1n;
105     throw new Error("Exception in ToPrimitive not catched");
106 } catch(e) {
107     assert(e.message, "my error", "Wrong exception in ToPrimitive");
108 }
109
110 try {
111     let o = {toString: function() { throw new Error("my error"); }};
112     o == 1n;
113     throw new Error("Exception in ToString not catched");
114 } catch(e) {
115     assert(e.message, "my error", "Wrong exception in ToString");
116 }
117
118 // BigInt - Symbol
119
120 testEqualsWithMessage(0n, Symbol("1"), false, "0n == Symbol(1)");
121 testEqualsWithMessage(Symbol("1"), 0n, false, "Symbol(1) == 0n");
122 testEqualsWithMessage(1n, Symbol("1"), false, "1n == Symbol(1)");
123 testEqualsWithMessage(Symbol("1"), 1n, false, "Symbol(1) == 1n");
124