summaryrefslogtreecommitdiffstats
path: root/js/src/tests/test262/language/expressions/bitwise-xor
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-28 14:29:10 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-28 14:29:10 +0000
commit2aa4a82499d4becd2284cdb482213d541b8804dd (patch)
treeb80bf8bf13c3766139fbacc530efd0dd9d54394c /js/src/tests/test262/language/expressions/bitwise-xor
parentInitial commit. (diff)
downloadfirefox-2aa4a82499d4becd2284cdb482213d541b8804dd.tar.xz
firefox-2aa4a82499d4becd2284cdb482213d541b8804dd.zip
Adding upstream version 86.0.1.upstream/86.0.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'js/src/tests/test262/language/expressions/bitwise-xor')
-rw-r--r--js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A1.js63
-rw-r--r--js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A2.1_T1.js43
-rw-r--r--js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A2.1_T2.js21
-rw-r--r--js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A2.1_T3.js21
-rw-r--r--js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A2.2_T1.js71
-rw-r--r--js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A2.3_T1.js28
-rw-r--r--js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A2.4_T1.js22
-rw-r--r--js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A2.4_T2.js26
-rw-r--r--js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A2.4_T3.js27
-rw-r--r--js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A3_T1.1.js30
-rw-r--r--js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A3_T1.2.js30
-rw-r--r--js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A3_T1.3.js40
-rw-r--r--js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A3_T1.4.js30
-rw-r--r--js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A3_T1.5.js30
-rw-r--r--js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A3_T2.1.js52
-rw-r--r--js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A3_T2.2.js62
-rw-r--r--js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A3_T2.3.js32
-rw-r--r--js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A3_T2.4.js32
-rw-r--r--js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A3_T2.5.js52
-rw-r--r--js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A3_T2.6.js32
-rw-r--r--js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A3_T2.7.js32
-rw-r--r--js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A3_T2.8.js32
-rw-r--r--js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A3_T2.9.js32
-rw-r--r--js/src/tests/test262/language/expressions/bitwise-xor/bigint-and-number.js92
-rw-r--r--js/src/tests/test262/language/expressions/bitwise-xor/bigint-errors.js72
-rw-r--r--js/src/tests/test262/language/expressions/bitwise-xor/bigint-non-primitive.js84
-rw-r--r--js/src/tests/test262/language/expressions/bitwise-xor/bigint-toprimitive.js374
-rw-r--r--js/src/tests/test262/language/expressions/bitwise-xor/bigint-wrapped-values.js47
-rw-r--r--js/src/tests/test262/language/expressions/bitwise-xor/bigint.js109
-rw-r--r--js/src/tests/test262/language/expressions/bitwise-xor/browser.js0
-rw-r--r--js/src/tests/test262/language/expressions/bitwise-xor/order-of-evaluation.js140
-rw-r--r--js/src/tests/test262/language/expressions/bitwise-xor/shell.js0
32 files changed, 1758 insertions, 0 deletions
diff --git a/js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A1.js b/js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A1.js
new file mode 100644
index 0000000000..9d49ba7cce
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A1.js
@@ -0,0 +1,63 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ White Space and Line Terminator between BitwiseXORExpression and "^" or
+ between "^" and BitwiseANDExpression are allowed
+es5id: 11.10.2_A1
+description: The check uses eval
+---*/
+
+//CHECK#1
+if ((eval("1\u0009^\u00091")) !== 0) {
+ $ERROR('#1: (1\\u0009^\\u00091) === 0');
+}
+
+//CHECK#2
+if ((eval("1\u000B^\u000B1")) !== 0) {
+ $ERROR('#2: (1\\u000B^\\u000B1) === 0');
+}
+
+//CHECK#3
+if ((eval("1\u000C^\u000C1")) !== 0) {
+ $ERROR('#3: (1\\u000C^\\u000C1) === 0');
+}
+
+//CHECK#4
+if ((eval("1\u0020^\u00201")) !== 0) {
+ $ERROR('#4: (1\\u0020^\\u00201) === 0');
+}
+
+//CHECK#5
+if ((eval("1\u00A0^\u00A01")) !== 0) {
+ $ERROR('#5: (1\\u00A0^\\u00A01) === 0');
+}
+
+//CHECK#6
+if ((eval("1\u000A^\u000A1")) !== 0) {
+ $ERROR('#6: (1\\u000A^\\u000A1) === 0');
+}
+
+//CHECK#7
+if ((eval("1\u000D^\u000D1")) !== 0) {
+ $ERROR('#7: (1\\u000D^\\u000D1) === 0');
+}
+
+//CHECK#8
+if ((eval("1\u2028^\u20281")) !== 0) {
+ $ERROR('#8: (1\\u2028^\\u20281) === 0');
+}
+
+//CHECK#9
+if ((eval("1\u2029^\u20291")) !== 0) {
+ $ERROR('#9: (1\\u2029^\\u20291) === 0');
+}
+
+
+//CHECK#10
+if ((eval("1\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029^\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u20291")) !== 0) {
+ $ERROR('#10: (1\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029^\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u20291) === 0');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A2.1_T1.js b/js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A2.1_T1.js
new file mode 100644
index 0000000000..ede9c575ab
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A2.1_T1.js
@@ -0,0 +1,43 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Operator x ^ y uses GetValue
+es5id: 11.10.2_A2.1_T1
+description: Either Type is not Reference or GetBase is not null
+---*/
+
+//CHECK#1
+if ((1 ^ 1) !== 0) {
+ $ERROR('#1: (1 ^ 1) === 0. Actual: ' + ((1 ^ 1)));
+}
+
+//CHECK#2
+var x = 1;
+if ((x ^ 1) !== 0) {
+ $ERROR('#2: var x = 1; (x ^ 1) === 0. Actual: ' + ((x ^ 1)));
+}
+
+//CHECK#3
+var y = 1;
+if ((1 ^ y) !== 0) {
+ $ERROR('#3: var y = 1; (1 ^ y) === 0. Actual: ' + ((1 ^ y)));
+}
+
+//CHECK#4
+var x = 1;
+var y = 1;
+if ((x ^ y) !== 0) {
+ $ERROR('#4: var x = 1; var y = 1; (x ^ y) === 0. Actual: ' + ((x ^ y)));
+}
+
+//CHECK#5
+var objectx = new Object();
+var objecty = new Object();
+objectx.prop = 1;
+objecty.prop = 1;
+if ((objectx.prop ^ objecty.prop) !== 0) {
+ $ERROR('#5: var objectx = new Object(); var objecty = new Object(); objectx.prop = 1; objecty.prop = 1; (objectx.prop ^ objecty.prop) === 0. Actual: ' + ((objectx.prop ^ objecty.prop)));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A2.1_T2.js b/js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A2.1_T2.js
new file mode 100644
index 0000000000..b2b7cdab58
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A2.1_T2.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Operator x ^ y uses GetValue
+es5id: 11.10.2_A2.1_T2
+description: If GetBase(x) is null, throw ReferenceError
+---*/
+
+//CHECK#1
+try {
+ x ^ 1;
+ $ERROR('#1.1: x ^ 1 throw ReferenceError. Actual: ' + (x ^ 1));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: x ^ 1 throw ReferenceError. Actual: ' + (e));
+ }
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A2.1_T3.js b/js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A2.1_T3.js
new file mode 100644
index 0000000000..adfa4b627e
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A2.1_T3.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Operator x ^ y uses GetValue
+es5id: 11.10.2_A2.1_T3
+description: If GetBase(y) is null, throw ReferenceError
+---*/
+
+//CHECK#1
+try {
+ 1 ^ y;
+ $ERROR('#1.1: 1 ^ y throw ReferenceError. Actual: ' + (1 ^ y));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: 1 ^ y throw ReferenceError. Actual: ' + (e));
+ }
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A2.2_T1.js b/js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A2.2_T1.js
new file mode 100644
index 0000000000..2108db8346
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A2.2_T1.js
@@ -0,0 +1,71 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Operator x ^ y uses [[Default Value]]
+es5id: 11.10.2_A2.2_T1
+description: If Type(value) is Object, evaluate ToPrimitive(value, Number)
+---*/
+
+//CHECK#1
+if (({valueOf: function() {return 1}} ^ 1) !== 0) {
+ $ERROR('#1: ({valueOf: function() {return 1}} ^ 1) === 0. Actual: ' + (({valueOf: function() {return 1}} ^ 1)));
+}
+
+//CHECK#2
+if (({valueOf: function() {return 1}, toString: function() {return 0}} ^ 1) !== 0) {
+ $ERROR('#2: ({valueOf: function() {return 1}, toString: function() {return 0}} ^ 1) === 0. Actual: ' + (({valueOf: function() {return 1}, toString: function() {return 0}} ^ 1)));
+}
+
+//CHECK#3
+if (({valueOf: function() {return 1}, toString: function() {return {}}} ^ 1) !== 0) {
+ $ERROR('#3: ({valueOf: function() {return 1}, toString: function() {return {}}} ^ 1) === 0. Actual: ' + (({valueOf: function() {return 1}, toString: function() {return {}}} ^ 1)));
+}
+
+//CHECK#4
+try {
+ if (({valueOf: function() {return 1}, toString: function() {throw "error"}} ^ 1) !== 0) {
+ $ERROR('#4.1: ({valueOf: function() {return 1}, toString: function() {throw "error"}} ^ 1) === 0. Actual: ' + (({valueOf: function() {return 1}, toString: function() {throw "error"}} ^ 1)));
+ }
+}
+catch (e) {
+ if (e === "error") {
+ $ERROR('#4.2: ({valueOf: function() {return 1}, toString: function() {throw "error"}} ^ 1) not throw "error"');
+ } else {
+ $ERROR('#4.3: ({valueOf: function() {return 1}, toString: function() {throw "error"}} ^ 1) not throw Error. Actual: ' + (e));
+ }
+}
+
+//CHECK#5
+if ((1 ^ {toString: function() {return 1}}) !== 0) {
+ $ERROR('#5: (1 ^ {toString: function() {return 1}}) === 0. Actual: ' + ((1 ^ {toString: function() {return 1}})));
+}
+
+//CHECK#6
+if ((1 ^ {valueOf: function() {return {}}, toString: function() {return 1}}) !== 0) {
+ $ERROR('#6: (1 ^ {valueOf: function() {return {}}, toString: function() {return 1}}) === 0. Actual: ' + ((1 ^ {valueOf: function() {return {}}, toString: function() {return 1}})));
+}
+
+//CHECK#7
+try {
+ 1 ^ {valueOf: function() {throw "error"}, toString: function() {return 1}};
+ $ERROR('#7.1: 1 ^ {valueOf: function() {throw "error"}, toString: function() {return 1}} throw "error". Actual: ' + (1 ^ {valueOf: function() {throw "error"}, toString: function() {return 1}}));
+}
+catch (e) {
+ if (e !== "error") {
+ $ERROR('#7.2: 1 ^ {valueOf: function() {throw "error"}, toString: function() {return 1}} throw "error". Actual: ' + (e));
+ }
+}
+
+//CHECK#8
+try {
+ 1 ^ {valueOf: function() {return {}}, toString: function() {return {}}};
+ $ERROR('#8.1: 1 ^ {valueOf: function() {return {}}, toString: function() {return {}}} throw TypeError. Actual: ' + (1 ^ {valueOf: function() {return {}}, toString: function() {return {}}}));
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#8.2: 1 ^ {valueOf: function() {return {}}, toString: function() {return {}}} throw TypeError. Actual: ' + (e));
+ }
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A2.3_T1.js b/js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A2.3_T1.js
new file mode 100644
index 0000000000..f28173163a
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A2.3_T1.js
@@ -0,0 +1,28 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ ToInt32(first expression) is called first, and then ToInt32(second
+ expression)
+es5id: 11.10.2_A2.3_T1
+description: Checking with "throw"
+---*/
+
+//CHECK#1
+var x = { valueOf: function () { throw "x"; } };
+var y = { valueOf: function () { throw "y"; } };
+try {
+ x ^ y;
+ $ERROR('#1.1: var x = { valueOf: function () { throw "x"; } }; var y = { valueOf: function () { throw "y"; } }; x ^ y throw "x". Actual: ' + (x ^ y));
+} catch (e) {
+ if (e === "y") {
+ $ERROR('#1.2: ToInt32(first expression) is called first, and then ToInt32(second expression)');
+ } else {
+ if (e !== "x") {
+ $ERROR('#1.3: var x = { valueOf: function () { throw "x"; } }; var y = { valueOf: function () { throw "y"; } }; x ^ y throw "x". Actual: ' + (e));
+ }
+ }
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A2.4_T1.js b/js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A2.4_T1.js
new file mode 100644
index 0000000000..f86fe95c9d
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A2.4_T1.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: First expression is evaluated first, and then second expression
+es5id: 11.10.2_A2.4_T1
+description: Checking with "="
+---*/
+
+//CHECK#1
+var x = 1;
+if (((x = 0) ^ x) !== 0) {
+ $ERROR('#1: var x = 0; ((x = 1) ^ x) === 0. Actual: ' + (((x = 1) ^ x)));
+}
+
+//CHECK#2
+var x = 0;
+if ((x ^ (x = 1)) !== 1) {
+ $ERROR('#2: var x = 0; (x ^ (x = 1)) === 1. Actual: ' + ((x ^ (x = 1))));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A2.4_T2.js b/js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A2.4_T2.js
new file mode 100644
index 0000000000..62287c325a
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A2.4_T2.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: First expression is evaluated first, and then second expression
+es5id: 11.10.2_A2.4_T2
+description: Checking with "throw"
+---*/
+
+//CHECK#1
+var x = function () { throw "x"; };
+var y = function () { throw "y"; };
+try {
+ x() ^ y();
+ $ERROR('#1.1: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() ^ y() throw "x". Actual: ' + (x() ^ y()));
+} catch (e) {
+ if (e === "y") {
+ $ERROR('#1.2: First expression is evaluated first, and then second expression');
+ } else {
+ if (e !== "x") {
+ $ERROR('#1.3: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() ^ y() throw "x". Actual: ' + (e));
+ }
+ }
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A2.4_T3.js b/js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A2.4_T3.js
new file mode 100644
index 0000000000..ef70308560
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A2.4_T3.js
@@ -0,0 +1,27 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: First expression is evaluated first, and then second expression
+es5id: 11.10.2_A2.4_T3
+description: Checking with undeclarated variables
+flags: [noStrict]
+---*/
+
+//CHECK#1
+try {
+ x ^ (x = 1);
+ $ERROR('#1.1: x ^ (x = 1) throw ReferenceError. Actual: ' + (x ^ (x = 1)));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: x ^ (x = 1) throw ReferenceError. Actual: ' + (e));
+ }
+}
+
+//CHECK#2
+if (((y = 1) ^ y) !== 0) {
+ $ERROR('#2: ((y = 1) ^ y) === 0. Actual: ' + (((y = 1) ^ y)));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A3_T1.1.js b/js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A3_T1.1.js
new file mode 100644
index 0000000000..4dca43723d
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A3_T1.1.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Operator x ^ y returns ToNumber(x) ^ ToNumber(y)
+es5id: 11.10.2_A3_T1.1
+description: Type(x) and Type(y) are primitive boolean and Boolean object
+---*/
+
+//CHECK#1
+if ((true ^ true) !== 0) {
+ $ERROR('#1: (true ^ true) === 0. Actual: ' + ((true ^ true)));
+}
+
+//CHECK#2
+if ((new Boolean(true) ^ true) !== 0) {
+ $ERROR('#2: (new Boolean(true) ^ true) === 0. Actual: ' + ((new Boolean(true) ^ true)));
+}
+
+//CHECK#3
+if ((true ^ new Boolean(true)) !== 0) {
+ $ERROR('#3: (true ^ new Boolean(true)) === 0. Actual: ' + ((true ^ new Boolean(true))));
+}
+
+//CHECK#4
+if ((new Boolean(true) ^ new Boolean(true)) !== 0) {
+ $ERROR('#4: (new Boolean(true) ^ new Boolean(true)) === 0. Actual: ' + ((new Boolean(true) ^ new Boolean(true))));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A3_T1.2.js b/js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A3_T1.2.js
new file mode 100644
index 0000000000..b8ffcee28c
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A3_T1.2.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Operator x ^ y returns ToNumber(x) ^ ToNumber(y)
+es5id: 11.10.2_A3_T1.2
+description: Type(x) and Type(y) are primitive number and Number object
+---*/
+
+//CHECK#1
+if ((1 ^ 1) !== 0) {
+ $ERROR('#1: (1 ^ 1) === 0. Actual: ' + ((1 ^ 1)));
+}
+
+//CHECK#2
+if ((new Number(1) ^ 1) !== 0) {
+ $ERROR('#2: (new Number(1) ^ 1) === 0. Actual: ' + ((new Number(1) ^ 1)));
+}
+
+//CHECK#3
+if ((1 ^ new Number(1)) !== 0) {
+ $ERROR('#3: (1 ^ new Number(1)) === 0. Actual: ' + ((1 ^ new Number(1))));
+}
+
+//CHECK#4
+if ((new Number(1) ^ new Number(1)) !== 0) {
+ $ERROR('#4: (new Number(1) ^ new Number(1)) === 0. Actual: ' + ((new Number(1) ^ new Number(1))));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A3_T1.3.js b/js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A3_T1.3.js
new file mode 100644
index 0000000000..04d2b5b472
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A3_T1.3.js
@@ -0,0 +1,40 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Operator x ^ y returns ToNumber(x) ^ ToNumber(y)
+es5id: 11.10.2_A3_T1.3
+description: Type(x) and Type(y) are primitive string and String object
+---*/
+
+//CHECK#1
+if (("1" ^ "1") !== 0) {
+ $ERROR('#1: ("1" ^ "1") === 0. Actual: ' + (("1" ^ "1")));
+}
+
+//CHECK#2
+if ((new String("1") ^ "1") !== 0) {
+ $ERROR('#2: (new String("1") ^ "1") === 0. Actual: ' + ((new String("1") ^ "1")));
+}
+
+//CHECK#3
+if (("1" ^ new String("1")) !== 0) {
+ $ERROR('#3: ("1" ^ new String("1")) === 0. Actual: ' + (("1" ^ new String("1"))));
+}
+
+//CHECK#4
+if ((new String("1") ^ new String("1")) !== 0) {
+ $ERROR('#4: (new String("1") ^ new String("1")) === 0. Actual: ' + ((new String("1") ^ new String("1"))));
+}
+
+//CHECK#5
+if (("x" ^ "1") !== 1) {
+ $ERROR('#5: ("x" ^ "1") === 1. Actual: ' + (("x" ^ "1")));
+}
+
+//CHECK#6
+if (("1" ^ "x") !== 1) {
+ $ERROR('#6: ("1" ^ "x") === 1. Actual: ' + (("1" ^ "x")));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A3_T1.4.js b/js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A3_T1.4.js
new file mode 100644
index 0000000000..982265f1a6
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A3_T1.4.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Operator x ^ y returns ToNumber(x) ^ ToNumber(y)
+es5id: 11.10.2_A3_T1.4
+description: Type(x) and Type(y) are null and undefined
+---*/
+
+//CHECK#1
+if ((null ^ undefined) !== 0) {
+ $ERROR('#1: (null ^ undefined) === 0. Actual: ' + ((null ^ undefined)));
+}
+
+//CHECK#2
+if ((undefined ^ null) !== 0) {
+ $ERROR('#2: (undefined ^ null) === 0. Actual: ' + ((undefined ^ null)));
+}
+
+//CHECK#3
+if ((undefined ^ undefined) !== 0) {
+ $ERROR('#3: (undefined ^ undefined) === 0. Actual: ' + ((undefined ^ undefined)));
+}
+
+//CHECK#4
+if ((null ^ null) !== 0) {
+ $ERROR('#4: (null ^ null) === 0. Actual: ' + ((null ^ null)));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A3_T1.5.js b/js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A3_T1.5.js
new file mode 100644
index 0000000000..402e421682
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A3_T1.5.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Operator x ^ y returns ToNumber(x) ^ ToNumber(y)
+es5id: 11.10.2_A3_T1.5
+description: Type(x) and Type(y) are Object object and Function object
+---*/
+
+//CHECK#1
+if (({} ^ function(){return 1}) !== 0) {
+ $ERROR('#1: ({} ^ function(){return 1}) === 0. Actual: ' + (({} ^ function(){return 1})));
+}
+
+//CHECK#2
+if ((function(){return 1} ^ {}) !== 0) {
+ $ERROR('#2: (function(){return 1} ^ {}) === 0. Actual: ' + ((function(){return 1} ^ {})));
+}
+
+//CHECK#3
+if ((function(){return 1} ^ function(){return 1}) !== 0) {
+ $ERROR('#3: (function(){return 1} ^ function(){return 1}) === 0. Actual: ' + ((function(){return 1} ^ function(){return 1})));
+}
+
+//CHECK#4
+if (({} ^ {}) !== 0) {
+ $ERROR('#4: ({} ^ {}) === 0. Actual: ' + (({} ^ {})));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A3_T2.1.js b/js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A3_T2.1.js
new file mode 100644
index 0000000000..ac1ed26680
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A3_T2.1.js
@@ -0,0 +1,52 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Operator x ^ y returns ToNumber(x) ^ ToNumber(y)
+es5id: 11.10.2_A3_T2.1
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ Number (primitive or object) and Boolean (primitive and object)
+---*/
+
+//CHECK#1
+if ((true ^ 1) !== 0) {
+ $ERROR('#1: (true ^ 1) === 0. Actual: ' + ((true ^ 1)));
+}
+
+//CHECK#2
+if ((1 ^ true) !== 0) {
+ $ERROR('#2: (1 ^ true) === 0. Actual: ' + ((1 ^ true)));
+}
+
+//CHECK#3
+if ((new Boolean(true) ^ 1) !== 0) {
+ $ERROR('#3: (new Boolean(true) ^ 1) === 0. Actual: ' + ((new Boolean(true) ^ 1)));
+}
+
+//CHECK#4
+if ((1 ^ new Boolean(true)) !== 0) {
+ $ERROR('#4: (1 ^ new Boolean(true)) === 0. Actual: ' + ((1 ^ new Boolean(true))));
+}
+
+//CHECK#5
+if ((true ^ new Number(1)) !== 0) {
+ $ERROR('#5: (true ^ new Number(1)) === 0. Actual: ' + ((true ^ new Number(1))));
+}
+
+//CHECK#6
+if ((new Number(1) ^ true) !== 0) {
+ $ERROR('#6: (new Number(1) ^ true) === 0. Actual: ' + ((new Number(1) ^ true)));
+}
+
+//CHECK#7
+if ((new Boolean(true) ^ new Number(1)) !== 0) {
+ $ERROR('#7: (new Boolean(true) ^ new Number(1)) === 0. Actual: ' + ((new Boolean(true) ^ new Number(1))));
+}
+
+//CHECK#8
+if ((new Number(1) ^ new Boolean(true)) !== 0) {
+ $ERROR('#8: (new Number(1) ^ new Boolean(true)) === 0. Actual: ' + ((new Number(1) ^ new Boolean(true))));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A3_T2.2.js b/js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A3_T2.2.js
new file mode 100644
index 0000000000..c23f3e96ad
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A3_T2.2.js
@@ -0,0 +1,62 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Operator x ^ y returns ToNumber(x) ^ ToNumber(y)
+es5id: 11.10.2_A3_T2.2
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ Number (primitive or object) and String (primitive and object)
+---*/
+
+//CHECK#1
+if (("1" ^ 1) !== 0) {
+ $ERROR('#1: ("1" ^ 1) === 0. Actual: ' + (("1" ^ 1)));
+}
+
+//CHECK#2
+if ((1 ^ "1") !== 0) {
+ $ERROR('#2: (1 ^ "1") === 0. Actual: ' + ((1 ^ "1")));
+}
+
+//CHECK#3
+if ((new String("1") ^ 1) !== 0) {
+ $ERROR('#3: (new String("1") ^ 1) === 0. Actual: ' + ((new String("1") ^ 1)));
+}
+
+//CHECK#4
+if ((1 ^ new String("1")) !== 0) {
+ $ERROR('#4: (1 ^ new String("1")) === 0. Actual: ' + ((1 ^ new String("1"))));
+}
+
+//CHECK#5
+if (("1" ^ new Number(1)) !== 0) {
+ $ERROR('#5: ("1" ^ new Number(1)) === 0. Actual: ' + (("1" ^ new Number(1))));
+}
+
+//CHECK#6
+if ((new Number(1) ^ "1") !== 0) {
+ $ERROR('#6: (new Number(1) ^ "1") === 0. Actual: ' + ((new Number(1) ^ "1")));
+}
+
+//CHECK#7
+if ((new String("1") ^ new Number(1)) !== 0) {
+ $ERROR('#7: (new String("1") ^ new Number(1)) === 0. Actual: ' + ((new String("1") ^ new Number(1))));
+}
+
+//CHECK#8
+if ((new Number(1) ^ new String("1")) !== 0) {
+ $ERROR('#8: (new Number(1) ^ new String("1")) === 0. Actual: ' + ((new Number(1) ^ new String("1"))));
+}
+
+//CHECK#9
+if (("x" ^ 1) !== 1) {
+ $ERROR('#9: ("x" ^ 1) === 1. Actual: ' + (("x" ^ 1)));
+}
+
+//CHECK#10
+if ((1 ^ "x") !== 1) {
+ $ERROR('#10: (1 ^ "x") === 1. Actual: ' + ((1 ^ "x")));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A3_T2.3.js b/js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A3_T2.3.js
new file mode 100644
index 0000000000..41e93aa803
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A3_T2.3.js
@@ -0,0 +1,32 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Operator x ^ y returns ToNumber(x) ^ ToNumber(y)
+es5id: 11.10.2_A3_T2.3
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ Number (primitive or object) and Null
+---*/
+
+//CHECK#1
+if ((1 ^ null) !== 1) {
+ $ERROR('#1: (1 ^ null) === 1. Actual: ' + ((1 ^ null)));
+}
+
+//CHECK#2
+if ((null ^ 1) !== 1) {
+ $ERROR('#2: (null ^ 1) === 1. Actual: ' + ((null ^ 1)));
+}
+
+//CHECK#3
+if ((new Number(1) ^ null) !== 1) {
+ $ERROR('#3: (new Number(1) ^ null) === 1. Actual: ' + ((new Number(1) ^ null)));
+}
+
+//CHECK#4
+if ((null ^ new Number(1)) !== 1) {
+ $ERROR('#4: (null ^ new Number(1)) === 1. Actual: ' + ((null ^ new Number(1))));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A3_T2.4.js b/js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A3_T2.4.js
new file mode 100644
index 0000000000..d06bbb232c
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A3_T2.4.js
@@ -0,0 +1,32 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Operator x ^ y returns ToNumber(x) ^ ToNumber(y)
+es5id: 11.10.2_A3_T2.4
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ Number (primitive or object) and Undefined
+---*/
+
+//CHECK#1
+if ((1 ^ undefined) !== 1) {
+ $ERROR('#1: (1 ^ undefined) === 1. Actual: ' + ((1 ^ undefined)));
+}
+
+//CHECK#2
+if ((undefined ^ 1) !== 1) {
+ $ERROR('#2: (undefined ^ 1) === 1. Actual: ' + ((undefined ^ 1)));
+}
+
+//CHECK#3
+if ((new Number(1) ^ undefined) !== 1) {
+ $ERROR('#3: (new Number(1) ^ undefined) === 1. Actual: ' + ((new Number(1) ^ undefined)));
+}
+
+//CHECK#4
+if ((undefined ^ new Number(1)) !== 1) {
+ $ERROR('#4: (undefined ^ new Number(1)) === 1. Actual: ' + ((undefined ^ new Number(1))));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A3_T2.5.js b/js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A3_T2.5.js
new file mode 100644
index 0000000000..6c81dc7213
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A3_T2.5.js
@@ -0,0 +1,52 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Operator x ^ y returns ToNumber(x) ^ ToNumber(y)
+es5id: 11.10.2_A3_T2.5
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ String (primitive or object) and Boolean (primitive and object)
+---*/
+
+//CHECK#1
+if ((true ^ "1") !== 0) {
+ $ERROR('#1: (true ^ "1") === 0. Actual: ' + ((true ^ "1")));
+}
+
+//CHECK#2
+if (("1" ^ true) !== 0) {
+ $ERROR('#2: ("1" ^ true) === 0. Actual: ' + (("1" ^ true)));
+}
+
+//CHECK#3
+if ((new Boolean(true) ^ "1") !== 0) {
+ $ERROR('#3: (new Boolean(true) ^ "1") === 0. Actual: ' + ((new Boolean(true) ^ "1")));
+}
+
+//CHECK#4
+if (("1" ^ new Boolean(true)) !== 0) {
+ $ERROR('#4: ("1" ^ new Boolean(true)) === 0. Actual: ' + (("1" ^ new Boolean(true))));
+}
+
+//CHECK#5
+if ((true ^ new String("1")) !== 0) {
+ $ERROR('#5: (true ^ new String("1")) === 0. Actual: ' + ((true ^ new String("1"))));
+}
+
+//CHECK#6
+if ((new String("1") ^ true) !== 0) {
+ $ERROR('#6: (new String("1") ^ true) === 0. Actual: ' + ((new String("1") ^ true)));
+}
+
+//CHECK#7
+if ((new Boolean(true) ^ new String("1")) !== 0) {
+ $ERROR('#7: (new Boolean(true) ^ new String("1")) === 0. Actual: ' + ((new Boolean(true) ^ new String("1"))));
+}
+
+//CHECK#8
+if ((new String("1") ^ new Boolean(true)) !== 0) {
+ $ERROR('#8: (new String("1") ^ new Boolean(true)) === 0. Actual: ' + ((new String("1") ^ new Boolean(true))));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A3_T2.6.js b/js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A3_T2.6.js
new file mode 100644
index 0000000000..d837537ce0
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A3_T2.6.js
@@ -0,0 +1,32 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Operator x ^ y returns ToNumber(x) ^ ToNumber(y)
+es5id: 11.10.2_A3_T2.6
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ String (primitive or object) and Undefined
+---*/
+
+//CHECK#1
+if (("1" ^ undefined) !== 1) {
+ $ERROR('#1: ("1" ^ undefined) === 1. Actual: ' + (("1" ^ undefined)));
+}
+
+//CHECK#2
+if ((undefined ^ "1") !== 1) {
+ $ERROR('#2: (undefined ^ "1") === 1. Actual: ' + ((undefined ^ "1")));
+}
+
+//CHECK#3
+if ((new String("1") ^ undefined) !== 1) {
+ $ERROR('#3: (new String("1") ^ undefined) === 1. Actual: ' + ((new String("1") ^ undefined)));
+}
+
+//CHECK#4
+if ((undefined ^ new String("1")) !== 1) {
+ $ERROR('#4: (undefined ^ new String("1")) === 1. Actual: ' + ((undefined ^ new String("1"))));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A3_T2.7.js b/js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A3_T2.7.js
new file mode 100644
index 0000000000..0f62e8dd60
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A3_T2.7.js
@@ -0,0 +1,32 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Operator x ^ y returns ToNumber(x) ^ ToNumber(y)
+es5id: 11.10.2_A3_T2.7
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ String (primitive or object) and Null
+---*/
+
+//CHECK#1
+if (("1" ^ null) !== 1) {
+ $ERROR('#1: ("1" ^ null) === 1. Actual: ' + (("1" ^ null)));
+}
+
+//CHECK#2
+if ((null ^ "1") !== 1) {
+ $ERROR('#2: (null ^ "1") === 1. Actual: ' + ((null ^ "1")));
+}
+
+//CHECK#3
+if ((new String("1") ^ null) !== 1) {
+ $ERROR('#3: (new String("1") ^ null) === 1. Actual: ' + ((new String("1") ^ null)));
+}
+
+//CHECK#4
+if ((null ^ new String("1")) !== 1) {
+ $ERROR('#4: (null ^ new String("1")) === 1. Actual: ' + ((null ^ new String("1"))));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A3_T2.8.js b/js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A3_T2.8.js
new file mode 100644
index 0000000000..35a12e6b43
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A3_T2.8.js
@@ -0,0 +1,32 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Operator x ^ y returns ToNumber(x) ^ ToNumber(y)
+es5id: 11.10.2_A3_T2.8
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ Boolean (primitive or object) and Undefined
+---*/
+
+//CHECK#1
+if ((true ^ undefined) !== 1) {
+ $ERROR('#1: (true ^ undefined) === 1. Actual: ' + ((true ^ undefined)));
+}
+
+//CHECK#2
+if ((undefined ^ true) !== 1) {
+ $ERROR('#2: (undefined ^ true) === 1. Actual: ' + ((undefined ^ true)));
+}
+
+//CHECK#3
+if ((new Boolean(true) ^ undefined) !== 1) {
+ $ERROR('#3: (new Boolean(true) ^ undefined) === 1. Actual: ' + ((new Boolean(true) ^ undefined)));
+}
+
+//CHECK#4
+if ((undefined ^ new Boolean(true)) !== 1) {
+ $ERROR('#4: (undefined ^ new Boolean(true)) === 1. Actual: ' + ((undefined ^ new Boolean(true))));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A3_T2.9.js b/js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A3_T2.9.js
new file mode 100644
index 0000000000..1840d9c39b
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/bitwise-xor/S11.10.2_A3_T2.9.js
@@ -0,0 +1,32 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Operator x ^ y returns ToNumber(x) ^ ToNumber(y)
+es5id: 11.10.2_A3_T2.9
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ Boolean (primitive or object) and Null
+---*/
+
+//CHECK#1
+if ((true ^ null) !== 1) {
+ $ERROR('#1: (true ^ null) === 1. Actual: ' + ((true ^ null)));
+}
+
+//CHECK#2
+if ((null ^ true) !== 1) {
+ $ERROR('#2: (null ^ true) === 1. Actual: ' + ((null ^ true)));
+}
+
+//CHECK#3
+if ((new Boolean(true) ^ null) !== 1) {
+ $ERROR('#3: (new Boolean(true) ^ null) === 1. Actual: ' + ((new Boolean(true) ^ null)));
+}
+
+//CHECK#4
+if ((null ^ new Boolean(true)) !== 1) {
+ $ERROR('#4: (null ^ new Boolean(true)) === 1. Actual: ' + ((null ^ new Boolean(true))));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/bitwise-xor/bigint-and-number.js b/js/src/tests/test262/language/expressions/bitwise-xor/bigint-and-number.js
new file mode 100644
index 0000000000..7e313c53cd
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/bitwise-xor/bigint-and-number.js
@@ -0,0 +1,92 @@
+// Copyright (C) 2018 Igalia, S.L. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-binary-bitwise-operators-runtime-semantics-evaluation
+description: Mixing BigInt and Number produces a TypeError for bitwise-xor operator
+features: [BigInt]
+info: |
+ Let lnum be ? ToNumeric(leftValue).
+ Let rnum be ? ToNumeric(rightValue).
+ If Type(lnum) does not equal Type(rnum), throw a TypeError exception.
+---*/
+assert.throws(TypeError, function() {
+ 1n ^ 1;
+}, '1n ^ 1 throws TypeError');
+
+assert.throws(TypeError, function() {
+ 1 ^ 1n;
+}, '1 ^ 1n throws TypeError');
+
+assert.throws(TypeError, function() {
+ Object(1n) ^ 1;
+}, 'Object(1n) ^ 1 throws TypeError');
+
+assert.throws(TypeError, function() {
+ 1 ^ Object(1n);
+}, '1 ^ Object(1n) throws TypeError');
+
+assert.throws(TypeError, function() {
+ 1n ^ Object(1);
+}, '1n ^ Object(1) throws TypeError');
+
+assert.throws(TypeError, function() {
+ Object(1) ^ 1n;
+}, 'Object(1) ^ 1n throws TypeError');
+
+assert.throws(TypeError, function() {
+ Object(1n) ^ Object(1);
+}, 'Object(1n) ^ Object(1) throws TypeError');
+
+assert.throws(TypeError, function() {
+ Object(1) ^ Object(1n);
+}, 'Object(1) ^ Object(1n) throws TypeError');
+
+assert.throws(TypeError, function() {
+ 1n ^ NaN;
+}, '1n ^ NaN throws TypeError');
+
+assert.throws(TypeError, function() {
+ NaN ^ 1n;
+}, 'NaN ^ 1n throws TypeError');
+
+assert.throws(TypeError, function() {
+ 1n ^ Infinity;
+}, '1n ^ Infinity throws TypeError');
+
+assert.throws(TypeError, function() {
+ Infinity ^ 1n;
+}, 'Infinity ^ 1n throws TypeError');
+
+assert.throws(TypeError, function() {
+ 1n ^ true;
+}, '1n ^ true throws TypeError');
+
+assert.throws(TypeError, function() {
+ true ^ 1n;
+}, 'true ^ 1n throws TypeError');
+
+assert.throws(TypeError, function() {
+ 1n ^ '1';
+}, '1n ^ "1" throws TypeError');
+
+assert.throws(TypeError, function() {
+ '1' ^ 1n;
+}, '"1" ^ 1n throws TypeError');
+
+assert.throws(TypeError, function() {
+ 1n ^ null;
+}, '1n ^ null throws TypeError');
+
+assert.throws(TypeError, function() {
+ null ^ 1n;
+}, 'null ^ 1n throws TypeError');
+
+assert.throws(TypeError, function() {
+ 1n ^ undefined;
+}, '1n ^ undefined throws TypeError');
+
+assert.throws(TypeError, function() {
+ undefined ^ 1n;
+}, 'undefined ^ 1n throws TypeError');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/bitwise-xor/bigint-errors.js b/js/src/tests/test262/language/expressions/bitwise-xor/bigint-errors.js
new file mode 100644
index 0000000000..0681bb50e3
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/bitwise-xor/bigint-errors.js
@@ -0,0 +1,72 @@
+// Copyright (C) 2017 Josh Wolfe. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: bitwise-xor operator ToNumeric with BigInt operands
+esid: sec-binary-bitwise-operators-runtime-semantics-evaluation
+features: [BigInt, Symbol, Symbol.toPrimitive, computed-property-names]
+---*/
+assert.throws(TypeError, function() {
+ Symbol('1') ^ 0n;
+}, 'Symbol("1") ^ 0n throws TypeError');
+
+assert.throws(TypeError, function() {
+ 0n ^ Symbol('1');
+}, '0n ^ Symbol("1") throws TypeError');
+
+assert.throws(TypeError, function() {
+ Object(Symbol('1')) ^ 0n;
+}, 'Object(Symbol("1")) ^ 0n throws TypeError');
+
+assert.throws(TypeError, function() {
+ 0n ^ Object(Symbol('1'));
+}, '0n ^ Object(Symbol("1")) throws TypeError');
+
+assert.throws(TypeError, function() {
+ ({
+ [Symbol.toPrimitive]: function() {
+ return Symbol('1');
+ }
+ }) ^ 0n;
+}, '({[Symbol.toPrimitive]: function() {return Symbol("1");}}) ^ 0n throws TypeError');
+
+assert.throws(TypeError, function() {
+ 0n ^ {
+ [Symbol.toPrimitive]: function() {
+ return Symbol('1');
+ }
+ };
+}, '0n ^ {[Symbol.toPrimitive]: function() {return Symbol("1");}} throws TypeError');
+
+assert.throws(TypeError, function() {
+ ({
+ valueOf: function() {
+ return Symbol('1');
+ }
+ }) ^ 0n;
+}, '({valueOf: function() {return Symbol("1");}}) ^ 0n throws TypeError');
+
+assert.throws(TypeError, function() {
+ 0n ^ {
+ valueOf: function() {
+ return Symbol('1');
+ }
+ };
+}, '0n ^ {valueOf: function() {return Symbol("1");}} throws TypeError');
+
+assert.throws(TypeError, function() {
+ ({
+ toString: function() {
+ return Symbol('1');
+ }
+ }) ^ 0n;
+}, '({toString: function() {return Symbol("1");}}) ^ 0n throws TypeError');
+
+assert.throws(TypeError, function() {
+ 0n ^ {
+ toString: function() {
+ return Symbol('1');
+ }
+ };
+}, '0n ^ {toString: function() {return Symbol("1");}} throws TypeError');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/bitwise-xor/bigint-non-primitive.js b/js/src/tests/test262/language/expressions/bitwise-xor/bigint-non-primitive.js
new file mode 100644
index 0000000000..9d421fc66e
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/bitwise-xor/bigint-non-primitive.js
@@ -0,0 +1,84 @@
+// Copyright (C) 2017 Josh Wolfe. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Bitwise XOR for BigInt non-primitive values
+esid: sec-binary-bitwise-operators-runtime-semantics-evaluation
+info: |
+ 5. Let lnum be ? ToNumeric(lval).
+ 6. Let rnum be ? ToNumeric(rval).
+ ...
+ 8. Let T be Type(lnum).
+ ...
+ 11. Otherwise, @ is ^; return T::bitwiseXOR(lnum, rnum).
+
+features: [BigInt]
+---*/
+assert.sameValue(
+ Object(0b101n) ^ 0b011n,
+ 0b110n,
+ 'The result of (Object(0b101n) ^ 0b011n) is 0b110n'
+);
+
+assert.sameValue(
+ 0b011n ^ Object(0b101n),
+ 0b110n,
+ 'The result of (0b011n ^ Object(0b101n)) is 0b110n'
+);
+
+assert.sameValue(
+ Object(0b101n) ^ Object(0b011n),
+ 0b110n,
+ 'The result of (Object(0b101n) ^ Object(0b011n)) is 0b110n'
+);
+
+function err() {
+ throw new Test262Error();
+}
+
+assert.sameValue({
+ [Symbol.toPrimitive]: function() {
+ return 0b101n;
+ },
+
+ valueOf: err,
+ toString: err
+} ^ 0b011n, 0b110n, 'The result of (({[Symbol.toPrimitive]: function() {return 0b101n;}, valueOf: err, toString: err}) ^ 0b011n) is 0b110n');
+
+assert.sameValue(0b011n ^ {
+ [Symbol.toPrimitive]: function() {
+ return 0b101n;
+ },
+
+ valueOf: err,
+ toString: err
+}, 0b110n, 'The result of (0b011n ^ {[Symbol.toPrimitive]: function() {return 0b101n;}, valueOf: err, toString: err}) is 0b110n');
+
+assert.sameValue({
+ valueOf: function() {
+ return 0b101n;
+ },
+
+ toString: err
+} ^ 0b011n, 0b110n, 'The result of (({valueOf: function() {return 0b101n;}, toString: err}) ^ 0b011n) is 0b110n');
+
+assert.sameValue(0b011n ^ {
+ valueOf: function() {
+ return 0b101n;
+ },
+
+ toString: err
+}, 0b110n, 'The result of (0b011n ^ {valueOf: function() {return 0b101n;}, toString: err}) is 0b110n');
+
+assert.sameValue({
+ toString: function() {
+ return 0b101n;
+ }
+} ^ 0b011n, 0b110n, 'The result of (({toString: function() {return 0b101n;}}) ^ 0b011n) is 0b110n');
+
+assert.sameValue(0b011n ^ {
+ toString: function() {
+ return 0b101n;
+ }
+}, 0b110n, 'The result of (0b011n ^ {toString: function() {return 0b101n;}}) is 0b110n');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/bitwise-xor/bigint-toprimitive.js b/js/src/tests/test262/language/expressions/bitwise-xor/bigint-toprimitive.js
new file mode 100644
index 0000000000..e42e9b4837
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/bitwise-xor/bigint-toprimitive.js
@@ -0,0 +1,374 @@
+// Copyright (C) 2017 Josh Wolfe. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: bitwise-xor operator ToNumeric with BigInt operands
+esid: sec-binary-bitwise-operators-runtime-semantics-evaluation
+features: [BigInt, Symbol.toPrimitive, computed-property-names]
+---*/
+function err() {
+ throw new Test262Error();
+}
+
+function MyError() {}
+
+assert.sameValue({
+ [Symbol.toPrimitive]: function() {
+ return 2n;
+ },
+
+ valueOf: err,
+ toString: err
+} ^ 3n, 1n, 'The result of (({[Symbol.toPrimitive]: function() {return 2n;}, valueOf: err, toString: err}) ^ 3n) is 1n');
+
+assert.sameValue(3n ^ {
+ [Symbol.toPrimitive]: function() {
+ return 2n;
+ },
+
+ valueOf: err,
+ toString: err
+}, 1n, 'The result of (3n ^ {[Symbol.toPrimitive]: function() {return 2n;}, valueOf: err, toString: err}) is 1n');
+
+assert.sameValue({
+ valueOf: function() {
+ return 2n;
+ },
+
+ toString: err
+} ^ 3n, 1n, 'The result of (({valueOf: function() {return 2n;}, toString: err}) ^ 3n) is 1n');
+
+assert.sameValue(3n ^ {
+ valueOf: function() {
+ return 2n;
+ },
+
+ toString: err
+}, 1n, 'The result of (3n ^ {valueOf: function() {return 2n;}, toString: err}) is 1n');
+
+assert.sameValue({
+ toString: function() {
+ return 2n;
+ }
+} ^ 3n, 1n, 'The result of (({toString: function() {return 2n;}}) ^ 3n) is 1n');
+
+assert.sameValue(3n ^ {
+ toString: function() {
+ return 2n;
+ }
+}, 1n, 'The result of (3n ^ {toString: function() {return 2n;}}) is 1n');
+
+assert.sameValue({
+ [Symbol.toPrimitive]: undefined,
+
+ valueOf: function() {
+ return 2n;
+ }
+} ^ 3n, 1n, 'The result of (({[Symbol.toPrimitive]: undefined, valueOf: function() {return 2n;}}) ^ 3n) is 1n');
+
+assert.sameValue(3n ^ {
+ [Symbol.toPrimitive]: undefined,
+
+ valueOf: function() {
+ return 2n;
+ }
+}, 1n, 'The result of (3n ^ {[Symbol.toPrimitive]: undefined, valueOf: function() {return 2n;}}) is 1n');
+
+assert.sameValue({
+ [Symbol.toPrimitive]: null,
+
+ valueOf: function() {
+ return 2n;
+ }
+} ^ 3n, 1n, 'The result of (({[Symbol.toPrimitive]: null, valueOf: function() {return 2n;}}) ^ 3n) is 1n');
+
+assert.sameValue(3n ^ {
+ [Symbol.toPrimitive]: null,
+
+ valueOf: function() {
+ return 2n;
+ }
+}, 1n, 'The result of (3n ^ {[Symbol.toPrimitive]: null, valueOf: function() {return 2n;}}) is 1n');
+
+assert.sameValue({
+ valueOf: null,
+
+ toString: function() {
+ return 2n;
+ }
+} ^ 3n, 1n, 'The result of (({valueOf: null, toString: function() {return 2n;}}) ^ 3n) is 1n');
+
+assert.sameValue(3n ^ {
+ valueOf: null,
+
+ toString: function() {
+ return 2n;
+ }
+}, 1n, 'The result of (3n ^ {valueOf: null, toString: function() {return 2n;}}) is 1n');
+
+assert.sameValue({
+ valueOf: 1,
+
+ toString: function() {
+ return 2n;
+ }
+} ^ 3n, 1n, 'The result of (({valueOf: 1, toString: function() {return 2n;}}) ^ 3n) is 1n');
+
+assert.sameValue(3n ^ {
+ valueOf: 1,
+
+ toString: function() {
+ return 2n;
+ }
+}, 1n, 'The result of (3n ^ {valueOf: 1, toString: function() {return 2n;}}) is 1n');
+
+assert.sameValue({
+ valueOf: {},
+
+ toString: function() {
+ return 2n;
+ }
+} ^ 3n, 1n, 'The result of (({valueOf: {}, toString: function() {return 2n;}}) ^ 3n) is 1n');
+
+assert.sameValue(3n ^ {
+ valueOf: {},
+
+ toString: function() {
+ return 2n;
+ }
+}, 1n, 'The result of (3n ^ {valueOf: {}, toString: function() {return 2n;}}) is 1n');
+
+assert.sameValue({
+ valueOf: function() {
+ return {};
+ },
+
+ toString: function() {
+ return 2n;
+ }
+} ^ 3n, 1n, 'The result of (({valueOf: function() {return {};}, toString: function() {return 2n;}}) ^ 3n) is 1n');
+
+assert.sameValue(3n ^ {
+ valueOf: function() {
+ return {};
+ },
+
+ toString: function() {
+ return 2n;
+ }
+}, 1n, 'The result of (3n ^ {valueOf: function() {return {};}, toString: function() {return 2n;}}) is 1n');
+
+assert.sameValue({
+ valueOf: function() {
+ return Object(12345);
+ },
+
+ toString: function() {
+ return 2n;
+ }
+} ^ 3n, 1n, 'The result of (({valueOf: function() {return Object(12345);}, toString: function() {return 2n;}}) ^ 3n) is 1n');
+
+assert.sameValue(3n ^ {
+ valueOf: function() {
+ return Object(12345);
+ },
+
+ toString: function() {
+ return 2n;
+ }
+}, 1n, 'The result of (3n ^ {valueOf: function() {return Object(12345);}, toString: function() {return 2n;}}) is 1n');
+
+assert.throws(TypeError, function() {
+ ({
+ [Symbol.toPrimitive]: 1
+ }) ^ 0n;
+}, '({[Symbol.toPrimitive]: 1}) ^ 0n throws TypeError');
+
+assert.throws(TypeError, function() {
+ 0n ^ {
+ [Symbol.toPrimitive]: 1
+ };
+}, '0n ^ {[Symbol.toPrimitive]: 1} throws TypeError');
+
+assert.throws(TypeError, function() {
+ ({
+ [Symbol.toPrimitive]: {}
+ }) ^ 0n;
+}, '({[Symbol.toPrimitive]: {}}) ^ 0n throws TypeError');
+
+assert.throws(TypeError, function() {
+ 0n ^ {
+ [Symbol.toPrimitive]: {}
+ };
+}, '0n ^ {[Symbol.toPrimitive]: {}} throws TypeError');
+
+assert.throws(TypeError, function() {
+ ({
+ [Symbol.toPrimitive]: function() {
+ return Object(1);
+ }
+ }) ^ 0n;
+}, '({[Symbol.toPrimitive]: function() {return Object(1);}}) ^ 0n throws TypeError');
+
+assert.throws(TypeError, function() {
+ 0n ^ {
+ [Symbol.toPrimitive]: function() {
+ return Object(1);
+ }
+ };
+}, '0n ^ {[Symbol.toPrimitive]: function() {return Object(1);}} throws TypeError');
+
+assert.throws(TypeError, function() {
+ ({
+ [Symbol.toPrimitive]: function() {
+ return {};
+ }
+ }) ^ 0n;
+}, '({[Symbol.toPrimitive]: function() {return {};}}) ^ 0n throws TypeError');
+
+assert.throws(TypeError, function() {
+ 0n ^ {
+ [Symbol.toPrimitive]: function() {
+ return {};
+ }
+ };
+}, '0n ^ {[Symbol.toPrimitive]: function() {return {};}} throws TypeError');
+
+assert.throws(MyError, function() {
+ ({
+ [Symbol.toPrimitive]: function() {
+ throw new MyError();
+ }
+ }) ^ 0n;
+}, '({[Symbol.toPrimitive]: function() {throw new MyError();}}) ^ 0n throws MyError');
+
+assert.throws(MyError, function() {
+ 0n ^ {
+ [Symbol.toPrimitive]: function() {
+ throw new MyError();
+ }
+ };
+}, '0n ^ {[Symbol.toPrimitive]: function() {throw new MyError();}} throws MyError');
+
+assert.throws(MyError, function() {
+ ({
+ valueOf: function() {
+ throw new MyError();
+ }
+ }) ^ 0n;
+}, '({valueOf: function() {throw new MyError();}}) ^ 0n throws MyError');
+
+assert.throws(MyError, function() {
+ 0n ^ {
+ valueOf: function() {
+ throw new MyError();
+ }
+ };
+}, '0n ^ {valueOf: function() {throw new MyError();}} throws MyError');
+
+assert.throws(MyError, function() {
+ ({
+ toString: function() {
+ throw new MyError();
+ }
+ }) ^ 0n;
+}, '({toString: function() {throw new MyError();}}) ^ 0n throws MyError');
+
+assert.throws(MyError, function() {
+ 0n ^ {
+ toString: function() {
+ throw new MyError();
+ }
+ };
+}, '0n ^ {toString: function() {throw new MyError();}} throws MyError');
+
+assert.throws(TypeError, function() {
+ ({
+ valueOf: null,
+ toString: null
+ }) ^ 0n;
+}, '({valueOf: null, toString: null}) ^ 0n throws TypeError');
+
+assert.throws(TypeError, function() {
+ 0n ^ {
+ valueOf: null,
+ toString: null
+ };
+}, '0n ^ {valueOf: null, toString: null} throws TypeError');
+
+assert.throws(TypeError, function() {
+ ({
+ valueOf: 1,
+ toString: 1
+ }) ^ 0n;
+}, '({valueOf: 1, toString: 1}) ^ 0n throws TypeError');
+
+assert.throws(TypeError, function() {
+ 0n ^ {
+ valueOf: 1,
+ toString: 1
+ };
+}, '0n ^ {valueOf: 1, toString: 1} throws TypeError');
+
+assert.throws(TypeError, function() {
+ ({
+ valueOf: {},
+ toString: {}
+ }) ^ 0n;
+}, '({valueOf: {}, toString: {}}) ^ 0n throws TypeError');
+
+assert.throws(TypeError, function() {
+ 0n ^ {
+ valueOf: {},
+ toString: {}
+ };
+}, '0n ^ {valueOf: {}, toString: {}} throws TypeError');
+
+assert.throws(TypeError, function() {
+ ({
+ valueOf: function() {
+ return Object(1);
+ },
+
+ toString: function() {
+ return Object(1);
+ }
+ }) ^ 0n;
+}, '({valueOf: function() {return Object(1);}, toString: function() {return Object(1);}}) ^ 0n throws TypeError');
+
+assert.throws(TypeError, function() {
+ 0n ^ {
+ valueOf: function() {
+ return Object(1);
+ },
+
+ toString: function() {
+ return Object(1);
+ }
+ };
+}, '0n ^ {valueOf: function() {return Object(1);}, toString: function() {return Object(1);}} throws TypeError');
+
+assert.throws(TypeError, function() {
+ ({
+ valueOf: function() {
+ return {};
+ },
+
+ toString: function() {
+ return {};
+ }
+ }) ^ 0n;
+}, '({valueOf: function() {return {};}, toString: function() {return {};}}) ^ 0n throws TypeError');
+
+assert.throws(TypeError, function() {
+ 0n ^ {
+ valueOf: function() {
+ return {};
+ },
+
+ toString: function() {
+ return {};
+ }
+ };
+}, '0n ^ {valueOf: function() {return {};}, toString: function() {return {};}} throws TypeError');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/bitwise-xor/bigint-wrapped-values.js b/js/src/tests/test262/language/expressions/bitwise-xor/bigint-wrapped-values.js
new file mode 100644
index 0000000000..853b67f60d
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/bitwise-xor/bigint-wrapped-values.js
@@ -0,0 +1,47 @@
+// Copyright (C) 2017 Josh Wolfe. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: bitwise-xor operator ToNumeric with BigInt operands
+esid: sec-binary-bitwise-operators-runtime-semantics-evaluation
+features: [BigInt, Symbol.toPrimitive, computed-property-names]
+---*/
+assert.sameValue(Object(2n) ^ 3n, 1n, 'The result of (Object(2n) ^ 3n) is 1n');
+assert.sameValue(3n ^ Object(2n), 1n, 'The result of (3n ^ Object(2n)) is 1n');
+
+assert.sameValue({
+ [Symbol.toPrimitive]: function() {
+ return 2n;
+ }
+} ^ 3n, 1n, 'The result of (({[Symbol.toPrimitive]: function() {return 2n;}}) ^ 3n) is 1n');
+
+assert.sameValue(3n ^ {
+ [Symbol.toPrimitive]: function() {
+ return 2n;
+ }
+}, 1n, 'The result of (3n ^ {[Symbol.toPrimitive]: function() {return 2n;}}) is 1n');
+
+assert.sameValue({
+ valueOf: function() {
+ return 2n;
+ }
+} ^ 3n, 1n, 'The result of (({valueOf: function() {return 2n;}}) ^ 3n) is 1n');
+
+assert.sameValue(3n ^ {
+ valueOf: function() {
+ return 2n;
+ }
+}, 1n, 'The result of (3n ^ {valueOf: function() {return 2n;}}) is 1n');
+
+assert.sameValue({
+ toString: function() {
+ return 2n;
+ }
+} ^ 3n, 1n, 'The result of (({toString: function() {return 2n;}}) ^ 3n) is 1n');
+
+assert.sameValue(3n ^ {
+ toString: function() {
+ return 2n;
+ }
+}, 1n, 'The result of (3n ^ {toString: function() {return 2n;}}) is 1n');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/bitwise-xor/bigint.js b/js/src/tests/test262/language/expressions/bitwise-xor/bigint.js
new file mode 100644
index 0000000000..b1d513c95f
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/bitwise-xor/bigint.js
@@ -0,0 +1,109 @@
+// Copyright (C) 2017 Josh Wolfe. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Bitwise XOR for BigInt values
+esid: sec-bitwise-op
+info: |
+ BitwiseOp(op, x, y)
+
+ 1. Let result be 0.
+ 2. Let shift be 0.
+ 3. Repeat, until (x = 0 or x = -1) and (y = 0 or y = -1),
+ a. Let xDigit be x modulo 2.
+ b. Let yDigit be y modulo 2.
+ c. Let result be result + 2**shift * op(xDigit, yDigit)
+ d. Let shift be shift + 1.
+ e. Let x be (x - xDigit) / 2.
+ f. Let y be (y - yDigit) / 2.
+ 4. If op(x modulo 2, y modulo 2) ≠ 0,
+ a. Let result be result - 2**shift. NOTE: This extends the sign.
+ 5. Return result.
+
+features: [BigInt]
+---*/
+
+assert.sameValue(0b00n ^ 0b00n, 0b00n, "0b00n ^ 0b00n === 0b00n");
+assert.sameValue(0b00n ^ 0b01n, 0b01n, "0b00n ^ 0b01n === 0b01n");
+assert.sameValue(0b01n ^ 0b00n, 0b01n, "0b01n ^ 0b00n === 0b01n");
+assert.sameValue(0b00n ^ 0b10n, 0b10n, "0b00n ^ 0b10n === 0b10n");
+assert.sameValue(0b10n ^ 0b00n, 0b10n, "0b10n ^ 0b00n === 0b10n");
+assert.sameValue(0b00n ^ 0b11n, 0b11n, "0b00n ^ 0b11n === 0b11n");
+assert.sameValue(0b11n ^ 0b00n, 0b11n, "0b11n ^ 0b00n === 0b11n");
+assert.sameValue(0b01n ^ 0b01n, 0b00n, "0b01n ^ 0b01n === 0b00n");
+assert.sameValue(0b01n ^ 0b10n, 0b11n, "0b01n ^ 0b10n === 0b11n");
+assert.sameValue(0b10n ^ 0b01n, 0b11n, "0b10n ^ 0b01n === 0b11n");
+assert.sameValue(0b01n ^ 0b11n, 0b10n, "0b01n ^ 0b11n === 0b10n");
+assert.sameValue(0b11n ^ 0b01n, 0b10n, "0b11n ^ 0b01n === 0b10n");
+assert.sameValue(0b10n ^ 0b10n, 0b00n, "0b10n ^ 0b10n === 0b00n");
+assert.sameValue(0b10n ^ 0b11n, 0b01n, "0b10n ^ 0b11n === 0b01n");
+assert.sameValue(0b11n ^ 0b10n, 0b01n, "0b11n ^ 0b10n === 0b01n");
+assert.sameValue(0xffffffffn ^ 0n, 0xffffffffn, "0xffffffffn ^ 0n === 0xffffffffn");
+assert.sameValue(0n ^ 0xffffffffn, 0xffffffffn, "0n ^ 0xffffffffn === 0xffffffffn");
+assert.sameValue(0xffffffffn ^ 0xffffffffn, 0n, "0xffffffffn ^ 0xffffffffn === 0n");
+assert.sameValue(0xffffffffffffffffn ^ 0n, 0xffffffffffffffffn, "0xffffffffffffffffn ^ 0n === 0xffffffffffffffffn");
+assert.sameValue(0n ^ 0xffffffffffffffffn, 0xffffffffffffffffn, "0n ^ 0xffffffffffffffffn === 0xffffffffffffffffn");
+assert.sameValue(0xffffffffffffffffn ^ 0xffffffffn, 0xffffffff00000000n, "0xffffffffffffffffn ^ 0xffffffffn === 0xffffffff00000000n");
+assert.sameValue(0xffffffffn ^ 0xffffffffffffffffn, 0xffffffff00000000n, "0xffffffffn ^ 0xffffffffffffffffn === 0xffffffff00000000n");
+assert.sameValue(
+ 0xffffffffffffffffn ^ 0xffffffffffffffffn, 0n,
+ "0xffffffffffffffffn ^ 0xffffffffffffffffn === 0n");
+assert.sameValue(
+ 0xbf2ed51ff75d380fd3be813ec6185780n ^ 0x4aabef2324cedff5387f1f65n, 0xbf2ed51fbdf6d72cf7705ecbfe6748e5n,
+ "0xbf2ed51ff75d380fd3be813ec6185780n ^ 0x4aabef2324cedff5387f1f65n === 0xbf2ed51fbdf6d72cf7705ecbfe6748e5n");
+assert.sameValue(
+ 0x4aabef2324cedff5387f1f65n ^ 0xbf2ed51ff75d380fd3be813ec6185780n, 0xbf2ed51fbdf6d72cf7705ecbfe6748e5n,
+ "0x4aabef2324cedff5387f1f65n ^ 0xbf2ed51ff75d380fd3be813ec6185780n === 0xbf2ed51fbdf6d72cf7705ecbfe6748e5n");
+assert.sameValue(0n ^ -1n, -1n, "0n ^ -1n === -1n");
+assert.sameValue(-1n ^ 0n, -1n, "-1n ^ 0n === -1n");
+assert.sameValue(0n ^ -2n, -2n, "0n ^ -2n === -2n");
+assert.sameValue(-2n ^ 0n, -2n, "-2n ^ 0n === -2n");
+assert.sameValue(1n ^ -2n, -1n, "1n ^ -2n === -1n");
+assert.sameValue(-2n ^ 1n, -1n, "-2n ^ 1n === -1n");
+assert.sameValue(2n ^ -2n, -4n, "2n ^ -2n === -4n");
+assert.sameValue(-2n ^ 2n, -4n, "-2n ^ 2n === -4n");
+assert.sameValue(2n ^ -3n, -1n, "2n ^ -3n === -1n");
+assert.sameValue(-3n ^ 2n, -1n, "-3n ^ 2n === -1n");
+assert.sameValue(-1n ^ -2n, 1n, "-1n ^ -2n === 1n");
+assert.sameValue(-2n ^ -1n, 1n, "-2n ^ -1n === 1n");
+assert.sameValue(-2n ^ -2n, 0n, "-2n ^ -2n === 0n");
+assert.sameValue(-2n ^ -3n, 3n, "-2n ^ -3n === 3n");
+assert.sameValue(-3n ^ -2n, 3n, "-3n ^ -2n === 3n");
+assert.sameValue(0xffffffffn ^ -1n, -0x100000000n, "0xffffffffn ^ -1n === -0x100000000n");
+assert.sameValue(-1n ^ 0xffffffffn, -0x100000000n, "-1n ^ 0xffffffffn === -0x100000000n");
+assert.sameValue(0xffffffffffffffffn ^ -1n, -0x10000000000000000n, "0xffffffffffffffffn ^ -1n === -0x10000000000000000n");
+assert.sameValue(-1n ^ 0xffffffffffffffffn, -0x10000000000000000n, "-1n ^ 0xffffffffffffffffn === -0x10000000000000000n");
+assert.sameValue(
+ 0xbf2ed51ff75d380fd3be813ec6185780n ^ -0x4aabef2324cedff5387f1f65n, -0xbf2ed51fbdf6d72cf7705ecbfe6748e5n,
+ "0xbf2ed51ff75d380fd3be813ec6185780n ^ -0x4aabef2324cedff5387f1f65n === -0xbf2ed51fbdf6d72cf7705ecbfe6748e5n");
+assert.sameValue(
+ -0x4aabef2324cedff5387f1f65n ^ 0xbf2ed51ff75d380fd3be813ec6185780n, -0xbf2ed51fbdf6d72cf7705ecbfe6748e5n,
+ "-0x4aabef2324cedff5387f1f65n ^ 0xbf2ed51ff75d380fd3be813ec6185780n === -0xbf2ed51fbdf6d72cf7705ecbfe6748e5n");
+assert.sameValue(
+ -0xbf2ed51ff75d380fd3be813ec6185780n ^ 0x4aabef2324cedff5387f1f65n, -0xbf2ed51fbdf6d72cf7705ecbfe67481bn,
+ "-0xbf2ed51ff75d380fd3be813ec6185780n ^ 0x4aabef2324cedff5387f1f65n === -0xbf2ed51fbdf6d72cf7705ecbfe67481bn");
+assert.sameValue(
+ 0x4aabef2324cedff5387f1f65n ^ -0xbf2ed51ff75d380fd3be813ec6185780n, -0xbf2ed51fbdf6d72cf7705ecbfe67481bn,
+ "0x4aabef2324cedff5387f1f65n ^ -0xbf2ed51ff75d380fd3be813ec6185780n === -0xbf2ed51fbdf6d72cf7705ecbfe67481bn");
+assert.sameValue(
+ -0xbf2ed51ff75d380fd3be813ec6185780n ^ -0x4aabef2324cedff5387f1f65n, 0xbf2ed51fbdf6d72cf7705ecbfe67481bn,
+ "-0xbf2ed51ff75d380fd3be813ec6185780n ^ -0x4aabef2324cedff5387f1f65n === 0xbf2ed51fbdf6d72cf7705ecbfe67481bn");
+assert.sameValue(
+ -0x4aabef2324cedff5387f1f65n ^ -0xbf2ed51ff75d380fd3be813ec6185780n, 0xbf2ed51fbdf6d72cf7705ecbfe67481bn,
+ "-0x4aabef2324cedff5387f1f65n ^ -0xbf2ed51ff75d380fd3be813ec6185780n === 0xbf2ed51fbdf6d72cf7705ecbfe67481bn");
+assert.sameValue(-0xffffffffn ^ 0n, -0xffffffffn, "-0xffffffffn ^ 0n === -0xffffffffn");
+assert.sameValue(0n ^ -0xffffffffn, -0xffffffffn, "0n ^ -0xffffffffn === -0xffffffffn");
+assert.sameValue(
+ -0xffffffffffffffffn ^ 0x10000000000000000n, -0x1ffffffffffffffffn,
+ "-0xffffffffffffffffn ^ 0x10000000000000000n === -0x1ffffffffffffffffn");
+assert.sameValue(
+ 0x10000000000000000n ^ -0xffffffffffffffffn, -0x1ffffffffffffffffn,
+ "0x10000000000000000n ^ -0xffffffffffffffffn === -0x1ffffffffffffffffn");
+assert.sameValue(
+ -0xffffffffffffffffffffffffn ^ 0x10000000000000000n, -0xfffffffeffffffffffffffffn,
+ "-0xffffffffffffffffffffffffn ^ 0x10000000000000000n === -0xfffffffeffffffffffffffffn");
+assert.sameValue(
+ 0x10000000000000000n ^ -0xffffffffffffffffffffffffn, -0xfffffffeffffffffffffffffn,
+ "0x10000000000000000n ^ -0xffffffffffffffffffffffffn === -0xfffffffeffffffffffffffffn");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/bitwise-xor/browser.js b/js/src/tests/test262/language/expressions/bitwise-xor/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/bitwise-xor/browser.js
diff --git a/js/src/tests/test262/language/expressions/bitwise-xor/order-of-evaluation.js b/js/src/tests/test262/language/expressions/bitwise-xor/order-of-evaluation.js
new file mode 100644
index 0000000000..90ed1c0519
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/bitwise-xor/order-of-evaluation.js
@@ -0,0 +1,140 @@
+// Copyright (C) 2018 Igalia, S.L. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-binary-bitwise-operators-runtime-semantics-evaluation
+description: Type coercion order of operations for bitwise-xor operator
+features: [Symbol]
+info: |
+ Evaluate lhs
+ Evaluate rhs
+ ToNumeric(lhs)
+ ToNumeric(rhs)
+---*/
+
+function MyError() {}
+var trace;
+
+// ?GetValue(lhs) throws.
+trace = "";
+assert.throws(MyError, function() {
+ (function() {
+ trace += "1";
+ throw new MyError();
+ })() ^ (function() {
+ trace += "2";
+ throw new Test262Error("should not be evaluated");
+ })();
+}, "?GetValue(lhs) throws.");
+assert.sameValue(trace, "1", "?GetValue(lhs) throws.");
+
+// ?GetValue(rhs) throws.
+trace = "";
+assert.throws(MyError, function() {
+ (function() {
+ trace += "1";
+ return {
+ valueOf: function() {
+ trace += "3";
+ throw new Test262Error("should not be evaluated");
+ }
+ };
+ })() ^ (function() {
+ trace += "2";
+ throw new MyError();
+ })();
+}, "?GetValue(rhs) throws.");
+assert.sameValue(trace, "12", "?GetValue(rhs) throws.");
+
+// ?ToPrimive(lhs) throws.
+trace = "";
+assert.throws(MyError, function() {
+ (function() {
+ trace += "1";
+ return {
+ valueOf: function() {
+ trace += "3";
+ throw new MyError();
+ }
+ };
+ })() ^ (function() {
+ trace += "2";
+ return {
+ valueOf: function() {
+ trace += "4";
+ throw new Test262Error("should not be evaluated");
+ }
+ };
+ })();
+}, "?ToPrimive(lhs) throws.");
+assert.sameValue(trace, "123", "?ToPrimive(lhs) throws.");
+
+// ?ToPrimive(rhs) throws.
+trace = "";
+assert.throws(MyError, function() {
+ (function() {
+ trace += "1";
+ return {
+ valueOf: function() {
+ trace += "3";
+ return 1;
+ }
+ };
+ })() ^ (function() {
+ trace += "2";
+ return {
+ valueOf: function() {
+ trace += "4";
+ throw new MyError();
+ }
+ };
+ })();
+}, "?ToPrimive(rhs) throws.");
+assert.sameValue(trace, "1234", "?ToPrimive(rhs) throws.");
+
+// ?ToNumeric(lhs) throws.
+trace = "";
+assert.throws(TypeError, function() {
+ (function() {
+ trace += "1";
+ return {
+ valueOf: function() {
+ trace += "3";
+ return Symbol("1");
+ }
+ };
+ })() ^ (function() {
+ trace += "2";
+ return {
+ valueOf: function() {
+ trace += "4";
+ throw new Test262Error("should not be evaluated");
+ }
+ };
+ })();
+}, "?ToNumeric(lhs) throws.");
+assert.sameValue(trace, "123", "?ToNumeric(lhs) throws.");
+
+// GetValue(lhs) throws.
+trace = "";
+assert.throws(TypeError, function() {
+ (function() {
+ trace += "1";
+ return {
+ valueOf: function() {
+ trace += "3";
+ return 1;
+ }
+ };
+ })() ^ (function() {
+ trace += "2";
+ return {
+ valueOf: function() {
+ trace += "4";
+ return Symbol("1");
+ }
+ };
+ })();
+}, "GetValue(lhs) throws.");
+assert.sameValue(trace, "1234", "GetValue(lhs) throws.");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/bitwise-xor/shell.js b/js/src/tests/test262/language/expressions/bitwise-xor/shell.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/bitwise-xor/shell.js