summaryrefslogtreecommitdiffstats
path: root/js/src/tests/test262/language/expressions/greater-than-or-equal
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/tests/test262/language/expressions/greater-than-or-equal')
-rw-r--r--js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A1.js62
-rw-r--r--js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A2.1_T1.js43
-rw-r--r--js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A2.1_T2.js21
-rw-r--r--js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A2.1_T3.js21
-rw-r--r--js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A2.2_T1.js71
-rw-r--r--js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A2.3_T1.js28
-rw-r--r--js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A2.4_T1.js22
-rw-r--r--js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A2.4_T2.js26
-rw-r--r--js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A2.4_T3.js21
-rw-r--r--js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A2.4_T4.js16
-rw-r--r--js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A3.1_T1.1.js34
-rw-r--r--js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A3.1_T1.2.js34
-rw-r--r--js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A3.1_T1.3.js34
-rw-r--r--js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A3.1_T2.1.js55
-rw-r--r--js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A3.1_T2.2.js65
-rw-r--r--js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A3.1_T2.3.js34
-rw-r--r--js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A3.1_T2.4.js34
-rw-r--r--js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A3.1_T2.5.js55
-rw-r--r--js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A3.1_T2.6.js34
-rw-r--r--js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A3.1_T2.7.js34
-rw-r--r--js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A3.1_T2.8.js34
-rw-r--r--js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A3.1_T2.9.js34
-rw-r--r--js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A3.2_T1.1.js44
-rw-r--r--js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A3.2_T1.2.js34
-rw-r--r--js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A4.1.js50
-rw-r--r--js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A4.10.js41
-rw-r--r--js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A4.11.js51
-rw-r--r--js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A4.12_T1.js48
-rw-r--r--js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A4.12_T2.js48
-rw-r--r--js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A4.2.js50
-rw-r--r--js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A4.3.js45
-rw-r--r--js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A4.4.js30
-rw-r--r--js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A4.5.js40
-rw-r--r--js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A4.6.js40
-rw-r--r--js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A4.7.js40
-rw-r--r--js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A4.8.js40
-rw-r--r--js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A4.9.js52
-rw-r--r--js/src/tests/test262/language/expressions/greater-than-or-equal/bigint-and-bigint.js166
-rw-r--r--js/src/tests/test262/language/expressions/greater-than-or-equal/bigint-and-incomparable-string.js29
-rw-r--r--js/src/tests/test262/language/expressions/greater-than-or-equal/bigint-and-non-finite.js31
-rw-r--r--js/src/tests/test262/language/expressions/greater-than-or-equal/bigint-and-number-extremes.js55
-rw-r--r--js/src/tests/test262/language/expressions/greater-than-or-equal/bigint-and-number.js57
-rw-r--r--js/src/tests/test262/language/expressions/greater-than-or-equal/bigint-and-string.js53
-rw-r--r--js/src/tests/test262/language/expressions/greater-than-or-equal/browser.js0
-rw-r--r--js/src/tests/test262/language/expressions/greater-than-or-equal/shell.js0
45 files changed, 1856 insertions, 0 deletions
diff --git a/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A1.js b/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A1.js
new file mode 100644
index 0000000000..4a13a62ab0
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_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
+ "=>" and ShiftExpression are allowed
+es5id: 11.8.4_A1
+description: Checking by using eval
+---*/
+
+//CHECK#1
+if (eval("1\u0009>=\u00091") !== true) {
+ $ERROR('#1: (1\\u0009>=\\u00091) === true');
+}
+
+//CHECK#2
+if (eval("1\u000B>=\u000B1") !== true) {
+ $ERROR('#2: (1\\u000B>=\\u000B1) === true');
+}
+
+//CHECK#3
+if (eval("1\u000C>=\u000C1") !== true) {
+ $ERROR('#3: (1\\u000C>=\\u000C1) === true');
+}
+
+//CHECK#4
+if (eval("1\u0020>=\u00201") !== true) {
+ $ERROR('#4: (1\\u0020>=\\u00201) === true');
+}
+
+//CHECK#5
+if (eval("1\u00A0>=\u00A01") !== true) {
+ $ERROR('#5: (1\\u00A0>=\\u00A01) === true');
+}
+
+//CHECK#6
+if (eval("1\u000A>=\u000A1") !== true) {
+ $ERROR('#6: (1\\u000A>=\\u000A1) === true');
+}
+
+//CHECK#7
+if (eval("1\u000D>=\u000D1") !== true) {
+ $ERROR('#7: (1\\u000D>=\\u000D1) === true');
+}
+
+//CHECK#8
+if (eval("1\u2028>=\u20281") !== true) {
+ $ERROR('#8: (1\\u2028>=\\u20281) === true');
+}
+
+//CHECK#9
+if (eval("1\u2029>=\u20291") !== true) {
+ $ERROR('#9: (1\\u2029>=\\u20291) === true');
+}
+
+//CHECK#10
+if (eval("1\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029>=\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u20291") !== true) {
+ $ERROR('#10: (1\\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/greater-than-or-equal/S11.8.4_A2.1_T1.js b/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A2.1_T1.js
new file mode 100644
index 0000000000..ce16d7f92e
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_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.4_A2.1_T1
+description: Either Type is not Reference or GetBase is not null
+---*/
+
+//CHECK#1
+if (1 >= 1 !== true) {
+ $ERROR('#1: 1 >= 1 === true');
+}
+
+//CHECK#2
+var x = 1;
+if (x >= 1 !== true) {
+ $ERROR('#2: var x = 1; x >= 1 === true');
+}
+
+//CHECK#3
+var y = 1;
+if (1 >= y !== true) {
+ $ERROR('#3: var y = 1; 1 >= y === true');
+}
+
+//CHECK#4
+var x = 1;
+var y = 1;
+if (x >= y !== true) {
+ $ERROR('#4: var x = 1; var y = 1; x >= y === true');
+}
+
+//CHECK#5
+var objectx = new Object();
+var objecty = new Object();
+objectx.prop = 1;
+objecty.prop = 1;
+if (objectx.prop >= objecty.prop !== true) {
+ $ERROR('#5: var objectx = new Object(); var objecty = new Object(); objectx.prop = 1; objecty.prop = 1; objectx.prop >= objecty.prop === true');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A2.1_T2.js b/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A2.1_T2.js
new file mode 100644
index 0000000000..9a4f7905ef
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_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.4_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/greater-than-or-equal/S11.8.4_A2.1_T3.js b/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A2.1_T3.js
new file mode 100644
index 0000000000..c501485167
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_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.4_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/greater-than-or-equal/S11.8.4_A2.2_T1.js b/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A2.2_T1.js
new file mode 100644
index 0000000000..30740cc4b8
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_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.4_A2.2_T1
+description: If Type(value) is Object, evaluate ToPrimitive(value, Number)
+---*/
+
+//CHECK#1
+if ({valueOf: function() {return 2}} >= 1 !== true) {
+ $ERROR('#1: {valueOf: function() {return 1}} >= 1 === true. Actual: ' + ({valueOf: function() {return 1}} >= 1));
+}
+
+//CHECK#2
+if ({valueOf: function() {return 2}, toString: function() {return 0}} >= 1 !== true) {
+ $ERROR('#2: {valueOf: function() {return 1}, toString: function() {return 2}} >= 1 === true. Actual: ' + ({valueOf: function() {return 1}, toString: function() {return 2}} >= 1));
+}
+
+//CHECK#3
+if ({valueOf: function() {return 2}, 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 2}, 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 2}, toString: function() {throw "error"}} >= 1 not throw "error"');
+ } else {
+ $ERROR('#4.3: {valueOf: function() {return 2}, toString: function() {throw "error"}} >= 1 not throw Error. Actual: ' + (e));
+ }
+}
+
+//CHECK#5
+if (1 >= {toString: function() {return 0}} !== true) {
+ $ERROR('#5: 1 >= {toString: function() {return 0}} === true. Actual: ' + (1 >= {toString: function() {return 0}}));
+}
+
+//CHECK#6
+if (1 >= {valueOf: function() {return {}}, toString: function() {return 0}} !== true) {
+ $ERROR('#6: 1 >= {valueOf: function() {return {}}, toString: function() {return 0}} === true. Actual: ' + (1 >= {valueOf: function() {return {}}, toString: function() {return 0}}));
+}
+
+//CHECK#7
+try {
+ 1 >= {valueOf: function() {throw "error"}, toString: function() {return 0}};
+ $ERROR('#7.1: 1 >= {valueOf: function() {throw "error"}, toString: function() {return 0}} throw "error". Actual: ' + (1 >= {valueOf: function() {throw "error"}, toString: function() {return 0}}));
+}
+catch (e) {
+ if (e !== "error") {
+ $ERROR('#7.2: 1 >= {valueOf: function() {throw "error"}, toString: function() {return 0}} 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/greater-than-or-equal/S11.8.4_A2.3_T1.js b/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A2.3_T1.js
new file mode 100644
index 0000000000..01b7ad08a5
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_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.4_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/greater-than-or-equal/S11.8.4_A2.4_T1.js b/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A2.4_T1.js
new file mode 100644
index 0000000000..7bcc83717b
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_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.4_A2.4_T1
+description: Checking with "="
+---*/
+
+//CHECK#1
+var x = 1;
+if ((x = 0) >= x !== true) {
+ $ERROR('#1: var x = 1; (x = 0) >= x === true');
+}
+
+//CHECK#2
+var x = 0;
+if (x >= (x = 1) !== false) {
+ $ERROR('#2: var x = 0; x >= (x = 1) === false');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A2.4_T2.js b/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A2.4_T2.js
new file mode 100644
index 0000000000..087631ab26
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_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.4_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/greater-than-or-equal/S11.8.4_A2.4_T3.js b/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A2.4_T3.js
new file mode 100644
index 0000000000..9828207f17
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_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.4_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/greater-than-or-equal/S11.8.4_A2.4_T4.js b/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A2.4_T4.js
new file mode 100644
index 0000000000..339b759917
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_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.4_A2.4_T4
+description: Checking with undeclarated variables
+flags: [noStrict]
+---*/
+
+//CHECK#1
+if ((y = 1) >= y !== true) {
+ $ERROR('#1: (y = 1) >= y === true');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A3.1_T1.1.js b/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A3.1_T1.1.js
new file mode 100644
index 0000000000..b8b9a13a21
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_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.4_A3.1_T1.1
+description: >
+ Type(Primitive(x)) and Type(Primitive(y)) vary between primitive
+ boolean and Boolean object
+---*/
+
+//CHECK#1
+if (true >= true !== true) {
+ $ERROR('#1: true >= true === true');
+}
+
+//CHECK#2
+if (new Boolean(true) >= true !== true) {
+ $ERROR('#2: new Boolean(true) >= true === true');
+}
+
+//CHECK#3
+if (true >= new Boolean(true) !== true) {
+ $ERROR('#3: true >= new Boolean(true) === true');
+}
+
+//CHECK#4
+if (new Boolean(true) >= new Boolean(true) !== true) {
+ $ERROR('#4: new Boolean(true) >= new Boolean(true) === true');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A3.1_T1.2.js b/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A3.1_T1.2.js
new file mode 100644
index 0000000000..acd9882799
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_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.4_A3.1_T1.2
+description: >
+ Type(Primitive(x)) and Type(Primitive(y)) vary between primitive
+ number and Number object
+---*/
+
+//CHECK#1
+if (1 >= 1 !== true) {
+ $ERROR('#1: 1 >= 1 === true');
+}
+
+//CHECK#2
+if (new Number(1) >= 1 !== true) {
+ $ERROR('#2: new Number(1) >= 1 === true');
+}
+
+//CHECK#3
+if (1 >= new Number(1) !== true) {
+ $ERROR('#3: 1 >= new Number(1) === true');
+}
+
+//CHECK#4
+if (new Number(1) >= new Number(1) !== true) {
+ $ERROR('#4: new Number(1) >= new Number(1) === true');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A3.1_T1.3.js b/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A3.1_T1.3.js
new file mode 100644
index 0000000000..7e2b0ac158
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_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.4_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 !== true) {
+ $ERROR('#4: null >= null === true');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A3.1_T2.1.js b/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A3.1_T2.1.js
new file mode 100644
index 0000000000..e416761aa5
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_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.4_A3.1_T2.1
+description: >
+ Type(Primitive(x)) is different from Type(Primitive(y)) and both
+ types vary between Number (primitive or object) and Boolean
+ (primitive and object)
+---*/
+
+//CHECK#1
+if (true >= 1 !== true) {
+ $ERROR('#1: true >= 1 === true');
+}
+
+//CHECK#2
+if (1 >= true !== true) {
+ $ERROR('#2: 1 >= true === true');
+}
+
+//CHECK#3
+if (new Boolean(true) >= 1 !== true) {
+ $ERROR('#3: new Boolean(true) >= 1 === true');
+}
+
+//CHECK#4
+if (1 >= new Boolean(true) !== true) {
+ $ERROR('#4: 1 >= new Boolean(true) === true');
+}
+
+//CHECK#5
+if (true >= new Number(1) !== true) {
+ $ERROR('#5: true >= new Number(1) === true');
+}
+
+//CHECK#6
+if (new Number(1) >= true !== true) {
+ $ERROR('#6: new Number(1) >= true === true');
+}
+
+//CHECK#7
+if (new Boolean(true) >= new Number(1) !== true) {
+ $ERROR('#7: new Boolean(true) >= new Number(1) === true');
+}
+
+//CHECK#8
+if (new Number(1) >= new Boolean(true) !== true) {
+ $ERROR('#8: new Number(1) >= new Boolean(true) === true');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A3.1_T2.2.js b/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A3.1_T2.2.js
new file mode 100644
index 0000000000..db7fccbfdc
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_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.4_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 !== true) {
+ $ERROR('#1: "1" >= 1 === true');
+}
+
+//CHECK#2
+if (1 >= "1" !== true) {
+ $ERROR('#2: 1 >= "1" === true');
+}
+
+//CHECK#3
+if (new String("1") >= 1 !== true) {
+ $ERROR('#3: new String("1") >= 1 === true');
+}
+
+//CHECK#4
+if (1 >= new String("1") !== true) {
+ $ERROR('#4: 1 >= new String("1") === true');
+}
+
+//CHECK#5
+if ("1" >= new Number(1) !== true) {
+ $ERROR('#5: "1" >= new Number(1) === true');
+}
+
+//CHECK#6
+if (new Number(1) >= "1" !== true) {
+ $ERROR('#6: new Number(1) >= "1" === true');
+}
+
+//CHECK#7
+if (new String("1") >= new Number(1) !== true) {
+ $ERROR('#7: new String("1") >= new Number(1) === true');
+}
+
+//CHECK#8
+if (new Number(1) >= new String("1") !== true) {
+ $ERROR('#8: new Number(1) >= new String("1") === true');
+}
+
+//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/greater-than-or-equal/S11.8.4_A3.1_T2.3.js b/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A3.1_T2.3.js
new file mode 100644
index 0000000000..3cf6329b4c
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_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.4_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 !== true) {
+ $ERROR('#1: 1 >= null === true');
+}
+
+//CHECK#2
+if (null >= 1 !== false) {
+ $ERROR('#2: null >= 1 === false');
+}
+
+//CHECK#3
+if (new Number(1) >= null !== true) {
+ $ERROR('#3: new Number(1) >= null === true');
+}
+
+//CHECK#4
+if (null >= new Number(1) !== false) {
+ $ERROR('#4: null >= new Number(1) === false');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A3.1_T2.4.js b/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A3.1_T2.4.js
new file mode 100644
index 0000000000..b99c046785
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_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.4_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/greater-than-or-equal/S11.8.4_A3.1_T2.5.js b/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A3.1_T2.5.js
new file mode 100644
index 0000000000..166a5647b9
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_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.4_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" !== true) {
+ $ERROR('#1: true >= "1" === true');
+}
+
+//CHECK#2
+if ("1" >= true !== true) {
+ $ERROR('#2: "1" >= true === true');
+}
+
+//CHECK#3
+if (new Boolean(true) >= "1" !== true) {
+ $ERROR('#3: new Boolean(true) >= "1" === true');
+}
+
+//CHECK#4
+if ("1" >= new Boolean(true) !== true) {
+ $ERROR('#4: "1" >= new Boolean(true) === true');
+}
+
+//CHECK#5
+if (true >= new String("1") !== true) {
+ $ERROR('#5: true >= new String("1") === true');
+}
+
+//CHECK#6
+if (new String("1") >= true !== true) {
+ $ERROR('#6: new String("1") >= true === true');
+}
+
+//CHECK#7
+if (new Boolean(true) >= new String("1") !== true) {
+ $ERROR('#7: new Boolean(true) >= new String("1") === true');
+}
+
+//CHECK#8
+if (new String("1") >= new Boolean(true) !== true) {
+ $ERROR('#8: new String("1") >= new Boolean(true) === true');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A3.1_T2.6.js b/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A3.1_T2.6.js
new file mode 100644
index 0000000000..7ee01da280
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_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.4_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/greater-than-or-equal/S11.8.4_A3.1_T2.7.js b/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A3.1_T2.7.js
new file mode 100644
index 0000000000..7c7877a203
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_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.4_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 !== true) {
+ $ERROR('#1: "1" >= null === true');
+}
+
+//CHECK#2
+if (null >= "1" !== false) {
+ $ERROR('#2: null >= "1" === false');
+}
+
+//CHECK#3
+if (new String("1") >= null !== true) {
+ $ERROR('#3: new String("1") >= null === true');
+}
+
+//CHECK#4
+if (null >= new String("1") !== false) {
+ $ERROR('#4: null >= new String("1") === false');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A3.1_T2.8.js b/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A3.1_T2.8.js
new file mode 100644
index 0000000000..3e94d2d6ab
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_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.4_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/greater-than-or-equal/S11.8.4_A3.1_T2.9.js b/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A3.1_T2.9.js
new file mode 100644
index 0000000000..a6c08bfb29
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_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.4_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 !== true) {
+ $ERROR('#1: true >= null === true');
+}
+
+//CHECK#2
+if (null >= true !== false) {
+ $ERROR('#2: null >= true === false');
+}
+
+//CHECK#3
+if (new Boolean(true) >= null !== true) {
+ $ERROR('#3: new Boolean(true) >= null === true');
+}
+
+//CHECK#4
+if (null >= new Boolean(true) !== false) {
+ $ERROR('#4: null >= new Boolean(true) === false');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A3.2_T1.1.js b/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A3.2_T1.1.js
new file mode 100644
index 0000000000..fab514f69f
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_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.4_A3.2_T1.1
+description: >
+ Type(Primitive(x)) and Type(Primitive(y)) vary between primitive
+ string and String object
+---*/
+
+//CHECK#1
+if ("1" >= "1" !== true) {
+ $ERROR('#1: "1" >= "1" === true');
+}
+
+//CHECK#2
+if (new String("1") >= "1" !== true) {
+ $ERROR('#2: new String("1") >= "1" === true');
+}
+
+//CHECK#3
+if ("1" >= new String("1") !== true) {
+ $ERROR('#3: "1" >= new String("1") === true');
+}
+
+//CHECK#4
+if (new String("1") >= new String("1") !== true) {
+ $ERROR('#4: new String("1") >= new String("1") === true');
+}
+
+//CHECK#5
+if ("x" >= "1" !== true) {
+ $ERROR('#5: "x" >= "1" === true');
+}
+
+//CHECK#6
+if ("1" >= "x" !== false) {
+ $ERROR('#6: "1" >= "x" === false');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A3.2_T1.2.js b/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A3.2_T1.2.js
new file mode 100644
index 0000000000..47e15df3be
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_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.4_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/greater-than-or-equal/S11.8.4_A4.1.js b/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A4.1.js
new file mode 100644
index 0000000000..0bde2fabed
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_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.4_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/greater-than-or-equal/S11.8.4_A4.10.js b/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A4.10.js
new file mode 100644
index 0000000000..79e754837e
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_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 x is a prefix of y and x !== y, return false
+es5id: 11.8.4_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 (("ab" >= "abcd") !== false) {
+ $ERROR('#3: ("ab" >= abcd") === false');
+}
+
+//CHECK#4
+if (("abcd" >= "abc\u0064") !== true) {
+ $ERROR('#4: ("abcd" >= abc\\u0064") === true');
+}
+
+//CHECK#5
+if (("x" >= "x" + "y") !== false) {
+ $ERROR('#5: ("x" >= "x" + "y") === false');
+}
+
+//CHECK#6
+var x = "x";
+if ((x >= x + "y") !== false) {
+ $ERROR('#6: var x = "x"; (x >= x + "y") === false');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A4.11.js b/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A4.11.js
new file mode 100644
index 0000000000..518e69cc0b
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_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 y is a prefix of x, return true
+es5id: 11.8.4_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 (("abcd" >= "ab") !== true) {
+ $ERROR('#3: ("abcd" >= ab") === true');
+}
+
+//CHECK#4
+if (("abc\u0064" >= "abcd") !== true) {
+ $ERROR('#4: ("abc\\u0064" >= abc") === true');
+}
+
+//CHECK#5
+if (("x" + "y" >= "x") !== true) {
+ $ERROR('#5: ("x" + "y" >= "x") === true');
+}
+
+//CHECK#6
+var x = "x";
+if ((x + 'y' >= x) !== true) {
+ $ERROR('#6: var x = "x"; (x + "y" >= x) === true');
+}
+
+//CHECK#7
+if (("a\u0000a" >= "a\u0000") !== true) {
+ $ERROR('#7: ("a\\u0000a" >= "a\\u0000") === true');
+}
+
+//CHECK#8
+if ((" x" >= "x") !== false) {
+ $ERROR('#8: (" x" >= "x") === false');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A4.12_T1.js b/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A4.12_T1.js
new file mode 100644
index 0000000000..9faead805a
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_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.4_A4.12_T1
+description: x and y are string primitives
+---*/
+
+//CHECK#1
+if (("xy" >= "xx") !== true) {
+ $ERROR('#1: ("xy" >= "xx") === true');
+}
+
+//CHECK#2
+if (("xx" >= "xy") !== false) {
+ $ERROR('#2: ("xx" >= "xy") === false');
+}
+
+//CHECK#3
+if (("y" >= "x") !== true) {
+ $ERROR('#3: ("y" >= "x") === true');
+}
+
+//CHECK#4
+if (("aba" >= "aab") !== true) {
+ $ERROR('#4: ("aba" >= aab") === true');
+}
+
+//CHECK#5
+if (("\u0061\u0061\u0061\u0061" >= "\u0061\u0061\u0061\u0062") !== false) {
+ $ERROR('#5: ("\\u0061\\u0061\\u0061\\u0061" >= \\u0061\\u0061\\u0061\\u0062") === false');
+}
+
+//CHECK#6
+if (("a\u0000b" >= "a\u0000a") !== true) {
+ $ERROR('#6: ("a\\u0000b" >= "a\\u0000a") === true');
+}
+
+//CHECK#7
+if (("aa" >= "aB") !== true) {
+ $ERROR('#7: ("aa" >= aB") === true');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A4.12_T2.js b/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A4.12_T2.js
new file mode 100644
index 0000000000..9ae27182ca
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_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.4_A4.12_T2
+description: x and y are string primitives
+---*/
+
+//CHECK#1
+if (("x" >= "0") !== true) {
+ $ERROR('#1: ("x" >= "0") !== 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 (("-1" >= "-0") !== true) {
+ $ERROR('#5: ("-1" >= "-0") !== true');
+}
+
+//CHECK#6
+if (("-1" >= "+1") !== true) {
+ $ERROR('#6: ("-1" >= "+1") !== true');
+}
+
+//CHECK#7
+if (("1e-10" >= "1") !== true) {
+$ERROR('#7: ("1e-10" >= "1") !== true');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A4.2.js b/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A4.2.js
new file mode 100644
index 0000000000..b353e41aec
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_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.4_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/greater-than-or-equal/S11.8.4_A4.3.js b/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A4.3.js
new file mode 100644
index 0000000000..a4c2d3f9ae
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_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 true
+es5id: 11.8.4_A4.3
+description: x and y are number primitives
+---*/
+
+//CHECK#1
+if ((1 >= 1) !== true) {
+ $ERROR('#1: (1 >= 1) === true');
+}
+
+//CHECK#2
+if ((1.1 >= 1.1) !== true) {
+ $ERROR('#2: (1.1 >= 1.1) === true');
+}
+
+//CHECK#3
+if ((-1.1 >= -1.1) !== true) {
+ $ERROR('#3: (-1.1 >= -1.1) === true');
+}
+
+//CHECK#4
+if ((Number.NEGATIVE_INFINITY >= Number.NEGATIVE_INFINITY) !== true) {
+ $ERROR('#4: (-Infinity >= -Infinity) === true');
+}
+
+//CHECK#5
+if ((Number.POSITIVE_INFINITY >= Number.POSITIVE_INFINITY) !== true) {
+ $ERROR('#5: (+Infinity >= +Infinity) === true');
+}
+
+//CHECK#6
+if ((Number.MAX_VALUE >= Number.MAX_VALUE) !== true) {
+ $ERROR('#6: (Number.MAX_VALUE >= Number.MAX_VALUE) === true');
+}
+
+//CHECK#7
+if ((Number.MIN_VALUE >= Number.MIN_VALUE) !== true) {
+ $ERROR('#7: (Number.MIN_VALUE >= Number.MIN_VALUE) === true');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A4.4.js b/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A4.4.js
new file mode 100644
index 0000000000..66a2b2d050
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_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 either x or y is +0 and the other is -0, return true
+es5id: 11.8.4_A4.4
+description: Checking all combinations
+---*/
+
+//CHECK#1
+if ((0 >= 0) !== true) {
+ $ERROR('#1: (0 >= 0) === true');
+}
+
+//CHECK#2
+if ((-0 >= -0) !== true) {
+ $ERROR('#2: (-0 >= -0) === true');
+}
+
+//CHECK#3
+if ((+0 >= -0) !== true) {
+ $ERROR('#3: (+0 >= -0) === true');
+}
+
+//CHECK#4
+if ((-0 >= +0) !== true) {
+ $ERROR('#4: (-0 >= +0) === true');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A4.5.js b/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A4.5.js
new file mode 100644
index 0000000000..ae72afcc42
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_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 true
+es5id: 11.8.4_A4.5
+description: y is number primitive
+---*/
+
+//CHECK#1
+if ((Number.POSITIVE_INFINITY >= 0) !== true) {
+ $ERROR('#1: (+Infinity >= 0) === true');
+}
+
+//CHECK#2
+if ((Number.POSITIVE_INFINITY >= 1.1) !== true) {
+ $ERROR('#2: (+Infinity >= 1.1) === true');
+}
+
+//CHECK#3
+if ((Number.POSITIVE_INFINITY >= -1.1) !== true) {
+ $ERROR('#3: (+Infinity >= -1.1) === true');
+}
+
+//CHECK#4
+if ((Number.POSITIVE_INFINITY >= Number.NEGATIVE_INFINITY) !== true) {
+ $ERROR('#4: (+Infinity >= -Infinity) === true');
+}
+
+//CHECK#5
+if ((Number.POSITIVE_INFINITY >= Number.MAX_VALUE) !== true) {
+ $ERROR('#5: (+Infinity >= Number.MAX_VALUE) === true');
+}
+
+//CHECK#6
+if ((Number.POSITIVE_INFINITY >= Number.MIN_VALUE) !== true) {
+ $ERROR('#6: (+Infinity >= Number.MIN_VALUE) === true');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A4.6.js b/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A4.6.js
new file mode 100644
index 0000000000..ddb44a6381
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_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 false
+es5id: 11.8.4_A4.6
+description: x is number primitive
+---*/
+
+//CHECK#1
+if ((0 >= Number.POSITIVE_INFINITY) !== false) {
+ $ERROR('#1: (0 >= +Infinity) === false');
+}
+
+//CHECK#2
+if ((1.1 >= Number.POSITIVE_INFINITY) !== false) {
+ $ERROR('#2: (1.1 >= +Infinity) === false');
+}
+
+//CHECK#3
+if ((-1.1 >= Number.POSITIVE_INFINITY) !== false) {
+ $ERROR('#3: (-1.1 >= +Infinity) === false');
+}
+
+//CHECK#4
+if ((Number.NEGATIVE_INFINITY >= Number.POSITIVE_INFINITY) !== false) {
+ $ERROR('#4: (-Infinity >= +Infinity) === false');
+}
+
+//CHECK#5
+if ((Number.MAX_VALUE >= Number.POSITIVE_INFINITY) !== false) {
+ $ERROR('#5: (Number.MAX_VALUE >= +Infinity) === false');
+}
+
+//CHECK#6
+if ((Number.MIN_VALUE >= Number.POSITIVE_INFINITY) !== false) {
+ $ERROR('#6: (Number.MIN_VALUE >= +Infinity) === false');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A4.7.js b/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A4.7.js
new file mode 100644
index 0000000000..bed3007973
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_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 false
+es5id: 11.8.4_A4.7
+description: y is number primitive
+---*/
+
+//CHECK#1
+if ((Number.NEGATIVE_INFINITY >= 0) !== false) {
+ $ERROR('#1: (-Infinity >= 0) === false');
+}
+
+//CHECK#2
+if ((Number.NEGATIVE_INFINITY >= 1.1) !== false) {
+ $ERROR('#2: (-Infinity >= 1.1) === false');
+}
+
+//CHECK#3
+if ((Number.NEGATIVE_INFINITY >= -1.1) !== false) {
+ $ERROR('#3: (-Infinity >= -1.1) === false');
+}
+
+//CHECK#4
+if ((Number.NEGATIVE_INFINITY >= Number.POSITIVE_INFINITY) !== false) {
+ $ERROR('#4: (-Infinity >= +Infinity) === false');
+}
+
+//CHECK#5
+if ((Number.NEGATIVE_INFINITY >= Number.MAX_VALUE) !== false) {
+ $ERROR('#5: (-Infinity >= Number.MAX_VALUE) === false');
+}
+
+//CHECK#6
+if ((Number.NEGATIVE_INFINITY >= Number.MIN_VALUE) !== false) {
+ $ERROR('#6: (-Infinity >= Number.MIN_VALUE) === false');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A4.8.js b/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A4.8.js
new file mode 100644
index 0000000000..7d610f1745
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_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 true
+es5id: 11.8.4_A4.8
+description: x is number primitive
+---*/
+
+//CHECK#1
+if ((0 >= Number.NEGATIVE_INFINITY) !== true) {
+ $ERROR('#1: (0 >= -Infinity) === true');
+}
+
+//CHECK#2
+if ((1.1 >= Number.NEGATIVE_INFINITY) !== true) {
+ $ERROR('#2: (1.1 >= -Infinity) === true');
+}
+
+//CHECK#3
+if ((-1.1 >= Number.NEGATIVE_INFINITY) !== true) {
+ $ERROR('#3: (-1.1 >= -Infinity) === true');
+}
+
+//CHECK#4
+if ((Number.POSITIVE_INFINITY >= Number.NEGATIVE_INFINITY) !== true) {
+ $ERROR('#4: (+Infinity >= -Infinity) === true');
+}
+
+//CHECK#5
+if ((Number.MAX_VALUE >= Number.NEGATIVE_INFINITY) !== true) {
+ $ERROR('#5: (Number.MAX_VALUE >= -Infinity) === true');
+}
+
+//CHECK#6
+if ((Number.MIN_VALUE >= Number.NEGATIVE_INFINITY) !== true) {
+ $ERROR('#6: (Number.MIN_VALUE >= -Infinity) === true');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A4.9.js b/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_A4.9.js
new file mode 100644
index 0000000000..cba37a1641
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/greater-than-or-equal/S11.8.4_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 greater or equal than y and these values are both finite
+ non-zero, return true; otherwise, return false
+es5id: 11.8.4_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.1 >= 0) !== true) {
+ $ERROR('#5: (0.1 >= 0) === true');
+}
+
+//CHECK#6
+if ((0 >= -0.1) !== true) {
+ $ERROR('#6: (0 >= -0.1) === true');
+}
+
+//CHECK#7
+if ((Number.MAX_VALUE >= Number.MAX_VALUE/2) !== true) {
+ $ERROR('#7: (Number.MAX_VALUE >= Number.MAX_VALUE/2) === true');
+}
+
+//CHECK#8
+if ((Number.MIN_VALUE*2 >= Number.MIN_VALUE) !== true) {
+ $ERROR('#8: (Number.MIN_VALUE*2 >= Number.MIN_VALUE) === true');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/greater-than-or-equal/bigint-and-bigint.js b/js/src/tests/test262/language/expressions/greater-than-or-equal/bigint-and-bigint.js
new file mode 100644
index 0000000000..bdd785f160
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/greater-than-or-equal/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, true, 'The result of (0n >= 0n) is true');
+assert.sameValue(1n >= 1n, true, 'The result of (1n >= 1n) is true');
+assert.sameValue(-1n >= -1n, true, 'The result of (-1n >= -1n) is true');
+assert.sameValue(0n >= -0n, true, 'The result of (0n >= -0n) is true');
+assert.sameValue(-0n >= 0n, true, 'The result of (-0n >= 0n) is true');
+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(0n >= -1n, true, 'The result of (0n >= -1n) is true');
+assert.sameValue(-1n >= 0n, false, 'The result of (-1n >= 0n) is false');
+assert.sameValue(1n >= -1n, true, 'The result of (1n >= -1n) is true');
+assert.sameValue(-1n >= 1n, false, 'The result of (-1n >= 1n) 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(
+ -0x1fffffffffffff01n >= -0x1fffffffffffff02n,
+ true,
+ 'The result of (-0x1fffffffffffff01n >= -0x1fffffffffffff02n) is true'
+);
+
+assert.sameValue(
+ -0x1fffffffffffff02n >= -0x1fffffffffffff01n,
+ false,
+ 'The result of (-0x1fffffffffffff02n >= -0x1fffffffffffff01n) is false'
+);
+
+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 >= 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 >= 0x100000000n,
+ true,
+ 'The result of (0x10000000000000000n >= 0x100000000n) is true'
+);
+
+assert.sameValue(
+ 0x100000000n >= 0x10000000000000000n,
+ false,
+ 'The result of (0x100000000n >= 0x10000000000000000n) is false'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/greater-than-or-equal/bigint-and-incomparable-string.js b/js/src/tests/test262/language/expressions/greater-than-or-equal/bigint-and-incomparable-string.js
new file mode 100644
index 0000000000..9b6cea7fe0
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/greater-than-or-equal/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(1n >= '0n', false, 'The result of (1n >= "0n") is false');
+assert.sameValue(1n >= '0.', false, 'The result of (1n >= "0.") is false');
+assert.sameValue(1n >= '.0', false, 'The result of (1n >= ".0") is false');
+assert.sameValue(1n >= '0/1', false, 'The result of (1n >= "0/1") is false');
+assert.sameValue(1n >= 'z0', false, 'The result of (1n >= "z0") is false');
+assert.sameValue(1n >= '0z', false, 'The result of (1n >= "0z") is false');
+assert.sameValue(1n >= '++0', false, 'The result of (1n >= "++0") is false');
+assert.sameValue(1n >= '--0', false, 'The result of (1n >= "--0") is false');
+assert.sameValue(1n >= '0e0', false, 'The result of (1n >= "0e0") is false');
+assert.sameValue(1n >= 'Infinity', false, 'The result of (1n >= "Infinity") is false');
+assert.sameValue('1n' >= 0n, false, 'The result of ("1n" >= 0n) is false');
+assert.sameValue('1.' >= 0n, false, 'The result of ("1." >= 0n) is false');
+assert.sameValue('.1' >= 0n, false, 'The result of (".1" >= 0n) is false');
+assert.sameValue('1/1' >= 0n, false, 'The result of ("1/1" >= 0n) is false');
+assert.sameValue('z1' >= 0n, false, 'The result of ("z1" >= 0n) is false');
+assert.sameValue('1z' >= 0n, false, 'The result of ("1z" >= 0n) is false');
+assert.sameValue('++1' >= 0n, false, 'The result of ("++1" >= 0n) is false');
+assert.sameValue('--1' >= 0n, false, 'The result of ("--1" >= 0n) is false');
+assert.sameValue('1e0' >= 0n, false, 'The result of ("1e0" >= 0n) is false');
+assert.sameValue('Infinity' >= 0n, false, 'The result of ("Infinity" >= 0n) is false');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/greater-than-or-equal/bigint-and-non-finite.js b/js/src/tests/test262/language/expressions/greater-than-or-equal/bigint-and-non-finite.js
new file mode 100644
index 0000000000..2469d0fd09
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/greater-than-or-equal/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, 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(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(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/greater-than-or-equal/bigint-and-number-extremes.js b/js/src/tests/test262/language/expressions/greater-than-or-equal/bigint-and-number-extremes.js
new file mode 100644
index 0000000000..fc6ae0f92c
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/greater-than-or-equal/bigint-and-number-extremes.js
@@ -0,0 +1,55 @@
+// 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, 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(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(
+ 0xfffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffn >= Number.MAX_VALUE,
+ false,
+ 'The result of (0xfffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffn >= Number.MAX_VALUE) is false'
+);
+
+assert.sameValue(
+ Number.MAX_VALUE >= 0xfffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffn,
+ true,
+ 'The result of (Number.MAX_VALUE >= 0xfffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffn) is true'
+);
+
+assert.sameValue(
+ 0xfffffffffffff800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001n >= Number.MAX_VALUE,
+ true,
+ 'The result of (0xfffffffffffff800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001n >= Number.MAX_VALUE) is true'
+);
+
+assert.sameValue(
+ Number.MAX_VALUE >= 0xfffffffffffff800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001n,
+ false,
+ 'The result of (Number.MAX_VALUE >= 0xfffffffffffff800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001n) is false'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/greater-than-or-equal/bigint-and-number.js b/js/src/tests/test262/language/expressions/greater-than-or-equal/bigint-and-number.js
new file mode 100644
index 0000000000..c03309ba6e
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/greater-than-or-equal/bigint-and-number.js
@@ -0,0 +1,57 @@
+// 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, true, 'The result of (0n >= 0) is true');
+assert.sameValue(0 >= 0n, true, 'The result of (0 >= 0n) is true');
+assert.sameValue(0n >= -0, true, 'The result of (0n >= -0) is true');
+assert.sameValue(-0 >= 0n, true, 'The result of (-0 >= 0n) is true');
+assert.sameValue(0n >= 0.000000000001, false, 'The result of (0n >= 0.000000000001) is false');
+assert.sameValue(0.000000000001 >= 0n, true, 'The result of (0.000000000001 >= 0n) is true');
+assert.sameValue(0n >= 1, false, 'The result of (0n >= 1) is false');
+assert.sameValue(1 >= 0n, true, 'The result of (1 >= 0n) is true');
+assert.sameValue(1n >= 0, true, 'The result of (1n >= 0) is true');
+assert.sameValue(0 >= 1n, false, 'The result of (0 >= 1n) is false');
+assert.sameValue(1n >= 0.999999999999, true, 'The result of (1n >= 0.999999999999) is true');
+assert.sameValue(0.999999999999 >= 1n, false, 'The result of (0.999999999999 >= 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(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(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(
+ -10n >= Number.MIN_VALUE,
+ false,
+ 'The result of (-10n >= Number.MIN_VALUE) is false'
+);
+
+assert.sameValue(
+ Number.MIN_VALUE >= -10n,
+ true,
+ 'The result of (Number.MIN_VALUE >= -10n) is true'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/greater-than-or-equal/bigint-and-string.js b/js/src/tests/test262/language/expressions/greater-than-or-equal/bigint-and-string.js
new file mode 100644
index 0000000000..2d9f4142b6
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/greater-than-or-equal/bigint-and-string.js
@@ -0,0 +1,53 @@
+// 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', true, 'The result of (0n >= "0") is true');
+assert.sameValue('0' >= 0n, true, 'The result of ("0" >= 0n) is true');
+assert.sameValue(0n >= '1', false, 'The result of (0n >= "1") is false');
+assert.sameValue('0' >= 1n, false, 'The result of ("0" >= 1n) is false');
+assert.sameValue(1n >= '0', true, 'The result of (1n >= "0") is true');
+assert.sameValue('1' >= 0n, true, 'The result of ("1" >= 0n) is true');
+assert.sameValue(0n >= '', true, 'The result of (0n >= "") is true');
+assert.sameValue('' >= 0n, true, 'The result of ("" >= 0n) is true');
+assert.sameValue(0n >= '1', false, 'The result of (0n >= "1") is false');
+assert.sameValue('' >= 1n, false, 'The result of ("" >= 1n) is false');
+assert.sameValue(1n >= '', true, 'The result of (1n >= "") is true');
+assert.sameValue('1' >= 0n, true, 'The result of ("1" >= 0n) is true');
+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', 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(-1n >= '-1', true, 'The result of (-1n >= "-1") is true');
+assert.sameValue('-1' >= -1n, true, 'The result of ("-1" >= -1n) is true');
+
+assert.sameValue(
+ 9007199254740993n >= '9007199254740992',
+ true,
+ 'The result of (9007199254740993n >= "9007199254740992") is true'
+);
+
+assert.sameValue(
+ '9007199254740993' >= 9007199254740992n,
+ true,
+ 'The result of ("9007199254740993" >= 9007199254740992n) is true'
+);
+
+assert.sameValue(
+ -9007199254740992n >= '-9007199254740993',
+ true,
+ 'The result of (-9007199254740992n >= "-9007199254740993") is true'
+);
+
+assert.sameValue(
+ '-9007199254740992' >= -9007199254740993n,
+ true,
+ 'The result of ("-9007199254740992" >= -9007199254740993n) is true'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/greater-than-or-equal/browser.js b/js/src/tests/test262/language/expressions/greater-than-or-equal/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/greater-than-or-equal/browser.js
diff --git a/js/src/tests/test262/language/expressions/greater-than-or-equal/shell.js b/js/src/tests/test262/language/expressions/greater-than-or-equal/shell.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/greater-than-or-equal/shell.js