summaryrefslogtreecommitdiffstats
path: root/js/src/tests/test262/language/expressions/division
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/division
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/division')
-rw-r--r--js/src/tests/test262/language/expressions/division/S11.5.2_A1.js62
-rw-r--r--js/src/tests/test262/language/expressions/division/S11.5.2_A2.1_T1.js43
-rw-r--r--js/src/tests/test262/language/expressions/division/S11.5.2_A2.1_T2.js21
-rw-r--r--js/src/tests/test262/language/expressions/division/S11.5.2_A2.1_T3.js21
-rw-r--r--js/src/tests/test262/language/expressions/division/S11.5.2_A2.2_T1.js71
-rw-r--r--js/src/tests/test262/language/expressions/division/S11.5.2_A2.3_T1.js28
-rw-r--r--js/src/tests/test262/language/expressions/division/S11.5.2_A2.4_T1.js22
-rw-r--r--js/src/tests/test262/language/expressions/division/S11.5.2_A2.4_T2.js26
-rw-r--r--js/src/tests/test262/language/expressions/division/S11.5.2_A2.4_T3.js21
-rw-r--r--js/src/tests/test262/language/expressions/division/S11.5.2_A2.4_T4.js16
-rw-r--r--js/src/tests/test262/language/expressions/division/S11.5.2_A3_T1.1.js32
-rw-r--r--js/src/tests/test262/language/expressions/division/S11.5.2_A3_T1.2.js30
-rw-r--r--js/src/tests/test262/language/expressions/division/S11.5.2_A3_T1.3.js40
-rw-r--r--js/src/tests/test262/language/expressions/division/S11.5.2_A3_T1.4.js30
-rw-r--r--js/src/tests/test262/language/expressions/division/S11.5.2_A3_T1.5.js30
-rw-r--r--js/src/tests/test262/language/expressions/division/S11.5.2_A3_T2.1.js52
-rw-r--r--js/src/tests/test262/language/expressions/division/S11.5.2_A3_T2.2.js62
-rw-r--r--js/src/tests/test262/language/expressions/division/S11.5.2_A3_T2.3.js32
-rw-r--r--js/src/tests/test262/language/expressions/division/S11.5.2_A3_T2.4.js32
-rw-r--r--js/src/tests/test262/language/expressions/division/S11.5.2_A3_T2.5.js52
-rw-r--r--js/src/tests/test262/language/expressions/division/S11.5.2_A3_T2.6.js32
-rw-r--r--js/src/tests/test262/language/expressions/division/S11.5.2_A3_T2.7.js32
-rw-r--r--js/src/tests/test262/language/expressions/division/S11.5.2_A3_T2.8.js32
-rw-r--r--js/src/tests/test262/language/expressions/division/S11.5.2_A3_T2.9.js32
-rw-r--r--js/src/tests/test262/language/expressions/division/S11.5.2_A4_T1.1.js52
-rw-r--r--js/src/tests/test262/language/expressions/division/S11.5.2_A4_T1.2.js52
-rw-r--r--js/src/tests/test262/language/expressions/division/S11.5.2_A4_T10.js64
-rw-r--r--js/src/tests/test262/language/expressions/division/S11.5.2_A4_T2.js34
-rw-r--r--js/src/tests/test262/language/expressions/division/S11.5.2_A4_T3.js34
-rw-r--r--js/src/tests/test262/language/expressions/division/S11.5.2_A4_T4.js32
-rw-r--r--js/src/tests/test262/language/expressions/division/S11.5.2_A4_T5.js44
-rw-r--r--js/src/tests/test262/language/expressions/division/S11.5.2_A4_T6.js50
-rw-r--r--js/src/tests/test262/language/expressions/division/S11.5.2_A4_T7.js32
-rw-r--r--js/src/tests/test262/language/expressions/division/S11.5.2_A4_T8.js68
-rw-r--r--js/src/tests/test262/language/expressions/division/S11.5.2_A4_T9.js39
-rw-r--r--js/src/tests/test262/language/expressions/division/bigint-and-number.js92
-rw-r--r--js/src/tests/test262/language/expressions/division/bigint-arithmetic.js1072
-rw-r--r--js/src/tests/test262/language/expressions/division/bigint-complex-infinity.js37
-rw-r--r--js/src/tests/test262/language/expressions/division/bigint-errors.js72
-rw-r--r--js/src/tests/test262/language/expressions/division/bigint-toprimitive.js374
-rw-r--r--js/src/tests/test262/language/expressions/division/bigint-wrapped-values.js47
-rw-r--r--js/src/tests/test262/language/expressions/division/browser.js0
-rw-r--r--js/src/tests/test262/language/expressions/division/line-terminator.js29
-rw-r--r--js/src/tests/test262/language/expressions/division/no-magic-asi-from-block-eval.js23
-rw-r--r--js/src/tests/test262/language/expressions/division/no-magic-asi.js24
-rw-r--r--js/src/tests/test262/language/expressions/division/order-of-evaluation.js140
-rw-r--r--js/src/tests/test262/language/expressions/division/shell.js0
47 files changed, 3262 insertions, 0 deletions
diff --git a/js/src/tests/test262/language/expressions/division/S11.5.2_A1.js b/js/src/tests/test262/language/expressions/division/S11.5.2_A1.js
new file mode 100644
index 0000000000..8804278e28
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/division/S11.5.2_A1.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: |
+ White Space and Line Terminator between MultiplicativeExpression and "/"
+ or between "/" and UnaryExpression are allowed
+es5id: 11.5.2_A1
+description: Checking by using eval
+---*/
+
+//CHECK#1
+if (eval("1\u0009/\u00091") !== 1) {
+ $ERROR('#1: 1\\u0009/\\u00091 === 1');
+}
+
+//CHECK#2
+if (eval("1\u000B/\u000B1") !== 1) {
+ $ERROR('#2: 1\\u000B/\\u000B1 === 1');
+}
+
+//CHECK#3
+if (eval("1\u000C/\u000C1") !== 1) {
+ $ERROR('#3: 1\\u000C/\\u000C1 === 1');
+}
+
+//CHECK#4
+if (eval("1\u0020/\u00201") !== 1) {
+ $ERROR('#4: 1\\u0020/\\u00201 === 1');
+}
+
+//CHECK#5
+if (eval("1\u00A0/\u00A01") !== 1) {
+ $ERROR('#5: 1\\u00A0/\\u00A01 === 1');
+}
+
+//CHECK#6
+if (eval("1\u000A/\u000A1") !== 1) {
+ $ERROR('#6: 1\\u000A/\\u000A1 === 1');
+}
+
+//CHECK#7
+if (eval("1\u000D/\u000D1") !== 1) {
+ $ERROR('#7: 1\\u000D/\\u000D1 === 1');
+}
+
+//CHECK#8
+if (eval("1\u2028/\u20281") !== 1) {
+ $ERROR('#8: 1\\u2028/\\u20281 === 1');
+}
+
+//CHECK#9
+if (eval("1\u2029/\u20291") !== 1) {
+ $ERROR('#9: 1\\u2029/\\u20291 === 1');
+}
+
+//CHECK#10
+if (eval("1\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029/\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u20291") !== 1) {
+ $ERROR('#10: 1\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029/\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u20291 === 1');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/division/S11.5.2_A2.1_T1.js b/js/src/tests/test262/language/expressions/division/S11.5.2_A2.1_T1.js
new file mode 100644
index 0000000000..881858b04b
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/division/S11.5.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.5.2_A2.1_T1
+description: Either Type is not Reference or GetBase is not null
+---*/
+
+//CHECK#1
+if (1 / 1 !== 1) {
+ $ERROR('#1: 1 / 1 === 1. Actual: ' + (1 / 1));
+}
+
+//CHECK#2
+var x = 1;
+if (x / 1 !== 1) {
+ $ERROR('#2: var x = 1; x / 1 === 1. Actual: ' + (x / 1));
+}
+
+//CHECK#3
+var y = 1;
+if (1 / y !== 1) {
+ $ERROR('#3: var y = 1; 1 / y === 1. Actual: ' + (1 / y));
+}
+
+//CHECK#4
+var x = 1;
+var y = 1;
+if (x / y !== 1) {
+ $ERROR('#4: var x = 1; var y = 1; x / y === 1. Actual: ' + (x / y));
+}
+
+//CHECK#5
+var objectx = new Object();
+var objecty = new Object();
+objectx.prop = 1;
+objecty.prop = 1;
+if (objectx.prop / objecty.prop !== 1) {
+ $ERROR('#5: var objectx = new Object(); var objecty = new Object(); objectx.prop = 1; objecty.prop = 1; objectx.prop / objecty.prop === 1. Actual: ' + (objectx.prop / objecty.prop));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/division/S11.5.2_A2.1_T2.js b/js/src/tests/test262/language/expressions/division/S11.5.2_A2.1_T2.js
new file mode 100644
index 0000000000..ae07f8478a
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/division/S11.5.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.5.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/division/S11.5.2_A2.1_T3.js b/js/src/tests/test262/language/expressions/division/S11.5.2_A2.1_T3.js
new file mode 100644
index 0000000000..5577957135
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/division/S11.5.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.5.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/division/S11.5.2_A2.2_T1.js b/js/src/tests/test262/language/expressions/division/S11.5.2_A2.2_T1.js
new file mode 100644
index 0000000000..ac63ad0138
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/division/S11.5.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.5.2_A2.2_T1
+description: If Type(value) is Object, evaluate ToPrimitive(value, Number)
+---*/
+
+//CHECK#1
+if ({valueOf: function() {return 1}} / 1 !== 1) {
+ $ERROR('#1: {valueOf: function() {return 1}} / 1 === 1. Actual: ' + ({valueOf: function() {return 1}} / 1));
+}
+
+//CHECK#2
+if ({valueOf: function() {return 1}, toString: function() {return 0}} / 1 !== 1) {
+ $ERROR('#2: {valueOf: function() {return 1}, toString: function() {return 0}} / 1 === 1. Actual: ' + ({valueOf: function() {return 1}, toString: function() {return 0}} / 1));
+}
+
+//CHECK#3
+if ({valueOf: function() {return 1}, toString: function() {return {}}} / 1 !== 1) {
+ $ERROR('#3: {valueOf: function() {return 1}, toString: function() {return {}}} / 1 === 1. Actual: ' + ({valueOf: function() {return 1}, toString: function() {return {}}} / 1));
+}
+
+//CHECK#4
+try {
+ if ({valueOf: function() {return 1}, toString: function() {throw "error"}} / 1 !== 1) {
+ $ERROR('#4.1: {valueOf: function() {return 1}, toString: function() {throw "error"}} / 1 === 1. 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}} !== 1) {
+ $ERROR('#5: 1 / {toString: function() {return 1}} === 1. Actual: ' + (1 / {toString: function() {return 1}}));
+}
+
+//CHECK#6
+if (1 / {valueOf: function() {return {}}, toString: function() {return 1}} !== 1) {
+ $ERROR('#6: 1 / {valueOf: function() {return {}}, toString: function() {return 1}} === 1. 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/division/S11.5.2_A2.3_T1.js b/js/src/tests/test262/language/expressions/division/S11.5.2_A2.3_T1.js
new file mode 100644
index 0000000000..7475f2e4c5
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/division/S11.5.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: |
+ ToNumber(first expression) is called first, and then ToNumber(second
+ expression)
+es5id: 11.5.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: ToNumber(first expression) is called first, and then ToNumber(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/division/S11.5.2_A2.4_T1.js b/js/src/tests/test262/language/expressions/division/S11.5.2_A2.4_T1.js
new file mode 100644
index 0000000000..47c6d1f44b
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/division/S11.5.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.5.2_A2.4_T1
+description: Checking with "="
+---*/
+
+//CHECK#1
+var x = 0;
+if ((x = 1) / x !== 1) {
+ $ERROR('#1: var x = 0; (x = 1) / x === 1. Actual: ' + ((x = 1) / x));
+}
+
+//CHECK#2
+var x = 0;
+if (x / (x = 1) !== 0) {
+ $ERROR('#2: var x = 0; x / (x = 1) === 0. Actual: ' + (x / (x = 1)));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/division/S11.5.2_A2.4_T2.js b/js/src/tests/test262/language/expressions/division/S11.5.2_A2.4_T2.js
new file mode 100644
index 0000000000..fa99a0b144
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/division/S11.5.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.5.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/division/S11.5.2_A2.4_T3.js b/js/src/tests/test262/language/expressions/division/S11.5.2_A2.4_T3.js
new file mode 100644
index 0000000000..d2f637b965
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/division/S11.5.2_A2.4_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: First expression is evaluated first, and then second expression
+es5id: 11.5.2_A2.4_T3
+description: Checking with undeclarated variables
+---*/
+
+//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));
+ }
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/division/S11.5.2_A2.4_T4.js b/js/src/tests/test262/language/expressions/division/S11.5.2_A2.4_T4.js
new file mode 100644
index 0000000000..f2d234185c
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/division/S11.5.2_A2.4_T4.js
@@ -0,0 +1,16 @@
+// 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.5.2_A2.4_T4
+description: Checking with undeclarated variables
+flags: [noStrict]
+---*/
+
+//CHECK#1
+if ((y = 1) / y !== 1) {
+ $ERROR('#1: (y = 1) / y === 1. Actual: ' + ((y = 1) / y));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/division/S11.5.2_A3_T1.1.js b/js/src/tests/test262/language/expressions/division/S11.5.2_A3_T1.1.js
new file mode 100644
index 0000000000..498d10997d
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/division/S11.5.2_A3_T1.1.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.5.2_A3_T1.1
+description: >
+ Type(x) and Type(y) vary between primitive boolean and Boolean
+ object
+---*/
+
+//CHECK#1
+if (true / true !== 1) {
+ $ERROR('#1: true / true === 1. Actual: ' + (true / true));
+}
+
+//CHECK#2
+if (new Boolean(true) / true !== 1) {
+ $ERROR('#2: new Boolean(true) / true === 1. Actual: ' + (new Boolean(true) / true));
+}
+
+//CHECK#3
+if (true / new Boolean(true) !== 1) {
+ $ERROR('#3: true / new Boolean(true) === 1. Actual: ' + (true / new Boolean(true)));
+}
+
+//CHECK#4
+if (new Boolean(true) / new Boolean(true) !== 1) {
+ $ERROR('#4: new Boolean(true) / new Boolean(true) === 1. Actual: ' + (new Boolean(true) / new Boolean(true)));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/division/S11.5.2_A3_T1.2.js b/js/src/tests/test262/language/expressions/division/S11.5.2_A3_T1.2.js
new file mode 100644
index 0000000000..fb4037b527
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/division/S11.5.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.5.2_A3_T1.2
+description: Type(x) and Type(y) vary between primitive number and Number object
+---*/
+
+//CHECK#1
+if (1 / 1 !== 1) {
+ $ERROR('#1: 1 / 1 === 1. Actual: ' + (1 / 1));
+}
+
+//CHECK#2
+if (new Number(1) / 1 !== 1) {
+ $ERROR('#2: new Number(1) / 1 === 1. Actual: ' + (new Number(1) / 1));
+}
+
+//CHECK#3
+if (1 / new Number(1) !== 1) {
+ $ERROR('#3: 1 / new Number(1) === 1. Actual: ' + (1 / new Number(1)));
+}
+
+//CHECK#4
+if (new Number(1) / new Number(1) !== 1) {
+ $ERROR('#4: new Number(1) / new Number(1) === 1. Actual: ' + (new Number(1) / new Number(1)));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/division/S11.5.2_A3_T1.3.js b/js/src/tests/test262/language/expressions/division/S11.5.2_A3_T1.3.js
new file mode 100644
index 0000000000..8b2f41870f
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/division/S11.5.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.5.2_A3_T1.3
+description: Type(x) and Type(y) vary between primitive string and String object
+---*/
+
+//CHECK#1
+if ("1" / "1" !== 1) {
+ $ERROR('#1: "1" / "1" === 1. Actual: ' + ("1" / "1"));
+}
+
+//CHECK#2
+if (new String("1") / "1" !== 1) {
+ $ERROR('#2: new String("1") / "1" === 1. Actual: ' + (new String("1") / "1"));
+}
+
+//CHECK#3
+if ("1" / new String("1") !== 1) {
+ $ERROR('#3: "1" / new String("1") === 1. Actual: ' + ("1" / new String("1")));
+}
+
+//CHECK#4
+if (new String("1") / new String("1") !== 1) {
+ $ERROR('#4: new String("1") / new String("1") === 1. Actual: ' + (new String("1") / new String("1")));
+}
+
+//CHECK#5
+if (isNaN("x" / "1") !== true) {
+ $ERROR('#5: "x" / "1" === Not-a-Number. Actual: ' + ("x" / "1"));
+}
+
+//CHECK#6
+if (isNaN("1" / "x") !== true) {
+ $ERROR('#6: "1" / "x" === Not-a-Number. Actual: ' + ("1" / "x"));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/division/S11.5.2_A3_T1.4.js b/js/src/tests/test262/language/expressions/division/S11.5.2_A3_T1.4.js
new file mode 100644
index 0000000000..f74e8f3a55
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/division/S11.5.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.5.2_A3_T1.4
+description: Type(x) and Type(y) vary between Null and Undefined
+---*/
+
+//CHECK#1
+if (isNaN(null / undefined) !== true) {
+ $ERROR('#1: null / undefined === Not-a-Number. Actual: ' + (null / undefined));
+}
+
+//CHECK#2
+if (isNaN(undefined / null) !== true) {
+ $ERROR('#2: undefined / null === Not-a-Number. Actual: ' + (undefined / null));
+}
+
+//CHECK#3
+if (isNaN(undefined / undefined) !== true) {
+ $ERROR('#3: undefined / undefined === Not-a-Number. Actual: ' + (undefined / undefined));
+}
+
+//CHECK#4
+if (isNaN(null / null) !== true) {
+ $ERROR('#4: null / null === Not-a-Number. Actual: ' + (null / null));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/division/S11.5.2_A3_T1.5.js b/js/src/tests/test262/language/expressions/division/S11.5.2_A3_T1.5.js
new file mode 100644
index 0000000000..5b38a83b3b
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/division/S11.5.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.5.2_A3_T1.5
+description: Type(x) and Type(y) vary between Object object and Function object
+---*/
+
+//CHECK#1
+if (isNaN({} / function(){return 1}) !== true) {
+ $ERROR('#1: {} / function(){return 1} === Not-a-Number. Actual: ' + ({} / function(){return 1}));
+}
+
+//CHECK#2
+if (isNaN(function(){return 1} / {}) !== true) {
+ $ERROR('#2: function(){return 1} / {} === Not-a-Number. Actual: ' + (function(){return 1} / {}));
+}
+
+//CHECK#3
+if (isNaN(function(){return 1} / function(){return 1}) !== true) {
+ $ERROR('#3: function(){return 1} / function(){return 1} === Not-a-Number. Actual: ' + (function(){return 1} / function(){return 1}));
+}
+
+//CHECK#4
+if (isNaN({} / {}) !== true) {
+ $ERROR('#4: {} / {} === Not-a-Number. Actual: ' + ({} / {}));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/division/S11.5.2_A3_T2.1.js b/js/src/tests/test262/language/expressions/division/S11.5.2_A3_T2.1.js
new file mode 100644
index 0000000000..929f1626da
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/division/S11.5.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.5.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 !== 1) {
+ $ERROR('#1: true / 1 === 1. Actual: ' + (true / 1));
+}
+
+//CHECK#2
+if (1 / true !== 1) {
+ $ERROR('#2: 1 / true === 1. Actual: ' + (1 / true));
+}
+
+//CHECK#3
+if (new Boolean(true) / 1 !== 1) {
+ $ERROR('#3: new Boolean(true) / 1 === 1. Actual: ' + (new Boolean(true) / 1));
+}
+
+//CHECK#4
+if (1 / new Boolean(true) !== 1) {
+ $ERROR('#4: 1 / new Boolean(true) === 1. Actual: ' + (1 / new Boolean(true)));
+}
+
+//CHECK#5
+if (true / new Number(1) !== 1) {
+ $ERROR('#5: true / new Number(1) === 1. Actual: ' + (true / new Number(1)));
+}
+
+//CHECK#6
+if (new Number(1) / true !== 1) {
+ $ERROR('#6: new Number(1) / true === 1. Actual: ' + (new Number(1) / true));
+}
+
+//CHECK#7
+if (new Boolean(true) / new Number(1) !== 1) {
+ $ERROR('#7: new Boolean(true) / new Number(1) === 1. Actual: ' + (new Boolean(true) / new Number(1)));
+}
+
+//CHECK#8
+if (new Number(1) / new Boolean(true) !== 1) {
+ $ERROR('#8: new Number(1) / new Boolean(true) === 1. Actual: ' + (new Number(1) / new Boolean(true)));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/division/S11.5.2_A3_T2.2.js b/js/src/tests/test262/language/expressions/division/S11.5.2_A3_T2.2.js
new file mode 100644
index 0000000000..41e64aad39
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/division/S11.5.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.5.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 !== 1) {
+ $ERROR('#1: "1" / 1 === 1. Actual: ' + ("1" / 1));
+}
+
+//CHECK#2
+if (1 / "1" !== 1) {
+ $ERROR('#2: 1 / "1" === 1. Actual: ' + (1 / "1"));
+}
+
+//CHECK#3
+if (new String("1") / 1 !== 1) {
+ $ERROR('#3: new String("1") / 1 === 1. Actual: ' + (new String("1") / 1));
+}
+
+//CHECK#4
+if (1 / new String("1") !== 1) {
+ $ERROR('#4: 1 / new String("1") === 1. Actual: ' + (1 / new String("1")));
+}
+
+//CHECK#5
+if ("1" / new Number(1) !== 1) {
+ $ERROR('#5: "1" / new Number(1) === 1. Actual: ' + ("1" / new Number(1)));
+}
+
+//CHECK#6
+if (new Number(1) / "1" !== 1) {
+ $ERROR('#6: new Number(1) / "1" === 1. Actual: ' + (new Number(1) / "1"));
+}
+
+//CHECK#7
+if (new String("1") / new Number(1) !== 1) {
+ $ERROR('#7: new String("1") / new Number(1) === 1. Actual: ' + (new String("1") / new Number(1)));
+}
+
+//CHECK#8
+if (new Number(1) / new String("1") !== 1) {
+ $ERROR('#8: new Number(1) / new String("1") === 1. Actual: ' + (new Number(1) / new String("1")));
+}
+
+//CHECK#9
+if (isNaN("x" / 1) !== true) {
+ $ERROR('#9: "x" / 1 === Not-a-Number. Actual: ' + ("x" / 1));
+}
+
+//CHECK#10
+if (isNaN(1 / "x") !== true) {
+ $ERROR('#10: 1 / "x" === Not-a-Number. Actual: ' + (1 / "x"));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/division/S11.5.2_A3_T2.3.js b/js/src/tests/test262/language/expressions/division/S11.5.2_A3_T2.3.js
new file mode 100644
index 0000000000..2863137d2e
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/division/S11.5.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.5.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 !== Number.POSITIVE_INFINITY) {
+ $ERROR('#1: 1 / null === +Infinity. Actual: ' + (1 / null));
+}
+
+//CHECK#2
+if (null / 1 !== 0) {
+ $ERROR('#2: null / 1 === 0. Actual: ' + (null / 1));
+}
+
+//CHECK#3
+if (new Number(1) / null !== Number.POSITIVE_INFINITY) {
+ $ERROR('#3: new Number(1) / null === +Infinity. Actual: ' + (new Number(1) / null));
+}
+
+//CHECK#4
+if (null / new Number(1) !== 0) {
+ $ERROR('#4: null / new Number(1) === 0. Actual: ' + (null / new Number(1)));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/division/S11.5.2_A3_T2.4.js b/js/src/tests/test262/language/expressions/division/S11.5.2_A3_T2.4.js
new file mode 100644
index 0000000000..0e6c7906eb
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/division/S11.5.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.5.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 (isNaN(1 / undefined) !== true) {
+ $ERROR('#1: 1 / undefined === Not-a-Number. Actual: ' + (1 / undefined));
+}
+
+//CHECK#2
+if (isNaN(undefined / 1) !== true) {
+ $ERROR('#2: undefined / 1 === Not-a-Number. Actual: ' + (undefined / 1));
+}
+
+//CHECK#3
+if (isNaN(new Number(1) / undefined) !== true) {
+ $ERROR('#3: new Number(1) / undefined === Not-a-Number. Actual: ' + (new Number(1) / undefined));
+}
+
+//CHECK#4
+if (isNaN(undefined / new Number(1)) !== true) {
+ $ERROR('#4: undefined / new Number(1) === Not-a-Number. Actual: ' + (undefined / new Number(1)));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/division/S11.5.2_A3_T2.5.js b/js/src/tests/test262/language/expressions/division/S11.5.2_A3_T2.5.js
new file mode 100644
index 0000000000..18b0b2fb1c
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/division/S11.5.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.5.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" !== 1) {
+ $ERROR('#1: true / "1" === 1. Actual: ' + (true / "1"));
+}
+
+//CHECK#2
+if ("1" / true !== 1) {
+ $ERROR('#2: "1" / true === 1. Actual: ' + ("1" / true));
+}
+
+//CHECK#3
+if (new Boolean(true) / "1" !== 1) {
+ $ERROR('#3: new Boolean(true) / "1" === 1. Actual: ' + (new Boolean(true) / "1"));
+}
+
+//CHECK#4
+if ("1" / new Boolean(true) !== 1) {
+ $ERROR('#4: "1" / new Boolean(true) === 1. Actual: ' + ("1" / new Boolean(true)));
+}
+
+//CHECK#5
+if (true / new String("1") !== 1) {
+ $ERROR('#5: true / new String("1") === 1. Actual: ' + (true / new String("1")));
+}
+
+//CHECK#6
+if (new String("1") / true !== 1) {
+ $ERROR('#6: new String("1") / true === 1. Actual: ' + (new String("1") / true));
+}
+
+//CHECK#7
+if (new Boolean(true) / new String("1") !== 1) {
+ $ERROR('#7: new Boolean(true) / new String("1") === 1. Actual: ' + (new Boolean(true) / new String("1")));
+}
+
+//CHECK#8
+if (new String("1") / new Boolean(true) !== 1) {
+ $ERROR('#8: new String("1") / new Boolean(true) === 1. Actual: ' + (new String("1") / new Boolean(true)));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/division/S11.5.2_A3_T2.6.js b/js/src/tests/test262/language/expressions/division/S11.5.2_A3_T2.6.js
new file mode 100644
index 0000000000..38b2d18a22
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/division/S11.5.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.5.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 (isNaN("1" / undefined) !== true) {
+ $ERROR('#1: "1" / undefined === Not-a-Number. Actual: ' + ("1" / undefined));
+}
+
+//CHECK#2
+if (isNaN(undefined / "1") !== true) {
+ $ERROR('#2: undefined / "1" === Not-a-Number. Actual: ' + (undefined / "1"));
+}
+
+//CHECK#3
+if (isNaN(new String("1") / undefined) !== true) {
+ $ERROR('#3: new String("1") / undefined === Not-a-Number. Actual: ' + (new String("1") / undefined));
+}
+
+//CHECK#4
+if (isNaN(undefined / new String("1")) !== true) {
+ $ERROR('#4: undefined / new String("1") === Not-a-Number. Actual: ' + (undefined / new String("1")));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/division/S11.5.2_A3_T2.7.js b/js/src/tests/test262/language/expressions/division/S11.5.2_A3_T2.7.js
new file mode 100644
index 0000000000..565c4558fe
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/division/S11.5.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.5.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 !== Number.POSITIVE_INFINITY) {
+ $ERROR('#1: "1" / null === +Infinity. Actual: ' + ("1" / null));
+}
+
+//CHECK#2
+if (null / "1" !== 0) {
+ $ERROR('#2: null / "1" === 0. Actual: ' + (null / "1"));
+}
+
+//CHECK#3
+if (new String("1") / null !== Number.POSITIVE_INFINITY) {
+ $ERROR('#3: new String("1") / null === +Infinity. Actual: ' + (new String("1") / null));
+}
+
+//CHECK#4
+if (null / new String("1") !== 0) {
+ $ERROR('#4: null / new String("1") === 0. Actual: ' + (null / new String("1")));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/division/S11.5.2_A3_T2.8.js b/js/src/tests/test262/language/expressions/division/S11.5.2_A3_T2.8.js
new file mode 100644
index 0000000000..9749c8fe25
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/division/S11.5.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.5.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 (isNaN(true / undefined) !== true) {
+ $ERROR('#1: true / undefined === Not-a-Number. Actual: ' + (true / undefined));
+}
+
+//CHECK#2
+if (isNaN(undefined / true) !== true) {
+ $ERROR('#2: undefined / true === Not-a-Number. Actual: ' + (undefined / true));
+}
+
+//CHECK#3
+if (isNaN(new Boolean(true) / undefined) !== true) {
+ $ERROR('#3: new Boolean(true) / undefined === Not-a-Number. Actual: ' + (new Boolean(true) / undefined));
+}
+
+//CHECK#4
+if (isNaN(undefined / new Boolean(true)) !== true) {
+ $ERROR('#4: undefined / new Boolean(true) === Not-a-Number. Actual: ' + (undefined / new Boolean(true)));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/division/S11.5.2_A3_T2.9.js b/js/src/tests/test262/language/expressions/division/S11.5.2_A3_T2.9.js
new file mode 100644
index 0000000000..21133f3a03
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/division/S11.5.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.5.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 !== Number.POSITIVE_INFINITY) {
+ $ERROR('#1: true / null === +Infinity. Actual: ' + (true / null));
+}
+
+//CHECK#2
+if (null / true !== 0) {
+ $ERROR('#2: null / true === 0. Actual: ' + (null / true));
+}
+
+//CHECK#3
+if (new Boolean(true) / null !== Number.POSITIVE_INFINITY) {
+ $ERROR('#3: new Boolean(true) / null === +Infinity. Actual: ' + (new Boolean(true) / null));
+}
+
+//CHECK#4
+if (null / new Boolean(true) !== 0) {
+ $ERROR('#4: null / new Boolean(true) === 0. Actual: ' + (null / new Boolean(true)));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/division/S11.5.2_A4_T1.1.js b/js/src/tests/test262/language/expressions/division/S11.5.2_A4_T1.1.js
new file mode 100644
index 0000000000..9b9e1926a2
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/division/S11.5.2_A4_T1.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: |
+ The result of division is determined by the specification of IEEE 754
+ arithmetics
+es5id: 11.5.2_A4_T1.1
+description: If left operand is NaN, the result is NaN
+---*/
+
+//CHECK#1
+if (isNaN(Number.NaN / Number.NaN) !== true) {
+ $ERROR('#1: NaN / NaN === Not-a-Number. Actual: ' + (NaN / NaN));
+}
+
+//CHECK#2
+if (isNaN(Number.NaN / +0) !== true) {
+ $ERROR('#2: NaN / +0 === Not-a-Number. Actual: ' + (NaN / +0));
+}
+
+//CHECK#3
+if (isNaN(Number.NaN / -0) !== true) {
+ $ERROR('#3: NaN / -0 === Not-a-Number. Actual: ' + (NaN / -0));
+}
+
+//CHECK#4
+if (isNaN(Number.NaN / Number.POSITIVE_INFINITY) !== true) {
+ $ERROR('#4: NaN / Infinity === Not-a-Number. Actual: ' + (NaN / Infinity));
+}
+
+//CHECK#5
+if (isNaN(Number.NaN / Number.NEGATIVE_INFINITY) !== true) {
+ $ERROR('#5: NaN / -Infinity === Not-a-Number. Actual: ' + (NaN / -Infinity));
+}
+
+//CHECK#6
+if (isNaN(Number.NaN / Number.MAX_VALUE) !== true) {
+ $ERROR('#6: NaN / Number.MAX_VALUE === Not-a-Number. Actual: ' + (NaN / Number.MAX_VALUE));
+}
+
+//CHECK#7
+if (isNaN(Number.NaN / Number.MIN_VALUE) !== true) {
+ $ERROR('#7: NaN / Number.MIN_VALUE === Not-a-Number. Actual: ' + (NaN / Number.MIN_VALUE));
+}
+
+//CHECK#8
+if (isNaN(Number.NaN / 1) !== true) {
+ $ERROR('#8: NaN / 1 === Not-a-Number. Actual: ' + (NaN / 1));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/division/S11.5.2_A4_T1.2.js b/js/src/tests/test262/language/expressions/division/S11.5.2_A4_T1.2.js
new file mode 100644
index 0000000000..c5cbaf0890
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/division/S11.5.2_A4_T1.2.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: |
+ The result of division is determined by the specification of IEEE 754
+ arithmetics
+es5id: 11.5.2_A4_T1.2
+description: If right operand is NaN, the result is NaN
+---*/
+
+//CHECK#1
+if (isNaN(Number.NaN / Number.NaN) !== true) {
+ $ERROR('#1: NaN / NaN === Not-a-Number. Actual: ' + (NaN / NaN));
+}
+
+//CHECK#2
+if (isNaN(+0 / Number.NaN) !== true) {
+ $ERROR('#2: +0 / NaN === Not-a-Number. Actual: ' + (+0 / NaN));
+}
+
+//CHECK#3
+if (isNaN(-0 / Number.NaN) !== true) {
+ $ERROR('#3: -0 / NaN === Not-a-Number. Actual: ' + (-0 / NaN));
+}
+
+//CHECK#4
+if (isNaN(Number.POSITIVE_INFINITY / Number.NaN) !== true) {
+ $ERROR('#4: Infinity / NaN === Not-a-Number. Actual: ' + (Infinity / NaN));
+}
+
+//CHECK#5
+if (isNaN(Number.NEGATIVE_INFINITY / Number.NaN) !== true) {
+ $ERROR('#5: -Infinity / NaN === Not-a-Number. Actual: ' + ( -Infinity / NaN));
+}
+
+//CHECK#6
+if (isNaN(Number.MAX_VALUE / Number.NaN) !== true) {
+ $ERROR('#6: Number.MAX_VALUE / NaN === Not-a-Number. Actual: ' + (Number.MAX_VALUE / NaN));
+}
+
+//CHECK#7
+if (isNaN(Number.MIN_VALUE / Number.NaN) !== true) {
+ $ERROR('#7: Number.MIN_VALUE / NaN === Not-a-Number. Actual: ' + (Number.MIN_VALUE / NaN));
+}
+
+//CHECK#8
+if (isNaN(1 / Number.NaN) !== true) {
+ $ERROR('#8: 1 / NaN === Not-a-Number. Actual: ' + (1 / NaN));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/division/S11.5.2_A4_T10.js b/js/src/tests/test262/language/expressions/division/S11.5.2_A4_T10.js
new file mode 100644
index 0000000000..8122ba3ac5
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/division/S11.5.2_A4_T10.js
@@ -0,0 +1,64 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The result of division is determined by the specification of IEEE 754
+ arithmetics
+es5id: 11.5.2_A4_T10
+description: >
+ If both operands are finite and nonzero, the quotient is computed
+ and rounded using IEEE 754 round-to-nearest mode. If the
+ magnitude is too small to represent, the result is then a zero of
+ appropriate sign
+---*/
+
+//CHECK#1
+if (Number.MIN_VALUE / 2.1 !== 0) {
+ $ERROR('#1: Number.MIN_VALUE / 2.1 === 0. Actual: ' + (Number.MIN_VALUE / 2.1));
+}
+
+//CHECK#2
+if (Number.MIN_VALUE / -2.1 !== -0) {
+ $ERROR('#2.1: Number.MIN_VALUE / -2.1 === 0. Actual: ' + (Number.MIN_VALUE / -2.1));
+} else {
+ if (1 / (Number.MIN_VALUE / -2.1) !== Number.NEGATIVE_INFINITY) {
+ $ERROR('#2.2: Number.MIN_VALUE / -2.1 === -0. Actual: +0');
+ }
+}
+
+//CHECK#3
+if (Number.MIN_VALUE / 2.0 !== 0) {
+ $ERROR('#3: Number.MIN_VALUE / 2.0 === 0. Actual: ' + (Number.MIN_VALUE / 2.0));
+}
+
+//CHECK#4
+if (Number.MIN_VALUE / -2.0 !== -0) {
+ $ERROR('#4.1: Number.MIN_VALUE / -2.0 === -0. Actual: ' + (Number.MIN_VALUE / -2.0));
+} else {
+ if (1 / (Number.MIN_VALUE / -2.0) !== Number.NEGATIVE_INFINITY) {
+ $ERROR('#4.2: Number.MIN_VALUE / -2.0 === -0. Actual: +0');
+ }
+}
+
+//CHECK#5
+if (Number.MIN_VALUE / 1.9 !== Number.MIN_VALUE) {
+ $ERROR('#5: Number.MIN_VALUE / 1.9 === Number.MIN_VALUE. Actual: ' + (Number.MIN_VALUE / 1.9));
+}
+
+//CHECK#6
+if (Number.MIN_VALUE / -1.9 !== -Number.MIN_VALUE) {
+ $ERROR('#6: Number.MIN_VALUE / -1.9 === -Number.MIN_VALUE. Actual: ' + (Number.MIN_VALUE / -1.9));
+}
+
+//CHECK#7
+if (Number.MIN_VALUE / 1.1 !== Number.MIN_VALUE) {
+ $ERROR('#7: Number.MIN_VALUE / 1.1 === Number.MIN_VALUE. Actual: ' + (Number.MIN_VALUE / 1.1));
+}
+
+//CHECK#8
+if (Number.MIN_VALUE / -1.1 !== -Number.MIN_VALUE) {
+ $ERROR('#8: Number.MIN_VALUE / -1.1 === -Number.MIN_VALUE. Actual: ' + (Number.MIN_VALUE / -1.1));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/division/S11.5.2_A4_T2.js b/js/src/tests/test262/language/expressions/division/S11.5.2_A4_T2.js
new file mode 100644
index 0000000000..bab65a865e
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/division/S11.5.2_A4_T2.js
@@ -0,0 +1,34 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The result of division is determined by the specification of IEEE 754
+ arithmetics
+es5id: 11.5.2_A4_T2
+description: >
+ The sign of the result is positive if both operands have the same
+ sign, negative if the operands have different signs
+---*/
+
+//CHECK#1
+if (1 / 1 !== 1) {
+ $ERROR('#1: 1 / 1 === 1. Actual: ' + (1 / 1));
+}
+
+//CHECK#2
+if (1 / -1 !== -1) {
+ $ERROR('#2: 1 / -1 === -1. Actual: ' + (1 / -1));
+}
+
+//CHECK#3
+if (-1 / 1 !== -1) {
+ $ERROR('#3: -1 / 1 === -1. Actual: ' + (-1 / 1));
+}
+
+//CHECK#4
+if (-1 / -1 !== 1) {
+ $ERROR('#4: -1 / -1 === 1. Actual: ' + (-1 / -1));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/division/S11.5.2_A4_T3.js b/js/src/tests/test262/language/expressions/division/S11.5.2_A4_T3.js
new file mode 100644
index 0000000000..4729ba979b
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/division/S11.5.2_A4_T3.js
@@ -0,0 +1,34 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The result of division is determined by the specification of IEEE 754
+ arithmetics
+es5id: 11.5.2_A4_T3
+description: >
+ Division of an infinity by a zero results in an infinity of
+ appropriate sign
+---*/
+
+//CHECK#1
+if (Number.NEGATIVE_INFINITY / 0 !== Number.NEGATIVE_INFINITY) {
+ $ERROR('#1: Infinity / 0 === Infinity. Actual: ' + (Infinity / 0));
+}
+
+//CHECK#2
+if (Number.NEGATIVE_INFINITY / -0 !== Number.POSITIVE_INFINITY) {
+ $ERROR('#2: -Infinity / -0 === Infinity. Actual: ' + (-Infinity / -0));
+}
+
+//CHECK#3
+if (Number.POSITIVE_INFINITY / 0 !== Number.POSITIVE_INFINITY) {
+ $ERROR('#3: Infinity / 0 === Infinity. Actual: ' + (Infinity / 0));
+}
+
+//CHECK#4
+if (Number.POSITIVE_INFINITY / -0 !== Number.NEGATIVE_INFINITY) {
+ $ERROR('#4: Infinity / -0 === -Infinity. Actual: ' + (Infinity / -0));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/division/S11.5.2_A4_T4.js b/js/src/tests/test262/language/expressions/division/S11.5.2_A4_T4.js
new file mode 100644
index 0000000000..34f10eb7a7
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/division/S11.5.2_A4_T4.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: |
+ The result of division is determined by the specification of IEEE 754
+ arithmetics
+es5id: 11.5.2_A4_T4
+description: Division of an infinity by an infinity results in NaN
+---*/
+
+//CHECK#1
+if (isNaN(Number.NEGATIVE_INFINITY / Number.NEGATIVE_INFINITY) !== true) {
+ $ERROR('#1: -Infinity / -Infinity === Not-a-Number. Actual: ' + (-Infinity / -Infinity));
+}
+
+//CHECK#2
+if (isNaN(Number.POSITIVE_INFINITY / Number.POSITIVE_INFINITY) !== true) {
+ $ERROR('#2: Infinity / Infinity === Not-a-Number. Actual: ' + (Infinity / Infinity));
+}
+
+//CHECK#3
+if (isNaN(Number.NEGATIVE_INFINITY / Number.POSITIVE_INFINITY) !== true) {
+ $ERROR('#3: -Infinity / Infinity === Not-a-Number. Actual: ' + (-Infinity / Infinity));
+}
+
+//CHECK#4
+if (isNaN(Number.POSITIVE_INFINITY / Number.NEGATIVE_INFINITY) !== true) {
+ $ERROR('#4: Infinity / -Infinity === Not-a-Number. Actual: ' + (Infinity / -Infinity));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/division/S11.5.2_A4_T5.js b/js/src/tests/test262/language/expressions/division/S11.5.2_A4_T5.js
new file mode 100644
index 0000000000..ed6a18424b
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/division/S11.5.2_A4_T5.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The result of division is determined by the specification of IEEE 754
+ arithmetics
+es5id: 11.5.2_A4_T5
+description: >
+ Division of an infinity by a finite non-zero value results in a
+ signed infinity
+---*/
+
+//CHECK#1
+if (Number.NEGATIVE_INFINITY / 1 !== Number.NEGATIVE_INFINITY) {
+ $ERROR('#1: -Infinity / 1 === -Infinity. Actual: ' + (-Infinity / 1));
+}
+
+//CHECK#2
+if (Number.NEGATIVE_INFINITY / -1 !== Number.POSITIVE_INFINITY) {
+ $ERROR('#2: -Infinity / -1 === Infinity. Actual: ' + (-Infinity / -1));
+}
+
+//CHECK#3
+if (Number.POSITIVE_INFINITY / 1 !== Number.POSITIVE_INFINITY) {
+ $ERROR('#3: Infinity / 1 === Infinity. Actual: ' + (Infinity / 1));
+}
+
+//CHECK#4
+if (Number.POSITIVE_INFINITY / -1 !== Number.NEGATIVE_INFINITY) {
+ $ERROR('#4: Infinity / -1 === -Infinity. Actual: ' + (Infinity / -1));
+}
+
+//CHECK#5
+if (Number.POSITIVE_INFINITY / -Number.MAX_VALUE !== Number.NEGATIVE_INFINITY) {
+ $ERROR('#5: Infinity / -Number.MAX_VALUE === -Infinity. Actual: ' + (Infinity / -Number.MAX_VALUE));
+}
+
+//CHECK#6
+if (Number.NEGATIVE_INFINITY / Number.MIN_VALUE !== Number.NEGATIVE_INFINITY) {
+ $ERROR('#6: -Infinity / Number.MIN_VALUE === -Infinity. Actual: ' + (-Infinity / Number.MIN_VALUE));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/division/S11.5.2_A4_T6.js b/js/src/tests/test262/language/expressions/division/S11.5.2_A4_T6.js
new file mode 100644
index 0000000000..81a50c3336
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/division/S11.5.2_A4_T6.js
@@ -0,0 +1,50 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The result of division is determined by the specification of IEEE 754
+ arithmetics
+es5id: 11.5.2_A4_T6
+description: >
+ Division of a finite value by an infinity results in zero of
+ appropriate sign
+---*/
+
+//CHECK#1
+if (1 / Number.NEGATIVE_INFINITY !== -0) {
+ $ERROR('#1.1: 1 / -Infinity === 0. Actual: ' + (1 / -Infinity));
+} else {
+ if (1 / (1 / Number.NEGATIVE_INFINITY) !== Number.NEGATIVE_INFINITY) {
+ $ERROR('#1.2: 1 / -Infinity === - 0. Actual: +0');
+ }
+}
+
+//CHECK#2
+if (-1 / Number.NEGATIVE_INFINITY !== +0) {
+ $ERROR('#2.1: -1 / -Infinity === 0. Actual: ' + (-1 / -Infinity));
+} else {
+ if (1 / (-1 / Number.NEGATIVE_INFINITY) !== Number.POSITIVE_INFINITY) {
+ $ERROR('#2.2: -1 / -Infinity === + 0. Actual: -0');
+ }
+}
+
+//CHECK#3
+if (1 / Number.POSITIVE_INFINITY !== +0) {
+ $ERROR('#3.1: 1 / Infinity === 0. Actual: ' + (1 / Infinity));
+} else {
+ if (1 / (1 / Number.POSITIVE_INFINITY) !== Number.POSITIVE_INFINITY) {
+ $ERROR('#3.2: 1 / Infinity === + 0. Actual: -0');
+ }
+}
+
+//CHECK#4
+if (-1 / Number.POSITIVE_INFINITY !== -0) {
+ $ERROR('#4.1: -1 / Infinity === 0. Actual: ' + (-1 / Infinity));
+} else {
+ if (1 / (-1 / Number.POSITIVE_INFINITY) !== Number.NEGATIVE_INFINITY) {
+ $ERROR('#4.2: -1 / Infinity === - 0. Actual: +0');
+ }
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/division/S11.5.2_A4_T7.js b/js/src/tests/test262/language/expressions/division/S11.5.2_A4_T7.js
new file mode 100644
index 0000000000..238742dec0
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/division/S11.5.2_A4_T7.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: |
+ The result of division is determined by the specification of IEEE 754
+ arithmetics
+es5id: 11.5.2_A4_T7
+description: Division of a zero by a zero results in NaN
+---*/
+
+//CHECK#1
+if (isNaN(+0 / +0) !== true) {
+ $ERROR('#1: +0 / +0 === Not-a-Number. Actual: ' + (+0 / +0));
+}
+
+//CHECK#2
+if (isNaN(-0 / +0) !== true) {
+ $ERROR('#2: -0 / +0 === Not-a-Number. Actual: ' + (-0 / +0));
+}
+
+//CHECK#3
+if (isNaN(+0 / -0) !== true) {
+ $ERROR('#3: +0 / -0 === Not-a-Number. Actual: ' + (+0 / -0));
+}
+
+//CHECK#4
+if (isNaN(-0 / -0) !== true) {
+ $ERROR('#4: -0 / -0 === Not-a-Number. Actual: ' + (-0 / -0));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/division/S11.5.2_A4_T8.js b/js/src/tests/test262/language/expressions/division/S11.5.2_A4_T8.js
new file mode 100644
index 0000000000..f5bf5faeb1
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/division/S11.5.2_A4_T8.js
@@ -0,0 +1,68 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The result of division is determined by the specification of IEEE 754
+ arithmetics
+es5id: 11.5.2_A4_T8
+description: >
+ Division of a zero by any non-zero finite value -0 results in zero
+ of appropriate sign
+---*/
+
+//CHECK#1
+if (-0 / 1 !== -0) {
+ $ERROR('#1.1: -0 / 1 === 0. Actual: ' + (-0 / 1));
+} else {
+ if (1 / (-0 / 1) !== Number.NEGATIVE_INFINITY) {
+ $ERROR('#1.2: -0 / 1 === - 0. Actual: +0');
+ }
+}
+
+//CHECK#2
+if (-0 / -1 !== +0) {
+ $ERROR('#2.1: -0 / -1 === 0. Actual: ' + (-0 / -1));
+} else {
+ if (1 / (-0 / -1) !== Number.POSITIVE_INFINITY) {
+ $ERROR('#2.2: -0 / -1 === + 0. Actual: -0');
+ }
+}
+
+//CHECK#3
+if (+0 / 1 !== +0) {
+ $ERROR('#3.1: +0 / 1 === 0. Actual: ' + (+0 / 1));
+} else {
+ if (1 / (+0 / -1) !== Number.NEGATIVE_INFINITY) {
+ $ERROR('#3.2: +0 / -1 === + 0. Actual: -0');
+ }
+}
+
+//CHECK#4
+if (+0 / -1 !== -0) {
+ $ERROR('#4.1: +0 / -1 === 0. Actual: ' + (+0 / -1));
+} else {
+ if (1 / (+0 / -1) !== Number.NEGATIVE_INFINITY) {
+ $ERROR('#4.2: +0 / -1 === - 0. Actual: +0');
+ }
+}
+
+//CHECK#5
+if (+0 / -Number.MAX_VALUE !== -0) {
+ $ERROR('#5.1: 0 / -Number.MAX_VALUE === 0. Actual: ' + (0 / -Number.MAX_VALUE));
+} else {
+ if (1 / (+0 / -Number.MAX_VALUE) !== Number.NEGATIVE_INFINITY) {
+ $ERROR('#5.2: +0 / -Number.MAX_VALUE === - 0. Actual: +0');
+ }
+}
+
+//CHECK#6
+if (-0 / Number.MIN_VALUE !== -0) {
+ $ERROR('#6.1: -0 / Number.MIN_VALUE === 0. Actual: ' + (-0 / Number.MIN_VALUE));
+} else {
+ if (1 / (-0 / Number.MIN_VALUE) !== Number.NEGATIVE_INFINITY) {
+ $ERROR('#6.2: -0 / Number.MIN_VALUE === - 0. Actual: +0');
+ }
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/division/S11.5.2_A4_T9.js b/js/src/tests/test262/language/expressions/division/S11.5.2_A4_T9.js
new file mode 100644
index 0000000000..62898fde9c
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/division/S11.5.2_A4_T9.js
@@ -0,0 +1,39 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The result of division is determined by the specification of IEEE 754
+ arithmetics
+es5id: 11.5.2_A4_T9
+description: >
+ If the magnitude is too large to represent, the result is then an
+ infinity of appropriate sign
+---*/
+
+//CHECK#1
+if (Number.MAX_VALUE / 0.9 !== Number.POSITIVE_INFINITY) {
+ $ERROR('#1: Number.MAX_VALUE / 0.9 === Number.POSITIVE_INFINITY. Actual: ' + (Number.MAX_VALUE / 0.9));
+}
+
+//CHECK#2
+if (Number.MAX_VALUE / -0.9 !== Number.NEGATIVE_INFINITY) {
+ $ERROR('#2: Number.MAX_VALUE / -0.9 === Number.NEGATIVE_INFINITY. Actual: ' + (Number.MAX_VALUE / -0.9));
+}
+
+//CHECK#3
+if (Number.MAX_VALUE / 1 !== Number.MAX_VALUE) {
+ $ERROR('#3: Number.MAX_VALUE / 1 === Number.MAX_VALUE. Actual: ' + (Number.MAX_VALUE / 1));
+}
+
+//CHECK#4
+if (Number.MAX_VALUE / -1 !== -Number.MAX_VALUE) {
+ $ERROR('#4: Number.MAX_VALUE / -1 === -Number.MAX_VALUE. Actual: ' + (Number.MAX_VALUE / -1));
+}
+
+//CHECK#5
+if (Number.MAX_VALUE / (Number.MAX_VALUE / 0.9) === (Number.MAX_VALUE / Number.MAX_VALUE) / 0.9) {
+ $ERROR('#5: Number.MAX_VALUE / (Number.MAX_VALUE / 0.9) !== (Number.MAX_VALUE / Number.MAX_VALUE) / 0.9');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/division/bigint-and-number.js b/js/src/tests/test262/language/expressions/division/bigint-and-number.js
new file mode 100644
index 0000000000..c6048d6594
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/division/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-multiplicative-operators-runtime-semantics-evaluation
+description: Mixing BigInt and Number produces a TypeError for division 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/division/bigint-arithmetic.js b/js/src/tests/test262/language/expressions/division/bigint-arithmetic.js
new file mode 100644
index 0000000000..b10eb14b93
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/division/bigint-arithmetic.js
@@ -0,0 +1,1072 @@
+// Copyright (C) 2017 Robin Templeton. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-multiplicative-operators-runtime-semantics-evaluation
+description: BigInt division arithmetic
+features: [BigInt]
+---*/
+assert.sameValue(
+ 0xFEDCBA9876543210n / 0xFEDCBA9876543210n,
+ 0x1n,
+ 'The result of (0xFEDCBA9876543210n / 0xFEDCBA9876543210n) is 0x1n'
+);
+
+assert.sameValue(
+ 0xFEDCBA9876543210n / 0xFEDCBA987654320Fn,
+ 0x1n,
+ 'The result of (0xFEDCBA9876543210n / 0xFEDCBA987654320Fn) is 0x1n'
+);
+
+assert.sameValue(
+ 0xFEDCBA9876543210n / 0xFEDCBA98n,
+ 0x100000000n,
+ 'The result of (0xFEDCBA9876543210n / 0xFEDCBA98n) is 0x100000000n'
+);
+
+assert.sameValue(
+ 0xFEDCBA9876543210n / 0xFEDCBA97n,
+ 0x100000001n,
+ 'The result of (0xFEDCBA9876543210n / 0xFEDCBA97n) is 0x100000001n'
+);
+
+assert.sameValue(
+ 0xFEDCBA9876543210n / 0x1234n,
+ 0xE0042813BE5DCn,
+ 'The result of (0xFEDCBA9876543210n / 0x1234n) is 0xE0042813BE5DCn'
+);
+
+assert.sameValue(
+ 0xFEDCBA9876543210n / 0x3n,
+ 0x54F43E32D21C10B0n,
+ 'The result of (0xFEDCBA9876543210n / 0x3n) is 0x54F43E32D21C10B0n'
+);
+
+assert.sameValue(
+ 0xFEDCBA9876543210n / 0x2n,
+ 0x7F6E5D4C3B2A1908n,
+ 'The result of (0xFEDCBA9876543210n / 0x2n) is 0x7F6E5D4C3B2A1908n'
+);
+
+assert.sameValue(
+ 0xFEDCBA9876543210n / 0x1n,
+ 0xFEDCBA9876543210n,
+ 'The result of (0xFEDCBA9876543210n / 0x1n) is 0xFEDCBA9876543210n'
+);
+
+assert.sameValue(
+ 0xFEDCBA9876543210n / -0x1n,
+ -0xFEDCBA9876543210n,
+ 'The result of (0xFEDCBA9876543210n / -0x1n) is -0xFEDCBA9876543210n'
+);
+
+assert.sameValue(
+ 0xFEDCBA9876543210n / -0x2n,
+ -0x7F6E5D4C3B2A1908n,
+ 'The result of (0xFEDCBA9876543210n / -0x2n) is -0x7F6E5D4C3B2A1908n'
+);
+
+assert.sameValue(
+ 0xFEDCBA9876543210n / -0x3n,
+ -0x54F43E32D21C10B0n,
+ 'The result of (0xFEDCBA9876543210n / -0x3n) is -0x54F43E32D21C10B0n'
+);
+
+assert.sameValue(
+ 0xFEDCBA9876543210n / -0x1234n,
+ -0xE0042813BE5DCn,
+ 'The result of (0xFEDCBA9876543210n / -0x1234n) is -0xE0042813BE5DCn'
+);
+
+assert.sameValue(
+ 0xFEDCBA9876543210n / -0xFEDCBA97n,
+ -0x100000001n,
+ 'The result of (0xFEDCBA9876543210n / -0xFEDCBA97n) is -0x100000001n'
+);
+
+assert.sameValue(
+ 0xFEDCBA9876543210n / -0xFEDCBA98n,
+ -0x100000000n,
+ 'The result of (0xFEDCBA9876543210n / -0xFEDCBA98n) is -0x100000000n'
+);
+
+assert.sameValue(
+ 0xFEDCBA9876543210n / -0xFEDCBA987654320Fn,
+ -0x1n,
+ 'The result of (0xFEDCBA9876543210n / -0xFEDCBA987654320Fn) is -0x1n'
+);
+
+assert.sameValue(
+ 0xFEDCBA9876543210n / -0xFEDCBA9876543210n,
+ -0x1n,
+ 'The result of (0xFEDCBA9876543210n / -0xFEDCBA9876543210n) is -0x1n'
+);
+
+assert.sameValue(
+ 0xFEDCBA987654320Fn / 0xFEDCBA9876543210n,
+ 0x0n,
+ 'The result of (0xFEDCBA987654320Fn / 0xFEDCBA9876543210n) is 0x0n'
+);
+
+assert.sameValue(
+ 0xFEDCBA987654320Fn / 0xFEDCBA987654320Fn,
+ 0x1n,
+ 'The result of (0xFEDCBA987654320Fn / 0xFEDCBA987654320Fn) is 0x1n'
+);
+
+assert.sameValue(
+ 0xFEDCBA987654320Fn / 0xFEDCBA98n,
+ 0x100000000n,
+ 'The result of (0xFEDCBA987654320Fn / 0xFEDCBA98n) is 0x100000000n'
+);
+
+assert.sameValue(
+ 0xFEDCBA987654320Fn / 0xFEDCBA97n,
+ 0x100000001n,
+ 'The result of (0xFEDCBA987654320Fn / 0xFEDCBA97n) is 0x100000001n'
+);
+
+assert.sameValue(
+ 0xFEDCBA987654320Fn / 0x1234n,
+ 0xE0042813BE5DCn,
+ 'The result of (0xFEDCBA987654320Fn / 0x1234n) is 0xE0042813BE5DCn'
+);
+
+assert.sameValue(
+ 0xFEDCBA987654320Fn / 0x3n,
+ 0x54F43E32D21C10AFn,
+ 'The result of (0xFEDCBA987654320Fn / 0x3n) is 0x54F43E32D21C10AFn'
+);
+
+assert.sameValue(
+ 0xFEDCBA987654320Fn / 0x2n,
+ 0x7F6E5D4C3B2A1907n,
+ 'The result of (0xFEDCBA987654320Fn / 0x2n) is 0x7F6E5D4C3B2A1907n'
+);
+
+assert.sameValue(
+ 0xFEDCBA987654320Fn / 0x1n,
+ 0xFEDCBA987654320Fn,
+ 'The result of (0xFEDCBA987654320Fn / 0x1n) is 0xFEDCBA987654320Fn'
+);
+
+assert.sameValue(
+ 0xFEDCBA987654320Fn / -0x1n,
+ -0xFEDCBA987654320Fn,
+ 'The result of (0xFEDCBA987654320Fn / -0x1n) is -0xFEDCBA987654320Fn'
+);
+
+assert.sameValue(
+ 0xFEDCBA987654320Fn / -0x2n,
+ -0x7F6E5D4C3B2A1907n,
+ 'The result of (0xFEDCBA987654320Fn / -0x2n) is -0x7F6E5D4C3B2A1907n'
+);
+
+assert.sameValue(
+ 0xFEDCBA987654320Fn / -0x3n,
+ -0x54F43E32D21C10AFn,
+ 'The result of (0xFEDCBA987654320Fn / -0x3n) is -0x54F43E32D21C10AFn'
+);
+
+assert.sameValue(
+ 0xFEDCBA987654320Fn / -0x1234n,
+ -0xE0042813BE5DCn,
+ 'The result of (0xFEDCBA987654320Fn / -0x1234n) is -0xE0042813BE5DCn'
+);
+
+assert.sameValue(
+ 0xFEDCBA987654320Fn / -0xFEDCBA97n,
+ -0x100000001n,
+ 'The result of (0xFEDCBA987654320Fn / -0xFEDCBA97n) is -0x100000001n'
+);
+
+assert.sameValue(
+ 0xFEDCBA987654320Fn / -0xFEDCBA98n,
+ -0x100000000n,
+ 'The result of (0xFEDCBA987654320Fn / -0xFEDCBA98n) is -0x100000000n'
+);
+
+assert.sameValue(
+ 0xFEDCBA987654320Fn / -0xFEDCBA987654320Fn,
+ -0x1n,
+ 'The result of (0xFEDCBA987654320Fn / -0xFEDCBA987654320Fn) is -0x1n'
+);
+
+assert.sameValue(
+ 0xFEDCBA987654320Fn / -0xFEDCBA9876543210n,
+ 0x0n,
+ 'The result of (0xFEDCBA987654320Fn / -0xFEDCBA9876543210n) is 0x0n'
+);
+
+assert.sameValue(
+ 0xFEDCBA98n / 0xFEDCBA9876543210n,
+ 0x0n,
+ 'The result of (0xFEDCBA98n / 0xFEDCBA9876543210n) is 0x0n'
+);
+
+assert.sameValue(
+ 0xFEDCBA98n / 0xFEDCBA987654320Fn,
+ 0x0n,
+ 'The result of (0xFEDCBA98n / 0xFEDCBA987654320Fn) is 0x0n'
+);
+
+assert.sameValue(
+ 0xFEDCBA98n / 0xFEDCBA98n,
+ 0x1n,
+ 'The result of (0xFEDCBA98n / 0xFEDCBA98n) is 0x1n'
+);
+
+assert.sameValue(
+ 0xFEDCBA98n / 0xFEDCBA97n,
+ 0x1n,
+ 'The result of (0xFEDCBA98n / 0xFEDCBA97n) is 0x1n'
+);
+
+assert.sameValue(
+ 0xFEDCBA98n / 0x1234n,
+ 0xE0042n,
+ 'The result of (0xFEDCBA98n / 0x1234n) is 0xE0042n'
+);
+
+assert.sameValue(
+ 0xFEDCBA98n / 0x3n,
+ 0x54F43E32n,
+ 'The result of (0xFEDCBA98n / 0x3n) is 0x54F43E32n'
+);
+
+assert.sameValue(
+ 0xFEDCBA98n / 0x2n,
+ 0x7F6E5D4Cn,
+ 'The result of (0xFEDCBA98n / 0x2n) is 0x7F6E5D4Cn'
+);
+
+assert.sameValue(
+ 0xFEDCBA98n / 0x1n,
+ 0xFEDCBA98n,
+ 'The result of (0xFEDCBA98n / 0x1n) is 0xFEDCBA98n'
+);
+
+assert.sameValue(
+ 0xFEDCBA98n / -0x1n,
+ -0xFEDCBA98n,
+ 'The result of (0xFEDCBA98n / -0x1n) is -0xFEDCBA98n'
+);
+
+assert.sameValue(
+ 0xFEDCBA98n / -0x2n,
+ -0x7F6E5D4Cn,
+ 'The result of (0xFEDCBA98n / -0x2n) is -0x7F6E5D4Cn'
+);
+
+assert.sameValue(
+ 0xFEDCBA98n / -0x3n,
+ -0x54F43E32n,
+ 'The result of (0xFEDCBA98n / -0x3n) is -0x54F43E32n'
+);
+
+assert.sameValue(
+ 0xFEDCBA98n / -0x1234n,
+ -0xE0042n,
+ 'The result of (0xFEDCBA98n / -0x1234n) is -0xE0042n'
+);
+
+assert.sameValue(
+ 0xFEDCBA98n / -0xFEDCBA97n,
+ -0x1n,
+ 'The result of (0xFEDCBA98n / -0xFEDCBA97n) is -0x1n'
+);
+
+assert.sameValue(
+ 0xFEDCBA98n / -0xFEDCBA98n,
+ -0x1n,
+ 'The result of (0xFEDCBA98n / -0xFEDCBA98n) is -0x1n'
+);
+
+assert.sameValue(
+ 0xFEDCBA98n / -0xFEDCBA987654320Fn,
+ 0x0n,
+ 'The result of (0xFEDCBA98n / -0xFEDCBA987654320Fn) is 0x0n'
+);
+
+assert.sameValue(
+ 0xFEDCBA98n / -0xFEDCBA9876543210n,
+ 0x0n,
+ 'The result of (0xFEDCBA98n / -0xFEDCBA9876543210n) is 0x0n'
+);
+
+assert.sameValue(
+ 0xFEDCBA97n / 0xFEDCBA9876543210n,
+ 0x0n,
+ 'The result of (0xFEDCBA97n / 0xFEDCBA9876543210n) is 0x0n'
+);
+
+assert.sameValue(
+ 0xFEDCBA97n / 0xFEDCBA987654320Fn,
+ 0x0n,
+ 'The result of (0xFEDCBA97n / 0xFEDCBA987654320Fn) is 0x0n'
+);
+
+assert.sameValue(
+ 0xFEDCBA97n / 0xFEDCBA98n,
+ 0x0n,
+ 'The result of (0xFEDCBA97n / 0xFEDCBA98n) is 0x0n'
+);
+
+assert.sameValue(
+ 0xFEDCBA97n / 0xFEDCBA97n,
+ 0x1n,
+ 'The result of (0xFEDCBA97n / 0xFEDCBA97n) is 0x1n'
+);
+
+assert.sameValue(
+ 0xFEDCBA97n / 0x1234n,
+ 0xE0042n,
+ 'The result of (0xFEDCBA97n / 0x1234n) is 0xE0042n'
+);
+
+assert.sameValue(
+ 0xFEDCBA97n / 0x3n,
+ 0x54F43E32n,
+ 'The result of (0xFEDCBA97n / 0x3n) is 0x54F43E32n'
+);
+
+assert.sameValue(
+ 0xFEDCBA97n / 0x2n,
+ 0x7F6E5D4Bn,
+ 'The result of (0xFEDCBA97n / 0x2n) is 0x7F6E5D4Bn'
+);
+
+assert.sameValue(
+ 0xFEDCBA97n / 0x1n,
+ 0xFEDCBA97n,
+ 'The result of (0xFEDCBA97n / 0x1n) is 0xFEDCBA97n'
+);
+
+assert.sameValue(
+ 0xFEDCBA97n / -0x1n,
+ -0xFEDCBA97n,
+ 'The result of (0xFEDCBA97n / -0x1n) is -0xFEDCBA97n'
+);
+
+assert.sameValue(
+ 0xFEDCBA97n / -0x2n,
+ -0x7F6E5D4Bn,
+ 'The result of (0xFEDCBA97n / -0x2n) is -0x7F6E5D4Bn'
+);
+
+assert.sameValue(
+ 0xFEDCBA97n / -0x3n,
+ -0x54F43E32n,
+ 'The result of (0xFEDCBA97n / -0x3n) is -0x54F43E32n'
+);
+
+assert.sameValue(
+ 0xFEDCBA97n / -0x1234n,
+ -0xE0042n,
+ 'The result of (0xFEDCBA97n / -0x1234n) is -0xE0042n'
+);
+
+assert.sameValue(
+ 0xFEDCBA97n / -0xFEDCBA97n,
+ -0x1n,
+ 'The result of (0xFEDCBA97n / -0xFEDCBA97n) is -0x1n'
+);
+
+assert.sameValue(
+ 0xFEDCBA97n / -0xFEDCBA98n,
+ 0x0n,
+ 'The result of (0xFEDCBA97n / -0xFEDCBA98n) is 0x0n'
+);
+
+assert.sameValue(
+ 0xFEDCBA97n / -0xFEDCBA987654320Fn,
+ 0x0n,
+ 'The result of (0xFEDCBA97n / -0xFEDCBA987654320Fn) is 0x0n'
+);
+
+assert.sameValue(
+ 0xFEDCBA97n / -0xFEDCBA9876543210n,
+ 0x0n,
+ 'The result of (0xFEDCBA97n / -0xFEDCBA9876543210n) is 0x0n'
+);
+
+assert.sameValue(
+ 0x1234n / 0xFEDCBA9876543210n,
+ 0x0n,
+ 'The result of (0x1234n / 0xFEDCBA9876543210n) is 0x0n'
+);
+
+assert.sameValue(
+ 0x1234n / 0xFEDCBA987654320Fn,
+ 0x0n,
+ 'The result of (0x1234n / 0xFEDCBA987654320Fn) is 0x0n'
+);
+
+assert.sameValue(0x1234n / 0xFEDCBA98n, 0x0n, 'The result of (0x1234n / 0xFEDCBA98n) is 0x0n');
+assert.sameValue(0x1234n / 0xFEDCBA97n, 0x0n, 'The result of (0x1234n / 0xFEDCBA97n) is 0x0n');
+assert.sameValue(0x1234n / 0x1234n, 0x1n, 'The result of (0x1234n / 0x1234n) is 0x1n');
+assert.sameValue(0x1234n / 0x3n, 0x611n, 'The result of (0x1234n / 0x3n) is 0x611n');
+assert.sameValue(0x1234n / 0x2n, 0x91An, 'The result of (0x1234n / 0x2n) is 0x91An');
+assert.sameValue(0x1234n / 0x1n, 0x1234n, 'The result of (0x1234n / 0x1n) is 0x1234n');
+assert.sameValue(0x1234n / -0x1n, -0x1234n, 'The result of (0x1234n / -0x1n) is -0x1234n');
+assert.sameValue(0x1234n / -0x2n, -0x91An, 'The result of (0x1234n / -0x2n) is -0x91An');
+assert.sameValue(0x1234n / -0x3n, -0x611n, 'The result of (0x1234n / -0x3n) is -0x611n');
+assert.sameValue(0x1234n / -0x1234n, -0x1n, 'The result of (0x1234n / -0x1234n) is -0x1n');
+assert.sameValue(0x1234n / -0xFEDCBA97n, 0x0n, 'The result of (0x1234n / -0xFEDCBA97n) is 0x0n');
+assert.sameValue(0x1234n / -0xFEDCBA98n, 0x0n, 'The result of (0x1234n / -0xFEDCBA98n) is 0x0n');
+
+assert.sameValue(
+ 0x1234n / -0xFEDCBA987654320Fn,
+ 0x0n,
+ 'The result of (0x1234n / -0xFEDCBA987654320Fn) is 0x0n'
+);
+
+assert.sameValue(
+ 0x1234n / -0xFEDCBA9876543210n,
+ 0x0n,
+ 'The result of (0x1234n / -0xFEDCBA9876543210n) is 0x0n'
+);
+
+assert.sameValue(
+ 0x3n / 0xFEDCBA9876543210n,
+ 0x0n,
+ 'The result of (0x3n / 0xFEDCBA9876543210n) is 0x0n'
+);
+
+assert.sameValue(
+ 0x3n / 0xFEDCBA987654320Fn,
+ 0x0n,
+ 'The result of (0x3n / 0xFEDCBA987654320Fn) is 0x0n'
+);
+
+assert.sameValue(0x3n / 0xFEDCBA98n, 0x0n, 'The result of (0x3n / 0xFEDCBA98n) is 0x0n');
+assert.sameValue(0x3n / 0xFEDCBA97n, 0x0n, 'The result of (0x3n / 0xFEDCBA97n) is 0x0n');
+assert.sameValue(0x3n / 0x1234n, 0x0n, 'The result of (0x3n / 0x1234n) is 0x0n');
+assert.sameValue(0x3n / 0x3n, 0x1n, 'The result of (0x3n / 0x3n) is 0x1n');
+assert.sameValue(0x3n / 0x2n, 0x1n, 'The result of (0x3n / 0x2n) is 0x1n');
+assert.sameValue(0x3n / 0x1n, 0x3n, 'The result of (0x3n / 0x1n) is 0x3n');
+assert.sameValue(0x3n / -0x1n, -0x3n, 'The result of (0x3n / -0x1n) is -0x3n');
+assert.sameValue(0x3n / -0x2n, -0x1n, 'The result of (0x3n / -0x2n) is -0x1n');
+assert.sameValue(0x3n / -0x3n, -0x1n, 'The result of (0x3n / -0x3n) is -0x1n');
+assert.sameValue(0x3n / -0x1234n, 0x0n, 'The result of (0x3n / -0x1234n) is 0x0n');
+assert.sameValue(0x3n / -0xFEDCBA97n, 0x0n, 'The result of (0x3n / -0xFEDCBA97n) is 0x0n');
+assert.sameValue(0x3n / -0xFEDCBA98n, 0x0n, 'The result of (0x3n / -0xFEDCBA98n) is 0x0n');
+
+assert.sameValue(
+ 0x3n / -0xFEDCBA987654320Fn,
+ 0x0n,
+ 'The result of (0x3n / -0xFEDCBA987654320Fn) is 0x0n'
+);
+
+assert.sameValue(
+ 0x3n / -0xFEDCBA9876543210n,
+ 0x0n,
+ 'The result of (0x3n / -0xFEDCBA9876543210n) is 0x0n'
+);
+
+assert.sameValue(
+ 0x2n / 0xFEDCBA9876543210n,
+ 0x0n,
+ 'The result of (0x2n / 0xFEDCBA9876543210n) is 0x0n'
+);
+
+assert.sameValue(
+ 0x2n / 0xFEDCBA987654320Fn,
+ 0x0n,
+ 'The result of (0x2n / 0xFEDCBA987654320Fn) is 0x0n'
+);
+
+assert.sameValue(0x2n / 0xFEDCBA98n, 0x0n, 'The result of (0x2n / 0xFEDCBA98n) is 0x0n');
+assert.sameValue(0x2n / 0xFEDCBA97n, 0x0n, 'The result of (0x2n / 0xFEDCBA97n) is 0x0n');
+assert.sameValue(0x2n / 0x1234n, 0x0n, 'The result of (0x2n / 0x1234n) is 0x0n');
+assert.sameValue(0x2n / 0x3n, 0x0n, 'The result of (0x2n / 0x3n) is 0x0n');
+assert.sameValue(0x2n / 0x2n, 0x1n, 'The result of (0x2n / 0x2n) is 0x1n');
+assert.sameValue(0x2n / 0x1n, 0x2n, 'The result of (0x2n / 0x1n) is 0x2n');
+assert.sameValue(0x2n / -0x1n, -0x2n, 'The result of (0x2n / -0x1n) is -0x2n');
+assert.sameValue(0x2n / -0x2n, -0x1n, 'The result of (0x2n / -0x2n) is -0x1n');
+assert.sameValue(0x2n / -0x3n, 0x0n, 'The result of (0x2n / -0x3n) is 0x0n');
+assert.sameValue(0x2n / -0x1234n, 0x0n, 'The result of (0x2n / -0x1234n) is 0x0n');
+assert.sameValue(0x2n / -0xFEDCBA97n, 0x0n, 'The result of (0x2n / -0xFEDCBA97n) is 0x0n');
+assert.sameValue(0x2n / -0xFEDCBA98n, 0x0n, 'The result of (0x2n / -0xFEDCBA98n) is 0x0n');
+
+assert.sameValue(
+ 0x2n / -0xFEDCBA987654320Fn,
+ 0x0n,
+ 'The result of (0x2n / -0xFEDCBA987654320Fn) is 0x0n'
+);
+
+assert.sameValue(
+ 0x2n / -0xFEDCBA9876543210n,
+ 0x0n,
+ 'The result of (0x2n / -0xFEDCBA9876543210n) is 0x0n'
+);
+
+assert.sameValue(
+ 0x1n / 0xFEDCBA9876543210n,
+ 0x0n,
+ 'The result of (0x1n / 0xFEDCBA9876543210n) is 0x0n'
+);
+
+assert.sameValue(
+ 0x1n / 0xFEDCBA987654320Fn,
+ 0x0n,
+ 'The result of (0x1n / 0xFEDCBA987654320Fn) is 0x0n'
+);
+
+assert.sameValue(0x1n / 0xFEDCBA98n, 0x0n, 'The result of (0x1n / 0xFEDCBA98n) is 0x0n');
+assert.sameValue(0x1n / 0xFEDCBA97n, 0x0n, 'The result of (0x1n / 0xFEDCBA97n) is 0x0n');
+assert.sameValue(0x1n / 0x1234n, 0x0n, 'The result of (0x1n / 0x1234n) is 0x0n');
+assert.sameValue(0x1n / 0x3n, 0x0n, 'The result of (0x1n / 0x3n) is 0x0n');
+assert.sameValue(0x1n / 0x2n, 0x0n, 'The result of (0x1n / 0x2n) is 0x0n');
+assert.sameValue(0x1n / 0x1n, 0x1n, 'The result of (0x1n / 0x1n) is 0x1n');
+assert.sameValue(0x1n / -0x1n, -0x1n, 'The result of (0x1n / -0x1n) is -0x1n');
+assert.sameValue(0x1n / -0x2n, 0x0n, 'The result of (0x1n / -0x2n) is 0x0n');
+assert.sameValue(0x1n / -0x3n, 0x0n, 'The result of (0x1n / -0x3n) is 0x0n');
+assert.sameValue(0x1n / -0x1234n, 0x0n, 'The result of (0x1n / -0x1234n) is 0x0n');
+assert.sameValue(0x1n / -0xFEDCBA97n, 0x0n, 'The result of (0x1n / -0xFEDCBA97n) is 0x0n');
+assert.sameValue(0x1n / -0xFEDCBA98n, 0x0n, 'The result of (0x1n / -0xFEDCBA98n) is 0x0n');
+
+assert.sameValue(
+ 0x1n / -0xFEDCBA987654320Fn,
+ 0x0n,
+ 'The result of (0x1n / -0xFEDCBA987654320Fn) is 0x0n'
+);
+
+assert.sameValue(
+ 0x1n / -0xFEDCBA9876543210n,
+ 0x0n,
+ 'The result of (0x1n / -0xFEDCBA9876543210n) is 0x0n'
+);
+
+assert.sameValue(
+ -0x1n / 0xFEDCBA9876543210n,
+ 0x0n,
+ 'The result of (-0x1n / 0xFEDCBA9876543210n) is 0x0n'
+);
+
+assert.sameValue(
+ -0x1n / 0xFEDCBA987654320Fn,
+ 0x0n,
+ 'The result of (-0x1n / 0xFEDCBA987654320Fn) is 0x0n'
+);
+
+assert.sameValue(-0x1n / 0xFEDCBA98n, 0x0n, 'The result of (-0x1n / 0xFEDCBA98n) is 0x0n');
+assert.sameValue(-0x1n / 0xFEDCBA97n, 0x0n, 'The result of (-0x1n / 0xFEDCBA97n) is 0x0n');
+assert.sameValue(-0x1n / 0x1234n, 0x0n, 'The result of (-0x1n / 0x1234n) is 0x0n');
+assert.sameValue(-0x1n / 0x3n, 0x0n, 'The result of (-0x1n / 0x3n) is 0x0n');
+assert.sameValue(-0x1n / 0x2n, 0x0n, 'The result of (-0x1n / 0x2n) is 0x0n');
+assert.sameValue(-0x1n / 0x1n, -0x1n, 'The result of (-0x1n / 0x1n) is -0x1n');
+assert.sameValue(-0x1n / -0x1n, 0x1n, 'The result of (-0x1n / -0x1n) is 0x1n');
+assert.sameValue(-0x1n / -0x2n, 0x0n, 'The result of (-0x1n / -0x2n) is 0x0n');
+assert.sameValue(-0x1n / -0x3n, 0x0n, 'The result of (-0x1n / -0x3n) is 0x0n');
+assert.sameValue(-0x1n / -0x1234n, 0x0n, 'The result of (-0x1n / -0x1234n) is 0x0n');
+assert.sameValue(-0x1n / -0xFEDCBA97n, 0x0n, 'The result of (-0x1n / -0xFEDCBA97n) is 0x0n');
+assert.sameValue(-0x1n / -0xFEDCBA98n, 0x0n, 'The result of (-0x1n / -0xFEDCBA98n) is 0x0n');
+
+assert.sameValue(
+ -0x1n / -0xFEDCBA987654320Fn,
+ 0x0n,
+ 'The result of (-0x1n / -0xFEDCBA987654320Fn) is 0x0n'
+);
+
+assert.sameValue(
+ -0x1n / -0xFEDCBA9876543210n,
+ 0x0n,
+ 'The result of (-0x1n / -0xFEDCBA9876543210n) is 0x0n'
+);
+
+assert.sameValue(
+ -0x2n / 0xFEDCBA9876543210n,
+ 0x0n,
+ 'The result of (-0x2n / 0xFEDCBA9876543210n) is 0x0n'
+);
+
+assert.sameValue(
+ -0x2n / 0xFEDCBA987654320Fn,
+ 0x0n,
+ 'The result of (-0x2n / 0xFEDCBA987654320Fn) is 0x0n'
+);
+
+assert.sameValue(-0x2n / 0xFEDCBA98n, 0x0n, 'The result of (-0x2n / 0xFEDCBA98n) is 0x0n');
+assert.sameValue(-0x2n / 0xFEDCBA97n, 0x0n, 'The result of (-0x2n / 0xFEDCBA97n) is 0x0n');
+assert.sameValue(-0x2n / 0x1234n, 0x0n, 'The result of (-0x2n / 0x1234n) is 0x0n');
+assert.sameValue(-0x2n / 0x3n, 0x0n, 'The result of (-0x2n / 0x3n) is 0x0n');
+assert.sameValue(-0x2n / 0x2n, -0x1n, 'The result of (-0x2n / 0x2n) is -0x1n');
+assert.sameValue(-0x2n / 0x1n, -0x2n, 'The result of (-0x2n / 0x1n) is -0x2n');
+assert.sameValue(-0x2n / -0x1n, 0x2n, 'The result of (-0x2n / -0x1n) is 0x2n');
+assert.sameValue(-0x2n / -0x2n, 0x1n, 'The result of (-0x2n / -0x2n) is 0x1n');
+assert.sameValue(-0x2n / -0x3n, 0x0n, 'The result of (-0x2n / -0x3n) is 0x0n');
+assert.sameValue(-0x2n / -0x1234n, 0x0n, 'The result of (-0x2n / -0x1234n) is 0x0n');
+assert.sameValue(-0x2n / -0xFEDCBA97n, 0x0n, 'The result of (-0x2n / -0xFEDCBA97n) is 0x0n');
+assert.sameValue(-0x2n / -0xFEDCBA98n, 0x0n, 'The result of (-0x2n / -0xFEDCBA98n) is 0x0n');
+
+assert.sameValue(
+ -0x2n / -0xFEDCBA987654320Fn,
+ 0x0n,
+ 'The result of (-0x2n / -0xFEDCBA987654320Fn) is 0x0n'
+);
+
+assert.sameValue(
+ -0x2n / -0xFEDCBA9876543210n,
+ 0x0n,
+ 'The result of (-0x2n / -0xFEDCBA9876543210n) is 0x0n'
+);
+
+assert.sameValue(
+ -0x3n / 0xFEDCBA9876543210n,
+ 0x0n,
+ 'The result of (-0x3n / 0xFEDCBA9876543210n) is 0x0n'
+);
+
+assert.sameValue(
+ -0x3n / 0xFEDCBA987654320Fn,
+ 0x0n,
+ 'The result of (-0x3n / 0xFEDCBA987654320Fn) is 0x0n'
+);
+
+assert.sameValue(-0x3n / 0xFEDCBA98n, 0x0n, 'The result of (-0x3n / 0xFEDCBA98n) is 0x0n');
+assert.sameValue(-0x3n / 0xFEDCBA97n, 0x0n, 'The result of (-0x3n / 0xFEDCBA97n) is 0x0n');
+assert.sameValue(-0x3n / 0x1234n, 0x0n, 'The result of (-0x3n / 0x1234n) is 0x0n');
+assert.sameValue(-0x3n / 0x3n, -0x1n, 'The result of (-0x3n / 0x3n) is -0x1n');
+assert.sameValue(-0x3n / 0x2n, -0x1n, 'The result of (-0x3n / 0x2n) is -0x1n');
+assert.sameValue(-0x3n / 0x1n, -0x3n, 'The result of (-0x3n / 0x1n) is -0x3n');
+assert.sameValue(-0x3n / -0x1n, 0x3n, 'The result of (-0x3n / -0x1n) is 0x3n');
+assert.sameValue(-0x3n / -0x2n, 0x1n, 'The result of (-0x3n / -0x2n) is 0x1n');
+assert.sameValue(-0x3n / -0x3n, 0x1n, 'The result of (-0x3n / -0x3n) is 0x1n');
+assert.sameValue(-0x3n / -0x1234n, 0x0n, 'The result of (-0x3n / -0x1234n) is 0x0n');
+assert.sameValue(-0x3n / -0xFEDCBA97n, 0x0n, 'The result of (-0x3n / -0xFEDCBA97n) is 0x0n');
+assert.sameValue(-0x3n / -0xFEDCBA98n, 0x0n, 'The result of (-0x3n / -0xFEDCBA98n) is 0x0n');
+
+assert.sameValue(
+ -0x3n / -0xFEDCBA987654320Fn,
+ 0x0n,
+ 'The result of (-0x3n / -0xFEDCBA987654320Fn) is 0x0n'
+);
+
+assert.sameValue(
+ -0x3n / -0xFEDCBA9876543210n,
+ 0x0n,
+ 'The result of (-0x3n / -0xFEDCBA9876543210n) is 0x0n'
+);
+
+assert.sameValue(
+ -0x1234n / 0xFEDCBA9876543210n,
+ 0x0n,
+ 'The result of (-0x1234n / 0xFEDCBA9876543210n) is 0x0n'
+);
+
+assert.sameValue(
+ -0x1234n / 0xFEDCBA987654320Fn,
+ 0x0n,
+ 'The result of (-0x1234n / 0xFEDCBA987654320Fn) is 0x0n'
+);
+
+assert.sameValue(-0x1234n / 0xFEDCBA98n, 0x0n, 'The result of (-0x1234n / 0xFEDCBA98n) is 0x0n');
+assert.sameValue(-0x1234n / 0xFEDCBA97n, 0x0n, 'The result of (-0x1234n / 0xFEDCBA97n) is 0x0n');
+assert.sameValue(-0x1234n / 0x1234n, -0x1n, 'The result of (-0x1234n / 0x1234n) is -0x1n');
+assert.sameValue(-0x1234n / 0x3n, -0x611n, 'The result of (-0x1234n / 0x3n) is -0x611n');
+assert.sameValue(-0x1234n / 0x2n, -0x91An, 'The result of (-0x1234n / 0x2n) is -0x91An');
+assert.sameValue(-0x1234n / 0x1n, -0x1234n, 'The result of (-0x1234n / 0x1n) is -0x1234n');
+assert.sameValue(-0x1234n / -0x1n, 0x1234n, 'The result of (-0x1234n / -0x1n) is 0x1234n');
+assert.sameValue(-0x1234n / -0x2n, 0x91An, 'The result of (-0x1234n / -0x2n) is 0x91An');
+assert.sameValue(-0x1234n / -0x3n, 0x611n, 'The result of (-0x1234n / -0x3n) is 0x611n');
+assert.sameValue(-0x1234n / -0x1234n, 0x1n, 'The result of (-0x1234n / -0x1234n) is 0x1n');
+assert.sameValue(-0x1234n / -0xFEDCBA97n, 0x0n, 'The result of (-0x1234n / -0xFEDCBA97n) is 0x0n');
+assert.sameValue(-0x1234n / -0xFEDCBA98n, 0x0n, 'The result of (-0x1234n / -0xFEDCBA98n) is 0x0n');
+
+assert.sameValue(
+ -0x1234n / -0xFEDCBA987654320Fn,
+ 0x0n,
+ 'The result of (-0x1234n / -0xFEDCBA987654320Fn) is 0x0n'
+);
+
+assert.sameValue(
+ -0x1234n / -0xFEDCBA9876543210n,
+ 0x0n,
+ 'The result of (-0x1234n / -0xFEDCBA9876543210n) is 0x0n'
+);
+
+assert.sameValue(
+ -0xFEDCBA97n / 0xFEDCBA9876543210n,
+ 0x0n,
+ 'The result of (-0xFEDCBA97n / 0xFEDCBA9876543210n) is 0x0n'
+);
+
+assert.sameValue(
+ -0xFEDCBA97n / 0xFEDCBA987654320Fn,
+ 0x0n,
+ 'The result of (-0xFEDCBA97n / 0xFEDCBA987654320Fn) is 0x0n'
+);
+
+assert.sameValue(
+ -0xFEDCBA97n / 0xFEDCBA98n,
+ 0x0n,
+ 'The result of (-0xFEDCBA97n / 0xFEDCBA98n) is 0x0n'
+);
+
+assert.sameValue(
+ -0xFEDCBA97n / 0xFEDCBA97n,
+ -0x1n,
+ 'The result of (-0xFEDCBA97n / 0xFEDCBA97n) is -0x1n'
+);
+
+assert.sameValue(
+ -0xFEDCBA97n / 0x1234n,
+ -0xE0042n,
+ 'The result of (-0xFEDCBA97n / 0x1234n) is -0xE0042n'
+);
+
+assert.sameValue(
+ -0xFEDCBA97n / 0x3n,
+ -0x54F43E32n,
+ 'The result of (-0xFEDCBA97n / 0x3n) is -0x54F43E32n'
+);
+
+assert.sameValue(
+ -0xFEDCBA97n / 0x2n,
+ -0x7F6E5D4Bn,
+ 'The result of (-0xFEDCBA97n / 0x2n) is -0x7F6E5D4Bn'
+);
+
+assert.sameValue(
+ -0xFEDCBA97n / 0x1n,
+ -0xFEDCBA97n,
+ 'The result of (-0xFEDCBA97n / 0x1n) is -0xFEDCBA97n'
+);
+
+assert.sameValue(
+ -0xFEDCBA97n / -0x1n,
+ 0xFEDCBA97n,
+ 'The result of (-0xFEDCBA97n / -0x1n) is 0xFEDCBA97n'
+);
+
+assert.sameValue(
+ -0xFEDCBA97n / -0x2n,
+ 0x7F6E5D4Bn,
+ 'The result of (-0xFEDCBA97n / -0x2n) is 0x7F6E5D4Bn'
+);
+
+assert.sameValue(
+ -0xFEDCBA97n / -0x3n,
+ 0x54F43E32n,
+ 'The result of (-0xFEDCBA97n / -0x3n) is 0x54F43E32n'
+);
+
+assert.sameValue(
+ -0xFEDCBA97n / -0x1234n,
+ 0xE0042n,
+ 'The result of (-0xFEDCBA97n / -0x1234n) is 0xE0042n'
+);
+
+assert.sameValue(
+ -0xFEDCBA97n / -0xFEDCBA97n,
+ 0x1n,
+ 'The result of (-0xFEDCBA97n / -0xFEDCBA97n) is 0x1n'
+);
+
+assert.sameValue(
+ -0xFEDCBA97n / -0xFEDCBA98n,
+ 0x0n,
+ 'The result of (-0xFEDCBA97n / -0xFEDCBA98n) is 0x0n'
+);
+
+assert.sameValue(
+ -0xFEDCBA97n / -0xFEDCBA987654320Fn,
+ 0x0n,
+ 'The result of (-0xFEDCBA97n / -0xFEDCBA987654320Fn) is 0x0n'
+);
+
+assert.sameValue(
+ -0xFEDCBA97n / -0xFEDCBA9876543210n,
+ 0x0n,
+ 'The result of (-0xFEDCBA97n / -0xFEDCBA9876543210n) is 0x0n'
+);
+
+assert.sameValue(
+ -0xFEDCBA98n / 0xFEDCBA9876543210n,
+ 0x0n,
+ 'The result of (-0xFEDCBA98n / 0xFEDCBA9876543210n) is 0x0n'
+);
+
+assert.sameValue(
+ -0xFEDCBA98n / 0xFEDCBA987654320Fn,
+ 0x0n,
+ 'The result of (-0xFEDCBA98n / 0xFEDCBA987654320Fn) is 0x0n'
+);
+
+assert.sameValue(
+ -0xFEDCBA98n / 0xFEDCBA98n,
+ -0x1n,
+ 'The result of (-0xFEDCBA98n / 0xFEDCBA98n) is -0x1n'
+);
+
+assert.sameValue(
+ -0xFEDCBA98n / 0xFEDCBA97n,
+ -0x1n,
+ 'The result of (-0xFEDCBA98n / 0xFEDCBA97n) is -0x1n'
+);
+
+assert.sameValue(
+ -0xFEDCBA98n / 0x1234n,
+ -0xE0042n,
+ 'The result of (-0xFEDCBA98n / 0x1234n) is -0xE0042n'
+);
+
+assert.sameValue(
+ -0xFEDCBA98n / 0x3n,
+ -0x54F43E32n,
+ 'The result of (-0xFEDCBA98n / 0x3n) is -0x54F43E32n'
+);
+
+assert.sameValue(
+ -0xFEDCBA98n / 0x2n,
+ -0x7F6E5D4Cn,
+ 'The result of (-0xFEDCBA98n / 0x2n) is -0x7F6E5D4Cn'
+);
+
+assert.sameValue(
+ -0xFEDCBA98n / 0x1n,
+ -0xFEDCBA98n,
+ 'The result of (-0xFEDCBA98n / 0x1n) is -0xFEDCBA98n'
+);
+
+assert.sameValue(
+ -0xFEDCBA98n / -0x1n,
+ 0xFEDCBA98n,
+ 'The result of (-0xFEDCBA98n / -0x1n) is 0xFEDCBA98n'
+);
+
+assert.sameValue(
+ -0xFEDCBA98n / -0x2n,
+ 0x7F6E5D4Cn,
+ 'The result of (-0xFEDCBA98n / -0x2n) is 0x7F6E5D4Cn'
+);
+
+assert.sameValue(
+ -0xFEDCBA98n / -0x3n,
+ 0x54F43E32n,
+ 'The result of (-0xFEDCBA98n / -0x3n) is 0x54F43E32n'
+);
+
+assert.sameValue(
+ -0xFEDCBA98n / -0x1234n,
+ 0xE0042n,
+ 'The result of (-0xFEDCBA98n / -0x1234n) is 0xE0042n'
+);
+
+assert.sameValue(
+ -0xFEDCBA98n / -0xFEDCBA97n,
+ 0x1n,
+ 'The result of (-0xFEDCBA98n / -0xFEDCBA97n) is 0x1n'
+);
+
+assert.sameValue(
+ -0xFEDCBA98n / -0xFEDCBA98n,
+ 0x1n,
+ 'The result of (-0xFEDCBA98n / -0xFEDCBA98n) is 0x1n'
+);
+
+assert.sameValue(
+ -0xFEDCBA98n / -0xFEDCBA987654320Fn,
+ 0x0n,
+ 'The result of (-0xFEDCBA98n / -0xFEDCBA987654320Fn) is 0x0n'
+);
+
+assert.sameValue(
+ -0xFEDCBA98n / -0xFEDCBA9876543210n,
+ 0x0n,
+ 'The result of (-0xFEDCBA98n / -0xFEDCBA9876543210n) is 0x0n'
+);
+
+assert.sameValue(
+ -0xFEDCBA987654320Fn / 0xFEDCBA9876543210n,
+ 0x0n,
+ 'The result of (-0xFEDCBA987654320Fn / 0xFEDCBA9876543210n) is 0x0n'
+);
+
+assert.sameValue(
+ -0xFEDCBA987654320Fn / 0xFEDCBA987654320Fn,
+ -0x1n,
+ 'The result of (-0xFEDCBA987654320Fn / 0xFEDCBA987654320Fn) is -0x1n'
+);
+
+assert.sameValue(
+ -0xFEDCBA987654320Fn / 0xFEDCBA98n,
+ -0x100000000n,
+ 'The result of (-0xFEDCBA987654320Fn / 0xFEDCBA98n) is -0x100000000n'
+);
+
+assert.sameValue(
+ -0xFEDCBA987654320Fn / 0xFEDCBA97n,
+ -0x100000001n,
+ 'The result of (-0xFEDCBA987654320Fn / 0xFEDCBA97n) is -0x100000001n'
+);
+
+assert.sameValue(
+ -0xFEDCBA987654320Fn / 0x1234n,
+ -0xE0042813BE5DCn,
+ 'The result of (-0xFEDCBA987654320Fn / 0x1234n) is -0xE0042813BE5DCn'
+);
+
+assert.sameValue(
+ -0xFEDCBA987654320Fn / 0x3n,
+ -0x54F43E32D21C10AFn,
+ 'The result of (-0xFEDCBA987654320Fn / 0x3n) is -0x54F43E32D21C10AFn'
+);
+
+assert.sameValue(
+ -0xFEDCBA987654320Fn / 0x2n,
+ -0x7F6E5D4C3B2A1907n,
+ 'The result of (-0xFEDCBA987654320Fn / 0x2n) is -0x7F6E5D4C3B2A1907n'
+);
+
+assert.sameValue(
+ -0xFEDCBA987654320Fn / 0x1n,
+ -0xFEDCBA987654320Fn,
+ 'The result of (-0xFEDCBA987654320Fn / 0x1n) is -0xFEDCBA987654320Fn'
+);
+
+assert.sameValue(
+ -0xFEDCBA987654320Fn / -0x1n,
+ 0xFEDCBA987654320Fn,
+ 'The result of (-0xFEDCBA987654320Fn / -0x1n) is 0xFEDCBA987654320Fn'
+);
+
+assert.sameValue(
+ -0xFEDCBA987654320Fn / -0x2n,
+ 0x7F6E5D4C3B2A1907n,
+ 'The result of (-0xFEDCBA987654320Fn / -0x2n) is 0x7F6E5D4C3B2A1907n'
+);
+
+assert.sameValue(
+ -0xFEDCBA987654320Fn / -0x3n,
+ 0x54F43E32D21C10AFn,
+ 'The result of (-0xFEDCBA987654320Fn / -0x3n) is 0x54F43E32D21C10AFn'
+);
+
+assert.sameValue(
+ -0xFEDCBA987654320Fn / -0x1234n,
+ 0xE0042813BE5DCn,
+ 'The result of (-0xFEDCBA987654320Fn / -0x1234n) is 0xE0042813BE5DCn'
+);
+
+assert.sameValue(
+ -0xFEDCBA987654320Fn / -0xFEDCBA97n,
+ 0x100000001n,
+ 'The result of (-0xFEDCBA987654320Fn / -0xFEDCBA97n) is 0x100000001n'
+);
+
+assert.sameValue(
+ -0xFEDCBA987654320Fn / -0xFEDCBA98n,
+ 0x100000000n,
+ 'The result of (-0xFEDCBA987654320Fn / -0xFEDCBA98n) is 0x100000000n'
+);
+
+assert.sameValue(
+ -0xFEDCBA987654320Fn / -0xFEDCBA987654320Fn,
+ 0x1n,
+ 'The result of (-0xFEDCBA987654320Fn / -0xFEDCBA987654320Fn) is 0x1n'
+);
+
+assert.sameValue(
+ -0xFEDCBA987654320Fn / -0xFEDCBA9876543210n,
+ 0x0n,
+ 'The result of (-0xFEDCBA987654320Fn / -0xFEDCBA9876543210n) is 0x0n'
+);
+
+assert.sameValue(
+ -0xFEDCBA9876543210n / 0xFEDCBA9876543210n,
+ -0x1n,
+ 'The result of (-0xFEDCBA9876543210n / 0xFEDCBA9876543210n) is -0x1n'
+);
+
+assert.sameValue(
+ -0xFEDCBA9876543210n / 0xFEDCBA987654320Fn,
+ -0x1n,
+ 'The result of (-0xFEDCBA9876543210n / 0xFEDCBA987654320Fn) is -0x1n'
+);
+
+assert.sameValue(
+ -0xFEDCBA9876543210n / 0xFEDCBA98n,
+ -0x100000000n,
+ 'The result of (-0xFEDCBA9876543210n / 0xFEDCBA98n) is -0x100000000n'
+);
+
+assert.sameValue(
+ -0xFEDCBA9876543210n / 0xFEDCBA97n,
+ -0x100000001n,
+ 'The result of (-0xFEDCBA9876543210n / 0xFEDCBA97n) is -0x100000001n'
+);
+
+assert.sameValue(
+ -0xFEDCBA9876543210n / 0x1234n,
+ -0xE0042813BE5DCn,
+ 'The result of (-0xFEDCBA9876543210n / 0x1234n) is -0xE0042813BE5DCn'
+);
+
+assert.sameValue(
+ -0xFEDCBA9876543210n / 0x3n,
+ -0x54F43E32D21C10B0n,
+ 'The result of (-0xFEDCBA9876543210n / 0x3n) is -0x54F43E32D21C10B0n'
+);
+
+assert.sameValue(
+ -0xFEDCBA9876543210n / 0x2n,
+ -0x7F6E5D4C3B2A1908n,
+ 'The result of (-0xFEDCBA9876543210n / 0x2n) is -0x7F6E5D4C3B2A1908n'
+);
+
+assert.sameValue(
+ -0xFEDCBA9876543210n / 0x1n,
+ -0xFEDCBA9876543210n,
+ 'The result of (-0xFEDCBA9876543210n / 0x1n) is -0xFEDCBA9876543210n'
+);
+
+assert.sameValue(
+ -0xFEDCBA9876543210n / -0x1n,
+ 0xFEDCBA9876543210n,
+ 'The result of (-0xFEDCBA9876543210n / -0x1n) is 0xFEDCBA9876543210n'
+);
+
+assert.sameValue(
+ -0xFEDCBA9876543210n / -0x2n,
+ 0x7F6E5D4C3B2A1908n,
+ 'The result of (-0xFEDCBA9876543210n / -0x2n) is 0x7F6E5D4C3B2A1908n'
+);
+
+assert.sameValue(
+ -0xFEDCBA9876543210n / -0x3n,
+ 0x54F43E32D21C10B0n,
+ 'The result of (-0xFEDCBA9876543210n / -0x3n) is 0x54F43E32D21C10B0n'
+);
+
+assert.sameValue(
+ -0xFEDCBA9876543210n / -0x1234n,
+ 0xE0042813BE5DCn,
+ 'The result of (-0xFEDCBA9876543210n / -0x1234n) is 0xE0042813BE5DCn'
+);
+
+assert.sameValue(
+ -0xFEDCBA9876543210n / -0xFEDCBA97n,
+ 0x100000001n,
+ 'The result of (-0xFEDCBA9876543210n / -0xFEDCBA97n) is 0x100000001n'
+);
+
+assert.sameValue(
+ -0xFEDCBA9876543210n / -0xFEDCBA98n,
+ 0x100000000n,
+ 'The result of (-0xFEDCBA9876543210n / -0xFEDCBA98n) is 0x100000000n'
+);
+
+assert.sameValue(
+ -0xFEDCBA9876543210n / -0xFEDCBA987654320Fn,
+ 0x1n,
+ 'The result of (-0xFEDCBA9876543210n / -0xFEDCBA987654320Fn) is 0x1n'
+);
+
+assert.sameValue(
+ -0xFEDCBA9876543210n / -0xFEDCBA9876543210n,
+ 0x1n,
+ 'The result of (-0xFEDCBA9876543210n / -0xFEDCBA9876543210n) is 0x1n'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/division/bigint-complex-infinity.js b/js/src/tests/test262/language/expressions/division/bigint-complex-infinity.js
new file mode 100644
index 0000000000..a587da0b40
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/division/bigint-complex-infinity.js
@@ -0,0 +1,37 @@
+// Copyright (C) 2017 Robin Templeton. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: BigInt division of complex infinity (1/0)
+esid: sec-multiplicative-operators-runtime-semantics-evaluation
+info: |
+ Runtime Semantics: Evaluation
+
+ MultiplicativeExpression: MultiplicativeExpression MultiplicativeOperator ExponentiationExpression
+
+ ...
+ 11. If MultiplicativeOperator is /, return T::divide(lnum, rnum).
+ ...
+
+ BigInt::divide (x, y)
+
+ 1. If y is 0n, throw a RangeError exception.
+ ...
+features: [BigInt]
+---*/
+assert.throws(RangeError, function() {
+ 1n / 0n;
+}, '1n / 0n throws RangeError');
+
+assert.throws(RangeError, function() {
+ 10n / 0n;
+}, '10n / 0n throws RangeError');
+
+assert.throws(RangeError, function() {
+ 0n / 0n;
+}, '0n / 0n throws RangeError');
+
+assert.throws(RangeError, function() {
+ 1000000000000000000n / 0n;
+}, '1000000000000000000n / 0n throws RangeError');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/division/bigint-errors.js b/js/src/tests/test262/language/expressions/division/bigint-errors.js
new file mode 100644
index 0000000000..80212117c1
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/division/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: division operator ToNumeric with BigInt operands
+esid: sec-multiplicative-operators-runtime-semantics-evaluation
+features: [BigInt, Symbol, Symbol.toPrimitive, computed-property-names]
+---*/
+assert.throws(TypeError, function() {
+ Symbol('1') / 1n;
+}, 'Symbol("1") / 1n throws TypeError');
+
+assert.throws(TypeError, function() {
+ 0n / Symbol('1');
+}, '0n / Symbol("1") throws TypeError');
+
+assert.throws(TypeError, function() {
+ Object(Symbol('1')) / 1n;
+}, 'Object(Symbol("1")) / 1n 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');
+ }
+ }) / 1n;
+}, '({[Symbol.toPrimitive]: function() {return Symbol("1");}}) / 1n 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');
+ }
+ }) / 1n;
+}, '({valueOf: function() {return Symbol("1");}}) / 1n 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');
+ }
+ }) / 1n;
+}, '({toString: function() {return Symbol("1");}}) / 1n 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/division/bigint-toprimitive.js b/js/src/tests/test262/language/expressions/division/bigint-toprimitive.js
new file mode 100644
index 0000000000..6bf678c89e
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/division/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: division operator ToNumeric with BigInt operands
+esid: sec-multiplicative-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
+} / 2n, 1n, 'The result of (({[Symbol.toPrimitive]: function() {return 2n;}, valueOf: err, toString: err}) / 2n) is 1n');
+
+assert.sameValue(2n / {
+ [Symbol.toPrimitive]: function() {
+ return 2n;
+ },
+
+ valueOf: err,
+ toString: err
+}, 1n, 'The result of (2n / {[Symbol.toPrimitive]: function() {return 2n;}, valueOf: err, toString: err}) is 1n');
+
+assert.sameValue({
+ valueOf: function() {
+ return 2n;
+ },
+
+ toString: err
+} / 2n, 1n, 'The result of (({valueOf: function() {return 2n;}, toString: err}) / 2n) is 1n');
+
+assert.sameValue(2n / {
+ valueOf: function() {
+ return 2n;
+ },
+
+ toString: err
+}, 1n, 'The result of (2n / {valueOf: function() {return 2n;}, toString: err}) is 1n');
+
+assert.sameValue({
+ toString: function() {
+ return 2n;
+ }
+} / 2n, 1n, 'The result of (({toString: function() {return 2n;}}) / 2n) is 1n');
+
+assert.sameValue(2n / {
+ toString: function() {
+ return 2n;
+ }
+}, 1n, 'The result of (2n / {toString: function() {return 2n;}}) is 1n');
+
+assert.sameValue({
+ [Symbol.toPrimitive]: undefined,
+
+ valueOf: function() {
+ return 2n;
+ }
+} / 2n, 1n, 'The result of (({[Symbol.toPrimitive]: undefined, valueOf: function() {return 2n;}}) / 2n) is 1n');
+
+assert.sameValue(2n / {
+ [Symbol.toPrimitive]: undefined,
+
+ valueOf: function() {
+ return 2n;
+ }
+}, 1n, 'The result of (2n / {[Symbol.toPrimitive]: undefined, valueOf: function() {return 2n;}}) is 1n');
+
+assert.sameValue({
+ [Symbol.toPrimitive]: null,
+
+ valueOf: function() {
+ return 2n;
+ }
+} / 2n, 1n, 'The result of (({[Symbol.toPrimitive]: null, valueOf: function() {return 2n;}}) / 2n) is 1n');
+
+assert.sameValue(2n / {
+ [Symbol.toPrimitive]: null,
+
+ valueOf: function() {
+ return 2n;
+ }
+}, 1n, 'The result of (2n / {[Symbol.toPrimitive]: null, valueOf: function() {return 2n;}}) is 1n');
+
+assert.sameValue({
+ valueOf: null,
+
+ toString: function() {
+ return 2n;
+ }
+} / 2n, 1n, 'The result of (({valueOf: null, toString: function() {return 2n;}}) / 2n) is 1n');
+
+assert.sameValue(2n / {
+ valueOf: null,
+
+ toString: function() {
+ return 2n;
+ }
+}, 1n, 'The result of (2n / {valueOf: null, toString: function() {return 2n;}}) is 1n');
+
+assert.sameValue({
+ valueOf: 1,
+
+ toString: function() {
+ return 2n;
+ }
+} / 2n, 1n, 'The result of (({valueOf: 1, toString: function() {return 2n;}}) / 2n) is 1n');
+
+assert.sameValue(2n / {
+ valueOf: 1,
+
+ toString: function() {
+ return 2n;
+ }
+}, 1n, 'The result of (2n / {valueOf: 1, toString: function() {return 2n;}}) is 1n');
+
+assert.sameValue({
+ valueOf: {},
+
+ toString: function() {
+ return 2n;
+ }
+} / 2n, 1n, 'The result of (({valueOf: {}, toString: function() {return 2n;}}) / 2n) is 1n');
+
+assert.sameValue(2n / {
+ valueOf: {},
+
+ toString: function() {
+ return 2n;
+ }
+}, 1n, 'The result of (2n / {valueOf: {}, toString: function() {return 2n;}}) is 1n');
+
+assert.sameValue({
+ valueOf: function() {
+ return {};
+ },
+
+ toString: function() {
+ return 2n;
+ }
+} / 2n, 1n, 'The result of (({valueOf: function() {return {};}, toString: function() {return 2n;}}) / 2n) is 1n');
+
+assert.sameValue(2n / {
+ valueOf: function() {
+ return {};
+ },
+
+ toString: function() {
+ return 2n;
+ }
+}, 1n, 'The result of (2n / {valueOf: function() {return {};}, toString: function() {return 2n;}}) is 1n');
+
+assert.sameValue({
+ valueOf: function() {
+ return Object(12345);
+ },
+
+ toString: function() {
+ return 2n;
+ }
+} / 2n, 1n, 'The result of (({valueOf: function() {return Object(12345);}, toString: function() {return 2n;}}) / 2n) is 1n');
+
+assert.sameValue(2n / {
+ valueOf: function() {
+ return Object(12345);
+ },
+
+ toString: function() {
+ return 2n;
+ }
+}, 1n, 'The result of (2n / {valueOf: function() {return Object(12345);}, toString: function() {return 2n;}}) is 1n');
+
+assert.throws(TypeError, function() {
+ ({
+ [Symbol.toPrimitive]: 1
+ }) / 1n;
+}, '({[Symbol.toPrimitive]: 1}) / 1n throws TypeError');
+
+assert.throws(TypeError, function() {
+ 0n / {
+ [Symbol.toPrimitive]: 1
+ };
+}, '0n / {[Symbol.toPrimitive]: 1} throws TypeError');
+
+assert.throws(TypeError, function() {
+ ({
+ [Symbol.toPrimitive]: {}
+ }) / 1n;
+}, '({[Symbol.toPrimitive]: {}}) / 1n throws TypeError');
+
+assert.throws(TypeError, function() {
+ 0n / {
+ [Symbol.toPrimitive]: {}
+ };
+}, '0n / {[Symbol.toPrimitive]: {}} throws TypeError');
+
+assert.throws(TypeError, function() {
+ ({
+ [Symbol.toPrimitive]: function() {
+ return Object(1);
+ }
+ }) / 1n;
+}, '({[Symbol.toPrimitive]: function() {return Object(1);}}) / 1n 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 {};
+ }
+ }) / 1n;
+}, '({[Symbol.toPrimitive]: function() {return {};}}) / 1n 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();
+ }
+ }) / 1n;
+}, '({[Symbol.toPrimitive]: function() {throw new MyError();}}) / 1n 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();
+ }
+ }) / 1n;
+}, '({valueOf: function() {throw new MyError();}}) / 1n 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();
+ }
+ }) / 1n;
+}, '({toString: function() {throw new MyError();}}) / 1n 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
+ }) / 1n;
+}, '({valueOf: null, toString: null}) / 1n 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
+ }) / 1n;
+}, '({valueOf: 1, toString: 1}) / 1n throws TypeError');
+
+assert.throws(TypeError, function() {
+ 0n / {
+ valueOf: 1,
+ toString: 1
+ };
+}, '0n / {valueOf: 1, toString: 1} throws TypeError');
+
+assert.throws(TypeError, function() {
+ ({
+ valueOf: {},
+ toString: {}
+ }) / 1n;
+}, '({valueOf: {}, toString: {}}) / 1n 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);
+ }
+ }) / 1n;
+}, '({valueOf: function() {return Object(1);}, toString: function() {return Object(1);}}) / 1n 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 {};
+ }
+ }) / 1n;
+}, '({valueOf: function() {return {};}, toString: function() {return {};}}) / 1n 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/division/bigint-wrapped-values.js b/js/src/tests/test262/language/expressions/division/bigint-wrapped-values.js
new file mode 100644
index 0000000000..2c85cc987f
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/division/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: division operator ToNumeric with BigInt operands
+esid: sec-multiplicative-operators-runtime-semantics-evaluation
+features: [BigInt, Symbol.toPrimitive, computed-property-names]
+---*/
+assert.sameValue(Object(2n) / 2n, 1n, 'The result of (Object(2n) / 2n) is 1n');
+assert.sameValue(2n / Object(2n), 1n, 'The result of (2n / Object(2n)) is 1n');
+
+assert.sameValue({
+ [Symbol.toPrimitive]: function() {
+ return 2n;
+ }
+} / 2n, 1n, 'The result of (({[Symbol.toPrimitive]: function() {return 2n;}}) / 2n) is 1n');
+
+assert.sameValue(2n / {
+ [Symbol.toPrimitive]: function() {
+ return 2n;
+ }
+}, 1n, 'The result of (2n / {[Symbol.toPrimitive]: function() {return 2n;}}) is 1n');
+
+assert.sameValue({
+ valueOf: function() {
+ return 2n;
+ }
+} / 2n, 1n, 'The result of (({valueOf: function() {return 2n;}}) / 2n) is 1n');
+
+assert.sameValue(2n / {
+ valueOf: function() {
+ return 2n;
+ }
+}, 1n, 'The result of (2n / {valueOf: function() {return 2n;}}) is 1n');
+
+assert.sameValue({
+ toString: function() {
+ return 2n;
+ }
+} / 2n, 1n, 'The result of (({toString: function() {return 2n;}}) / 2n) is 1n');
+
+assert.sameValue(2n / {
+ toString: function() {
+ return 2n;
+ }
+}, 1n, 'The result of (2n / {toString: function() {return 2n;}}) is 1n');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/division/browser.js b/js/src/tests/test262/language/expressions/division/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/division/browser.js
diff --git a/js/src/tests/test262/language/expressions/division/line-terminator.js b/js/src/tests/test262/language/expressions/division/line-terminator.js
new file mode 100644
index 0000000000..5420b125df
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/division/line-terminator.js
@@ -0,0 +1,29 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-multiplicative-operators-runtime-semantics-evaluation
+description: Line terminator between the operands of a division operator
+info: |
+ MultiplicativeExpression[Yield, Await]:
+ ExponentiationExpression
+ MultiplicativeExpression MultiplicativeOperator ExponentiationExpression
+
+ MultiplicativeOperator : one of
+ * / %
+---*/
+
+var x = 18
+
+/
+
+2
+
+/
+
+9
+;
+
+assert.sameValue(x, 1);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/division/no-magic-asi-from-block-eval.js b/js/src/tests/test262/language/expressions/division/no-magic-asi-from-block-eval.js
new file mode 100644
index 0000000000..858431fe73
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/division/no-magic-asi-from-block-eval.js
@@ -0,0 +1,23 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-multiplicative-operators-runtime-semantics-evaluation
+description: division after block statement (no ASI)
+info: |
+ MultiplicativeExpression[Yield, Await]:
+ ExponentiationExpression
+ MultiplicativeExpression MultiplicativeOperator ExponentiationExpression
+
+ MultiplicativeOperator : one of
+ * / %
+---*/
+
+var of = 4;
+var g = 2;
+
+var notRegExp = eval('{[42]}.8/of/g');
+
+assert.sameValue(notRegExp, .1);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/division/no-magic-asi.js b/js/src/tests/test262/language/expressions/division/no-magic-asi.js
new file mode 100644
index 0000000000..e6f9c876dd
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/division/no-magic-asi.js
@@ -0,0 +1,24 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-multiplicative-operators-runtime-semantics-evaluation
+description: No ASI happening in identifier used as operands
+info: |
+ MultiplicativeExpression[Yield, Await]:
+ ExponentiationExpression
+ MultiplicativeExpression MultiplicativeOperator ExponentiationExpression
+
+ MultiplicativeOperator : one of
+ * / %
+---*/
+
+var instance = 60;
+var of = 6;
+var g = 2;
+
+var notRegExp = instance/of/g;
+
+assert.sameValue(notRegExp, 5);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/division/order-of-evaluation.js b/js/src/tests/test262/language/expressions/division/order-of-evaluation.js
new file mode 100644
index 0000000000..0969ee9716
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/division/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-multiplicative-operators-runtime-semantics-evaluation
+description: Type coercion order of operations for division 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/division/shell.js b/js/src/tests/test262/language/expressions/division/shell.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/division/shell.js