summaryrefslogtreecommitdiffstats
path: root/js/src/tests/test262/language/expressions/less-than
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/less-than
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/less-than')
-rw-r--r--js/src/tests/test262/language/expressions/less-than/S11.8.1_A1.js62
-rw-r--r--js/src/tests/test262/language/expressions/less-than/S11.8.1_A2.1_T1.js43
-rw-r--r--js/src/tests/test262/language/expressions/less-than/S11.8.1_A2.1_T2.js21
-rw-r--r--js/src/tests/test262/language/expressions/less-than/S11.8.1_A2.1_T3.js21
-rw-r--r--js/src/tests/test262/language/expressions/less-than/S11.8.1_A2.2_T1.js71
-rw-r--r--js/src/tests/test262/language/expressions/less-than/S11.8.1_A2.3_T1.js28
-rw-r--r--js/src/tests/test262/language/expressions/less-than/S11.8.1_A2.4_T1.js22
-rw-r--r--js/src/tests/test262/language/expressions/less-than/S11.8.1_A2.4_T2.js26
-rw-r--r--js/src/tests/test262/language/expressions/less-than/S11.8.1_A2.4_T3.js21
-rw-r--r--js/src/tests/test262/language/expressions/less-than/S11.8.1_A2.4_T4.js16
-rw-r--r--js/src/tests/test262/language/expressions/less-than/S11.8.1_A3.1_T1.1.js34
-rw-r--r--js/src/tests/test262/language/expressions/less-than/S11.8.1_A3.1_T1.2.js34
-rw-r--r--js/src/tests/test262/language/expressions/less-than/S11.8.1_A3.1_T1.3.js34
-rw-r--r--js/src/tests/test262/language/expressions/less-than/S11.8.1_A3.1_T2.1.js55
-rw-r--r--js/src/tests/test262/language/expressions/less-than/S11.8.1_A3.1_T2.2.js65
-rw-r--r--js/src/tests/test262/language/expressions/less-than/S11.8.1_A3.1_T2.3.js34
-rw-r--r--js/src/tests/test262/language/expressions/less-than/S11.8.1_A3.1_T2.4.js34
-rw-r--r--js/src/tests/test262/language/expressions/less-than/S11.8.1_A3.1_T2.5.js55
-rw-r--r--js/src/tests/test262/language/expressions/less-than/S11.8.1_A3.1_T2.6.js34
-rw-r--r--js/src/tests/test262/language/expressions/less-than/S11.8.1_A3.1_T2.7.js34
-rw-r--r--js/src/tests/test262/language/expressions/less-than/S11.8.1_A3.1_T2.8.js34
-rw-r--r--js/src/tests/test262/language/expressions/less-than/S11.8.1_A3.1_T2.9.js34
-rw-r--r--js/src/tests/test262/language/expressions/less-than/S11.8.1_A3.2_T1.1.js44
-rw-r--r--js/src/tests/test262/language/expressions/less-than/S11.8.1_A3.2_T1.2.js34
-rw-r--r--js/src/tests/test262/language/expressions/less-than/S11.8.1_A4.1.js50
-rw-r--r--js/src/tests/test262/language/expressions/less-than/S11.8.1_A4.10.js41
-rw-r--r--js/src/tests/test262/language/expressions/less-than/S11.8.1_A4.11.js51
-rw-r--r--js/src/tests/test262/language/expressions/less-than/S11.8.1_A4.12_T1.js48
-rw-r--r--js/src/tests/test262/language/expressions/less-than/S11.8.1_A4.12_T2.js48
-rw-r--r--js/src/tests/test262/language/expressions/less-than/S11.8.1_A4.2.js50
-rw-r--r--js/src/tests/test262/language/expressions/less-than/S11.8.1_A4.3.js45
-rw-r--r--js/src/tests/test262/language/expressions/less-than/S11.8.1_A4.4.js30
-rw-r--r--js/src/tests/test262/language/expressions/less-than/S11.8.1_A4.5.js40
-rw-r--r--js/src/tests/test262/language/expressions/less-than/S11.8.1_A4.6.js40
-rw-r--r--js/src/tests/test262/language/expressions/less-than/S11.8.1_A4.7.js40
-rw-r--r--js/src/tests/test262/language/expressions/less-than/S11.8.1_A4.8.js40
-rw-r--r--js/src/tests/test262/language/expressions/less-than/S11.8.1_A4.9.js52
-rw-r--r--js/src/tests/test262/language/expressions/less-than/bigint-and-bigint.js166
-rw-r--r--js/src/tests/test262/language/expressions/less-than/bigint-and-boolean.js23
-rw-r--r--js/src/tests/test262/language/expressions/less-than/bigint-and-incomparable-string.js29
-rw-r--r--js/src/tests/test262/language/expressions/less-than/bigint-and-non-finite.js31
-rw-r--r--js/src/tests/test262/language/expressions/less-than/bigint-and-number-extremes.js50
-rw-r--r--js/src/tests/test262/language/expressions/less-than/bigint-and-number.js47
-rw-r--r--js/src/tests/test262/language/expressions/less-than/bigint-and-string.js62
-rw-r--r--js/src/tests/test262/language/expressions/less-than/bigint-and-symbol.js16
-rw-r--r--js/src/tests/test262/language/expressions/less-than/browser.js0
-rw-r--r--js/src/tests/test262/language/expressions/less-than/shell.js0
47 files changed, 1889 insertions, 0 deletions
diff --git a/js/src/tests/test262/language/expressions/less-than/S11.8.1_A1.js b/js/src/tests/test262/language/expressions/less-than/S11.8.1_A1.js
new file mode 100644
index 0000000000..92c5e13fed
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/less-than/S11.8.1_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 RelationalExpression and "<" or
+ between "<" and ShiftExpression are allowed
+es5id: 11.8.1_A1
+description: Checking by using eval
+---*/
+
+//CHECK#1
+if (eval("0\u0009<\u00091") !== true) {
+ $ERROR('#1: (0\\u0009<\\u00091) === true');
+}
+
+//CHECK#2
+if (eval("0\u000B<\u000B1") !== true) {
+ $ERROR('#2: (0\\u000B<\\u000B1) === true');
+}
+
+//CHECK#3
+if (eval("0\u000C<\u000C1") !== true) {
+ $ERROR('#3: (0\\u000C<\\u000C1) === true');
+}
+
+//CHECK#4
+if (eval("0\u0020<\u00201") !== true) {
+ $ERROR('#4: (0\\u0020<\\u00201) === true');
+}
+
+//CHECK#5
+if (eval("0\u00A0<\u00A01") !== true) {
+ $ERROR('#5: (0\\u00A0<\\u00A01) === true');
+}
+
+//CHECK#6
+if (eval("0\u000A<\u000A1") !== true) {
+ $ERROR('#6: (0\\u000A<\\u000A1) === true');
+}
+
+//CHECK#7
+if (eval("0\u000D<\u000D1") !== true) {
+ $ERROR('#7: (0\\u000D<\\u000D1) === true');
+}
+
+//CHECK#8
+if (eval("0\u2028<\u20281") !== true) {
+ $ERROR('#8: (0\\u2028<\\u20281) === true');
+}
+
+//CHECK#9
+if (eval("0\u2029<\u20291") !== true) {
+ $ERROR('#9: (0\\u2029<\\u20291) === true');
+}
+
+//CHECK#10
+if (eval("0\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029<\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u20291") !== true) {
+ $ERROR('#10: (0\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029<\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u20291) === true');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/less-than/S11.8.1_A2.1_T1.js b/js/src/tests/test262/language/expressions/less-than/S11.8.1_A2.1_T1.js
new file mode 100644
index 0000000000..d836c3ca2b
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/less-than/S11.8.1_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.8.1_A2.1_T1
+description: Either Type is not Reference or GetBase is not null
+---*/
+
+//CHECK#1
+if (1 < 2 !== true) {
+ $ERROR('#1: 1 < 2 === true');
+}
+
+//CHECK#2
+var x = 1;
+if (x < 2 !== true) {
+ $ERROR('#2: var x = 1; x < 2 === true');
+}
+
+//CHECK#3
+var y = 2;
+if (1 < y !== true) {
+ $ERROR('#3: var y = 2; 1 < y === true');
+}
+
+//CHECK#4
+var x = 1;
+var y = 2;
+if (x < y !== true) {
+ $ERROR('#4: var x = 1; var y = 2; x < y === true');
+}
+
+//CHECK#5
+var objectx = new Object();
+var objecty = new Object();
+objectx.prop = 1;
+objecty.prop = 2;
+if (objectx.prop < objecty.prop !== true) {
+ $ERROR('#5: var objectx = new Object(); var objecty = new Object(); objectx.prop = 1; objecty.prop = 2; objectx.prop < objecty.prop === true');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/less-than/S11.8.1_A2.1_T2.js b/js/src/tests/test262/language/expressions/less-than/S11.8.1_A2.1_T2.js
new file mode 100644
index 0000000000..2f705d3898
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/less-than/S11.8.1_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.8.1_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/less-than/S11.8.1_A2.1_T3.js b/js/src/tests/test262/language/expressions/less-than/S11.8.1_A2.1_T3.js
new file mode 100644
index 0000000000..69f0756852
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/less-than/S11.8.1_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.8.1_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/less-than/S11.8.1_A2.2_T1.js b/js/src/tests/test262/language/expressions/less-than/S11.8.1_A2.2_T1.js
new file mode 100644
index 0000000000..6d3cb0804c
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/less-than/S11.8.1_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.8.1_A2.2_T1
+description: If Type(value) is Object, evaluate ToPrimitive(value, Number)
+---*/
+
+//CHECK#1
+if ({valueOf: function() {return 0}} < 1 !== true) {
+ $ERROR('#1: {valueOf: function() {return 1}} < 1 === true. Actual: ' + ({valueOf: function() {return 1}} < 1));
+}
+
+//CHECK#2
+if ({valueOf: function() {return 0}, toString: function() {return 2}} < 1 !== true) {
+ $ERROR('#2: {valueOf: function() {return 1}, toString: function() {return 0}} < 1 === true. Actual: ' + ({valueOf: function() {return 1}, toString: function() {return 0}} < 1));
+}
+
+//CHECK#3
+if ({valueOf: function() {return 0}, toString: function() {return {}}} < 1 !== true) {
+ $ERROR('#3: {valueOf: function() {return 1}, toString: function() {return {}}} < 1 === true. Actual: ' + ({valueOf: function() {return 1}, toString: function() {return {}}} < 1));
+}
+
+//CHECK#4
+try {
+ if ({valueOf: function() {return 0}, toString: function() {throw "error"}} < 1 !== true) {
+ $ERROR('#4.1: {valueOf: function() {return 1}, toString: function() {throw "error"}} < 1 === true. Actual: ' + ({valueOf: function() {return 1}, toString: function() {throw "error"}} < 1));
+ }
+}
+catch (e) {
+ if (e === "error") {
+ $ERROR('#4.2: {valueOf: function() {return 0}, toString: function() {throw "error"}} < 1 not throw "error"');
+ } else {
+ $ERROR('#4.3: {valueOf: function() {return 0}, toString: function() {throw "error"}} < 1 not throw Error. Actual: ' + (e));
+ }
+}
+
+//CHECK#5
+if (1 < {toString: function() {return 2}} !== true) {
+ $ERROR('#5: 1 < {toString: function() {return 2}} === true. Actual: ' + (1 < {toString: function() {return 2}}));
+}
+
+//CHECK#6
+if (1 < {valueOf: function() {return {}}, toString: function() {return 2}} !== true) {
+ $ERROR('#6: 1 < {valueOf: function() {return {}}, toString: function() {return 2}} === true. Actual: ' + (1 < {valueOf: function() {return {}}, toString: function() {return 2}}));
+}
+
+//CHECK#7
+try {
+ 1 < {valueOf: function() {throw "error"}, toString: function() {return 2}};
+ $ERROR('#7.1: 1 < {valueOf: function() {throw "error"}, toString: function() {return 2}} throw "error". Actual: ' + (1 < {valueOf: function() {throw "error"}, toString: function() {return 2}}));
+}
+catch (e) {
+ if (e !== "error") {
+ $ERROR('#7.2: 1 < {valueOf: function() {throw "error"}, toString: function() {return 2}} 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/less-than/S11.8.1_A2.3_T1.js b/js/src/tests/test262/language/expressions/less-than/S11.8.1_A2.3_T1.js
new file mode 100644
index 0000000000..67f1483f40
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/less-than/S11.8.1_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.8.1_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/less-than/S11.8.1_A2.4_T1.js b/js/src/tests/test262/language/expressions/less-than/S11.8.1_A2.4_T1.js
new file mode 100644
index 0000000000..4f751f9cd2
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/less-than/S11.8.1_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.8.1_A2.4_T1
+description: Checking with "="
+---*/
+
+//CHECK#1
+var x = 1;
+if ((x = 0) < x !== false) {
+ $ERROR('#1: var x = 1; (x = 0) < x === false');
+}
+
+//CHECK#2
+var x = 0;
+if (x < (x = 1) !== true) {
+ $ERROR('#2: var x = 0; x < (x = 1) === true');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/less-than/S11.8.1_A2.4_T2.js b/js/src/tests/test262/language/expressions/less-than/S11.8.1_A2.4_T2.js
new file mode 100644
index 0000000000..255fca7907
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/less-than/S11.8.1_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.8.1_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/less-than/S11.8.1_A2.4_T3.js b/js/src/tests/test262/language/expressions/less-than/S11.8.1_A2.4_T3.js
new file mode 100644
index 0000000000..fcbb79af9a
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/less-than/S11.8.1_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.8.1_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/less-than/S11.8.1_A2.4_T4.js b/js/src/tests/test262/language/expressions/less-than/S11.8.1_A2.4_T4.js
new file mode 100644
index 0000000000..08b2719636
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/less-than/S11.8.1_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.8.1_A2.4_T4
+description: Checking with undeclarated variables
+flags: [noStrict]
+---*/
+
+//CHECK#1
+if ((y = 1) < y !== false) {
+ $ERROR('#1: (y = 1) < y === false');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/less-than/S11.8.1_A3.1_T1.1.js b/js/src/tests/test262/language/expressions/less-than/S11.8.1_A3.1_T1.1.js
new file mode 100644
index 0000000000..8462c3d69d
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/less-than/S11.8.1_A3.1_T1.1.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: |
+ If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String,
+ then operator x < y returns ToNumber(x) < ToNumber(y)
+es5id: 11.8.1_A3.1_T1.1
+description: >
+ Type(Primitive(x)) and Type(Primitive(y)) vary between primitive
+ boolean and Boolean object
+---*/
+
+//CHECK#1
+if (true < true !== false) {
+ $ERROR('#1: true < true === false');
+}
+
+//CHECK#2
+if (new Boolean(true) < true !== false) {
+ $ERROR('#2: new Boolean(true) < true === false');
+}
+
+//CHECK#3
+if (true < new Boolean(true) !== false) {
+ $ERROR('#3: true < new Boolean(true) === false');
+}
+
+//CHECK#4
+if (new Boolean(true) < new Boolean(true) !== false) {
+ $ERROR('#4: new Boolean(true) < new Boolean(true) === false');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/less-than/S11.8.1_A3.1_T1.2.js b/js/src/tests/test262/language/expressions/less-than/S11.8.1_A3.1_T1.2.js
new file mode 100644
index 0000000000..fc43b6456b
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/less-than/S11.8.1_A3.1_T1.2.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: |
+ If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String,
+ then operator x < y returns ToNumber(x) < ToNumber(y)
+es5id: 11.8.1_A3.1_T1.2
+description: >
+ Type(Primitive(x)) and Type(Primitive(y)) vary between primitive
+ number and Number object
+---*/
+
+//CHECK#1
+if (1 < 1 !== false) {
+ $ERROR('#1: 1 < 1 === false');
+}
+
+//CHECK#2
+if (new Number(1) < 1 !== false) {
+ $ERROR('#2: new Number(1) < 1 === false');
+}
+
+//CHECK#3
+if (1 < new Number(1) !== false) {
+ $ERROR('#3: 1 < new Number(1) === false');
+}
+
+//CHECK#4
+if (new Number(1) < new Number(1) !== false) {
+ $ERROR('#4: new Number(1) < new Number(1) === false');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/less-than/S11.8.1_A3.1_T1.3.js b/js/src/tests/test262/language/expressions/less-than/S11.8.1_A3.1_T1.3.js
new file mode 100644
index 0000000000..5d7d402759
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/less-than/S11.8.1_A3.1_T1.3.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: |
+ If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String,
+ then operator x < y returns ToNumber(x) < ToNumber(y)
+es5id: 11.8.1_A3.1_T1.3
+description: >
+ Type(Primitive(x)) and Type(Primitive(y)) vary between Null and
+ Undefined
+---*/
+
+//CHECK#1
+if (null < undefined !== false) {
+ $ERROR('#1: null < undefined === false');
+}
+
+//CHECK#2
+if (undefined < null !== false) {
+ $ERROR('#2: undefined < null === false');
+}
+
+//CHECK#3
+if (undefined < undefined !== false) {
+ $ERROR('#3: undefined < undefined === false');
+}
+
+//CHECK#4
+if (null < null !== false) {
+ $ERROR('#4: null < null === false');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/less-than/S11.8.1_A3.1_T2.1.js b/js/src/tests/test262/language/expressions/less-than/S11.8.1_A3.1_T2.1.js
new file mode 100644
index 0000000000..47a1948e54
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/less-than/S11.8.1_A3.1_T2.1.js
@@ -0,0 +1,55 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String,
+ then operator x < y returns ToNumber(x) < ToNumber(y)
+es5id: 11.8.1_A3.1_T2.1
+description: >
+ Type(Primitive(x)) is different from Type(Primitive(y)) and both
+ types are Number (primitive or object) or Boolean (primitive and
+ object)
+---*/
+
+//CHECK#1
+if (true < 1 !== false) {
+ $ERROR('#1: true < 1 === false');
+}
+
+//CHECK#2
+if (1 < true !== false) {
+ $ERROR('#2: 1 < true === false');
+}
+
+//CHECK#3
+if (new Boolean(true) < 1 !== false) {
+ $ERROR('#3: new Boolean(true) < 1 === false');
+}
+
+//CHECK#4
+if (1 < new Boolean(true) !== false) {
+ $ERROR('#4: 1 < new Boolean(true) === false');
+}
+
+//CHECK#5
+if (true < new Number(1) !== false) {
+ $ERROR('#5: true < new Number(1) === false');
+}
+
+//CHECK#6
+if (new Number(1) < true !== false) {
+ $ERROR('#6: new Number(1) < true === false');
+}
+
+//CHECK#7
+if (new Boolean(true) < new Number(1) !== false) {
+ $ERROR('#7: new Boolean(true) < new Number(1) === false');
+}
+
+//CHECK#8
+if (new Number(1) < new Boolean(true) !== false) {
+ $ERROR('#8: new Number(1) < new Boolean(true) === false');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/less-than/S11.8.1_A3.1_T2.2.js b/js/src/tests/test262/language/expressions/less-than/S11.8.1_A3.1_T2.2.js
new file mode 100644
index 0000000000..f7d7a6a19a
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/less-than/S11.8.1_A3.1_T2.2.js
@@ -0,0 +1,65 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String,
+ then operator x < y returns ToNumber(x) < ToNumber(y)
+es5id: 11.8.1_A3.1_T2.2
+description: >
+ Type(Primitive(x)) is different from Type(Primitive(y)) and both
+ types vary between Number (primitive or object) and String
+ (primitive and object)
+---*/
+
+//CHECK#1
+if ("1" < 1 !== false) {
+ $ERROR('#1: "1" < 1 === false');
+}
+
+//CHECK#2
+if (1 < "1" !== false) {
+ $ERROR('#2: 1 < "1" === false');
+}
+
+//CHECK#3
+if (new String("1") < 1 !== false) {
+ $ERROR('#3: new String("1") < 1 === false');
+}
+
+//CHECK#4
+if (1 < new String("1") !== false) {
+ $ERROR('#4: 1 < new String("1") === false');
+}
+
+//CHECK#5
+if ("1" < new Number(1) !== false) {
+ $ERROR('#5: "1" < new Number(1) === false');
+}
+
+//CHECK#6
+if (new Number(1) < "1" !== false) {
+ $ERROR('#6: new Number(1) < "1" === false');
+}
+
+//CHECK#7
+if (new String("1") < new Number(1) !== false) {
+ $ERROR('#7: new String("1") < new Number(1) === false');
+}
+
+//CHECK#8
+if (new Number(1) < new String("1") !== false) {
+ $ERROR('#8: new Number(1) < new String("1") === false');
+}
+
+//CHECK#9
+if ("x" < 1 !== false) {
+ $ERROR('#9: "x" < 1 === false');
+}
+
+//CHECK#10
+if (1 < "x" !== false) {
+ $ERROR('#10: 1 < "x" === false');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/less-than/S11.8.1_A3.1_T2.3.js b/js/src/tests/test262/language/expressions/less-than/S11.8.1_A3.1_T2.3.js
new file mode 100644
index 0000000000..662884d714
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/less-than/S11.8.1_A3.1_T2.3.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: |
+ If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String,
+ then operator x < y returns ToNumber(x) < ToNumber(y)
+es5id: 11.8.1_A3.1_T2.3
+description: >
+ Type(Primitive(x)) is different from Type(Primitive(y)) and both
+ types vary between Number (primitive or object) and Null
+---*/
+
+//CHECK#1
+if (1 < null !== false) {
+ $ERROR('#1: 1 < null === false');
+}
+
+//CHECK#2
+if (null < 1 !== true) {
+ $ERROR('#2: null < 1 === true');
+}
+
+//CHECK#3
+if (new Number(1) < null !== false) {
+ $ERROR('#3: new Number(1) < null === false');
+}
+
+//CHECK#4
+if (null < new Number(1) !== true) {
+ $ERROR('#4: null < new Number(1) === true');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/less-than/S11.8.1_A3.1_T2.4.js b/js/src/tests/test262/language/expressions/less-than/S11.8.1_A3.1_T2.4.js
new file mode 100644
index 0000000000..c22b119bd8
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/less-than/S11.8.1_A3.1_T2.4.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: |
+ If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String,
+ then operator x < y returns ToNumber(x) < ToNumber(y)
+es5id: 11.8.1_A3.1_T2.4
+description: >
+ Type(Primitive(x)) is different from Type(Primitive(y)) and both
+ types vary between Number (primitive or object) and Undefined
+---*/
+
+//CHECK#1
+if (1 < undefined !== false) {
+ $ERROR('#1: 1 < undefined === false');
+}
+
+//CHECK#2
+if (undefined < 1 !== false) {
+ $ERROR('#2: undefined < 1 === false');
+}
+
+//CHECK#3
+if (new Number(1) < undefined !== false) {
+ $ERROR('#3: new Number(1) < undefined === false');
+}
+
+//CHECK#4
+if (undefined < new Number(1) !== false) {
+ $ERROR('#4: undefined < new Number(1) === false');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/less-than/S11.8.1_A3.1_T2.5.js b/js/src/tests/test262/language/expressions/less-than/S11.8.1_A3.1_T2.5.js
new file mode 100644
index 0000000000..a05e1e5ab6
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/less-than/S11.8.1_A3.1_T2.5.js
@@ -0,0 +1,55 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String,
+ then operator x < y returns ToNumber(x) < ToNumber(y)
+es5id: 11.8.1_A3.1_T2.5
+description: >
+ Type(Primitive(x)) is different from Type(Primitive(y)) and both
+ types vary between String (primitive or object) and Boolean
+ (primitive and object)
+---*/
+
+//CHECK#1
+if (true < "1" !== false) {
+ $ERROR('#1: true < "1" === false');
+}
+
+//CHECK#2
+if ("1" < true !== false) {
+ $ERROR('#2: "1" < true === false');
+}
+
+//CHECK#3
+if (new Boolean(true) < "1" !== false) {
+ $ERROR('#3: new Boolean(true) < "1" === false');
+}
+
+//CHECK#4
+if ("1" < new Boolean(true) !== false) {
+ $ERROR('#4: "1" < new Boolean(true) === false');
+}
+
+//CHECK#5
+if (true < new String("1") !== false) {
+ $ERROR('#5: true < new String("1") === false');
+}
+
+//CHECK#6
+if (new String("1") < true !== false) {
+ $ERROR('#6: new String("1") < true === false');
+}
+
+//CHECK#7
+if (new Boolean(true) < new String("1") !== false) {
+ $ERROR('#7: new Boolean(true) < new String("1") === false');
+}
+
+//CHECK#8
+if (new String("1") < new Boolean(true) !== false) {
+ $ERROR('#8: new String("1") < new Boolean(true) === false');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/less-than/S11.8.1_A3.1_T2.6.js b/js/src/tests/test262/language/expressions/less-than/S11.8.1_A3.1_T2.6.js
new file mode 100644
index 0000000000..60fa5df339
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/less-than/S11.8.1_A3.1_T2.6.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: |
+ If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String,
+ then operator x < y returns ToNumber(x) < ToNumber(y)
+es5id: 11.8.1_A3.1_T2.6
+description: >
+ Type(Primitive(x)) is different from Type(Primitive(y)) and both
+ types vary between String (primitive or object) and Undefined
+---*/
+
+//CHECK#1
+if ("1" < undefined !== false) {
+ $ERROR('#1: "1" < undefined === false');
+}
+
+//CHECK#2
+if (undefined < "1" !== false) {
+ $ERROR('#2: undefined < "1" === false');
+}
+
+//CHECK#3
+if (new String("1") < undefined !== false) {
+ $ERROR('#3: new String("1") < undefined === false');
+}
+
+//CHECK#4
+if (undefined < new String("1") !== false) {
+ $ERROR('#4: undefined < new String("1") === false');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/less-than/S11.8.1_A3.1_T2.7.js b/js/src/tests/test262/language/expressions/less-than/S11.8.1_A3.1_T2.7.js
new file mode 100644
index 0000000000..02bc837b38
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/less-than/S11.8.1_A3.1_T2.7.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: |
+ If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String,
+ then operator x < y returns ToNumber(x) < ToNumber(y)
+es5id: 11.8.1_A3.1_T2.7
+description: >
+ Type(Primitive(x)) is different from Type(Primitive(y)) and both
+ types vary between String (primitive or object) and Null
+---*/
+
+//CHECK#1
+if ("1" < null !== false) {
+ $ERROR('#1: "1" < null === false');
+}
+
+//CHECK#2
+if (null < "1" !== true) {
+ $ERROR('#2: null < "1" === true');
+}
+
+//CHECK#3
+if (new String("1") < null !== false) {
+ $ERROR('#3: new String("1") < null === false');
+}
+
+//CHECK#4
+if (null < new String("1") !== true) {
+ $ERROR('#4: null < new String("1") === true');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/less-than/S11.8.1_A3.1_T2.8.js b/js/src/tests/test262/language/expressions/less-than/S11.8.1_A3.1_T2.8.js
new file mode 100644
index 0000000000..d76122899f
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/less-than/S11.8.1_A3.1_T2.8.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: |
+ If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String,
+ then operator x < y returns ToNumber(x) < ToNumber(y)
+es5id: 11.8.1_A3.1_T2.8
+description: >
+ Type(Primitive(x)) is different from Type(Primitive(y)) and both
+ types vary between Boolean (primitive or object) and Undefined
+---*/
+
+//CHECK#1
+if (true < undefined !== false) {
+ $ERROR('#1: true < undefined === false');
+}
+
+//CHECK#2
+if (undefined < true !== false) {
+ $ERROR('#2: undefined < true === false');
+}
+
+//CHECK#3
+if (new Boolean(true) < undefined !== false) {
+ $ERROR('#3: new Boolean(true) < undefined === false');
+}
+
+//CHECK#4
+if (undefined < new Boolean(true) !== false) {
+ $ERROR('#4: undefined < new Boolean(true) === false');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/less-than/S11.8.1_A3.1_T2.9.js b/js/src/tests/test262/language/expressions/less-than/S11.8.1_A3.1_T2.9.js
new file mode 100644
index 0000000000..43d5f89963
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/less-than/S11.8.1_A3.1_T2.9.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: |
+ If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String,
+ then operator x < y returns ToNumber(x) < ToNumber(y)
+es5id: 11.8.1_A3.1_T2.9
+description: >
+ Type(Primitive(x)) is different from Type(Primitive(y)) and both
+ types vary between Boolean (primitive or object) and Null
+---*/
+
+//CHECK#1
+if (true < null !== false) {
+ $ERROR('#1: true < null === false');
+}
+
+//CHECK#2
+if (null < true !== true) {
+ $ERROR('#2: null < true === true');
+}
+
+//CHECK#3
+if (new Boolean(true) < null !== false) {
+ $ERROR('#3: new Boolean(true) < null === false');
+}
+
+//CHECK#4
+if (null < new Boolean(true) !== true) {
+ $ERROR('#4: null < new Boolean(true) === true');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/less-than/S11.8.1_A3.2_T1.1.js b/js/src/tests/test262/language/expressions/less-than/S11.8.1_A3.2_T1.1.js
new file mode 100644
index 0000000000..90969b47aa
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/less-than/S11.8.1_A3.2_T1.1.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: |
+ Operator x < y returns ToString(x) < ToString(y), if Type(Primitive(x))
+ is String and Type(Primitive(y)) is String
+es5id: 11.8.1_A3.2_T1.1
+description: >
+ Type(Primitive(x)) and Type(Primitive(y)) vary between primitive
+ string and String object
+---*/
+
+//CHECK#1
+if ("1" < "1" !== false) {
+ $ERROR('#1: "1" < "1" === false');
+}
+
+//CHECK#2
+if (new String("1") < "1" !== false) {
+ $ERROR('#2: new String("1") < "1" === false');
+}
+
+//CHECK#3
+if ("1" < new String("1") !== false) {
+ $ERROR('#3: "1" < new String("1") === false');
+}
+
+//CHECK#4
+if (new String("1") < new String("1") !== false) {
+ $ERROR('#4: new String("1") < new String("1") === false');
+}
+
+//CHECK#5
+if ("x" < "1" !== false) {
+ $ERROR('#5: "x" < "1" === false');
+}
+
+//CHECK#6
+if ("1" < "x" !== true) {
+ $ERROR('#6: "1" < "x" === true');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/less-than/S11.8.1_A3.2_T1.2.js b/js/src/tests/test262/language/expressions/less-than/S11.8.1_A3.2_T1.2.js
new file mode 100644
index 0000000000..3cd12be9a2
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/less-than/S11.8.1_A3.2_T1.2.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: |
+ Operator x < y returns ToString(x) < ToString(y), if Type(Primitive(x))
+ is String and Type(Primitive(y)) is String
+es5id: 11.8.1_A3.2_T1.2
+description: >
+ Type(Primitive(x)) and Type(Primitive(y)) vary between Object
+ object and Function object
+---*/
+
+//CHECK#1
+if (({} < function(){return 1}) !== ({}.toString() < function(){return 1}.toString())) {
+ $ERROR('#1: ({} < function(){return 1}) === ({}.toString() < function(){return 1}.toString())');
+}
+
+//CHECK#2
+if ((function(){return 1} < {}) !== (function(){return 1}.toString() < {}.toString())) {
+ $ERROR('#2: (function(){return 1} < {}) === (function(){return 1}.toString() < {}.toString())');
+}
+
+//CHECK#3
+if ((function(){return 1} < function(){return 1}) !== (function(){return 1}.toString() < function(){return 1}.toString())) {
+ $ERROR('#3: (function(){return 1} < function(){return 1}) === (function(){return 1}.toString() < function(){return 1}.toString())');
+}
+
+//CHECK#4
+if (({} < {}) !== ({}.toString() < {}.toString())) {
+ $ERROR('#4: ({} < {}) === ({}.toString() < {}.toString())');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/less-than/S11.8.1_A4.1.js b/js/src/tests/test262/language/expressions/less-than/S11.8.1_A4.1.js
new file mode 100644
index 0000000000..5519eb9510
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/less-than/S11.8.1_A4.1.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: If x is NaN, return false (if result in 11.8.5 is undefined, return false)
+es5id: 11.8.1_A4.1
+description: y is number primitive
+---*/
+
+//CHECK#1
+if ((Number.NaN < 0) !== false) {
+ $ERROR('#1: (NaN < 0) === false');
+}
+
+//CHECK#2
+if ((Number.NaN < 1.1) !== false) {
+ $ERROR('#2: (NaN < 1.1) === false');
+}
+
+//CHECK#3
+if ((Number.NaN < -1.1) !== false) {
+ $ERROR('#3: (NaN < -1.1) === false');
+}
+
+//CHECK#4
+if ((Number.NaN < Number.NaN) !== false) {
+ $ERROR('#4: (NaN < NaN) === false');
+}
+
+//CHECK#5
+if ((Number.NaN < Number.POSITIVE_INFINITY) !== false) {
+ $ERROR('#5: (NaN < +Infinity) === false');
+}
+
+//CHECK#6
+if ((Number.NaN < Number.NEGATIVE_INFINITY) !== false) {
+ $ERROR('#6: (NaN < -Infinity) === false');
+}
+
+//CHECK#7
+if ((Number.NaN < Number.MAX_VALUE) !== false) {
+ $ERROR('#7: (NaN < Number.MAX_VALUE) === false');
+}
+
+//CHECK#8
+if ((Number.NaN < Number.MIN_VALUE) !== false) {
+ $ERROR('#8: (NaN < Number.MIN_VALUE) === false');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/less-than/S11.8.1_A4.10.js b/js/src/tests/test262/language/expressions/less-than/S11.8.1_A4.10.js
new file mode 100644
index 0000000000..c63304bb60
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/less-than/S11.8.1_A4.10.js
@@ -0,0 +1,41 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: If y is a prefix of x, return false
+es5id: 11.8.1_A4.10
+description: x and y are string primitives
+---*/
+
+//CHECK#1
+if (("x" < "x") !== false) {
+ $ERROR('#1: ("x" < "x") === false');
+}
+
+//CHECK#2
+if (("x" < "") !== false) {
+ $ERROR('#2: ("x" < "") === false');
+}
+
+//CHECK#3
+if (("abcd" < "ab") !== false) {
+ $ERROR('#3: ("abcd" < ab") === false');
+}
+
+//CHECK#4
+if (("abc\u0064" < "abcd") !== false) {
+ $ERROR('#4: ("abc\\u0064" < abcd") === false');
+}
+
+//CHECK#5
+if (("x" + "y" < "x") !== false) {
+ $ERROR('#5: ("x" + "y" < "x") === false');
+}
+
+//CHECK#6
+var x = "x";
+if ((x + "y" < x) !== false) {
+ $ERROR('#6: var x = "x"; (x + "y" < x) === false');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/less-than/S11.8.1_A4.11.js b/js/src/tests/test262/language/expressions/less-than/S11.8.1_A4.11.js
new file mode 100644
index 0000000000..ed66f006ca
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/less-than/S11.8.1_A4.11.js
@@ -0,0 +1,51 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: If x is a prefix of y and x !== y, return true
+es5id: 11.8.1_A4.11
+description: x and y are string primitives
+---*/
+
+//CHECK#1
+if (("x" < "x ") !== true) {
+ $ERROR('#1: ("x" < "x ") === true');
+}
+
+//CHECK#2
+if (("" < "x") !== true) {
+ $ERROR('#2: ("" < "x") === true');
+}
+
+//CHECK#3
+if (("ab" < "abcd") !== true) {
+ $ERROR('#3: ("ab" < abcd") === true');
+}
+
+//CHECK#4
+if (("abcd" < "abc\u0064") !== false) {
+ $ERROR('#4: ("abcd" < abc\\u0064") === false');
+}
+
+//CHECK#5
+if (("x" < "x" + "y") !== true) {
+ $ERROR('#5: ("x" < "x" + "y") === true');
+}
+
+//CHECK#6
+var x = "x";
+if ((x < x + "y") !== true) {
+ $ERROR('#6: var x = "x"; (x < x + "y") === true');
+}
+
+//CHECK#7
+if (("a\u0000" < "a\u0000a") !== true) {
+ $ERROR('#7: ("a\\u0000" < "a\\u0000a") === true');
+}
+
+//CHECK#8
+if (("x" < " x") !== false) {
+ $ERROR('#8: ("x" < " x") === false');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/less-than/S11.8.1_A4.12_T1.js b/js/src/tests/test262/language/expressions/less-than/S11.8.1_A4.12_T1.js
new file mode 100644
index 0000000000..b1b9005bc4
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/less-than/S11.8.1_A4.12_T1.js
@@ -0,0 +1,48 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ If neither x, nor y is a prefix of each other, returned result of strings
+ comparison applies a simple lexicographic ordering to the sequences of
+ code point value values
+es5id: 11.8.1_A4.12_T1
+description: x and y are string primitives
+---*/
+
+//CHECK#1
+if (("xx" < "xy") !== true) {
+ $ERROR('#1: ("xx" < "xy") === true');
+}
+
+//CHECK#2
+if (("xy" < "xx") !== false) {
+ $ERROR('#2: ("xy" < "xx") === false');
+}
+
+//CHECK#3
+if (("x" < "y") !== true) {
+ $ERROR('#3: ("x" < y") === true');
+}
+
+//CHECK#4
+if (("aab" < "aba") !== true) {
+ $ERROR('#4: ("aab" < aba") === true');
+}
+
+//CHECK#5
+if (("\u0061\u0061\u0061\u0062" < "\u0061\u0061\u0061\u0061") !== false) {
+ $ERROR('#5: ("\\u0061\\u0061\\u0061\\u0062" < \\u0061\\u0061\\u0061\\u0061") === false');
+}
+
+//CHECK#6
+if (("a\u0000a" < "a\u0000b") !== true) {
+ $ERROR('#6: ("a\\u0000a" < "a\\u0000b") === true');
+}
+
+//CHECK#7
+if (("aB" < "aa") !== true) {
+ $ERROR('#7: ("aB" < aa") === true');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/less-than/S11.8.1_A4.12_T2.js b/js/src/tests/test262/language/expressions/less-than/S11.8.1_A4.12_T2.js
new file mode 100644
index 0000000000..9f103b7c78
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/less-than/S11.8.1_A4.12_T2.js
@@ -0,0 +1,48 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ If neither x, nor y is a prefix of each other, returned result of strings
+ comparison applies a simple lexicographic ordering to the sequences of
+ code point value values
+es5id: 11.8.1_A4.12_T2
+description: x and y are string primitives
+---*/
+
+//CHECK#1
+if (("0" < "x") !== true) {
+ $ERROR('#1: ("0" < "x") !== true');
+}
+
+//CHECK#2
+if (("-" < "0") !== true) {
+ $ERROR('#2: ("-" < "0") !== true');
+}
+
+//CHECK#3
+if (("." < "0") !== true) {
+ $ERROR('#3: ("." < "0") !== true');
+}
+
+//CHECK#4
+if (("+" < "-") !== true) {
+ $ERROR('#4: ("+" < "-") !== true');
+}
+
+//CHECK#5
+if (("-0" < "-1") !== true) {
+ $ERROR('#5: ("-0" < "-1") !== true');
+}
+
+//CHECK#6
+if (("+1" < "-1") !== true) {
+ $ERROR('#6: ("+1" < "-1") !== true');
+}
+
+//CHECK#7
+if (("1" < "1e-10") !== true) {
+$ERROR('#7: ("1" < "1e-10") !== true');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/less-than/S11.8.1_A4.2.js b/js/src/tests/test262/language/expressions/less-than/S11.8.1_A4.2.js
new file mode 100644
index 0000000000..ea0186f4a2
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/less-than/S11.8.1_A4.2.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: If y is NaN, return false (if result in 11.8.5 is undefined, return false)
+es5id: 11.8.1_A4.2
+description: x is number primitive
+---*/
+
+//CHECK#1
+if ((0 < Number.NaN) !== false) {
+ $ERROR('#1: (0 < NaN) === false');
+}
+
+//CHECK#2
+if ((1.1 < Number.NaN) !== false) {
+ $ERROR('#2: (1.1 < NaN) === false');
+}
+
+//CHECK#3
+if ((-1.1 < Number.NaN) !== false) {
+ $ERROR('#3: (-1.1 < NaN) === false');
+}
+
+//CHECK#4
+if ((Number.NaN < Number.NaN) !== false) {
+ $ERROR('#4: (NaN < NaN) === false');
+}
+
+//CHECK#5
+if ((Number.POSITIVE_INFINITY < Number.NaN) !== false) {
+ $ERROR('#5: (+Infinity < NaN) === false');
+}
+
+//CHECK#6
+if ((Number.NEGATIVE_INFINITY < Number.NaN) !== false) {
+ $ERROR('#6: (-Infinity < NaN) === false');
+}
+
+//CHECK#7
+if ((Number.MAX_VALUE < Number.NaN) !== false) {
+ $ERROR('#7: (Number.MAX_VALUE < NaN) === false');
+}
+
+//CHECK#8
+if ((Number.MIN_VALUE < Number.NaN) !== false) {
+ $ERROR('#8: (Number.MIN_VALUE < NaN) === false');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/less-than/S11.8.1_A4.3.js b/js/src/tests/test262/language/expressions/less-than/S11.8.1_A4.3.js
new file mode 100644
index 0000000000..0b65f89abb
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/less-than/S11.8.1_A4.3.js
@@ -0,0 +1,45 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: If x and y are the same number value, return false
+es5id: 11.8.1_A4.3
+description: x and y are number primitives
+---*/
+
+//CHECK#1
+if ((1 < 1) !== false) {
+ $ERROR('#1: (1 < 1) === false');
+}
+
+//CHECK#2
+if ((1.1 < 1.1) !== false) {
+ $ERROR('#2: (1.1 < 1.1) === false');
+}
+
+//CHECK#3
+if ((-1.1 < -1.1) !== false) {
+ $ERROR('#3: (-1.1 < -1.1) === false');
+}
+
+//CHECK#4
+if ((Number.NEGATIVE_INFINITY < Number.NEGATIVE_INFINITY) !== false) {
+ $ERROR('#4: (-Infinity < -Infinity) === false');
+}
+
+//CHECK#5
+if ((Number.POSITIVE_INFINITY < Number.POSITIVE_INFINITY) !== false) {
+ $ERROR('#5: (+Infinity < +Infinity) === false');
+}
+
+//CHECK#6
+if ((Number.MAX_VALUE < Number.MAX_VALUE) !== false) {
+ $ERROR('#6: (Number.MAX_VALUE < Number.MAX_VALUE) === false');
+}
+
+//CHECK#7
+if ((Number.MIN_VALUE < Number.MIN_VALUE) !== false) {
+ $ERROR('#7: (Number.MIN_VALUE < Number.MIN_VALUE) === false');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/less-than/S11.8.1_A4.4.js b/js/src/tests/test262/language/expressions/less-than/S11.8.1_A4.4.js
new file mode 100644
index 0000000000..500064668d
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/less-than/S11.8.1_A4.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: If x and y are +0 and -0, return false
+es5id: 11.8.1_A4.4
+description: Checking all combinations
+---*/
+
+//CHECK#1
+if ((0 < 0) !== false) {
+ $ERROR('#1: (0 < 0) === false');
+}
+
+//CHECK#2
+if ((-0 < -0) !== false) {
+ $ERROR('#2: (-0 < -0) === false');
+}
+
+//CHECK#3
+if ((+0 < -0) !== false) {
+ $ERROR('#3: (+0 < -0) === false');
+}
+
+//CHECK#4
+if ((-0 < +0) !== false) {
+ $ERROR('#4: (-0 < +0) === false');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/less-than/S11.8.1_A4.5.js b/js/src/tests/test262/language/expressions/less-than/S11.8.1_A4.5.js
new file mode 100644
index 0000000000..76cab096a9
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/less-than/S11.8.1_A4.5.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: If x is +Infinity, return false
+es5id: 11.8.1_A4.5
+description: y is number primitive
+---*/
+
+//CHECK#1
+if ((Number.POSITIVE_INFINITY < 0) !== false) {
+ $ERROR('#1: (+Infinity < 0) === false');
+}
+
+//CHECK#2
+if ((Number.POSITIVE_INFINITY < 1.1) !== false) {
+ $ERROR('#2: (+Infinity < 1.1) === false');
+}
+
+//CHECK#3
+if ((Number.POSITIVE_INFINITY < -1.1) !== false) {
+ $ERROR('#3: (+Infinity < -1.1) === false');
+}
+
+//CHECK#4
+if ((Number.POSITIVE_INFINITY < Number.NEGATIVE_INFINITY) !== false) {
+ $ERROR('#4: (+Infinity < -Infinity) === false');
+}
+
+//CHECK#5
+if ((Number.POSITIVE_INFINITY < Number.MAX_VALUE) !== false) {
+ $ERROR('#5: (+Infinity < Number.MAX_VALUE) === false');
+}
+
+//CHECK#6
+if ((Number.POSITIVE_INFINITY < Number.MIN_VALUE) !== false) {
+ $ERROR('#6: (+Infinity < Number.MIN_VALUE) === false');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/less-than/S11.8.1_A4.6.js b/js/src/tests/test262/language/expressions/less-than/S11.8.1_A4.6.js
new file mode 100644
index 0000000000..1c1e8d11c7
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/less-than/S11.8.1_A4.6.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: If y is +Infinity and x !== y, return true
+es5id: 11.8.1_A4.6
+description: x is number primitive
+---*/
+
+//CHECK#1
+if ((0 < Number.POSITIVE_INFINITY) !== true) {
+ $ERROR('#1: (0 < +Infinity) === true');
+}
+
+//CHECK#2
+if ((1.1 < Number.POSITIVE_INFINITY) !== true) {
+ $ERROR('#2: (1.1 < +Infinity) === true');
+}
+
+//CHECK#3
+if ((-1.1 < Number.POSITIVE_INFINITY) !== true) {
+ $ERROR('#3: (-1.1 < +Infinity) === true');
+}
+
+//CHECK#4
+if ((Number.NEGATIVE_INFINITY < Number.POSITIVE_INFINITY) !== true) {
+ $ERROR('#4: (-Infinity < +Infinity) === true');
+}
+
+//CHECK#5
+if ((Number.MAX_VALUE < Number.POSITIVE_INFINITY) !== true) {
+ $ERROR('#5: (Number.MAX_VALUE < +Infinity) === true');
+}
+
+//CHECK#6
+if ((Number.MIN_VALUE < Number.POSITIVE_INFINITY) !== true) {
+ $ERROR('#6: (Number.MIN_VALUE < +Infinity) === true');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/less-than/S11.8.1_A4.7.js b/js/src/tests/test262/language/expressions/less-than/S11.8.1_A4.7.js
new file mode 100644
index 0000000000..8f03c752b1
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/less-than/S11.8.1_A4.7.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: If x is -Infinity and x !== y, return true
+es5id: 11.8.1_A4.7
+description: y is number primitive
+---*/
+
+//CHECK#1
+if ((Number.NEGATIVE_INFINITY < 0) !== true) {
+ $ERROR('#1: (-Infinity < 0) === true');
+}
+
+//CHECK#2
+if ((Number.NEGATIVE_INFINITY < 1.1) !== true) {
+ $ERROR('#2: (-Infinity < 1.1) === true');
+}
+
+//CHECK#3
+if ((Number.NEGATIVE_INFINITY < -1.1) !== true) {
+ $ERROR('#3: (-Infinity < -1.1) === true');
+}
+
+//CHECK#4
+if ((Number.NEGATIVE_INFINITY < Number.POSITIVE_INFINITY) !== true) {
+ $ERROR('#4: (-Infinity < +Infinity) === true');
+}
+
+//CHECK#5
+if ((Number.NEGATIVE_INFINITY < Number.MAX_VALUE) !== true) {
+ $ERROR('#5: (-Infinity < Number.MAX_VALUE) === true');
+}
+
+//CHECK#6
+if ((Number.NEGATIVE_INFINITY < Number.MIN_VALUE) !== true) {
+ $ERROR('#6: (-Infinity < Number.MIN_VALUE) === true');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/less-than/S11.8.1_A4.8.js b/js/src/tests/test262/language/expressions/less-than/S11.8.1_A4.8.js
new file mode 100644
index 0000000000..7eeeba4b01
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/less-than/S11.8.1_A4.8.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: If y is -Infinity, return false
+es5id: 11.8.1_A4.8
+description: x is number primitive
+---*/
+
+//CHECK#1
+if ((0 < Number.NEGATIVE_INFINITY) !== false) {
+ $ERROR('#1: (0 < -Infinity) === false');
+}
+
+//CHECK#2
+if ((1.1 < Number.NEGATIVE_INFINITY) !== false) {
+ $ERROR('#2: (1.1 < -Infinity) === false');
+}
+
+//CHECK#3
+if ((-1.1 < Number.NEGATIVE_INFINITY) !== false) {
+ $ERROR('#3: (-1.1 < -Infinity) === false');
+}
+
+//CHECK#4
+if ((Number.POSITIVE_INFINITY < Number.NEGATIVE_INFINITY) !== false) {
+ $ERROR('#4: (+Infinity < -Infinity) === false');
+}
+
+//CHECK#5
+if ((Number.MAX_VALUE < Number.NEGATIVE_INFINITY) !== false) {
+ $ERROR('#5: (Number.MAX_VALUE < -Infinity) === false');
+}
+
+//CHECK#6
+if ((Number.MIN_VALUE < Number.NEGATIVE_INFINITY) !== false) {
+ $ERROR('#6: (Number.MIN_VALUE < -Infinity) === false');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/less-than/S11.8.1_A4.9.js b/js/src/tests/test262/language/expressions/less-than/S11.8.1_A4.9.js
new file mode 100644
index 0000000000..378add3363
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/less-than/S11.8.1_A4.9.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: |
+ If x is less than y and these values are both finite non-zero, return
+ true; otherwise, return false
+es5id: 11.8.1_A4.9
+description: x and y are number primitives
+---*/
+
+//CHECK#1
+if ((1.1 < 1) !== false) {
+ $ERROR('#1: (1.1 < 1) === false');
+}
+
+//CHECK#2
+if ((1 < 1.1) !== true) {
+ $ERROR('#2: (1 < 1.1) === true');
+}
+
+//CHECK#3
+if ((-1.1 < -1) !== true) {
+ $ERROR('#3: (-1.1 < -1) === true');
+}
+
+//CHECK#4
+if ((-1 < -1.1) !== false) {
+ $ERROR('#4: (-1 < -1.1) === false');
+}
+
+//CHECK#5
+if ((0 < 0.1) !== true) {
+ $ERROR('#5: (0 < 0.1) === true');
+}
+
+//CHECK#6
+if ((-0.1 < 0) !== true) {
+ $ERROR('#6: (-0.1 < 0) === true');
+}
+
+//CHECK#7
+if ((Number.MAX_VALUE/2 < Number.MAX_VALUE) !== true) {
+ $ERROR('#7: (Number.MAX_VALUE/2 < Number.MAX_VALUE) === true');
+}
+
+//CHECK#8
+if ((Number.MIN_VALUE < Number.MIN_VALUE*2) !== true) {
+ $ERROR('#8: (Number.MIN_VALUE < Number.MIN_VALUE*2) === true');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/less-than/bigint-and-bigint.js b/js/src/tests/test262/language/expressions/less-than/bigint-and-bigint.js
new file mode 100644
index 0000000000..a43049200d
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/less-than/bigint-and-bigint.js
@@ -0,0 +1,166 @@
+// Copyright (C) 2017 Josh Wolfe. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Comparisons of BigInt and BigInt values
+esid: sec-abstract-relational-comparison
+info: |
+ ...
+ 3. If both px and py are Strings, then
+ ...
+ 4. Else,
+ a. Let nx be ? ToNumeric(px). Because px and py are primitive values evaluation order is not important.
+ b. Let ny be ? ToNumeric(py).
+ c. If Type(nx) is Type(ny), return ? Type(nx)::lessThan(nx, ny).
+
+ sec-numeric-types-bigint-lessThan
+ BigInt::lessThan (x, y)
+
+ The abstract operation BigInt::lessThan with two arguments x and y of BigInt type returns true if x is less than y and false otherwise.
+
+features: [BigInt]
+---*/
+assert.sameValue(0n < 0n, false, 'The result of (0n < 0n) is false');
+assert.sameValue(1n < 1n, false, 'The result of (1n < 1n) is false');
+assert.sameValue(-1n < -1n, false, 'The result of (-1n < -1n) is false');
+assert.sameValue(0n < -0n, false, 'The result of (0n < -0n) is false');
+assert.sameValue(-0n < 0n, false, 'The result of (-0n < 0n) is false');
+assert.sameValue(0n < 1n, true, 'The result of (0n < 1n) is true');
+assert.sameValue(1n < 0n, false, 'The result of (1n < 0n) is false');
+assert.sameValue(0n < -1n, false, 'The result of (0n < -1n) is false');
+assert.sameValue(-1n < 0n, true, 'The result of (-1n < 0n) is true');
+assert.sameValue(1n < -1n, false, 'The result of (1n < -1n) is false');
+assert.sameValue(-1n < 1n, true, 'The result of (-1n < 1n) is true');
+
+assert.sameValue(
+ 0x1fffffffffffff01n < 0x1fffffffffffff02n,
+ true,
+ 'The result of (0x1fffffffffffff01n < 0x1fffffffffffff02n) is true'
+);
+
+assert.sameValue(
+ 0x1fffffffffffff02n < 0x1fffffffffffff01n,
+ false,
+ 'The result of (0x1fffffffffffff02n < 0x1fffffffffffff01n) is false'
+);
+
+assert.sameValue(
+ -0x1fffffffffffff01n < -0x1fffffffffffff02n,
+ false,
+ 'The result of (-0x1fffffffffffff01n < -0x1fffffffffffff02n) is false'
+);
+
+assert.sameValue(
+ -0x1fffffffffffff02n < -0x1fffffffffffff01n,
+ true,
+ 'The result of (-0x1fffffffffffff02n < -0x1fffffffffffff01n) is true'
+);
+
+assert.sameValue(
+ 0x10000000000000000n < 0n,
+ false,
+ 'The result of (0x10000000000000000n < 0n) is false'
+);
+
+assert.sameValue(
+ 0n < 0x10000000000000000n,
+ true,
+ 'The result of (0n < 0x10000000000000000n) is true'
+);
+
+assert.sameValue(
+ 0x10000000000000000n < 1n,
+ false,
+ 'The result of (0x10000000000000000n < 1n) is false'
+);
+
+assert.sameValue(
+ 1n < 0x10000000000000000n,
+ true,
+ 'The result of (1n < 0x10000000000000000n) is true'
+);
+
+assert.sameValue(
+ 0x10000000000000000n < -1n,
+ false,
+ 'The result of (0x10000000000000000n < -1n) is false'
+);
+
+assert.sameValue(
+ -1n < 0x10000000000000000n,
+ true,
+ 'The result of (-1n < 0x10000000000000000n) is true'
+);
+
+assert.sameValue(
+ 0x10000000000000001n < 0n,
+ false,
+ 'The result of (0x10000000000000001n < 0n) is false'
+);
+
+assert.sameValue(
+ 0n < 0x10000000000000001n,
+ true,
+ 'The result of (0n < 0x10000000000000001n) is true'
+);
+
+assert.sameValue(
+ -0x10000000000000000n < 0n,
+ true,
+ 'The result of (-0x10000000000000000n < 0n) is true'
+);
+
+assert.sameValue(
+ 0n < -0x10000000000000000n,
+ false,
+ 'The result of (0n < -0x10000000000000000n) is false'
+);
+
+assert.sameValue(
+ -0x10000000000000000n < 1n,
+ true,
+ 'The result of (-0x10000000000000000n < 1n) is true'
+);
+
+assert.sameValue(
+ 1n < -0x10000000000000000n,
+ false,
+ 'The result of (1n < -0x10000000000000000n) is false'
+);
+
+assert.sameValue(
+ -0x10000000000000000n < -1n,
+ true,
+ 'The result of (-0x10000000000000000n < -1n) is true'
+);
+
+assert.sameValue(
+ -1n < -0x10000000000000000n,
+ false,
+ 'The result of (-1n < -0x10000000000000000n) is false'
+);
+
+assert.sameValue(
+ -0x10000000000000001n < 0n,
+ true,
+ 'The result of (-0x10000000000000001n < 0n) is true'
+);
+
+assert.sameValue(
+ 0n < -0x10000000000000001n,
+ false,
+ 'The result of (0n < -0x10000000000000001n) is false'
+);
+
+assert.sameValue(
+ 0x10000000000000000n < 0x100000000n,
+ false,
+ 'The result of (0x10000000000000000n < 0x100000000n) is false'
+);
+
+assert.sameValue(
+ 0x100000000n < 0x10000000000000000n,
+ true,
+ 'The result of (0x100000000n < 0x10000000000000000n) is true'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/less-than/bigint-and-boolean.js b/js/src/tests/test262/language/expressions/less-than/bigint-and-boolean.js
new file mode 100644
index 0000000000..439b2bd27f
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/less-than/bigint-and-boolean.js
@@ -0,0 +1,23 @@
+// Copyright (C) 2018 Caio Lima. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Relational comparison of BigInt and boolean values
+esid: sec-abstract-relational-comparison
+features: [BigInt]
+---*/
+assert.sameValue(0n < false, false, 'The result of (0n < false) is false');
+assert.sameValue(false < 0n, false, 'The result of (false < 0n) is false');
+assert.sameValue(0n < true, true, 'The result of (0n < true) is true');
+assert.sameValue(true < 0n, false, 'The result of (true < 0n) is false');
+assert.sameValue(1n < false, false, 'The result of (1n < false) is false');
+assert.sameValue(false < 1n, true, 'The result of (false < 1n) is true');
+assert.sameValue(1n < true, false, 'The result of (1n < true) is false');
+assert.sameValue(true < 1n, false, 'The result of (true < 1n) is false');
+assert.sameValue(31n < true, false, 'The result of (31n < true) is false');
+assert.sameValue(true < 31n, true, 'The result of (true < 31n) is true');
+assert.sameValue(-3n < true, true, 'The result of (-3n < true) is true');
+assert.sameValue(true < -3n, false, 'The result of (true < -3n) is false');
+assert.sameValue(-3n < false, true, 'The result of (-3n < false) is true');
+assert.sameValue(false < -3n, false, 'The result of (false < -3n) is false');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/less-than/bigint-and-incomparable-string.js b/js/src/tests/test262/language/expressions/less-than/bigint-and-incomparable-string.js
new file mode 100644
index 0000000000..67a4532d7d
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/less-than/bigint-and-incomparable-string.js
@@ -0,0 +1,29 @@
+// Copyright (C) 2018 Igalia, S.L. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Relational comparison of BigInt and string values
+esid: sec-abstract-relational-comparison
+features: [BigInt]
+---*/
+assert.sameValue('0n' < 1n, false, 'The result of ("0n" < 1n) is false');
+assert.sameValue('0.' < 1n, false, 'The result of ("0." < 1n) is false');
+assert.sameValue('.0' < 1n, false, 'The result of (".0" < 1n) is false');
+assert.sameValue('0/1' < 1n, false, 'The result of ("0/1" < 1n) is false');
+assert.sameValue('z0' < 1n, false, 'The result of ("z0" < 1n) is false');
+assert.sameValue('0z' < 1n, false, 'The result of ("0z" < 1n) is false');
+assert.sameValue('++0' < 1n, false, 'The result of ("++0" < 1n) is false');
+assert.sameValue('--0' < 1n, false, 'The result of ("--0" < 1n) is false');
+assert.sameValue('0e0' < 1n, false, 'The result of ("0e0" < 1n) is false');
+assert.sameValue('Infinity' < 1n, false, 'The result of ("Infinity" < 1n) is false');
+assert.sameValue(0n < '1n', false, 'The result of (0n < "1n") is false');
+assert.sameValue(0n < '1.', false, 'The result of (0n < "1.") is false');
+assert.sameValue(0n < '.1', false, 'The result of (0n < ".1") is false');
+assert.sameValue(0n < '1/1', false, 'The result of (0n < "1/1") is false');
+assert.sameValue(0n < 'z1', false, 'The result of (0n < "z1") is false');
+assert.sameValue(0n < '1z', false, 'The result of (0n < "1z") is false');
+assert.sameValue(0n < '++1', false, 'The result of (0n < "++1") is false');
+assert.sameValue(0n < '--1', false, 'The result of (0n < "--1") is false');
+assert.sameValue(0n < '1e0', false, 'The result of (0n < "1e0") is false');
+assert.sameValue(0n < 'Infinity', false, 'The result of (0n < "Infinity") is false');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/less-than/bigint-and-non-finite.js b/js/src/tests/test262/language/expressions/less-than/bigint-and-non-finite.js
new file mode 100644
index 0000000000..96a74f6d49
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/less-than/bigint-and-non-finite.js
@@ -0,0 +1,31 @@
+// Copyright (C) 2017 Josh Wolfe. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Comparisons of BigInt and non-finite Number values
+esid: sec-abstract-relational-comparison
+info: |
+ ...
+ 3. If both px and py are Strings, then
+ ...
+ 4. Else,
+ a. Let nx be ? ToNumeric(px). Because px and py are primitive values evaluation order is not important.
+ b. Let ny be ? ToNumeric(py).
+ c. If Type(nx) is Type(ny), return ? Type(nx)::lessThan(nx, ny).
+ d. Assert: Type(nx) is BigInt and Type(ny) is Number, or if Type(nx) is Number and Type(ny) is BigInt.
+ e. If x or y are any of NaN, return undefined.
+ f. If x is -∞, or y is +∞, return true.
+ g. If x is +∞, or y is -∞, return false.
+features: [BigInt]
+---*/
+assert.sameValue(1n < Infinity, true, 'The result of (1n < Infinity) is true');
+assert.sameValue(Infinity < 1n, false, 'The result of (Infinity < 1n) is false');
+assert.sameValue(-1n < Infinity, true, 'The result of (-1n < Infinity) is true');
+assert.sameValue(Infinity < -1n, false, 'The result of (Infinity < -1n) is false');
+assert.sameValue(1n < -Infinity, false, 'The result of (1n < -Infinity) is false');
+assert.sameValue(-Infinity < 1n, true, 'The result of (-Infinity < 1n) is true');
+assert.sameValue(-1n < -Infinity, false, 'The result of (-1n < -Infinity) is false');
+assert.sameValue(-Infinity < -1n, true, 'The result of (-Infinity < -1n) is true');
+assert.sameValue(0n < NaN, false, 'The result of (0n < NaN) is false');
+assert.sameValue(NaN < 0n, false, 'The result of (NaN < 0n) is false');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/less-than/bigint-and-number-extremes.js b/js/src/tests/test262/language/expressions/less-than/bigint-and-number-extremes.js
new file mode 100644
index 0000000000..7f912f9bad
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/less-than/bigint-and-number-extremes.js
@@ -0,0 +1,50 @@
+// Copyright (C) 2017 Josh Wolfe. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Comparisons of large BigInt and Number values
+esid: sec-abstract-relational-comparison
+info: |
+ ...
+ 3. If both px and py are Strings, then
+ ...
+ 4. Else,
+ a. Let nx be ? ToNumeric(px). Because px and py are primitive values evaluation order is not important.
+ b. Let ny be ? ToNumeric(py).
+ c. If Type(nx) is Type(ny), return ? Type(nx)::lessThan(nx, ny).
+ d. Assert: Type(nx) is BigInt and Type(ny) is Number, or if Type(nx) is Number and Type(ny) is BigInt.
+ e. If x or y are any of NaN, return undefined.
+ f. If x is -∞, or y is +∞, return true.
+ g. If x is +∞, or y is -∞, return false.
+ h. If the mathematical value of nx is less than the mathematical value of ny, return true, otherwise return false.
+features: [BigInt]
+---*/
+assert.sameValue(1n < Number.MAX_VALUE, true, 'The result of (1n < Number.MAX_VALUE) is true');
+assert.sameValue(Number.MAX_VALUE < 1n, false, 'The result of (Number.MAX_VALUE < 1n) is false');
+assert.sameValue(1n < -Number.MAX_VALUE, false, 'The result of (1n < -Number.MAX_VALUE) is false');
+assert.sameValue(-Number.MAX_VALUE < 1n, true, 'The result of (-Number.MAX_VALUE < 1n) is true');
+
+assert.sameValue(
+ 0xfffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffn < Number.MAX_VALUE,
+ true,
+ 'The result of (0xfffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffn < Number.MAX_VALUE) is true'
+);
+
+assert.sameValue(
+ Number.MAX_VALUE < 0xfffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffn,
+ false,
+ 'The result of (Number.MAX_VALUE < 0xfffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffn) is false'
+);
+
+assert.sameValue(
+ 0xfffffffffffff800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001n < Number.MAX_VALUE,
+ false,
+ 'The result of (0xfffffffffffff800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001n < Number.MAX_VALUE) is false'
+);
+
+assert.sameValue(
+ Number.MAX_VALUE < 0xfffffffffffff800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001n,
+ true,
+ 'The result of (Number.MAX_VALUE < 0xfffffffffffff800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001n) is true'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/less-than/bigint-and-number.js b/js/src/tests/test262/language/expressions/less-than/bigint-and-number.js
new file mode 100644
index 0000000000..4661da4db7
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/less-than/bigint-and-number.js
@@ -0,0 +1,47 @@
+// Copyright (C) 2017 Robin Templeton. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Comparisons of BigInt and Number values
+esid: sec-abstract-relational-comparison
+info: |
+ ...
+ 3. If both px and py are Strings, then
+ ...
+ 4. Else,
+ a. Let nx be ? ToNumeric(px). Because px and py are primitive values evaluation order is not important.
+ b. Let ny be ? ToNumeric(py).
+ c. If Type(nx) is Type(ny), return ? Type(nx)::lessThan(nx, ny).
+ d. Assert: Type(nx) is BigInt and Type(ny) is Number, or if Type(nx) is Number and Type(ny) is BigInt.
+ e. If x or y are any of NaN, return undefined.
+ f. If x is -∞, or y is +∞, return true.
+ g. If x is +∞, or y is -∞, return false.
+ h. If the mathematical value of nx is less than the mathematical value of ny, return true, otherwise return false.
+features: [BigInt]
+---*/
+assert.sameValue(0n < 0, false, 'The result of (0n < 0) is false');
+assert.sameValue(0 < 0n, false, 'The result of (0 < 0n) is false');
+assert.sameValue(0n < -0, false, 'The result of (0n < -0) is false');
+assert.sameValue(-0 < 0n, false, 'The result of (-0 < 0n) is false');
+assert.sameValue(0n < 0.000000000001, true, 'The result of (0n < 0.000000000001) is true');
+assert.sameValue(0.000000000001 < 0n, false, 'The result of (0.000000000001 < 0n) is false');
+assert.sameValue(0n < 1, true, 'The result of (0n < 1) is true');
+assert.sameValue(1 < 0n, false, 'The result of (1 < 0n) is false');
+assert.sameValue(1n < 0, false, 'The result of (1n < 0) is false');
+assert.sameValue(0 < 1n, true, 'The result of (0 < 1n) is true');
+assert.sameValue(1n < 0.999999999999, false, 'The result of (1n < 0.999999999999) is false');
+assert.sameValue(0.999999999999 < 1n, true, 'The result of (0.999999999999 < 1n) is true');
+assert.sameValue(1n < 1, false, 'The result of (1n < 1) is false');
+assert.sameValue(1 < 1n, false, 'The result of (1 < 1n) is false');
+assert.sameValue(0n < Number.MIN_VALUE, true, 'The result of (0n < Number.MIN_VALUE) is true');
+assert.sameValue(Number.MIN_VALUE < 0n, false, 'The result of (Number.MIN_VALUE < 0n) is false');
+assert.sameValue(0n < -Number.MIN_VALUE, false, 'The result of (0n < -Number.MIN_VALUE) is false');
+assert.sameValue(-Number.MIN_VALUE < 0n, true, 'The result of (-Number.MIN_VALUE < 0n) is true');
+assert.sameValue(-10n < Number.MIN_VALUE, true, 'The result of (-10n < Number.MIN_VALUE) is true');
+
+assert.sameValue(
+ Number.MIN_VALUE < -10n,
+ false,
+ 'The result of (Number.MIN_VALUE < -10n) is false'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/less-than/bigint-and-string.js b/js/src/tests/test262/language/expressions/less-than/bigint-and-string.js
new file mode 100644
index 0000000000..27cdda783a
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/less-than/bigint-and-string.js
@@ -0,0 +1,62 @@
+// Copyright (C) 2018 Igalia, S.L. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Relational comparison of BigInt and string values
+esid: sec-abstract-relational-comparison
+features: [BigInt]
+---*/
+assert.sameValue(0n < '0', false, 'The result of (0n < "0") is false');
+assert.sameValue('0' < 0n, false, 'The result of ("0" < 0n) is false');
+assert.sameValue(0n < '1', true, 'The result of (0n < "1") is true');
+assert.sameValue('0' < 1n, true, 'The result of ("0" < 1n) is true');
+assert.sameValue(1n < '0', false, 'The result of (1n < "0") is false');
+assert.sameValue('1' < 0n, false, 'The result of ("1" < 0n) is false');
+assert.sameValue(0n < '', false, 'The result of (0n < "") is false');
+assert.sameValue('' < 0n, false, 'The result of ("" < 0n) is false');
+assert.sameValue(0n < '1', true, 'The result of (0n < "1") is true');
+assert.sameValue('' < 1n, true, 'The result of ("" < 1n) is true');
+assert.sameValue(1n < '', false, 'The result of (1n < "") is false');
+assert.sameValue('1' < 0n, false, 'The result of ("1" < 0n) is false');
+assert.sameValue(1n < '1', false, 'The result of (1n < "1") is false');
+assert.sameValue('1' < 1n, false, 'The result of ("1" < 1n) is false');
+assert.sameValue(1n < '-1', false, 'The result of (1n < "-1") is false');
+assert.sameValue('1' < -1n, false, 'The result of ("1" < -1n) is false');
+assert.sameValue(-1n < '1', true, 'The result of (-1n < "1") is true');
+assert.sameValue('-1' < 1n, true, 'The result of ("-1" < 1n) is true');
+assert.sameValue(-1n < '-1', false, 'The result of (-1n < "-1") is false');
+assert.sameValue('-1' < -1n, false, 'The result of ("-1" < -1n) is false');
+assert.sameValue('0x10' < 15n, false, 'The result of ("0x10" < 15n) is false');
+assert.sameValue('0x10' < 16n, false, 'The result of ("0x10" < 16n) is false');
+assert.sameValue('0x10' < 17n, true, 'The result of ("0x10" < 17n) is true');
+assert.sameValue('0o10' < 7n, false, 'The result of ("0o10" < 7n) is false');
+assert.sameValue('0o10' < 8n, false, 'The result of ("0o10" < 8n) is false');
+assert.sameValue('0o10' < 9n, true, 'The result of ("0o10" < 9n) is true');
+assert.sameValue('0b10' < 1n, false, 'The result of ("0b10" < 1n) is false');
+assert.sameValue('0b10' < 2n, false, 'The result of ("0b10" < 2n) is false');
+assert.sameValue('0b10' < 3n, true, 'The result of ("0b10" < 3n) is true');
+
+assert.sameValue(
+ 9007199254740993n < '9007199254740992',
+ false,
+ 'The result of (9007199254740993n < "9007199254740992") is false'
+);
+
+assert.sameValue(
+ '9007199254740993' < 9007199254740992n,
+ false,
+ 'The result of ("9007199254740993" < 9007199254740992n) is false'
+);
+
+assert.sameValue(
+ -9007199254740992n < '-9007199254740993',
+ false,
+ 'The result of (-9007199254740992n < "-9007199254740993") is false'
+);
+
+assert.sameValue(
+ '-9007199254740992' < -9007199254740993n,
+ false,
+ 'The result of ("-9007199254740992" < -9007199254740993n) is false'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/less-than/bigint-and-symbol.js b/js/src/tests/test262/language/expressions/less-than/bigint-and-symbol.js
new file mode 100644
index 0000000000..f6382f64d9
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/less-than/bigint-and-symbol.js
@@ -0,0 +1,16 @@
+// Copyright (C) 2018 Caio Lima. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Relational comparison of BigInt and Symbol values
+esid: sec-abstract-relational-comparison
+features: [BigInt, Symbol]
+---*/
+assert.throws(TypeError, function() {
+ 3n < Symbol('2');
+}, '3n < Symbol("2") throws TypeError');
+
+assert.throws(TypeError, function() {
+ Symbol('2') < 3n;
+}, 'Symbol("2") < 3n throws TypeError');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/less-than/browser.js b/js/src/tests/test262/language/expressions/less-than/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/less-than/browser.js
diff --git a/js/src/tests/test262/language/expressions/less-than/shell.js b/js/src/tests/test262/language/expressions/less-than/shell.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/less-than/shell.js