diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 14:29:10 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 14:29:10 +0000 |
commit | 2aa4a82499d4becd2284cdb482213d541b8804dd (patch) | |
tree | b80bf8bf13c3766139fbacc530efd0dd9d54394c /js/src/tests/test262/language/expressions/subtraction | |
parent | Initial commit. (diff) | |
download | firefox-upstream.tar.xz firefox-upstream.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/subtraction')
40 files changed, 3227 insertions, 0 deletions
diff --git a/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A1.js b/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A1.js new file mode 100644 index 0000000000..f297e66800 --- /dev/null +++ b/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A1.js @@ -0,0 +1,62 @@ +// Copyright 2009 the Sputnik authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: | + White Space and Line Terminator between AdditiveExpression and "-" or + between "-" and MultiplicativeExpression are allowed +es5id: 11.6.2_A1 +description: Checking by using eval +---*/ + +//CHECK#1 +if (eval("1\u0009-\u00091") !== 0) { + $ERROR('#1: 1\\u0009-\\u00091 === 0'); +} + +//CHECK#2 +if (eval("1\u000B-\u000B1") !== 0) { + $ERROR('#2: 1\\u000B-\\u000B1 === 0'); +} + +//CHECK#3 +if (eval("1\u000C-\u000C1") !== 0) { + $ERROR('#3: 1\\u000C-\\u000C1 === 0'); +} + +//CHECK#4 +if (eval("1\u0020-\u00201") !== 0) { + $ERROR('#4: 1\\u0020-\\u00201 === 0'); +} + +//CHECK#5 +if (eval("1\u00A0-\u00A01") !== 0) { + $ERROR('#5: 1\\u00A0-\\u00A01 === 0'); +} + +//CHECK#6 +if (eval("1\u000A-\u000A1") !== 0) { + $ERROR('#6: 1\\u000A-\\u000A1 === 0'); +} + +//CHECK#7 +if (eval("1\u000D-\u000D1") !== 0) { + $ERROR('#7: 1\\u000D-\\u000D1 === 0'); +} + +//CHECK#8 +if (eval("1\u2028-\u20281") !== 0) { + $ERROR('#8: 1\\u2028-\\u20281 === 0'); +} + +//CHECK#9 +if (eval("1\u2029-\u20291") !== 0) { + $ERROR('#9: 1\\u2029-\\u20291 === 0'); +} + +//CHECK#10 +if (eval("1\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029-\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u20291") !== 0) { + $ERROR('#10: 1\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029-\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u20291 === 0'); +} + +reportCompare(0, 0); diff --git a/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A2.1_T1.js b/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A2.1_T1.js new file mode 100644 index 0000000000..0cdfb8c3b1 --- /dev/null +++ b/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A2.1_T1.js @@ -0,0 +1,43 @@ +// Copyright 2009 the Sputnik authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Operator x - y uses GetValue +es5id: 11.6.2_A2.1_T1 +description: Either Type is not Reference or GetBase is not null +---*/ + +//CHECK#1 +if (1 - 1 !== 0) { + $ERROR('#1: 1 - 1 === 0. Actual: ' + (1 - 1)); +} + +//CHECK#2 +var x = 1; +if (x - 1 !== 0) { + $ERROR('#2: var x = 1; x - 1 === 0. Actual: ' + (x - 1)); +} + +//CHECK#3 +var y = 1; +if (1 - y !== 0) { + $ERROR('#3: var y = 1; 1 - y === 0. Actual: ' + (1 - y)); +} + +//CHECK#4 +var x = 1; +var y = 1; +if (x - y !== 0) { + $ERROR('#4: var x = 1; var y = 1; x - y === 0. Actual: ' + (x - y)); +} + +//CHECK#5 +var objectx = new Object(); +var objecty = new Object(); +objectx.prop = 1; +objecty.prop = 1; +if (objectx.prop - objecty.prop !== 0) { + $ERROR('#5: var objectx = new Object(); var objecty = new Object(); objectx.prop = 1; objecty.prop = 1; objectx.prop - objecty.prop === 0. Actual: ' + (objectx.prop - objecty.prop)); +} + +reportCompare(0, 0); diff --git a/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A2.1_T2.js b/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A2.1_T2.js new file mode 100644 index 0000000000..e49f30c21d --- /dev/null +++ b/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A2.1_T2.js @@ -0,0 +1,21 @@ +// Copyright 2009 the Sputnik authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Operator x - y uses GetValue +es5id: 11.6.2_A2.1_T2 +description: If GetBase(x) is null, throw ReferenceError +---*/ + +//CHECK#1 +try { + x - 1; + $ERROR('#1.1: x - 1 throw ReferenceError. Actual: ' + (x - 1)); +} +catch (e) { + if ((e instanceof ReferenceError) !== true) { + $ERROR('#1.2: x - 1 throw ReferenceError. Actual: ' + (e)); + } +} + +reportCompare(0, 0); diff --git a/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A2.1_T3.js b/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A2.1_T3.js new file mode 100644 index 0000000000..59fd2ae4ec --- /dev/null +++ b/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A2.1_T3.js @@ -0,0 +1,21 @@ +// Copyright 2009 the Sputnik authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Operator x - y uses GetValue +es5id: 11.6.2_A2.1_T3 +description: If GetBase(y) is null, throw ReferenceError +---*/ + +//CHECK#1 +try { + 1 - y; + $ERROR('#1.1: 1 - y throw ReferenceError. Actual: ' + (1 - y)); +} +catch (e) { + if ((e instanceof ReferenceError) !== true) { + $ERROR('#1.2: 1 - y throw ReferenceError. Actual: ' + (e)); + } +} + +reportCompare(0, 0); diff --git a/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A2.2_T1.js b/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A2.2_T1.js new file mode 100644 index 0000000000..fe1304e6a9 --- /dev/null +++ b/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A2.2_T1.js @@ -0,0 +1,71 @@ +// Copyright 2009 the Sputnik authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Operator x - y uses [[Default Value]] +es5id: 11.6.2_A2.2_T1 +description: If Type(value) is Object, evaluate ToPrimitive(value, Number) +---*/ + +//CHECK#1 +if ({valueOf: function() {return 1}} - 1 !== 0) { + $ERROR('#1: {valueOf: function() {return 1}} - 1 === 0. Actual: ' + ({valueOf: function() {return 1}} - 1)); +} + +//CHECK#2 +if ({valueOf: function() {return 1}, toString: function() {return 0}} - 1 !== 0) { + $ERROR('#2: {valueOf: function() {return 1}, toString: function() {return 0}} - 1 === 0. Actual: ' + ({valueOf: function() {return 1}, toString: function() {return 0}} - 1)); +} + +//CHECK#3 +if ({valueOf: function() {return 1}, toString: function() {return {}}} - 1 !== 0) { + $ERROR('#3: {valueOf: function() {return 1}, toString: function() {return {}}} - 1 === 0. Actual: ' + ({valueOf: function() {return 1}, toString: function() {return {}}} - 1)); +} + +//CHECK#4 +try { + if ({valueOf: function() {return 1}, toString: function() {throw "error"}} - 1 !== 0) { + $ERROR('#4.1: {valueOf: function() {return 1}, toString: function() {throw "error"}} - 1 === 0. Actual: ' + ({valueOf: function() {return 1}, toString: function() {throw "error"}} - 1)); + } +} +catch (e) { + if (e === "error") { + $ERROR('#4.2: {valueOf: function() {return 1}, toString: function() {throw "error"}} - 1 not throw "error"'); + } else { + $ERROR('#4.3: {valueOf: function() {return 1}, toString: function() {throw "error"}} - 1 not throw Error. Actual: ' + (e)); + } +} + +//CHECK#5 +if (1 - {toString: function() {return 1}} !== 0) { + $ERROR('#5: 1 - {toString: function() {return 1}} === 0. Actual: ' + (1 - {toString: function() {return 1}})); +} + +//CHECK#6 +if (1 - {valueOf: function() {return {}}, toString: function() {return 1}} !== 0) { + $ERROR('#6: 1 - {valueOf: function() {return {}}, toString: function() {return 1}} === 0. Actual: ' + (1 - {valueOf: function() {return {}}, toString: function() {return 1}})); +} + +//CHECK#7 +try { + 1 - {valueOf: function() {throw "error"}, toString: function() {return 1}}; + $ERROR('#7.1: 1 - {valueOf: function() {throw "error"}, toString: function() {return 1}} throw "error". Actual: ' + (1 - {valueOf: function() {throw "error"}, toString: function() {return 1}})); +} +catch (e) { + if (e !== "error") { + $ERROR('#7.2: 1 - {valueOf: function() {throw "error"}, toString: function() {return 1}} throw "error". Actual: ' + (e)); + } +} + +//CHECK#8 +try { + 1 - {valueOf: function() {return {}}, toString: function() {return {}}}; + $ERROR('#8.1: 1 - {valueOf: function() {return {}}, toString: function() {return {}}} throw TypeError. Actual: ' + (1 - {valueOf: function() {return {}}, toString: function() {return {}}})); +} +catch (e) { + if ((e instanceof TypeError) !== true) { + $ERROR('#8.2: 1 - {valueOf: function() {return {}}, toString: function() {return {}}} throw TypeError. Actual: ' + (e)); + } +} + +reportCompare(0, 0); diff --git a/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A2.3_T1.js b/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A2.3_T1.js new file mode 100644 index 0000000000..1ac43a66ef --- /dev/null +++ b/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A2.3_T1.js @@ -0,0 +1,28 @@ +// Copyright 2009 the Sputnik authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: | + ToNumber(first expression) is called first, and then ToNumber(second + expression) +es5id: 11.6.2_A2.3_T1 +description: Checking with "throw" +---*/ + +//CHECK#1 +var x = { valueOf: function () { throw "x"; } }; +var y = { valueOf: function () { throw "y"; } }; +try { + x - y; + $ERROR('#1.1: var x = { valueOf: function () { throw "x"; } }; var y = { valueOf: function () { throw "y"; } }; x - y throw "x". Actual: ' + (x - y)); +} catch (e) { + if (e === "y") { + $ERROR('#1.2: ToNumber(first expression) is called first, and then ToNumber(second expression)'); + } else { + if (e !== "x") { + $ERROR('#1.3: var x = { valueOf: function () { throw "x"; } }; var y = { valueOf: function () { throw "y"; } }; x - y throw "x". Actual: ' + (e)); + } + } +} + +reportCompare(0, 0); diff --git a/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A2.4_T1.js b/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A2.4_T1.js new file mode 100644 index 0000000000..844488e6bb --- /dev/null +++ b/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A2.4_T1.js @@ -0,0 +1,22 @@ +// Copyright 2009 the Sputnik authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: First expression is evaluated first, and then second expression +es5id: 11.6.2_A2.4_T1 +description: Checking with "=" +---*/ + +//CHECK#1 +var x = 0; +if ((x = 1) - x !== 0) { + $ERROR('#1: var x = 0; (x = 1) - x === 0. Actual: ' + ((x = 1) - x)); +} + +//CHECK#2 +var x = 0; +if (x - (x = 1) !== -1) { + $ERROR('#2: var x = 0; x - (x = 1) === -1. Actual: ' + (x - (x = 1))); +} + +reportCompare(0, 0); diff --git a/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A2.4_T2.js b/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A2.4_T2.js new file mode 100644 index 0000000000..6ca72b8090 --- /dev/null +++ b/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A2.4_T2.js @@ -0,0 +1,26 @@ +// Copyright 2009 the Sputnik authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: First expression is evaluated first, and then second expression +es5id: 11.6.2_A2.4_T2 +description: Checking with "throw" +---*/ + +//CHECK#1 +var x = function () { throw "x"; }; +var y = function () { throw "y"; }; +try { + x() - y(); + $ERROR('#1.1: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() - y() throw "x". Actual: ' + (x() - y())); +} catch (e) { + if (e === "y") { + $ERROR('#1.2: First expression is evaluated first, and then second expression'); + } else { + if (e !== "x") { + $ERROR('#1.3: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() - y() throw "x". Actual: ' + (e)); + } + } +} + +reportCompare(0, 0); diff --git a/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A2.4_T3.js b/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A2.4_T3.js new file mode 100644 index 0000000000..a71507d81c --- /dev/null +++ b/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A2.4_T3.js @@ -0,0 +1,21 @@ +// Copyright 2009 the Sputnik authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: First expression is evaluated first, and then second expression +es5id: 11.6.2_A2.4_T3 +description: Checking with undeclarated variables +---*/ + +//CHECK#1 +try { + x - (x = 1); + $ERROR('#1.1: x - (x = 1) throw ReferenceError. Actual: ' + (x - (x = 1))); +} +catch (e) { + if ((e instanceof ReferenceError) !== true) { + $ERROR('#1.2: x - (x = 1) throw ReferenceError. Actual: ' + (e)); + } +} + +reportCompare(0, 0); diff --git a/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A2.4_T4.js b/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A2.4_T4.js new file mode 100644 index 0000000000..dfd53a623f --- /dev/null +++ b/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A2.4_T4.js @@ -0,0 +1,16 @@ +// Copyright 2009 the Sputnik authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: First expression is evaluated first, and then second expression +es5id: 11.6.2_A2.4_T4 +description: Checking with undeclarated variables +flags: [noStrict] +---*/ + +//CHECK#1 +if ((y = 1) - y !== 0) { + $ERROR('#1: (y = 1) - y === 0. Actual: ' + ((y = 1) - y)); +} + +reportCompare(0, 0); diff --git a/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A3_T1.1.js b/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A3_T1.1.js new file mode 100644 index 0000000000..5bedcf4301 --- /dev/null +++ b/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A3_T1.1.js @@ -0,0 +1,32 @@ +// Copyright 2009 the Sputnik authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Operator x - y returns ToNumber(x) - ToNumber(y) +es5id: 11.6.2_A3_T1.1 +description: > + Type(x) and Type(y) vary between primitive boolean and Boolean + object +---*/ + +//CHECK#1 +if (true - true !== 0) { + $ERROR('#1: true - true === 0. Actual: ' + (true - true)); +} + +//CHECK#2 +if (new Boolean(true) - true !== 0) { + $ERROR('#2: new Boolean(true) - true === 0. Actual: ' + (new Boolean(true) - true)); +} + +//CHECK#3 +if (true - new Boolean(true) !== 0) { + $ERROR('#3: true - new Boolean(true) === 0. Actual: ' + (true - new Boolean(true))); +} + +//CHECK#4 +if (new Boolean(true) - new Boolean(true) !== 0) { + $ERROR('#4: new Boolean(true) - new Boolean(true) === 0. Actual: ' + (new Boolean(true) - new Boolean(true))); +} + +reportCompare(0, 0); diff --git a/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A3_T1.2.js b/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A3_T1.2.js new file mode 100644 index 0000000000..4ada6c8d5e --- /dev/null +++ b/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A3_T1.2.js @@ -0,0 +1,30 @@ +// Copyright 2009 the Sputnik authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Operator x - y returns ToNumber(x) - ToNumber(y) +es5id: 11.6.2_A3_T1.2 +description: Type(x) and Type(y) vary between primitive number and Number object +---*/ + +//CHECK#1 +if (1 - 1 !== 0) { + $ERROR('#1: 1 - 1 === 0. Actual: ' + (1 - 1)); +} + +//CHECK#2 +if (new Number(1) - 1 !== 0) { + $ERROR('#2: new Number(1) - 1 === 0. Actual: ' + (new Number(1) - 1)); +} + +//CHECK#3 +if (1 - new Number(1) !== 0) { + $ERROR('#3: 1 - new Number(1) === 0. Actual: ' + (1 - new Number(1))); +} + +//CHECK#4 +if (new Number(1) - new Number(1) !== 0) { + $ERROR('#4: new Number(1) - new Number(1) === 0. Actual: ' + (new Number(1) - new Number(1))); +} + +reportCompare(0, 0); diff --git a/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A3_T1.3.js b/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A3_T1.3.js new file mode 100644 index 0000000000..e5e5d05d92 --- /dev/null +++ b/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A3_T1.3.js @@ -0,0 +1,40 @@ +// Copyright 2009 the Sputnik authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Operator x - y returns ToNumber(x) - ToNumber(y) +es5id: 11.6.2_A3_T1.3 +description: Type(x) and Type(y) vary between primitive string and String object +---*/ + +//CHECK#1 +if ("1" - "1" !== 0) { + $ERROR('#1: "1" - "1" === 0. Actual: ' + ("1" - "1")); +} + +//CHECK#2 +if (new String("1") - "1" !== 0) { + $ERROR('#2: new String("1") - "1" === 0. Actual: ' + (new String("1") - "1")); +} + +//CHECK#3 +if ("1" - new String("1") !== 0) { + $ERROR('#3: "1" - new String("1") === 0. Actual: ' + ("1" - new String("1"))); +} + +//CHECK#4 +if (new String("1") - new String("1") !== 0) { + $ERROR('#4: new String("1") - new String("1") === 0. Actual: ' + (new String("1") - new String("1"))); +} + +//CHECK#5 +if (isNaN("x" - "1") !== true) { + $ERROR('#5: "x" - "1" === Not-a-Number. Actual: ' + ("x" - "1")); +} + +//CHECK#6 +if (isNaN("1" - "x") !== true) { + $ERROR('#6: "1" - "x" === Not-a-Number. Actual: ' + ("1" - "x")); +} + +reportCompare(0, 0); diff --git a/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A3_T1.4.js b/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A3_T1.4.js new file mode 100644 index 0000000000..e0b872cf26 --- /dev/null +++ b/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A3_T1.4.js @@ -0,0 +1,30 @@ +// Copyright 2009 the Sputnik authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Operator x - y returns ToNumber(x) - ToNumber(y) +es5id: 11.6.2_A3_T1.4 +description: Type(x) and Type(y) vary between Null and Undefined +---*/ + +//CHECK#1 +if (isNaN(null - undefined) !== true) { + $ERROR('#1: null - undefined === Not-a-Number. Actual: ' + (null - undefined)); +} + +//CHECK#2 +if (isNaN(undefined - null) !== true) { + $ERROR('#2: undefined - null === Not-a-Number. Actual: ' + (undefined - null)); +} + +//CHECK#3 +if (isNaN(undefined - undefined) !== true) { + $ERROR('#3: undefined - undefined === Not-a-Number. Actual: ' + (undefined - undefined)); +} + +//CHECK#4 +if (null - null !== 0) { + $ERROR('#4: null - null === 0. Actual: ' + (null - null)); +} + +reportCompare(0, 0); diff --git a/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A3_T1.5.js b/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A3_T1.5.js new file mode 100644 index 0000000000..cb15ad1a52 --- /dev/null +++ b/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A3_T1.5.js @@ -0,0 +1,30 @@ +// Copyright 2009 the Sputnik authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Operator x - y returns ToNumber(x) - ToNumber(y) +es5id: 11.6.2_A3_T1.5 +description: Type(x) and Type(y) vary between Object object and Function object +---*/ + +//CHECK#1 +if (isNaN({} - function(){return 1}) !== true) { + $ERROR('#1: {} - function(){return 1} === Not-a-Number. Actual: ' + ({} - function(){return 1})); +} + +//CHECK#2 +if (isNaN(function(){return 1} - {}) !== true) { + $ERROR('#2: function(){return 1} - {} === Not-a-Number. Actual: ' + (function(){return 1} - {})); +} + +//CHECK#3 +if (isNaN(function(){return 1} - function(){return 1}) !== true) { + $ERROR('#3: function(){return 1} - function(){return 1} === Not-a-Number. Actual: ' + (function(){return 1} - function(){return 1})); +} + +//CHECK#4 +if (isNaN({} - {}) !== true) { + $ERROR('#4: {} - {} === Not-a-Number. Actual: ' + ({} - {})); +} + +reportCompare(0, 0); diff --git a/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A3_T2.1.js b/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A3_T2.1.js new file mode 100644 index 0000000000..53bf90ca74 --- /dev/null +++ b/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A3_T2.1.js @@ -0,0 +1,52 @@ +// Copyright 2009 the Sputnik authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Operator x - y returns ToNumber(x) - ToNumber(y) +es5id: 11.6.2_A3_T2.1 +description: > + Type(x) is different from Type(y) and both types vary between + Number (primitive or object) and Boolean (primitive and object) +---*/ + +//CHECK#1 +if (true - 1 !== 0) { + $ERROR('#1: true - 1 === 0. Actual: ' + (true - 1)); +} + +//CHECK#2 +if (1 - true !== 0) { + $ERROR('#2: 1 - true === 0. Actual: ' + (1 - true)); +} + +//CHECK#3 +if (new Boolean(true) - 1 !== 0) { + $ERROR('#3: new Boolean(true) - 1 === 0. Actual: ' + (new Boolean(true) - 1)); +} + +//CHECK#4 +if (1 - new Boolean(true) !== 0) { + $ERROR('#4: 1 - new Boolean(true) === 0. Actual: ' + (1 - new Boolean(true))); +} + +//CHECK#5 +if (true - new Number(1) !== 0) { + $ERROR('#5: true - new Number(1) === 0. Actual: ' + (true - new Number(1))); +} + +//CHECK#6 +if (new Number(1) - true !== 0) { + $ERROR('#6: new Number(1) - true === 0. Actual: ' + (new Number(1) - true)); +} + +//CHECK#7 +if (new Boolean(true) - new Number(1) !== 0) { + $ERROR('#7: new Boolean(true) - new Number(1) === 0. Actual: ' + (new Boolean(true) - new Number(1))); +} + +//CHECK#8 +if (new Number(1) - new Boolean(true) !== 0) { + $ERROR('#8: new Number(1) - new Boolean(true) === 0. Actual: ' + (new Number(1) - new Boolean(true))); +} + +reportCompare(0, 0); diff --git a/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A3_T2.2.js b/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A3_T2.2.js new file mode 100644 index 0000000000..b57797bb92 --- /dev/null +++ b/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A3_T2.2.js @@ -0,0 +1,62 @@ +// Copyright 2009 the Sputnik authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Operator x - y returns ToNumber(x) - ToNumber(y) +es5id: 11.6.2_A3_T2.2 +description: > + Type(x) is different from Type(y) and both types vary between + Number (primitive or object) and String (primitive and object) +---*/ + +//CHECK#1 +if ("1" - 1 !== 0) { + $ERROR('#1: "1" - 1 === 0. Actual: ' + ("1" - 1)); +} + +//CHECK#2 +if (1 - "1" !== 0) { + $ERROR('#2: 1 - "1" === 0. Actual: ' + (1 - "1")); +} + +//CHECK#3 +if (new String("1") - 1 !== 0) { + $ERROR('#3: new String("1") - 1 === 0. Actual: ' + (new String("1") - 1)); +} + +//CHECK#4 +if (1 - new String("1") !== 0) { + $ERROR('#4: 1 - new String("1") === 0. Actual: ' + (1 - new String("1"))); +} + +//CHECK#5 +if ("1" - new Number(1) !== 0) { + $ERROR('#5: "1" - new Number(1) === 0. Actual: ' + ("1" - new Number(1))); +} + +//CHECK#6 +if (new Number(1) - "1" !== 0) { + $ERROR('#6: new Number(1) - "1" === 0. Actual: ' + (new Number(1) - "1")); +} + +//CHECK#7 +if (new String("1") - new Number(1) !== 0) { + $ERROR('#7: new String("1") - new Number(1) === 0. Actual: ' + (new String("1") - new Number(1))); +} + +//CHECK#8 +if (new Number(1) - new String("1") !== 0) { + $ERROR('#8: new Number(1) - new String("1") === 0. Actual: ' + (new Number(1) - new String("1"))); +} + +//CHECK#9 +if (isNaN("x" - 1) !== true) { + $ERROR('#9: "x" - 1 === Not-a-Number. Actual: ' + ("x" - 1)); +} + +//CHECK#10 +if (isNaN(1 - "x") !== true) { + $ERROR('#10: 1 - "x" === Not-a-Number. Actual: ' + (1 - "x")); +} + +reportCompare(0, 0); diff --git a/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A3_T2.3.js b/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A3_T2.3.js new file mode 100644 index 0000000000..83a21b5c53 --- /dev/null +++ b/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A3_T2.3.js @@ -0,0 +1,32 @@ +// Copyright 2009 the Sputnik authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Operator x - y returns ToNumber(x) - ToNumber(y) +es5id: 11.6.2_A3_T2.3 +description: > + Type(x) is different from Type(y) and both types vary between + Number (primitive or object) and Null +---*/ + +//CHECK#1 +if (1 - null !== 1) { + $ERROR('#1: 1 - null === 1. Actual: ' + (1 - null)); +} + +//CHECK#2 +if (null - 1 !== -1) { + $ERROR('#2: null - 1 === -1. Actual: ' + (null - 1)); +} + +//CHECK#3 +if (new Number(1) - null !== 1) { + $ERROR('#3: new Number(1) - null === 1. Actual: ' + (new Number(1) - null)); +} + +//CHECK#4 +if (null - new Number(1) !== -1) { + $ERROR('#4: null - new Number(1) === -1. Actual: ' + (null - new Number(1))); +} + +reportCompare(0, 0); diff --git a/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A3_T2.4.js b/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A3_T2.4.js new file mode 100644 index 0000000000..31b89ae9a0 --- /dev/null +++ b/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A3_T2.4.js @@ -0,0 +1,32 @@ +// Copyright 2009 the Sputnik authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Operator x - y returns ToNumber(x) - ToNumber(y) +es5id: 11.6.2_A3_T2.4 +description: > + Type(x) is different from Type(y) and both types vary between + Number (primitive or object) and Undefined +---*/ + +//CHECK#1 +if (isNaN(1 - undefined) !== true) { + $ERROR('#1: 1 - undefined === Not-a-Number. Actual: ' + (1 - undefined)); +} + +//CHECK#2 +if (isNaN(undefined - 1) !== true) { + $ERROR('#2: undefined - 1 === Not-a-Number. Actual: ' + (undefined - 1)); +} + +//CHECK#3 +if (isNaN(new Number(1) - undefined) !== true) { + $ERROR('#3: new Number(1) - undefined === Not-a-Number. Actual: ' + (new Number(1) - undefined)); +} + +//CHECK#4 +if (isNaN(undefined - new Number(1)) !== true) { + $ERROR('#4: undefined - new Number(1) === Not-a-Number. Actual: ' + (undefined - new Number(1))); +} + +reportCompare(0, 0); diff --git a/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A3_T2.5.js b/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A3_T2.5.js new file mode 100644 index 0000000000..052d6a1f00 --- /dev/null +++ b/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A3_T2.5.js @@ -0,0 +1,52 @@ +// Copyright 2009 the Sputnik authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Operator x - y returns ToNumber(x) - ToNumber(y) +es5id: 11.6.2_A3_T2.5 +description: > + Type(x) is different from Type(y) and both types vary between + String (primitive or object) and Boolean (primitive and object) +---*/ + +//CHECK#1 +if (true - "1" !== 0) { + $ERROR('#1: true - "1" === 0. Actual: ' + (true - "1")); +} + +//CHECK#2 +if ("1" - true !== 0) { + $ERROR('#2: "1" - true === 0. Actual: ' + ("1" - true)); +} + +//CHECK#3 +if (new Boolean(true) - "1" !== 0) { + $ERROR('#3: new Boolean(true) - "1" === 0. Actual: ' + (new Boolean(true) - "1")); +} + +//CHECK#4 +if ("1" - new Boolean(true) !== 0) { + $ERROR('#4: "1" - new Boolean(true) === 0. Actual: ' + ("1" - new Boolean(true))); +} + +//CHECK#5 +if (true - new String("1") !== 0) { + $ERROR('#5: true - new String("1") === 0. Actual: ' + (true - new String("1"))); +} + +//CHECK#6 +if (new String("1") - true !== 0) { + $ERROR('#6: new String("1") - true === 0. Actual: ' + (new String("1") - true)); +} + +//CHECK#7 +if (new Boolean(true) - new String("1") !== 0) { + $ERROR('#7: new Boolean(true) - new String("1") === 0. Actual: ' + (new Boolean(true) - new String("1"))); +} + +//CHECK#8 +if (new String("1") - new Boolean(true) !== 0) { + $ERROR('#8: new String("1") - new Boolean(true) === 0. Actual: ' + (new String("1") - new Boolean(true))); +} + +reportCompare(0, 0); diff --git a/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A3_T2.6.js b/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A3_T2.6.js new file mode 100644 index 0000000000..b817e4a924 --- /dev/null +++ b/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A3_T2.6.js @@ -0,0 +1,32 @@ +// Copyright 2009 the Sputnik authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Operator x - y returns ToNumber(x) - ToNumber(y) +es5id: 11.6.2_A3_T2.6 +description: > + Type(x) is different from Type(y) and both types vary between + String (primitive or object) and Undefined +---*/ + +//CHECK#1 +if (isNaN("1" - undefined) !== true) { + $ERROR('#1: "1" - undefined === Not-a-Number. Actual: ' + ("1" - undefined)); +} + +//CHECK#2 +if (isNaN(undefined - "1") !== true) { + $ERROR('#2: undefined - "1" === Not-a-Number. Actual: ' + (undefined - "1")); +} + +//CHECK#3 +if (isNaN(new String("1") - undefined) !== true) { + $ERROR('#3: new String("1") - undefined === Not-a-Number. Actual: ' + (new String("1") - undefined)); +} + +//CHECK#4 +if (isNaN(undefined - new String("1")) !== true) { + $ERROR('#4: undefined - new String("1") === Not-a-Number. Actual: ' + (undefined - new String("1"))); +} + +reportCompare(0, 0); diff --git a/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A3_T2.7.js b/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A3_T2.7.js new file mode 100644 index 0000000000..dff3592f66 --- /dev/null +++ b/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A3_T2.7.js @@ -0,0 +1,32 @@ +// Copyright 2009 the Sputnik authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Operator x - y returns ToNumber(x) - ToNumber(y) +es5id: 11.6.2_A3_T2.7 +description: > + Type(x) is different from Type(y) and both types vary between + String (primitive or object) and Null +---*/ + +//CHECK#1 +if ("1" - null !== 1) { + $ERROR('#1: "1" - null === 1. Actual: ' + ("1" - null)); +} + +//CHECK#2 +if (null - "1" !== -1) { + $ERROR('#2: null - "1" === -1. Actual: ' + (null - "1")); +} + +//CHECK#3 +if (new String("1") - null !== 1) { + $ERROR('#3: new String("1") - null === 1. Actual: ' + (new String("1") - null)); +} + +//CHECK#4 +if (null - new String("1") !== -1) { + $ERROR('#4: null - new String("1") === -1. Actual: ' + (null - new String("1"))); +} + +reportCompare(0, 0); diff --git a/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A3_T2.8.js b/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A3_T2.8.js new file mode 100644 index 0000000000..148eef1d4b --- /dev/null +++ b/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A3_T2.8.js @@ -0,0 +1,32 @@ +// Copyright 2009 the Sputnik authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Operator x - y returns ToNumber(x) - ToNumber(y) +es5id: 11.6.2_A3_T2.8 +description: > + Type(x) is different from Type(y) and both types vary between + Boolean (primitive or object) and Undefined +---*/ + +//CHECK#1 +if (isNaN(true - undefined) !== true) { + $ERROR('#1: true - undefined === Not-a-Number. Actual: ' + (true - undefined)); +} + +//CHECK#2 +if (isNaN(undefined - true) !== true) { + $ERROR('#2: undefined - true === Not-a-Number. Actual: ' + (undefined - true)); +} + +//CHECK#3 +if (isNaN(new Boolean(true) - undefined) !== true) { + $ERROR('#3: new Boolean(true) - undefined === Not-a-Number. Actual: ' + (new Boolean(true) - undefined)); +} + +//CHECK#4 +if (isNaN(undefined - new Boolean(true)) !== true) { + $ERROR('#4: undefined - new Boolean(true) === Not-a-Number. Actual: ' + (undefined - new Boolean(true))); +} + +reportCompare(0, 0); diff --git a/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A3_T2.9.js b/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A3_T2.9.js new file mode 100644 index 0000000000..8e810e6571 --- /dev/null +++ b/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A3_T2.9.js @@ -0,0 +1,32 @@ +// Copyright 2009 the Sputnik authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Operator x - y returns ToNumber(x) - ToNumber(y) +es5id: 11.6.2_A3_T2.9 +description: > + Type(x) is different from Type(y) and both types vary between + Boolean (primitive or object) and Null +---*/ + +//CHECK#1 +if (true - null !== 1) { + $ERROR('#1: true - null === 1. Actual: ' + (true - null)); +} + +//CHECK#2 +if (null - true !== -1) { + $ERROR('#2: null - true === -1. Actual: ' + (null - true)); +} + +//CHECK#3 +if (new Boolean(true) - null !== 1) { + $ERROR('#3: new Boolean(true) - null === 1. Actual: ' + (new Boolean(true) - null)); +} + +//CHECK#4 +if (null - new Boolean(true) !== -1) { + $ERROR('#4: null - new Boolean(true) === -1. Actual: ' + (null - new Boolean(true))); +} + +reportCompare(0, 0); diff --git a/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A4_T1.js b/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A4_T1.js new file mode 100644 index 0000000000..ad1bce930c --- /dev/null +++ b/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A4_T1.js @@ -0,0 +1,40 @@ +// Copyright 2009 the Sputnik authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Operator x - y produces the same result as x + (-y) +es5id: 11.6.2_A4_T1 +description: If either operand is NaN, the result is NaN +---*/ + +//CHECK#1 +if (isNaN(Number.NaN - 1) !== true ) { + $ERROR('#1: NaN - 1 === Not-a-Number. Actual: ' + (NaN - 1)); +} + +//CHECK#2 +if (isNaN(1 - Number.NaN) !== true ) { + $ERROR('#2: 1 - NaN === Not-a-Number. Actual: ' + (1 - NaN)); +} + +//CHECK#3 +if (isNaN(Number.NaN - Number.POSITIVE_INFINITY) !== true ) { + $ERROR('#3: NaN - Infinity === Not-a-Number. Actual: ' + (NaN - Infinity)); +} + +//CHECK#4 +if (isNaN(Number.POSITIVE_INFINITY - Number.NaN) !== true ) { + $ERROR('#4: Infinity - NaN === Not-a-Number. Actual: ' + (Infinity - NaN)); +} + +//CHECK#5 +if (isNaN(Number.NaN - Number.NEGATIVE_INFINITY) !== true ) { + $ERROR('#5: NaN - Infinity === Not-a-Number. Actual: ' + (NaN - Infinity)); +} + +//CHECK#6 +if (isNaN(Number.NEGATIVE_INFINITY - Number.NaN) !== true ) { + $ERROR('#6: Infinity - NaN === Not-a-Number. Actual: ' + (Infinity - NaN)); +} + +reportCompare(0, 0); diff --git a/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A4_T2.js b/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A4_T2.js new file mode 100644 index 0000000000..b21df824f2 --- /dev/null +++ b/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A4_T2.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: Operator x - y produces the same result as x + (-y) +es5id: 11.6.2_A4_T2 +description: > + The difference of two infinities of opposite sign is the infinity + of minuend sign +---*/ + +//CHECK#1 +if (Number.POSITIVE_INFINITY - Number.NEGATIVE_INFINITY !== Number.POSITIVE_INFINITY ) { + $ERROR('#1: Infinity - -Infinity === Infinity. Actual: ' + (Infinity - -Infinity)); +} + +//CHECK#2 +if (Number.NEGATIVE_INFINITY - Number.POSITIVE_INFINITY !== Number.NEGATIVE_INFINITY ) { + $ERROR('#2: -Infinity - Infinity === -Infinity. Actual: ' + (-Infinity - Infinity)); +} + +reportCompare(0, 0); diff --git a/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A4_T3.js b/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A4_T3.js new file mode 100644 index 0000000000..c9b559bc85 --- /dev/null +++ b/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A4_T3.js @@ -0,0 +1,20 @@ +// 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 produces the same result as x + (-y) +es5id: 11.6.2_A4_T3 +description: The difference of two infinities of the same sign is NaN +---*/ + +//CHECK#1 +if (isNaN(Number.POSITIVE_INFINITY - Number.POSITIVE_INFINITY) !== true ) { + $ERROR('#1: Infinity - Infinity === Not-a-Number. Actual: ' + (Infinity - Infinity)); +} + +//CHECK#2 +if (isNaN(Number.NEGATIVE_INFINITY - Number.NEGATIVE_INFINITY) !== true ) { + $ERROR('#2: -Infinity - -Infinity === Not-a-Number. Actual: ' + (-Infinity - -Infinity)); +} + +reportCompare(0, 0); diff --git a/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A4_T4.js b/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A4_T4.js new file mode 100644 index 0000000000..cc5e788983 --- /dev/null +++ b/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A4_T4.js @@ -0,0 +1,52 @@ +// Copyright 2009 the Sputnik authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Operator x - y produces the same result as x + (-y) +es5id: 11.6.2_A4_T4 +description: > + The difference of an infinity and a finite value is equal to + infinity of appropriate sign +---*/ + +//CHECK#1 +if (Number.POSITIVE_INFINITY - 1 !== Number.POSITIVE_INFINITY ) { + $ERROR('#1: Infinity - 1 === Infinity. Actual: ' + (Infinity - 1)); +} + +//CHECK#2 +if (-1 - Number.POSITIVE_INFINITY !== Number.NEGATIVE_INFINITY ) { + $ERROR('#2: -1 - Infinity === -Infinity. Actual: ' + (-1 - Infinity)); +} + +//CHECK#3 +if (Number.NEGATIVE_INFINITY - 1 !== Number.NEGATIVE_INFINITY ) { + $ERROR('#3: -Infinity - 1 === -Infinity. Actual: ' + (-Infinity - 1)); +} + +//CHECK#4 +if (-1 - Number.NEGATIVE_INFINITY !== Number.POSITIVE_INFINITY ) { + $ERROR('#4: -1 - -Infinity === Infinity. Actual: ' + (-1 - -Infinity)); +} + +//CHECK#5 +if (Number.POSITIVE_INFINITY - Number.MAX_VALUE !== Number.POSITIVE_INFINITY ) { + $ERROR('#5: Infinity - Number.MAX_VALUE === Infinity. Actual: ' + (Infinity - Number.MAX_VALUE)); +} + +//CHECK#6 +if (-Number.MAX_VALUE - Number.POSITIVE_INFINITY !== Number.NEGATIVE_INFINITY ) { + $ERROR('#6: -Number.MAX_VALUE - Infinity === I-nfinity. Actual: ' + (-Number.MAX_VALUE - Infinity)); +} + +//CHECK#7 +if (Number.NEGATIVE_INFINITY - Number.MAX_VALUE !== Number.NEGATIVE_INFINITY ) { + $ERROR('#7: -Infinity - Number.MAX_VALUE === -Infinity. Actual: ' + (-Infinity - Number.MAX_VALUE)); +} + +//CHECK#8 +if (-Number.MAX_VALUE - Number.NEGATIVE_INFINITY !== Number.POSITIVE_INFINITY ) { + $ERROR('#8: -Number.MAX_VALUE - -Infinity === Infinity. Actual: ' + (-Number.MAX_VALUE - -Infinity)); +} + +reportCompare(0, 0); diff --git a/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A4_T5.js b/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A4_T5.js new file mode 100644 index 0000000000..5b411bb4fc --- /dev/null +++ b/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A4_T5.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: Operator x - y produces the same result as x + (-y) +es5id: 11.6.2_A4_T5 +description: > + Using the rule of sum of two zeroes and the fact that a - b = a + + (-b) +---*/ + +//CHECK#1 +if (-0 - -0 !== 0 ) { + $ERROR('#1.1: -0 - -0 === 0. Actual: ' + (-0 - -0)); +} else { + if (1 / (-0 - -0) !== Number.POSITIVE_INFINITY) { + $ERROR('#1.2: -0 - -0 === + 0. Actual: -0'); + } +} + +//CHECK#2 +if (0 - -0 !== 0 ) { + $ERROR('#2.1: 0 - -0 === 0. Actual: ' + (0 - -0)); +} else { + if (1 / (0 - -0) !== Number.POSITIVE_INFINITY) { + $ERROR('#2.2: 0 - -0 === + 0. Actual: -0'); + } +} + +//CHECK#3 +if (-0 - 0 !== -0 ) { + $ERROR('#3.1: -0 - 0 === 0. Actual: ' + (-0 - 0)); +} else { + if (1 / (-0 - 0) !== Number.NEGATIVE_INFINITY) { + $ERROR('#3.2: -0 - 0 === - 0. Actual: +0'); + } +} + +//CHECK#4 +if (0 - 0 !== 0 ) { + $ERROR('#4.1: 0 - 0 === 0. Actual: ' + (0 - 0)); +} else { + if (1 / (0 - 0) !== Number.POSITIVE_INFINITY) { + $ERROR('#4.2: 0 - 0 === + 0. Actual: -0'); + } +} + +reportCompare(0, 0); diff --git a/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A4_T6.js b/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A4_T6.js new file mode 100644 index 0000000000..198197a105 --- /dev/null +++ b/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A4_T6.js @@ -0,0 +1,52 @@ +// Copyright 2009 the Sputnik authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Operator x - y produces the same result as x + (-y) +es5id: 11.6.2_A4_T6 +description: > + Using the rule of sum of a zero and a nonzero finite value and the + fact that a - b = a + (-b) +---*/ + +//CHECK#1 +if (1 - -0 !== 1 ) { + $ERROR('#1: 1 - -0 === 1. Actual: ' + (1 - -0)); +} + +//CHECK#2 +if (1 - 0 !== 1 ) { + $ERROR('#2: 1 - 0 === 1. Actual: ' + (1 - 0)); +} + +//CHECK#3 +if (-0 - 1 !== -1 ) { + $ERROR('#3: -0 - 1 === -1. Actual: ' + (-0 - 1)); +} + +//CHECK#4 +if (0 - 1 !== -1 ) { + $ERROR('#4: 0 - 1 === -1. Actual: ' + (0 - 1)); +} + +//CHECK#5 +if (Number.MAX_VALUE - -0 !== Number.MAX_VALUE ) { + $ERROR('#5: Number.MAX_VALUE - -0 === Number.MAX_VALUE. Actual: ' + (Number.MAX_VALUE - -0)); +} + +//CHECK#6 +if (Number.MAX_VALUE - 0 !== Number.MAX_VALUE ) { + $ERROR('#6: Number.MAX_VALUE - 0 === Number.MAX_VALUE. Actual: ' + (Number.MAX_VALUE - 0)); +} + +//CHECK#7 +if (-0 - Number.MIN_VALUE !== -Number.MIN_VALUE ) { + $ERROR('#7: -0 - Number.MIN_VALUE === -Number.MIN_VALUE. Actual: ' + (-0 - Number.MIN_VALUE)); +} + +//CHECK#8 +if (0 - Number.MIN_VALUE !== -Number.MIN_VALUE ) { + $ERROR('#8: 0 - Number.MIN_VALUE === -Number.MIN_VALUE. Actual: ' + (0 - Number.MIN_VALUE)); +} + +reportCompare(0, 0); diff --git a/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A4_T7.js b/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A4_T7.js new file mode 100644 index 0000000000..efdb5ca258 --- /dev/null +++ b/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A4_T7.js @@ -0,0 +1,39 @@ +// Copyright 2009 the Sputnik authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Operator x - y produces the same result as x + (-y) +es5id: 11.6.2_A4_T7 +description: > + The mathematical difference of two nonzero finite values of the + same magnitude and same sign is +0 +---*/ + +//CHECK#1 +if (Number.MIN_VALUE - Number.MIN_VALUE !== +0) { + $ERROR('#1.1: Number.MIN_VALUE - Number.MIN_VALUE === 0. Actual: ' + (Number.MIN_VALUE - Number.MIN_VALUE)); +} else { + if (1 / (Number.MIN_VALUE - Number.MIN_VALUE) !== Number.POSITIVE_INFINITY) { + $ERROR('#1.2: Number.MIN_VALUE - Number.MIN_VALUE === + 0. Actual: -0'); + } +} + +//CHECK#2 +if (-Number.MAX_VALUE - -Number.MAX_VALUE !== +0) { + $ERROR('#2.2: -Number.MAX_VALUE - -Number.MAX_VALUE === 0. Actual: ' + (-Number.MAX_VALUE - -Number.MAX_VALUE)); +} else { + if (1 / (-Number.MAX_VALUE - -Number.MAX_VALUE) !== Number.POSITIVE_INFINITY) { + $ERROR('#2.1: -Number.MAX_VALUE - -Number.MAX_VALUE === + 0. Actual: -0'); + } +} + +//CHECK#3 +if (1 / Number.MAX_VALUE - 1 / Number.MAX_VALUE !== +0) { + $ERROR('#3.1: 1 / Number.MAX_VALUE - 1 / Number.MAX_VALUE === 0. Actual: ' + (1 / Number.MAX_VALUE - 1 / Number.MAX_VALUE)); +} else { + if (1 / (1 / Number.MAX_VALUE - 1 / Number.MAX_VALUE) !== Number.POSITIVE_INFINITY) { + $ERROR('#3.2: 1 / Number.MAX_VALUE - 1 / Number.MAX_VALUE === + 0. Actual: -0'); + } +} + +reportCompare(0, 0); diff --git a/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A4_T8.js b/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A4_T8.js new file mode 100644 index 0000000000..063f002237 --- /dev/null +++ b/js/src/tests/test262/language/expressions/subtraction/S11.6.2_A4_T8.js @@ -0,0 +1,32 @@ +// Copyright 2009 the Sputnik authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Operator x - y produces the same result as x + (-y) +es5id: 11.6.2_A4_T8 +description: > + If the magnitude is too large to represent, the operation + overflows and the result is then an infinity of appropriate sign +---*/ + +//CHECK#1 +if (Number.MAX_VALUE - -Number.MAX_VALUE !== Number.POSITIVE_INFINITY) { + $ERROR('#1: Number.MAX_VALUE - -Number.MAX_VALUE === Number.POSITIVE_INFINITY. Actual: ' + (Number.MAX_VALUE - -Number.MAX_VALUE)); +} + +//CHECK#2 +if (-Number.MAX_VALUE - Number.MAX_VALUE !== Number.NEGATIVE_INFINITY) { + $ERROR('#2: -Number.MAX_VALUE - umber.MAX_VALUE === Number.NEGATIVE_INFINITY. Actual: ' + (-Number.MAX_VALUE - Number.MAX_VALUE)); +} + +//CHECK#3 +if (1e+308 - -1e+308 !== Number.POSITIVE_INFINITY) { + $ERROR('#3: 1e+308 - -1e+308 === Number.POSITIVE_INFINITY. Actual: ' + (1e+308 - -1e+308)); +} + +//CHECK#4 +if (-8.99e+307 - 8.99e+307 !== Number.NEGATIVE_INFINITY) { + $ERROR('#4: -8.99e+307 - 8.99e+307 === Number.NEGATIVE_INFINITY. Actual: ' + (-8.99e+307 - 8.99e+307)); +} + +reportCompare(0, 0); diff --git a/js/src/tests/test262/language/expressions/subtraction/bigint-and-number.js b/js/src/tests/test262/language/expressions/subtraction/bigint-and-number.js new file mode 100644 index 0000000000..a3b1ba8b8b --- /dev/null +++ b/js/src/tests/test262/language/expressions/subtraction/bigint-and-number.js @@ -0,0 +1,92 @@ +// Copyright (C) 2018 Igalia, S.L. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +esid: sec-subtraction-operator-minus-runtime-semantics-evaluation +description: Mixing BigInt and Number produces a TypeError for subtraction operator +features: [BigInt] +info: | + Let lnum be ? ToNumeric(leftValue). + Let rnum be ? ToNumeric(rightValue). + If Type(lnum) does not equal Type(rnum), throw a TypeError exception. +---*/ +assert.throws(TypeError, function() { + 1n - 1; +}, '1n - 1 throws TypeError'); + +assert.throws(TypeError, function() { + 1 - 1n; +}, '1 - 1n throws TypeError'); + +assert.throws(TypeError, function() { + Object(1n) - 1; +}, 'Object(1n) - 1 throws TypeError'); + +assert.throws(TypeError, function() { + 1 - Object(1n); +}, '1 - Object(1n) throws TypeError'); + +assert.throws(TypeError, function() { + 1n - Object(1); +}, '1n - Object(1) throws TypeError'); + +assert.throws(TypeError, function() { + Object(1) - 1n; +}, 'Object(1) - 1n throws TypeError'); + +assert.throws(TypeError, function() { + Object(1n) - Object(1); +}, 'Object(1n) - Object(1) throws TypeError'); + +assert.throws(TypeError, function() { + Object(1) - Object(1n); +}, 'Object(1) - Object(1n) throws TypeError'); + +assert.throws(TypeError, function() { + 1n - NaN; +}, '1n - NaN throws TypeError'); + +assert.throws(TypeError, function() { + NaN - 1n; +}, 'NaN - 1n throws TypeError'); + +assert.throws(TypeError, function() { + 1n - Infinity; +}, '1n - Infinity throws TypeError'); + +assert.throws(TypeError, function() { + Infinity - 1n; +}, 'Infinity - 1n throws TypeError'); + +assert.throws(TypeError, function() { + 1n - true; +}, '1n - true throws TypeError'); + +assert.throws(TypeError, function() { + true - 1n; +}, 'true - 1n throws TypeError'); + +assert.throws(TypeError, function() { + 1n - '1'; +}, '1n - "1" throws TypeError'); + +assert.throws(TypeError, function() { + '1' - 1n; +}, '"1" - 1n throws TypeError'); + +assert.throws(TypeError, function() { + 1n - null; +}, '1n - null throws TypeError'); + +assert.throws(TypeError, function() { + null - 1n; +}, 'null - 1n throws TypeError'); + +assert.throws(TypeError, function() { + 1n - undefined; +}, '1n - undefined throws TypeError'); + +assert.throws(TypeError, function() { + undefined - 1n; +}, 'undefined - 1n throws TypeError'); + +reportCompare(0, 0); diff --git a/js/src/tests/test262/language/expressions/subtraction/bigint-arithmetic.js b/js/src/tests/test262/language/expressions/subtraction/bigint-arithmetic.js new file mode 100644 index 0000000000..fbed2aab5d --- /dev/null +++ b/js/src/tests/test262/language/expressions/subtraction/bigint-arithmetic.js @@ -0,0 +1,1346 @@ +// Copyright (C) 2017 Robin Templeton. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +esid: sec-subtraction-operator-minus-runtime-semantics-evaluation +description: BigInt subtraction arithmetic +features: [BigInt] +---*/ +assert.sameValue( + 0xFEDCBA9876543210n - 0xFEDCBA9876543210n, + 0x0n, + 'The result of (0xFEDCBA9876543210n - 0xFEDCBA9876543210n) is 0x0n' +); + +assert.sameValue( + 0xFEDCBA9876543210n - 0xFEDCBA987654320Fn, + 0x1n, + 'The result of (0xFEDCBA9876543210n - 0xFEDCBA987654320Fn) is 0x1n' +); + +assert.sameValue( + 0xFEDCBA9876543210n - 0xFEDCBA98n, + 0xFEDCBA9777777778n, + 'The result of (0xFEDCBA9876543210n - 0xFEDCBA98n) is 0xFEDCBA9777777778n' +); + +assert.sameValue( + 0xFEDCBA9876543210n - 0xFEDCBA97n, + 0xFEDCBA9777777779n, + 'The result of (0xFEDCBA9876543210n - 0xFEDCBA97n) is 0xFEDCBA9777777779n' +); + +assert.sameValue( + 0xFEDCBA9876543210n - 0x1234n, + 0xFEDCBA9876541FDCn, + 'The result of (0xFEDCBA9876543210n - 0x1234n) is 0xFEDCBA9876541FDCn' +); + +assert.sameValue( + 0xFEDCBA9876543210n - 0x3n, + 0xFEDCBA987654320Dn, + 'The result of (0xFEDCBA9876543210n - 0x3n) is 0xFEDCBA987654320Dn' +); + +assert.sameValue( + 0xFEDCBA9876543210n - 0x2n, + 0xFEDCBA987654320En, + 'The result of (0xFEDCBA9876543210n - 0x2n) is 0xFEDCBA987654320En' +); + +assert.sameValue( + 0xFEDCBA9876543210n - 0x1n, + 0xFEDCBA987654320Fn, + 'The result of (0xFEDCBA9876543210n - 0x1n) is 0xFEDCBA987654320Fn' +); + +assert.sameValue( + 0xFEDCBA9876543210n - 0x0n, + 0xFEDCBA9876543210n, + 'The result of (0xFEDCBA9876543210n - 0x0n) is 0xFEDCBA9876543210n' +); + +assert.sameValue( + 0xFEDCBA9876543210n - -0x1n, + 0xFEDCBA9876543211n, + 'The result of (0xFEDCBA9876543210n - -0x1n) is 0xFEDCBA9876543211n' +); + +assert.sameValue( + 0xFEDCBA9876543210n - -0x2n, + 0xFEDCBA9876543212n, + 'The result of (0xFEDCBA9876543210n - -0x2n) is 0xFEDCBA9876543212n' +); + +assert.sameValue( + 0xFEDCBA9876543210n - -0x3n, + 0xFEDCBA9876543213n, + 'The result of (0xFEDCBA9876543210n - -0x3n) is 0xFEDCBA9876543213n' +); + +assert.sameValue( + 0xFEDCBA9876543210n - -0x1234n, + 0xFEDCBA9876544444n, + 'The result of (0xFEDCBA9876543210n - -0x1234n) is 0xFEDCBA9876544444n' +); + +assert.sameValue( + 0xFEDCBA9876543210n - -0xFEDCBA97n, + 0xFEDCBA997530ECA7n, + 'The result of (0xFEDCBA9876543210n - -0xFEDCBA97n) is 0xFEDCBA997530ECA7n' +); + +assert.sameValue( + 0xFEDCBA9876543210n - -0xFEDCBA98n, + 0xFEDCBA997530ECA8n, + 'The result of (0xFEDCBA9876543210n - -0xFEDCBA98n) is 0xFEDCBA997530ECA8n' +); + +assert.sameValue( + 0xFEDCBA9876543210n - -0xFEDCBA987654320Fn, + 0x1FDB97530ECA8641Fn, + 'The result of (0xFEDCBA9876543210n - -0xFEDCBA987654320Fn) is 0x1FDB97530ECA8641Fn' +); + +assert.sameValue( + 0xFEDCBA9876543210n - -0xFEDCBA9876543210n, + 0x1FDB97530ECA86420n, + 'The result of (0xFEDCBA9876543210n - -0xFEDCBA9876543210n) is 0x1FDB97530ECA86420n' +); + +assert.sameValue( + 0xFEDCBA987654320Fn - 0xFEDCBA9876543210n, + -0x1n, + 'The result of (0xFEDCBA987654320Fn - 0xFEDCBA9876543210n) is -0x1n' +); + +assert.sameValue( + 0xFEDCBA987654320Fn - 0xFEDCBA987654320Fn, + 0x0n, + 'The result of (0xFEDCBA987654320Fn - 0xFEDCBA987654320Fn) is 0x0n' +); + +assert.sameValue( + 0xFEDCBA987654320Fn - 0xFEDCBA98n, + 0xFEDCBA9777777777n, + 'The result of (0xFEDCBA987654320Fn - 0xFEDCBA98n) is 0xFEDCBA9777777777n' +); + +assert.sameValue( + 0xFEDCBA987654320Fn - 0xFEDCBA97n, + 0xFEDCBA9777777778n, + 'The result of (0xFEDCBA987654320Fn - 0xFEDCBA97n) is 0xFEDCBA9777777778n' +); + +assert.sameValue( + 0xFEDCBA987654320Fn - 0x1234n, + 0xFEDCBA9876541FDBn, + 'The result of (0xFEDCBA987654320Fn - 0x1234n) is 0xFEDCBA9876541FDBn' +); + +assert.sameValue( + 0xFEDCBA987654320Fn - 0x3n, + 0xFEDCBA987654320Cn, + 'The result of (0xFEDCBA987654320Fn - 0x3n) is 0xFEDCBA987654320Cn' +); + +assert.sameValue( + 0xFEDCBA987654320Fn - 0x2n, + 0xFEDCBA987654320Dn, + 'The result of (0xFEDCBA987654320Fn - 0x2n) is 0xFEDCBA987654320Dn' +); + +assert.sameValue( + 0xFEDCBA987654320Fn - 0x1n, + 0xFEDCBA987654320En, + 'The result of (0xFEDCBA987654320Fn - 0x1n) is 0xFEDCBA987654320En' +); + +assert.sameValue( + 0xFEDCBA987654320Fn - 0x0n, + 0xFEDCBA987654320Fn, + 'The result of (0xFEDCBA987654320Fn - 0x0n) is 0xFEDCBA987654320Fn' +); + +assert.sameValue( + 0xFEDCBA987654320Fn - -0x1n, + 0xFEDCBA9876543210n, + 'The result of (0xFEDCBA987654320Fn - -0x1n) is 0xFEDCBA9876543210n' +); + +assert.sameValue( + 0xFEDCBA987654320Fn - -0x2n, + 0xFEDCBA9876543211n, + 'The result of (0xFEDCBA987654320Fn - -0x2n) is 0xFEDCBA9876543211n' +); + +assert.sameValue( + 0xFEDCBA987654320Fn - -0x3n, + 0xFEDCBA9876543212n, + 'The result of (0xFEDCBA987654320Fn - -0x3n) is 0xFEDCBA9876543212n' +); + +assert.sameValue( + 0xFEDCBA987654320Fn - -0x1234n, + 0xFEDCBA9876544443n, + 'The result of (0xFEDCBA987654320Fn - -0x1234n) is 0xFEDCBA9876544443n' +); + +assert.sameValue( + 0xFEDCBA987654320Fn - -0xFEDCBA97n, + 0xFEDCBA997530ECA6n, + 'The result of (0xFEDCBA987654320Fn - -0xFEDCBA97n) is 0xFEDCBA997530ECA6n' +); + +assert.sameValue( + 0xFEDCBA987654320Fn - -0xFEDCBA98n, + 0xFEDCBA997530ECA7n, + 'The result of (0xFEDCBA987654320Fn - -0xFEDCBA98n) is 0xFEDCBA997530ECA7n' +); + +assert.sameValue( + 0xFEDCBA987654320Fn - -0xFEDCBA987654320Fn, + 0x1FDB97530ECA8641En, + 'The result of (0xFEDCBA987654320Fn - -0xFEDCBA987654320Fn) is 0x1FDB97530ECA8641En' +); + +assert.sameValue( + 0xFEDCBA987654320Fn - -0xFEDCBA9876543210n, + 0x1FDB97530ECA8641Fn, + 'The result of (0xFEDCBA987654320Fn - -0xFEDCBA9876543210n) is 0x1FDB97530ECA8641Fn' +); + +assert.sameValue( + 0xFEDCBA98n - 0xFEDCBA9876543210n, + -0xFEDCBA9777777778n, + 'The result of (0xFEDCBA98n - 0xFEDCBA9876543210n) is -0xFEDCBA9777777778n' +); + +assert.sameValue( + 0xFEDCBA98n - 0xFEDCBA987654320Fn, + -0xFEDCBA9777777777n, + 'The result of (0xFEDCBA98n - 0xFEDCBA987654320Fn) is -0xFEDCBA9777777777n' +); + +assert.sameValue( + 0xFEDCBA98n - 0xFEDCBA98n, + 0x0n, + 'The result of (0xFEDCBA98n - 0xFEDCBA98n) is 0x0n' +); + +assert.sameValue( + 0xFEDCBA98n - 0xFEDCBA97n, + 0x1n, + 'The result of (0xFEDCBA98n - 0xFEDCBA97n) is 0x1n' +); + +assert.sameValue( + 0xFEDCBA98n - 0x1234n, + 0xFEDCA864n, + 'The result of (0xFEDCBA98n - 0x1234n) is 0xFEDCA864n' +); + +assert.sameValue( + 0xFEDCBA98n - 0x3n, + 0xFEDCBA95n, + 'The result of (0xFEDCBA98n - 0x3n) is 0xFEDCBA95n' +); + +assert.sameValue( + 0xFEDCBA98n - 0x2n, + 0xFEDCBA96n, + 'The result of (0xFEDCBA98n - 0x2n) is 0xFEDCBA96n' +); + +assert.sameValue( + 0xFEDCBA98n - 0x1n, + 0xFEDCBA97n, + 'The result of (0xFEDCBA98n - 0x1n) is 0xFEDCBA97n' +); + +assert.sameValue( + 0xFEDCBA98n - 0x0n, + 0xFEDCBA98n, + 'The result of (0xFEDCBA98n - 0x0n) is 0xFEDCBA98n' +); + +assert.sameValue( + 0xFEDCBA98n - -0x1n, + 0xFEDCBA99n, + 'The result of (0xFEDCBA98n - -0x1n) is 0xFEDCBA99n' +); + +assert.sameValue( + 0xFEDCBA98n - -0x2n, + 0xFEDCBA9An, + 'The result of (0xFEDCBA98n - -0x2n) is 0xFEDCBA9An' +); + +assert.sameValue( + 0xFEDCBA98n - -0x3n, + 0xFEDCBA9Bn, + 'The result of (0xFEDCBA98n - -0x3n) is 0xFEDCBA9Bn' +); + +assert.sameValue( + 0xFEDCBA98n - -0x1234n, + 0xFEDCCCCCn, + 'The result of (0xFEDCBA98n - -0x1234n) is 0xFEDCCCCCn' +); + +assert.sameValue( + 0xFEDCBA98n - -0xFEDCBA97n, + 0x1FDB9752Fn, + 'The result of (0xFEDCBA98n - -0xFEDCBA97n) is 0x1FDB9752Fn' +); + +assert.sameValue( + 0xFEDCBA98n - -0xFEDCBA98n, + 0x1FDB97530n, + 'The result of (0xFEDCBA98n - -0xFEDCBA98n) is 0x1FDB97530n' +); + +assert.sameValue( + 0xFEDCBA98n - -0xFEDCBA987654320Fn, + 0xFEDCBA997530ECA7n, + 'The result of (0xFEDCBA98n - -0xFEDCBA987654320Fn) is 0xFEDCBA997530ECA7n' +); + +assert.sameValue( + 0xFEDCBA98n - -0xFEDCBA9876543210n, + 0xFEDCBA997530ECA8n, + 'The result of (0xFEDCBA98n - -0xFEDCBA9876543210n) is 0xFEDCBA997530ECA8n' +); + +assert.sameValue( + 0xFEDCBA97n - 0xFEDCBA9876543210n, + -0xFEDCBA9777777779n, + 'The result of (0xFEDCBA97n - 0xFEDCBA9876543210n) is -0xFEDCBA9777777779n' +); + +assert.sameValue( + 0xFEDCBA97n - 0xFEDCBA987654320Fn, + -0xFEDCBA9777777778n, + 'The result of (0xFEDCBA97n - 0xFEDCBA987654320Fn) is -0xFEDCBA9777777778n' +); + +assert.sameValue( + 0xFEDCBA97n - 0xFEDCBA98n, + -0x1n, + 'The result of (0xFEDCBA97n - 0xFEDCBA98n) is -0x1n' +); + +assert.sameValue( + 0xFEDCBA97n - 0xFEDCBA97n, + 0x0n, + 'The result of (0xFEDCBA97n - 0xFEDCBA97n) is 0x0n' +); + +assert.sameValue( + 0xFEDCBA97n - 0x1234n, + 0xFEDCA863n, + 'The result of (0xFEDCBA97n - 0x1234n) is 0xFEDCA863n' +); + +assert.sameValue( + 0xFEDCBA97n - 0x3n, + 0xFEDCBA94n, + 'The result of (0xFEDCBA97n - 0x3n) is 0xFEDCBA94n' +); + +assert.sameValue( + 0xFEDCBA97n - 0x2n, + 0xFEDCBA95n, + 'The result of (0xFEDCBA97n - 0x2n) is 0xFEDCBA95n' +); + +assert.sameValue( + 0xFEDCBA97n - 0x1n, + 0xFEDCBA96n, + 'The result of (0xFEDCBA97n - 0x1n) is 0xFEDCBA96n' +); + +assert.sameValue( + 0xFEDCBA97n - 0x0n, + 0xFEDCBA97n, + 'The result of (0xFEDCBA97n - 0x0n) is 0xFEDCBA97n' +); + +assert.sameValue( + 0xFEDCBA97n - -0x1n, + 0xFEDCBA98n, + 'The result of (0xFEDCBA97n - -0x1n) is 0xFEDCBA98n' +); + +assert.sameValue( + 0xFEDCBA97n - -0x2n, + 0xFEDCBA99n, + 'The result of (0xFEDCBA97n - -0x2n) is 0xFEDCBA99n' +); + +assert.sameValue( + 0xFEDCBA97n - -0x3n, + 0xFEDCBA9An, + 'The result of (0xFEDCBA97n - -0x3n) is 0xFEDCBA9An' +); + +assert.sameValue( + 0xFEDCBA97n - -0x1234n, + 0xFEDCCCCBn, + 'The result of (0xFEDCBA97n - -0x1234n) is 0xFEDCCCCBn' +); + +assert.sameValue( + 0xFEDCBA97n - -0xFEDCBA97n, + 0x1FDB9752En, + 'The result of (0xFEDCBA97n - -0xFEDCBA97n) is 0x1FDB9752En' +); + +assert.sameValue( + 0xFEDCBA97n - -0xFEDCBA98n, + 0x1FDB9752Fn, + 'The result of (0xFEDCBA97n - -0xFEDCBA98n) is 0x1FDB9752Fn' +); + +assert.sameValue( + 0xFEDCBA97n - -0xFEDCBA987654320Fn, + 0xFEDCBA997530ECA6n, + 'The result of (0xFEDCBA97n - -0xFEDCBA987654320Fn) is 0xFEDCBA997530ECA6n' +); + +assert.sameValue( + 0xFEDCBA97n - -0xFEDCBA9876543210n, + 0xFEDCBA997530ECA7n, + 'The result of (0xFEDCBA97n - -0xFEDCBA9876543210n) is 0xFEDCBA997530ECA7n' +); + +assert.sameValue( + 0x1234n - 0xFEDCBA9876543210n, + -0xFEDCBA9876541FDCn, + 'The result of (0x1234n - 0xFEDCBA9876543210n) is -0xFEDCBA9876541FDCn' +); + +assert.sameValue( + 0x1234n - 0xFEDCBA987654320Fn, + -0xFEDCBA9876541FDBn, + 'The result of (0x1234n - 0xFEDCBA987654320Fn) is -0xFEDCBA9876541FDBn' +); + +assert.sameValue( + 0x1234n - 0xFEDCBA98n, + -0xFEDCA864n, + 'The result of (0x1234n - 0xFEDCBA98n) is -0xFEDCA864n' +); + +assert.sameValue( + 0x1234n - 0xFEDCBA97n, + -0xFEDCA863n, + 'The result of (0x1234n - 0xFEDCBA97n) is -0xFEDCA863n' +); + +assert.sameValue(0x1234n - 0x1234n, 0x0n, 'The result of (0x1234n - 0x1234n) is 0x0n'); +assert.sameValue(0x1234n - 0x3n, 0x1231n, 'The result of (0x1234n - 0x3n) is 0x1231n'); +assert.sameValue(0x1234n - 0x2n, 0x1232n, 'The result of (0x1234n - 0x2n) is 0x1232n'); +assert.sameValue(0x1234n - 0x1n, 0x1233n, 'The result of (0x1234n - 0x1n) is 0x1233n'); +assert.sameValue(0x1234n - 0x0n, 0x1234n, 'The result of (0x1234n - 0x0n) is 0x1234n'); +assert.sameValue(0x1234n - -0x1n, 0x1235n, 'The result of (0x1234n - -0x1n) is 0x1235n'); +assert.sameValue(0x1234n - -0x2n, 0x1236n, 'The result of (0x1234n - -0x2n) is 0x1236n'); +assert.sameValue(0x1234n - -0x3n, 0x1237n, 'The result of (0x1234n - -0x3n) is 0x1237n'); +assert.sameValue(0x1234n - -0x1234n, 0x2468n, 'The result of (0x1234n - -0x1234n) is 0x2468n'); + +assert.sameValue( + 0x1234n - -0xFEDCBA97n, + 0xFEDCCCCBn, + 'The result of (0x1234n - -0xFEDCBA97n) is 0xFEDCCCCBn' +); + +assert.sameValue( + 0x1234n - -0xFEDCBA98n, + 0xFEDCCCCCn, + 'The result of (0x1234n - -0xFEDCBA98n) is 0xFEDCCCCCn' +); + +assert.sameValue( + 0x1234n - -0xFEDCBA987654320Fn, + 0xFEDCBA9876544443n, + 'The result of (0x1234n - -0xFEDCBA987654320Fn) is 0xFEDCBA9876544443n' +); + +assert.sameValue( + 0x1234n - -0xFEDCBA9876543210n, + 0xFEDCBA9876544444n, + 'The result of (0x1234n - -0xFEDCBA9876543210n) is 0xFEDCBA9876544444n' +); + +assert.sameValue( + 0x3n - 0xFEDCBA9876543210n, + -0xFEDCBA987654320Dn, + 'The result of (0x3n - 0xFEDCBA9876543210n) is -0xFEDCBA987654320Dn' +); + +assert.sameValue( + 0x3n - 0xFEDCBA987654320Fn, + -0xFEDCBA987654320Cn, + 'The result of (0x3n - 0xFEDCBA987654320Fn) is -0xFEDCBA987654320Cn' +); + +assert.sameValue( + 0x3n - 0xFEDCBA98n, + -0xFEDCBA95n, + 'The result of (0x3n - 0xFEDCBA98n) is -0xFEDCBA95n' +); + +assert.sameValue( + 0x3n - 0xFEDCBA97n, + -0xFEDCBA94n, + 'The result of (0x3n - 0xFEDCBA97n) is -0xFEDCBA94n' +); + +assert.sameValue(0x3n - 0x1234n, -0x1231n, 'The result of (0x3n - 0x1234n) is -0x1231n'); +assert.sameValue(0x3n - 0x3n, 0x0n, 'The result of (0x3n - 0x3n) is 0x0n'); +assert.sameValue(0x3n - 0x2n, 0x1n, 'The result of (0x3n - 0x2n) is 0x1n'); +assert.sameValue(0x3n - 0x1n, 0x2n, 'The result of (0x3n - 0x1n) is 0x2n'); +assert.sameValue(0x3n - 0x0n, 0x3n, 'The result of (0x3n - 0x0n) is 0x3n'); +assert.sameValue(0x3n - -0x1n, 0x4n, 'The result of (0x3n - -0x1n) is 0x4n'); +assert.sameValue(0x3n - -0x2n, 0x5n, 'The result of (0x3n - -0x2n) is 0x5n'); +assert.sameValue(0x3n - -0x3n, 0x6n, 'The result of (0x3n - -0x3n) is 0x6n'); +assert.sameValue(0x3n - -0x1234n, 0x1237n, 'The result of (0x3n - -0x1234n) is 0x1237n'); + +assert.sameValue( + 0x3n - -0xFEDCBA97n, + 0xFEDCBA9An, + 'The result of (0x3n - -0xFEDCBA97n) is 0xFEDCBA9An' +); + +assert.sameValue( + 0x3n - -0xFEDCBA98n, + 0xFEDCBA9Bn, + 'The result of (0x3n - -0xFEDCBA98n) is 0xFEDCBA9Bn' +); + +assert.sameValue( + 0x3n - -0xFEDCBA987654320Fn, + 0xFEDCBA9876543212n, + 'The result of (0x3n - -0xFEDCBA987654320Fn) is 0xFEDCBA9876543212n' +); + +assert.sameValue( + 0x3n - -0xFEDCBA9876543210n, + 0xFEDCBA9876543213n, + 'The result of (0x3n - -0xFEDCBA9876543210n) is 0xFEDCBA9876543213n' +); + +assert.sameValue( + 0x2n - 0xFEDCBA9876543210n, + -0xFEDCBA987654320En, + 'The result of (0x2n - 0xFEDCBA9876543210n) is -0xFEDCBA987654320En' +); + +assert.sameValue( + 0x2n - 0xFEDCBA987654320Fn, + -0xFEDCBA987654320Dn, + 'The result of (0x2n - 0xFEDCBA987654320Fn) is -0xFEDCBA987654320Dn' +); + +assert.sameValue( + 0x2n - 0xFEDCBA98n, + -0xFEDCBA96n, + 'The result of (0x2n - 0xFEDCBA98n) is -0xFEDCBA96n' +); + +assert.sameValue( + 0x2n - 0xFEDCBA97n, + -0xFEDCBA95n, + 'The result of (0x2n - 0xFEDCBA97n) is -0xFEDCBA95n' +); + +assert.sameValue(0x2n - 0x1234n, -0x1232n, 'The result of (0x2n - 0x1234n) is -0x1232n'); +assert.sameValue(0x2n - 0x3n, -0x1n, 'The result of (0x2n - 0x3n) is -0x1n'); +assert.sameValue(0x2n - 0x2n, 0x0n, 'The result of (0x2n - 0x2n) is 0x0n'); +assert.sameValue(0x2n - 0x1n, 0x1n, 'The result of (0x2n - 0x1n) is 0x1n'); +assert.sameValue(0x2n - 0x0n, 0x2n, 'The result of (0x2n - 0x0n) is 0x2n'); +assert.sameValue(0x2n - -0x1n, 0x3n, 'The result of (0x2n - -0x1n) is 0x3n'); +assert.sameValue(0x2n - -0x2n, 0x4n, 'The result of (0x2n - -0x2n) is 0x4n'); +assert.sameValue(0x2n - -0x3n, 0x5n, 'The result of (0x2n - -0x3n) is 0x5n'); +assert.sameValue(0x2n - -0x1234n, 0x1236n, 'The result of (0x2n - -0x1234n) is 0x1236n'); + +assert.sameValue( + 0x2n - -0xFEDCBA97n, + 0xFEDCBA99n, + 'The result of (0x2n - -0xFEDCBA97n) is 0xFEDCBA99n' +); + +assert.sameValue( + 0x2n - -0xFEDCBA98n, + 0xFEDCBA9An, + 'The result of (0x2n - -0xFEDCBA98n) is 0xFEDCBA9An' +); + +assert.sameValue( + 0x2n - -0xFEDCBA987654320Fn, + 0xFEDCBA9876543211n, + 'The result of (0x2n - -0xFEDCBA987654320Fn) is 0xFEDCBA9876543211n' +); + +assert.sameValue( + 0x2n - -0xFEDCBA9876543210n, + 0xFEDCBA9876543212n, + 'The result of (0x2n - -0xFEDCBA9876543210n) is 0xFEDCBA9876543212n' +); + +assert.sameValue( + 0x1n - 0xFEDCBA9876543210n, + -0xFEDCBA987654320Fn, + 'The result of (0x1n - 0xFEDCBA9876543210n) is -0xFEDCBA987654320Fn' +); + +assert.sameValue( + 0x1n - 0xFEDCBA987654320Fn, + -0xFEDCBA987654320En, + 'The result of (0x1n - 0xFEDCBA987654320Fn) is -0xFEDCBA987654320En' +); + +assert.sameValue( + 0x1n - 0xFEDCBA98n, + -0xFEDCBA97n, + 'The result of (0x1n - 0xFEDCBA98n) is -0xFEDCBA97n' +); + +assert.sameValue( + 0x1n - 0xFEDCBA97n, + -0xFEDCBA96n, + 'The result of (0x1n - 0xFEDCBA97n) is -0xFEDCBA96n' +); + +assert.sameValue(0x1n - 0x1234n, -0x1233n, 'The result of (0x1n - 0x1234n) is -0x1233n'); +assert.sameValue(0x1n - 0x3n, -0x2n, 'The result of (0x1n - 0x3n) is -0x2n'); +assert.sameValue(0x1n - 0x2n, -0x1n, 'The result of (0x1n - 0x2n) is -0x1n'); +assert.sameValue(0x1n - 0x1n, 0x0n, 'The result of (0x1n - 0x1n) is 0x0n'); +assert.sameValue(0x1n - 0x0n, 0x1n, 'The result of (0x1n - 0x0n) is 0x1n'); +assert.sameValue(0x1n - -0x1n, 0x2n, 'The result of (0x1n - -0x1n) is 0x2n'); +assert.sameValue(0x1n - -0x2n, 0x3n, 'The result of (0x1n - -0x2n) is 0x3n'); +assert.sameValue(0x1n - -0x3n, 0x4n, 'The result of (0x1n - -0x3n) is 0x4n'); +assert.sameValue(0x1n - -0x1234n, 0x1235n, 'The result of (0x1n - -0x1234n) is 0x1235n'); + +assert.sameValue( + 0x1n - -0xFEDCBA97n, + 0xFEDCBA98n, + 'The result of (0x1n - -0xFEDCBA97n) is 0xFEDCBA98n' +); + +assert.sameValue( + 0x1n - -0xFEDCBA98n, + 0xFEDCBA99n, + 'The result of (0x1n - -0xFEDCBA98n) is 0xFEDCBA99n' +); + +assert.sameValue( + 0x1n - -0xFEDCBA987654320Fn, + 0xFEDCBA9876543210n, + 'The result of (0x1n - -0xFEDCBA987654320Fn) is 0xFEDCBA9876543210n' +); + +assert.sameValue( + 0x1n - -0xFEDCBA9876543210n, + 0xFEDCBA9876543211n, + 'The result of (0x1n - -0xFEDCBA9876543210n) is 0xFEDCBA9876543211n' +); + +assert.sameValue( + 0x0n - 0xFEDCBA9876543210n, + -0xFEDCBA9876543210n, + 'The result of (0x0n - 0xFEDCBA9876543210n) is -0xFEDCBA9876543210n' +); + +assert.sameValue( + 0x0n - 0xFEDCBA987654320Fn, + -0xFEDCBA987654320Fn, + 'The result of (0x0n - 0xFEDCBA987654320Fn) is -0xFEDCBA987654320Fn' +); + +assert.sameValue( + 0x0n - 0xFEDCBA98n, + -0xFEDCBA98n, + 'The result of (0x0n - 0xFEDCBA98n) is -0xFEDCBA98n' +); + +assert.sameValue( + 0x0n - 0xFEDCBA97n, + -0xFEDCBA97n, + 'The result of (0x0n - 0xFEDCBA97n) is -0xFEDCBA97n' +); + +assert.sameValue(0x0n - 0x1234n, -0x1234n, 'The result of (0x0n - 0x1234n) is -0x1234n'); +assert.sameValue(0x0n - 0x3n, -0x3n, 'The result of (0x0n - 0x3n) is -0x3n'); +assert.sameValue(0x0n - 0x2n, -0x2n, 'The result of (0x0n - 0x2n) is -0x2n'); +assert.sameValue(0x0n - 0x1n, -0x1n, 'The result of (0x0n - 0x1n) is -0x1n'); +assert.sameValue(0x0n - 0x0n, 0x0n, 'The result of (0x0n - 0x0n) is 0x0n'); +assert.sameValue(0x0n - -0x1n, 0x1n, 'The result of (0x0n - -0x1n) is 0x1n'); +assert.sameValue(0x0n - -0x2n, 0x2n, 'The result of (0x0n - -0x2n) is 0x2n'); +assert.sameValue(0x0n - -0x3n, 0x3n, 'The result of (0x0n - -0x3n) is 0x3n'); +assert.sameValue(0x0n - -0x1234n, 0x1234n, 'The result of (0x0n - -0x1234n) is 0x1234n'); + +assert.sameValue( + 0x0n - -0xFEDCBA97n, + 0xFEDCBA97n, + 'The result of (0x0n - -0xFEDCBA97n) is 0xFEDCBA97n' +); + +assert.sameValue( + 0x0n - -0xFEDCBA98n, + 0xFEDCBA98n, + 'The result of (0x0n - -0xFEDCBA98n) is 0xFEDCBA98n' +); + +assert.sameValue( + 0x0n - -0xFEDCBA987654320Fn, + 0xFEDCBA987654320Fn, + 'The result of (0x0n - -0xFEDCBA987654320Fn) is 0xFEDCBA987654320Fn' +); + +assert.sameValue( + 0x0n - -0xFEDCBA9876543210n, + 0xFEDCBA9876543210n, + 'The result of (0x0n - -0xFEDCBA9876543210n) is 0xFEDCBA9876543210n' +); + +assert.sameValue( + -0x1n - 0xFEDCBA9876543210n, + -0xFEDCBA9876543211n, + 'The result of (-0x1n - 0xFEDCBA9876543210n) is -0xFEDCBA9876543211n' +); + +assert.sameValue( + -0x1n - 0xFEDCBA987654320Fn, + -0xFEDCBA9876543210n, + 'The result of (-0x1n - 0xFEDCBA987654320Fn) is -0xFEDCBA9876543210n' +); + +assert.sameValue( + -0x1n - 0xFEDCBA98n, + -0xFEDCBA99n, + 'The result of (-0x1n - 0xFEDCBA98n) is -0xFEDCBA99n' +); + +assert.sameValue( + -0x1n - 0xFEDCBA97n, + -0xFEDCBA98n, + 'The result of (-0x1n - 0xFEDCBA97n) is -0xFEDCBA98n' +); + +assert.sameValue(-0x1n - 0x1234n, -0x1235n, 'The result of (-0x1n - 0x1234n) is -0x1235n'); +assert.sameValue(-0x1n - 0x3n, -0x4n, 'The result of (-0x1n - 0x3n) is -0x4n'); +assert.sameValue(-0x1n - 0x2n, -0x3n, 'The result of (-0x1n - 0x2n) is -0x3n'); +assert.sameValue(-0x1n - 0x1n, -0x2n, 'The result of (-0x1n - 0x1n) is -0x2n'); +assert.sameValue(-0x1n - 0x0n, -0x1n, 'The result of (-0x1n - 0x0n) is -0x1n'); +assert.sameValue(-0x1n - -0x1n, 0x0n, 'The result of (-0x1n - -0x1n) is 0x0n'); +assert.sameValue(-0x1n - -0x2n, 0x1n, 'The result of (-0x1n - -0x2n) is 0x1n'); +assert.sameValue(-0x1n - -0x3n, 0x2n, 'The result of (-0x1n - -0x3n) is 0x2n'); +assert.sameValue(-0x1n - -0x1234n, 0x1233n, 'The result of (-0x1n - -0x1234n) is 0x1233n'); + +assert.sameValue( + -0x1n - -0xFEDCBA97n, + 0xFEDCBA96n, + 'The result of (-0x1n - -0xFEDCBA97n) is 0xFEDCBA96n' +); + +assert.sameValue( + -0x1n - -0xFEDCBA98n, + 0xFEDCBA97n, + 'The result of (-0x1n - -0xFEDCBA98n) is 0xFEDCBA97n' +); + +assert.sameValue( + -0x1n - -0xFEDCBA987654320Fn, + 0xFEDCBA987654320En, + 'The result of (-0x1n - -0xFEDCBA987654320Fn) is 0xFEDCBA987654320En' +); + +assert.sameValue( + -0x1n - -0xFEDCBA9876543210n, + 0xFEDCBA987654320Fn, + 'The result of (-0x1n - -0xFEDCBA9876543210n) is 0xFEDCBA987654320Fn' +); + +assert.sameValue( + -0x2n - 0xFEDCBA9876543210n, + -0xFEDCBA9876543212n, + 'The result of (-0x2n - 0xFEDCBA9876543210n) is -0xFEDCBA9876543212n' +); + +assert.sameValue( + -0x2n - 0xFEDCBA987654320Fn, + -0xFEDCBA9876543211n, + 'The result of (-0x2n - 0xFEDCBA987654320Fn) is -0xFEDCBA9876543211n' +); + +assert.sameValue( + -0x2n - 0xFEDCBA98n, + -0xFEDCBA9An, + 'The result of (-0x2n - 0xFEDCBA98n) is -0xFEDCBA9An' +); + +assert.sameValue( + -0x2n - 0xFEDCBA97n, + -0xFEDCBA99n, + 'The result of (-0x2n - 0xFEDCBA97n) is -0xFEDCBA99n' +); + +assert.sameValue(-0x2n - 0x1234n, -0x1236n, 'The result of (-0x2n - 0x1234n) is -0x1236n'); +assert.sameValue(-0x2n - 0x3n, -0x5n, 'The result of (-0x2n - 0x3n) is -0x5n'); +assert.sameValue(-0x2n - 0x2n, -0x4n, 'The result of (-0x2n - 0x2n) is -0x4n'); +assert.sameValue(-0x2n - 0x1n, -0x3n, 'The result of (-0x2n - 0x1n) is -0x3n'); +assert.sameValue(-0x2n - 0x0n, -0x2n, 'The result of (-0x2n - 0x0n) is -0x2n'); +assert.sameValue(-0x2n - -0x1n, -0x1n, 'The result of (-0x2n - -0x1n) is -0x1n'); +assert.sameValue(-0x2n - -0x2n, 0x0n, 'The result of (-0x2n - -0x2n) is 0x0n'); +assert.sameValue(-0x2n - -0x3n, 0x1n, 'The result of (-0x2n - -0x3n) is 0x1n'); +assert.sameValue(-0x2n - -0x1234n, 0x1232n, 'The result of (-0x2n - -0x1234n) is 0x1232n'); + +assert.sameValue( + -0x2n - -0xFEDCBA97n, + 0xFEDCBA95n, + 'The result of (-0x2n - -0xFEDCBA97n) is 0xFEDCBA95n' +); + +assert.sameValue( + -0x2n - -0xFEDCBA98n, + 0xFEDCBA96n, + 'The result of (-0x2n - -0xFEDCBA98n) is 0xFEDCBA96n' +); + +assert.sameValue( + -0x2n - -0xFEDCBA987654320Fn, + 0xFEDCBA987654320Dn, + 'The result of (-0x2n - -0xFEDCBA987654320Fn) is 0xFEDCBA987654320Dn' +); + +assert.sameValue( + -0x2n - -0xFEDCBA9876543210n, + 0xFEDCBA987654320En, + 'The result of (-0x2n - -0xFEDCBA9876543210n) is 0xFEDCBA987654320En' +); + +assert.sameValue( + -0x3n - 0xFEDCBA9876543210n, + -0xFEDCBA9876543213n, + 'The result of (-0x3n - 0xFEDCBA9876543210n) is -0xFEDCBA9876543213n' +); + +assert.sameValue( + -0x3n - 0xFEDCBA987654320Fn, + -0xFEDCBA9876543212n, + 'The result of (-0x3n - 0xFEDCBA987654320Fn) is -0xFEDCBA9876543212n' +); + +assert.sameValue( + -0x3n - 0xFEDCBA98n, + -0xFEDCBA9Bn, + 'The result of (-0x3n - 0xFEDCBA98n) is -0xFEDCBA9Bn' +); + +assert.sameValue( + -0x3n - 0xFEDCBA97n, + -0xFEDCBA9An, + 'The result of (-0x3n - 0xFEDCBA97n) is -0xFEDCBA9An' +); + +assert.sameValue(-0x3n - 0x1234n, -0x1237n, 'The result of (-0x3n - 0x1234n) is -0x1237n'); +assert.sameValue(-0x3n - 0x3n, -0x6n, 'The result of (-0x3n - 0x3n) is -0x6n'); +assert.sameValue(-0x3n - 0x2n, -0x5n, 'The result of (-0x3n - 0x2n) is -0x5n'); +assert.sameValue(-0x3n - 0x1n, -0x4n, 'The result of (-0x3n - 0x1n) is -0x4n'); +assert.sameValue(-0x3n - 0x0n, -0x3n, 'The result of (-0x3n - 0x0n) is -0x3n'); +assert.sameValue(-0x3n - -0x1n, -0x2n, 'The result of (-0x3n - -0x1n) is -0x2n'); +assert.sameValue(-0x3n - -0x2n, -0x1n, 'The result of (-0x3n - -0x2n) is -0x1n'); +assert.sameValue(-0x3n - -0x3n, 0x0n, 'The result of (-0x3n - -0x3n) is 0x0n'); +assert.sameValue(-0x3n - -0x1234n, 0x1231n, 'The result of (-0x3n - -0x1234n) is 0x1231n'); + +assert.sameValue( + -0x3n - -0xFEDCBA97n, + 0xFEDCBA94n, + 'The result of (-0x3n - -0xFEDCBA97n) is 0xFEDCBA94n' +); + +assert.sameValue( + -0x3n - -0xFEDCBA98n, + 0xFEDCBA95n, + 'The result of (-0x3n - -0xFEDCBA98n) is 0xFEDCBA95n' +); + +assert.sameValue( + -0x3n - -0xFEDCBA987654320Fn, + 0xFEDCBA987654320Cn, + 'The result of (-0x3n - -0xFEDCBA987654320Fn) is 0xFEDCBA987654320Cn' +); + +assert.sameValue( + -0x3n - -0xFEDCBA9876543210n, + 0xFEDCBA987654320Dn, + 'The result of (-0x3n - -0xFEDCBA9876543210n) is 0xFEDCBA987654320Dn' +); + +assert.sameValue( + -0x1234n - 0xFEDCBA9876543210n, + -0xFEDCBA9876544444n, + 'The result of (-0x1234n - 0xFEDCBA9876543210n) is -0xFEDCBA9876544444n' +); + +assert.sameValue( + -0x1234n - 0xFEDCBA987654320Fn, + -0xFEDCBA9876544443n, + 'The result of (-0x1234n - 0xFEDCBA987654320Fn) is -0xFEDCBA9876544443n' +); + +assert.sameValue( + -0x1234n - 0xFEDCBA98n, + -0xFEDCCCCCn, + 'The result of (-0x1234n - 0xFEDCBA98n) is -0xFEDCCCCCn' +); + +assert.sameValue( + -0x1234n - 0xFEDCBA97n, + -0xFEDCCCCBn, + 'The result of (-0x1234n - 0xFEDCBA97n) is -0xFEDCCCCBn' +); + +assert.sameValue(-0x1234n - 0x1234n, -0x2468n, 'The result of (-0x1234n - 0x1234n) is -0x2468n'); +assert.sameValue(-0x1234n - 0x3n, -0x1237n, 'The result of (-0x1234n - 0x3n) is -0x1237n'); +assert.sameValue(-0x1234n - 0x2n, -0x1236n, 'The result of (-0x1234n - 0x2n) is -0x1236n'); +assert.sameValue(-0x1234n - 0x1n, -0x1235n, 'The result of (-0x1234n - 0x1n) is -0x1235n'); +assert.sameValue(-0x1234n - 0x0n, -0x1234n, 'The result of (-0x1234n - 0x0n) is -0x1234n'); +assert.sameValue(-0x1234n - -0x1n, -0x1233n, 'The result of (-0x1234n - -0x1n) is -0x1233n'); +assert.sameValue(-0x1234n - -0x2n, -0x1232n, 'The result of (-0x1234n - -0x2n) is -0x1232n'); +assert.sameValue(-0x1234n - -0x3n, -0x1231n, 'The result of (-0x1234n - -0x3n) is -0x1231n'); +assert.sameValue(-0x1234n - -0x1234n, 0x0n, 'The result of (-0x1234n - -0x1234n) is 0x0n'); + +assert.sameValue( + -0x1234n - -0xFEDCBA97n, + 0xFEDCA863n, + 'The result of (-0x1234n - -0xFEDCBA97n) is 0xFEDCA863n' +); + +assert.sameValue( + -0x1234n - -0xFEDCBA98n, + 0xFEDCA864n, + 'The result of (-0x1234n - -0xFEDCBA98n) is 0xFEDCA864n' +); + +assert.sameValue( + -0x1234n - -0xFEDCBA987654320Fn, + 0xFEDCBA9876541FDBn, + 'The result of (-0x1234n - -0xFEDCBA987654320Fn) is 0xFEDCBA9876541FDBn' +); + +assert.sameValue( + -0x1234n - -0xFEDCBA9876543210n, + 0xFEDCBA9876541FDCn, + 'The result of (-0x1234n - -0xFEDCBA9876543210n) is 0xFEDCBA9876541FDCn' +); + +assert.sameValue( + -0xFEDCBA97n - 0xFEDCBA9876543210n, + -0xFEDCBA997530ECA7n, + 'The result of (-0xFEDCBA97n - 0xFEDCBA9876543210n) is -0xFEDCBA997530ECA7n' +); + +assert.sameValue( + -0xFEDCBA97n - 0xFEDCBA987654320Fn, + -0xFEDCBA997530ECA6n, + 'The result of (-0xFEDCBA97n - 0xFEDCBA987654320Fn) is -0xFEDCBA997530ECA6n' +); + +assert.sameValue( + -0xFEDCBA97n - 0xFEDCBA98n, + -0x1FDB9752Fn, + 'The result of (-0xFEDCBA97n - 0xFEDCBA98n) is -0x1FDB9752Fn' +); + +assert.sameValue( + -0xFEDCBA97n - 0xFEDCBA97n, + -0x1FDB9752En, + 'The result of (-0xFEDCBA97n - 0xFEDCBA97n) is -0x1FDB9752En' +); + +assert.sameValue( + -0xFEDCBA97n - 0x1234n, + -0xFEDCCCCBn, + 'The result of (-0xFEDCBA97n - 0x1234n) is -0xFEDCCCCBn' +); + +assert.sameValue( + -0xFEDCBA97n - 0x3n, + -0xFEDCBA9An, + 'The result of (-0xFEDCBA97n - 0x3n) is -0xFEDCBA9An' +); + +assert.sameValue( + -0xFEDCBA97n - 0x2n, + -0xFEDCBA99n, + 'The result of (-0xFEDCBA97n - 0x2n) is -0xFEDCBA99n' +); + +assert.sameValue( + -0xFEDCBA97n - 0x1n, + -0xFEDCBA98n, + 'The result of (-0xFEDCBA97n - 0x1n) is -0xFEDCBA98n' +); + +assert.sameValue( + -0xFEDCBA97n - 0x0n, + -0xFEDCBA97n, + 'The result of (-0xFEDCBA97n - 0x0n) is -0xFEDCBA97n' +); + +assert.sameValue( + -0xFEDCBA97n - -0x1n, + -0xFEDCBA96n, + 'The result of (-0xFEDCBA97n - -0x1n) is -0xFEDCBA96n' +); + +assert.sameValue( + -0xFEDCBA97n - -0x2n, + -0xFEDCBA95n, + 'The result of (-0xFEDCBA97n - -0x2n) is -0xFEDCBA95n' +); + +assert.sameValue( + -0xFEDCBA97n - -0x3n, + -0xFEDCBA94n, + 'The result of (-0xFEDCBA97n - -0x3n) is -0xFEDCBA94n' +); + +assert.sameValue( + -0xFEDCBA97n - -0x1234n, + -0xFEDCA863n, + 'The result of (-0xFEDCBA97n - -0x1234n) is -0xFEDCA863n' +); + +assert.sameValue( + -0xFEDCBA97n - -0xFEDCBA97n, + 0x0n, + 'The result of (-0xFEDCBA97n - -0xFEDCBA97n) is 0x0n' +); + +assert.sameValue( + -0xFEDCBA97n - -0xFEDCBA98n, + 0x1n, + 'The result of (-0xFEDCBA97n - -0xFEDCBA98n) is 0x1n' +); + +assert.sameValue( + -0xFEDCBA97n - -0xFEDCBA987654320Fn, + 0xFEDCBA9777777778n, + 'The result of (-0xFEDCBA97n - -0xFEDCBA987654320Fn) is 0xFEDCBA9777777778n' +); + +assert.sameValue( + -0xFEDCBA97n - -0xFEDCBA9876543210n, + 0xFEDCBA9777777779n, + 'The result of (-0xFEDCBA97n - -0xFEDCBA9876543210n) is 0xFEDCBA9777777779n' +); + +assert.sameValue( + -0xFEDCBA98n - 0xFEDCBA9876543210n, + -0xFEDCBA997530ECA8n, + 'The result of (-0xFEDCBA98n - 0xFEDCBA9876543210n) is -0xFEDCBA997530ECA8n' +); + +assert.sameValue( + -0xFEDCBA98n - 0xFEDCBA987654320Fn, + -0xFEDCBA997530ECA7n, + 'The result of (-0xFEDCBA98n - 0xFEDCBA987654320Fn) is -0xFEDCBA997530ECA7n' +); + +assert.sameValue( + -0xFEDCBA98n - 0xFEDCBA98n, + -0x1FDB97530n, + 'The result of (-0xFEDCBA98n - 0xFEDCBA98n) is -0x1FDB97530n' +); + +assert.sameValue( + -0xFEDCBA98n - 0xFEDCBA97n, + -0x1FDB9752Fn, + 'The result of (-0xFEDCBA98n - 0xFEDCBA97n) is -0x1FDB9752Fn' +); + +assert.sameValue( + -0xFEDCBA98n - 0x1234n, + -0xFEDCCCCCn, + 'The result of (-0xFEDCBA98n - 0x1234n) is -0xFEDCCCCCn' +); + +assert.sameValue( + -0xFEDCBA98n - 0x3n, + -0xFEDCBA9Bn, + 'The result of (-0xFEDCBA98n - 0x3n) is -0xFEDCBA9Bn' +); + +assert.sameValue( + -0xFEDCBA98n - 0x2n, + -0xFEDCBA9An, + 'The result of (-0xFEDCBA98n - 0x2n) is -0xFEDCBA9An' +); + +assert.sameValue( + -0xFEDCBA98n - 0x1n, + -0xFEDCBA99n, + 'The result of (-0xFEDCBA98n - 0x1n) is -0xFEDCBA99n' +); + +assert.sameValue( + -0xFEDCBA98n - 0x0n, + -0xFEDCBA98n, + 'The result of (-0xFEDCBA98n - 0x0n) is -0xFEDCBA98n' +); + +assert.sameValue( + -0xFEDCBA98n - -0x1n, + -0xFEDCBA97n, + 'The result of (-0xFEDCBA98n - -0x1n) is -0xFEDCBA97n' +); + +assert.sameValue( + -0xFEDCBA98n - -0x2n, + -0xFEDCBA96n, + 'The result of (-0xFEDCBA98n - -0x2n) is -0xFEDCBA96n' +); + +assert.sameValue( + -0xFEDCBA98n - -0x3n, + -0xFEDCBA95n, + 'The result of (-0xFEDCBA98n - -0x3n) is -0xFEDCBA95n' +); + +assert.sameValue( + -0xFEDCBA98n - -0x1234n, + -0xFEDCA864n, + 'The result of (-0xFEDCBA98n - -0x1234n) is -0xFEDCA864n' +); + +assert.sameValue( + -0xFEDCBA98n - -0xFEDCBA97n, + -0x1n, + 'The result of (-0xFEDCBA98n - -0xFEDCBA97n) is -0x1n' +); + +assert.sameValue( + -0xFEDCBA98n - -0xFEDCBA98n, + 0x0n, + 'The result of (-0xFEDCBA98n - -0xFEDCBA98n) is 0x0n' +); + +assert.sameValue( + -0xFEDCBA98n - -0xFEDCBA987654320Fn, + 0xFEDCBA9777777777n, + 'The result of (-0xFEDCBA98n - -0xFEDCBA987654320Fn) is 0xFEDCBA9777777777n' +); + +assert.sameValue( + -0xFEDCBA98n - -0xFEDCBA9876543210n, + 0xFEDCBA9777777778n, + 'The result of (-0xFEDCBA98n - -0xFEDCBA9876543210n) is 0xFEDCBA9777777778n' +); + +assert.sameValue( + -0xFEDCBA987654320Fn - 0xFEDCBA9876543210n, + -0x1FDB97530ECA8641Fn, + 'The result of (-0xFEDCBA987654320Fn - 0xFEDCBA9876543210n) is -0x1FDB97530ECA8641Fn' +); + +assert.sameValue( + -0xFEDCBA987654320Fn - 0xFEDCBA987654320Fn, + -0x1FDB97530ECA8641En, + 'The result of (-0xFEDCBA987654320Fn - 0xFEDCBA987654320Fn) is -0x1FDB97530ECA8641En' +); + +assert.sameValue( + -0xFEDCBA987654320Fn - 0xFEDCBA98n, + -0xFEDCBA997530ECA7n, + 'The result of (-0xFEDCBA987654320Fn - 0xFEDCBA98n) is -0xFEDCBA997530ECA7n' +); + +assert.sameValue( + -0xFEDCBA987654320Fn - 0xFEDCBA97n, + -0xFEDCBA997530ECA6n, + 'The result of (-0xFEDCBA987654320Fn - 0xFEDCBA97n) is -0xFEDCBA997530ECA6n' +); + +assert.sameValue( + -0xFEDCBA987654320Fn - 0x1234n, + -0xFEDCBA9876544443n, + 'The result of (-0xFEDCBA987654320Fn - 0x1234n) is -0xFEDCBA9876544443n' +); + +assert.sameValue( + -0xFEDCBA987654320Fn - 0x3n, + -0xFEDCBA9876543212n, + 'The result of (-0xFEDCBA987654320Fn - 0x3n) is -0xFEDCBA9876543212n' +); + +assert.sameValue( + -0xFEDCBA987654320Fn - 0x2n, + -0xFEDCBA9876543211n, + 'The result of (-0xFEDCBA987654320Fn - 0x2n) is -0xFEDCBA9876543211n' +); + +assert.sameValue( + -0xFEDCBA987654320Fn - 0x1n, + -0xFEDCBA9876543210n, + 'The result of (-0xFEDCBA987654320Fn - 0x1n) is -0xFEDCBA9876543210n' +); + +assert.sameValue( + -0xFEDCBA987654320Fn - 0x0n, + -0xFEDCBA987654320Fn, + 'The result of (-0xFEDCBA987654320Fn - 0x0n) is -0xFEDCBA987654320Fn' +); + +assert.sameValue( + -0xFEDCBA987654320Fn - -0x1n, + -0xFEDCBA987654320En, + 'The result of (-0xFEDCBA987654320Fn - -0x1n) is -0xFEDCBA987654320En' +); + +assert.sameValue( + -0xFEDCBA987654320Fn - -0x2n, + -0xFEDCBA987654320Dn, + 'The result of (-0xFEDCBA987654320Fn - -0x2n) is -0xFEDCBA987654320Dn' +); + +assert.sameValue( + -0xFEDCBA987654320Fn - -0x3n, + -0xFEDCBA987654320Cn, + 'The result of (-0xFEDCBA987654320Fn - -0x3n) is -0xFEDCBA987654320Cn' +); + +assert.sameValue( + -0xFEDCBA987654320Fn - -0x1234n, + -0xFEDCBA9876541FDBn, + 'The result of (-0xFEDCBA987654320Fn - -0x1234n) is -0xFEDCBA9876541FDBn' +); + +assert.sameValue( + -0xFEDCBA987654320Fn - -0xFEDCBA97n, + -0xFEDCBA9777777778n, + 'The result of (-0xFEDCBA987654320Fn - -0xFEDCBA97n) is -0xFEDCBA9777777778n' +); + +assert.sameValue( + -0xFEDCBA987654320Fn - -0xFEDCBA98n, + -0xFEDCBA9777777777n, + 'The result of (-0xFEDCBA987654320Fn - -0xFEDCBA98n) is -0xFEDCBA9777777777n' +); + +assert.sameValue( + -0xFEDCBA987654320Fn - -0xFEDCBA987654320Fn, + 0x0n, + 'The result of (-0xFEDCBA987654320Fn - -0xFEDCBA987654320Fn) is 0x0n' +); + +assert.sameValue( + -0xFEDCBA987654320Fn - -0xFEDCBA9876543210n, + 0x1n, + 'The result of (-0xFEDCBA987654320Fn - -0xFEDCBA9876543210n) is 0x1n' +); + +assert.sameValue( + -0xFEDCBA9876543210n - 0xFEDCBA9876543210n, + -0x1FDB97530ECA86420n, + 'The result of (-0xFEDCBA9876543210n - 0xFEDCBA9876543210n) is -0x1FDB97530ECA86420n' +); + +assert.sameValue( + -0xFEDCBA9876543210n - 0xFEDCBA987654320Fn, + -0x1FDB97530ECA8641Fn, + 'The result of (-0xFEDCBA9876543210n - 0xFEDCBA987654320Fn) is -0x1FDB97530ECA8641Fn' +); + +assert.sameValue( + -0xFEDCBA9876543210n - 0xFEDCBA98n, + -0xFEDCBA997530ECA8n, + 'The result of (-0xFEDCBA9876543210n - 0xFEDCBA98n) is -0xFEDCBA997530ECA8n' +); + +assert.sameValue( + -0xFEDCBA9876543210n - 0xFEDCBA97n, + -0xFEDCBA997530ECA7n, + 'The result of (-0xFEDCBA9876543210n - 0xFEDCBA97n) is -0xFEDCBA997530ECA7n' +); + +assert.sameValue( + -0xFEDCBA9876543210n - 0x1234n, + -0xFEDCBA9876544444n, + 'The result of (-0xFEDCBA9876543210n - 0x1234n) is -0xFEDCBA9876544444n' +); + +assert.sameValue( + -0xFEDCBA9876543210n - 0x3n, + -0xFEDCBA9876543213n, + 'The result of (-0xFEDCBA9876543210n - 0x3n) is -0xFEDCBA9876543213n' +); + +assert.sameValue( + -0xFEDCBA9876543210n - 0x2n, + -0xFEDCBA9876543212n, + 'The result of (-0xFEDCBA9876543210n - 0x2n) is -0xFEDCBA9876543212n' +); + +assert.sameValue( + -0xFEDCBA9876543210n - 0x1n, + -0xFEDCBA9876543211n, + 'The result of (-0xFEDCBA9876543210n - 0x1n) is -0xFEDCBA9876543211n' +); + +assert.sameValue( + -0xFEDCBA9876543210n - 0x0n, + -0xFEDCBA9876543210n, + 'The result of (-0xFEDCBA9876543210n - 0x0n) is -0xFEDCBA9876543210n' +); + +assert.sameValue( + -0xFEDCBA9876543210n - -0x1n, + -0xFEDCBA987654320Fn, + 'The result of (-0xFEDCBA9876543210n - -0x1n) is -0xFEDCBA987654320Fn' +); + +assert.sameValue( + -0xFEDCBA9876543210n - -0x2n, + -0xFEDCBA987654320En, + 'The result of (-0xFEDCBA9876543210n - -0x2n) is -0xFEDCBA987654320En' +); + +assert.sameValue( + -0xFEDCBA9876543210n - -0x3n, + -0xFEDCBA987654320Dn, + 'The result of (-0xFEDCBA9876543210n - -0x3n) is -0xFEDCBA987654320Dn' +); + +assert.sameValue( + -0xFEDCBA9876543210n - -0x1234n, + -0xFEDCBA9876541FDCn, + 'The result of (-0xFEDCBA9876543210n - -0x1234n) is -0xFEDCBA9876541FDCn' +); + +assert.sameValue( + -0xFEDCBA9876543210n - -0xFEDCBA97n, + -0xFEDCBA9777777779n, + 'The result of (-0xFEDCBA9876543210n - -0xFEDCBA97n) is -0xFEDCBA9777777779n' +); + +assert.sameValue( + -0xFEDCBA9876543210n - -0xFEDCBA98n, + -0xFEDCBA9777777778n, + 'The result of (-0xFEDCBA9876543210n - -0xFEDCBA98n) is -0xFEDCBA9777777778n' +); + +assert.sameValue( + -0xFEDCBA9876543210n - -0xFEDCBA987654320Fn, + -0x1n, + 'The result of (-0xFEDCBA9876543210n - -0xFEDCBA987654320Fn) is -0x1n' +); + +assert.sameValue( + -0xFEDCBA9876543210n - -0xFEDCBA9876543210n, + 0x0n, + 'The result of (-0xFEDCBA9876543210n - -0xFEDCBA9876543210n) is 0x0n' +); + +reportCompare(0, 0); diff --git a/js/src/tests/test262/language/expressions/subtraction/bigint-errors.js b/js/src/tests/test262/language/expressions/subtraction/bigint-errors.js new file mode 100644 index 0000000000..34cd092679 --- /dev/null +++ b/js/src/tests/test262/language/expressions/subtraction/bigint-errors.js @@ -0,0 +1,72 @@ +// Copyright (C) 2017 Josh Wolfe. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +description: subtraction operator ToNumeric with BigInt operands +esid: sec-subtraction-operator-minus-runtime-semantics-evaluation +features: [BigInt, Symbol, Symbol.toPrimitive, computed-property-names] +---*/ +assert.throws(TypeError, function() { + Symbol('1') - 0n; +}, 'Symbol("1") - 0n throws TypeError'); + +assert.throws(TypeError, function() { + 0n - Symbol('1'); +}, '0n - Symbol("1") throws TypeError'); + +assert.throws(TypeError, function() { + Object(Symbol('1')) - 0n; +}, 'Object(Symbol("1")) - 0n throws TypeError'); + +assert.throws(TypeError, function() { + 0n - Object(Symbol('1')); +}, '0n - Object(Symbol("1")) throws TypeError'); + +assert.throws(TypeError, function() { + ({ + [Symbol.toPrimitive]: function() { + return Symbol('1'); + } + }) - 0n; +}, '({[Symbol.toPrimitive]: function() {return Symbol("1");}}) - 0n throws TypeError'); + +assert.throws(TypeError, function() { + 0n - { + [Symbol.toPrimitive]: function() { + return Symbol('1'); + } + }; +}, '0n - {[Symbol.toPrimitive]: function() {return Symbol("1");}} throws TypeError'); + +assert.throws(TypeError, function() { + ({ + valueOf: function() { + return Symbol('1'); + } + }) - 0n; +}, '({valueOf: function() {return Symbol("1");}}) - 0n throws TypeError'); + +assert.throws(TypeError, function() { + 0n - { + valueOf: function() { + return Symbol('1'); + } + }; +}, '0n - {valueOf: function() {return Symbol("1");}} throws TypeError'); + +assert.throws(TypeError, function() { + ({ + toString: function() { + return Symbol('1'); + } + }) - 0n; +}, '({toString: function() {return Symbol("1");}}) - 0n throws TypeError'); + +assert.throws(TypeError, function() { + 0n - { + toString: function() { + return Symbol('1'); + } + }; +}, '0n - {toString: function() {return Symbol("1");}} throws TypeError'); + +reportCompare(0, 0); diff --git a/js/src/tests/test262/language/expressions/subtraction/bigint-toprimitive.js b/js/src/tests/test262/language/expressions/subtraction/bigint-toprimitive.js new file mode 100644 index 0000000000..615f4156a0 --- /dev/null +++ b/js/src/tests/test262/language/expressions/subtraction/bigint-toprimitive.js @@ -0,0 +1,374 @@ +// Copyright (C) 2017 Josh Wolfe. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +description: subtraction operator ToNumeric with BigInt operands +esid: sec-subtraction-operator-minus-runtime-semantics-evaluation +features: [BigInt, Symbol.toPrimitive, computed-property-names] +---*/ +function err() { + throw new Test262Error(); +} + +function MyError() {} + +assert.sameValue({ + [Symbol.toPrimitive]: function() { + return 2n; + }, + + valueOf: err, + toString: err +} - 1n, 1n, 'The result of (({[Symbol.toPrimitive]: function() {return 2n;}, valueOf: err, toString: err}) - 1n) is 1n'); + +assert.sameValue(3n - { + [Symbol.toPrimitive]: function() { + return 2n; + }, + + valueOf: err, + toString: err +}, 1n, 'The result of (3n - {[Symbol.toPrimitive]: function() {return 2n;}, valueOf: err, toString: err}) is 1n'); + +assert.sameValue({ + valueOf: function() { + return 2n; + }, + + toString: err +} - 1n, 1n, 'The result of (({valueOf: function() {return 2n;}, toString: err}) - 1n) is 1n'); + +assert.sameValue(3n - { + valueOf: function() { + return 2n; + }, + + toString: err +}, 1n, 'The result of (3n - {valueOf: function() {return 2n;}, toString: err}) is 1n'); + +assert.sameValue({ + toString: function() { + return 2n; + } +} - 1n, 1n, 'The result of (({toString: function() {return 2n;}}) - 1n) is 1n'); + +assert.sameValue(3n - { + toString: function() { + return 2n; + } +}, 1n, 'The result of (3n - {toString: function() {return 2n;}}) is 1n'); + +assert.sameValue({ + [Symbol.toPrimitive]: undefined, + + valueOf: function() { + return 2n; + } +} - 1n, 1n, 'The result of (({[Symbol.toPrimitive]: undefined, valueOf: function() {return 2n;}}) - 1n) is 1n'); + +assert.sameValue(3n - { + [Symbol.toPrimitive]: undefined, + + valueOf: function() { + return 2n; + } +}, 1n, 'The result of (3n - {[Symbol.toPrimitive]: undefined, valueOf: function() {return 2n;}}) is 1n'); + +assert.sameValue({ + [Symbol.toPrimitive]: null, + + valueOf: function() { + return 2n; + } +} - 1n, 1n, 'The result of (({[Symbol.toPrimitive]: null, valueOf: function() {return 2n;}}) - 1n) is 1n'); + +assert.sameValue(3n - { + [Symbol.toPrimitive]: null, + + valueOf: function() { + return 2n; + } +}, 1n, 'The result of (3n - {[Symbol.toPrimitive]: null, valueOf: function() {return 2n;}}) is 1n'); + +assert.sameValue({ + valueOf: null, + + toString: function() { + return 2n; + } +} - 1n, 1n, 'The result of (({valueOf: null, toString: function() {return 2n;}}) - 1n) is 1n'); + +assert.sameValue(3n - { + valueOf: null, + + toString: function() { + return 2n; + } +}, 1n, 'The result of (3n - {valueOf: null, toString: function() {return 2n;}}) is 1n'); + +assert.sameValue({ + valueOf: 1, + + toString: function() { + return 2n; + } +} - 1n, 1n, 'The result of (({valueOf: 1, toString: function() {return 2n;}}) - 1n) is 1n'); + +assert.sameValue(3n - { + valueOf: 1, + + toString: function() { + return 2n; + } +}, 1n, 'The result of (3n - {valueOf: 1, toString: function() {return 2n;}}) is 1n'); + +assert.sameValue({ + valueOf: {}, + + toString: function() { + return 2n; + } +} - 1n, 1n, 'The result of (({valueOf: {}, toString: function() {return 2n;}}) - 1n) is 1n'); + +assert.sameValue(3n - { + valueOf: {}, + + toString: function() { + return 2n; + } +}, 1n, 'The result of (3n - {valueOf: {}, toString: function() {return 2n;}}) is 1n'); + +assert.sameValue({ + valueOf: function() { + return {}; + }, + + toString: function() { + return 2n; + } +} - 1n, 1n, 'The result of (({valueOf: function() {return {};}, toString: function() {return 2n;}}) - 1n) is 1n'); + +assert.sameValue(3n - { + valueOf: function() { + return {}; + }, + + toString: function() { + return 2n; + } +}, 1n, 'The result of (3n - {valueOf: function() {return {};}, toString: function() {return 2n;}}) is 1n'); + +assert.sameValue({ + valueOf: function() { + return Object(12345); + }, + + toString: function() { + return 2n; + } +} - 1n, 1n, 'The result of (({valueOf: function() {return Object(12345);}, toString: function() {return 2n;}}) - 1n) is 1n'); + +assert.sameValue(3n - { + valueOf: function() { + return Object(12345); + }, + + toString: function() { + return 2n; + } +}, 1n, 'The result of (3n - {valueOf: function() {return Object(12345);}, toString: function() {return 2n;}}) is 1n'); + +assert.throws(TypeError, function() { + ({ + [Symbol.toPrimitive]: 1 + }) - 0n; +}, '({[Symbol.toPrimitive]: 1}) - 0n throws TypeError'); + +assert.throws(TypeError, function() { + 0n - { + [Symbol.toPrimitive]: 1 + }; +}, '0n - {[Symbol.toPrimitive]: 1} throws TypeError'); + +assert.throws(TypeError, function() { + ({ + [Symbol.toPrimitive]: {} + }) - 0n; +}, '({[Symbol.toPrimitive]: {}}) - 0n throws TypeError'); + +assert.throws(TypeError, function() { + 0n - { + [Symbol.toPrimitive]: {} + }; +}, '0n - {[Symbol.toPrimitive]: {}} throws TypeError'); + +assert.throws(TypeError, function() { + ({ + [Symbol.toPrimitive]: function() { + return Object(1); + } + }) - 0n; +}, '({[Symbol.toPrimitive]: function() {return Object(1);}}) - 0n throws TypeError'); + +assert.throws(TypeError, function() { + 0n - { + [Symbol.toPrimitive]: function() { + return Object(1); + } + }; +}, '0n - {[Symbol.toPrimitive]: function() {return Object(1);}} throws TypeError'); + +assert.throws(TypeError, function() { + ({ + [Symbol.toPrimitive]: function() { + return {}; + } + }) - 0n; +}, '({[Symbol.toPrimitive]: function() {return {};}}) - 0n throws TypeError'); + +assert.throws(TypeError, function() { + 0n - { + [Symbol.toPrimitive]: function() { + return {}; + } + }; +}, '0n - {[Symbol.toPrimitive]: function() {return {};}} throws TypeError'); + +assert.throws(MyError, function() { + ({ + [Symbol.toPrimitive]: function() { + throw new MyError(); + } + }) - 0n; +}, '({[Symbol.toPrimitive]: function() {throw new MyError();}}) - 0n throws MyError'); + +assert.throws(MyError, function() { + 0n - { + [Symbol.toPrimitive]: function() { + throw new MyError(); + } + }; +}, '0n - {[Symbol.toPrimitive]: function() {throw new MyError();}} throws MyError'); + +assert.throws(MyError, function() { + ({ + valueOf: function() { + throw new MyError(); + } + }) - 0n; +}, '({valueOf: function() {throw new MyError();}}) - 0n throws MyError'); + +assert.throws(MyError, function() { + 0n - { + valueOf: function() { + throw new MyError(); + } + }; +}, '0n - {valueOf: function() {throw new MyError();}} throws MyError'); + +assert.throws(MyError, function() { + ({ + toString: function() { + throw new MyError(); + } + }) - 0n; +}, '({toString: function() {throw new MyError();}}) - 0n throws MyError'); + +assert.throws(MyError, function() { + 0n - { + toString: function() { + throw new MyError(); + } + }; +}, '0n - {toString: function() {throw new MyError();}} throws MyError'); + +assert.throws(TypeError, function() { + ({ + valueOf: null, + toString: null + }) - 0n; +}, '({valueOf: null, toString: null}) - 0n throws TypeError'); + +assert.throws(TypeError, function() { + 0n - { + valueOf: null, + toString: null + }; +}, '0n - {valueOf: null, toString: null} throws TypeError'); + +assert.throws(TypeError, function() { + ({ + valueOf: 1, + toString: 1 + }) - 0n; +}, '({valueOf: 1, toString: 1}) - 0n throws TypeError'); + +assert.throws(TypeError, function() { + 0n - { + valueOf: 1, + toString: 1 + }; +}, '0n - {valueOf: 1, toString: 1} throws TypeError'); + +assert.throws(TypeError, function() { + ({ + valueOf: {}, + toString: {} + }) - 0n; +}, '({valueOf: {}, toString: {}}) - 0n throws TypeError'); + +assert.throws(TypeError, function() { + 0n - { + valueOf: {}, + toString: {} + }; +}, '0n - {valueOf: {}, toString: {}} throws TypeError'); + +assert.throws(TypeError, function() { + ({ + valueOf: function() { + return Object(1); + }, + + toString: function() { + return Object(1); + } + }) - 0n; +}, '({valueOf: function() {return Object(1);}, toString: function() {return Object(1);}}) - 0n throws TypeError'); + +assert.throws(TypeError, function() { + 0n - { + valueOf: function() { + return Object(1); + }, + + toString: function() { + return Object(1); + } + }; +}, '0n - {valueOf: function() {return Object(1);}, toString: function() {return Object(1);}} throws TypeError'); + +assert.throws(TypeError, function() { + ({ + valueOf: function() { + return {}; + }, + + toString: function() { + return {}; + } + }) - 0n; +}, '({valueOf: function() {return {};}, toString: function() {return {};}}) - 0n throws TypeError'); + +assert.throws(TypeError, function() { + 0n - { + valueOf: function() { + return {}; + }, + + toString: function() { + return {}; + } + }; +}, '0n - {valueOf: function() {return {};}, toString: function() {return {};}} throws TypeError'); + +reportCompare(0, 0); diff --git a/js/src/tests/test262/language/expressions/subtraction/bigint-wrapped-values.js b/js/src/tests/test262/language/expressions/subtraction/bigint-wrapped-values.js new file mode 100644 index 0000000000..2807304e36 --- /dev/null +++ b/js/src/tests/test262/language/expressions/subtraction/bigint-wrapped-values.js @@ -0,0 +1,47 @@ +// Copyright (C) 2017 Josh Wolfe. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +description: subtraction operator ToNumeric with BigInt operands +esid: sec-subtraction-operator-minus-runtime-semantics-evaluation +features: [BigInt, Symbol.toPrimitive, computed-property-names] +---*/ +assert.sameValue(Object(2n) - 1n, 1n, 'The result of (Object(2n) - 1n) is 1n'); +assert.sameValue(3n - Object(2n), 1n, 'The result of (3n - Object(2n)) is 1n'); + +assert.sameValue({ + [Symbol.toPrimitive]: function() { + return 2n; + } +} - 1n, 1n, 'The result of (({[Symbol.toPrimitive]: function() {return 2n;}}) - 1n) is 1n'); + +assert.sameValue(3n - { + [Symbol.toPrimitive]: function() { + return 2n; + } +}, 1n, 'The result of (3n - {[Symbol.toPrimitive]: function() {return 2n;}}) is 1n'); + +assert.sameValue({ + valueOf: function() { + return 2n; + } +} - 1n, 1n, 'The result of (({valueOf: function() {return 2n;}}) - 1n) is 1n'); + +assert.sameValue(3n - { + valueOf: function() { + return 2n; + } +}, 1n, 'The result of (3n - {valueOf: function() {return 2n;}}) is 1n'); + +assert.sameValue({ + toString: function() { + return 2n; + } +} - 1n, 1n, 'The result of (({toString: function() {return 2n;}}) - 1n) is 1n'); + +assert.sameValue(3n - { + toString: function() { + return 2n; + } +}, 1n, 'The result of (3n - {toString: function() {return 2n;}}) is 1n'); + +reportCompare(0, 0); diff --git a/js/src/tests/test262/language/expressions/subtraction/browser.js b/js/src/tests/test262/language/expressions/subtraction/browser.js new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/js/src/tests/test262/language/expressions/subtraction/browser.js diff --git a/js/src/tests/test262/language/expressions/subtraction/order-of-evaluation.js b/js/src/tests/test262/language/expressions/subtraction/order-of-evaluation.js new file mode 100644 index 0000000000..220a755786 --- /dev/null +++ b/js/src/tests/test262/language/expressions/subtraction/order-of-evaluation.js @@ -0,0 +1,140 @@ +// Copyright (C) 2018 Igalia, S.L. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +esid: sec-subtraction-operator-minus-runtime-semantics-evaluation +description: Type coercion order of operations for subtraction operator +features: [Symbol] +info: | + Evaluate lhs + Evaluate rhs + ToNumeric(lhs) + ToNumeric(rhs) +---*/ + +function MyError() {} +var trace; + +// ?GetValue(lhs) throws. +trace = ""; +assert.throws(MyError, function() { + (function() { + trace += "1"; + throw new MyError(); + })() - (function() { + trace += "2"; + throw new Test262Error("should not be evaluated"); + })(); +}, "?GetValue(lhs) throws."); +assert.sameValue(trace, "1", "?GetValue(lhs) throws."); + +// ?GetValue(rhs) throws. +trace = ""; +assert.throws(MyError, function() { + (function() { + trace += "1"; + return { + valueOf: function() { + trace += "3"; + throw new Test262Error("should not be evaluated"); + } + }; + })() - (function() { + trace += "2"; + throw new MyError(); + })(); +}, "?GetValue(rhs) throws."); +assert.sameValue(trace, "12", "?GetValue(rhs) throws."); + +// ?ToPrimive(lhs) throws. +trace = ""; +assert.throws(MyError, function() { + (function() { + trace += "1"; + return { + valueOf: function() { + trace += "3"; + throw new MyError(); + } + }; + })() - (function() { + trace += "2"; + return { + valueOf: function() { + trace += "4"; + throw new Test262Error("should not be evaluated"); + } + }; + })(); +}, "?ToPrimive(lhs) throws."); +assert.sameValue(trace, "123", "?ToPrimive(lhs) throws."); + +// ?ToPrimive(rhs) throws. +trace = ""; +assert.throws(MyError, function() { + (function() { + trace += "1"; + return { + valueOf: function() { + trace += "3"; + return 1; + } + }; + })() - (function() { + trace += "2"; + return { + valueOf: function() { + trace += "4"; + throw new MyError(); + } + }; + })(); +}, "?ToPrimive(rhs) throws."); +assert.sameValue(trace, "1234", "?ToPrimive(rhs) throws."); + +// ?ToNumeric(lhs) throws. +trace = ""; +assert.throws(TypeError, function() { + (function() { + trace += "1"; + return { + valueOf: function() { + trace += "3"; + return Symbol("1"); + } + }; + })() - (function() { + trace += "2"; + return { + valueOf: function() { + trace += "4"; + throw new Test262Error("should not be evaluated"); + } + }; + })(); +}, "?ToNumeric(lhs) throws."); +assert.sameValue(trace, "123", "?ToNumeric(lhs) throws."); + +// GetValue(lhs) throws. +trace = ""; +assert.throws(TypeError, function() { + (function() { + trace += "1"; + return { + valueOf: function() { + trace += "3"; + return 1; + } + }; + })() - (function() { + trace += "2"; + return { + valueOf: function() { + trace += "4"; + return Symbol("1"); + } + }; + })(); +}, "GetValue(lhs) throws."); +assert.sameValue(trace, "1234", "GetValue(lhs) throws."); + +reportCompare(0, 0); diff --git a/js/src/tests/test262/language/expressions/subtraction/shell.js b/js/src/tests/test262/language/expressions/subtraction/shell.js new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/js/src/tests/test262/language/expressions/subtraction/shell.js |