diff --git a/test/language/expressions/unary-minus/bigint-non-primitive.js b/test/language/expressions/unary-minus/bigint-non-primitive.js new file mode 100644 index 00000000000..02587c5d56e --- /dev/null +++ b/test/language/expressions/unary-minus/bigint-non-primitive.js @@ -0,0 +1,33 @@ +// Copyright (C) 2017 Josh Wolfe. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +description: Unary minus for BigInt object wrappers +esid: sec-unary-minus-operator-runtime-semantics-evaluation +info: | + Runtime Semantics: Evaluation + UnaryExpression : - UnaryExpression + + 1. Let expr be the result of evaluating UnaryExpression. + 2. Let oldValue be ? ToNumeric(? GetValue(expr)). + 3. Let T be Type(oldValue). + 4. Return ? T::unaryMinus(oldValue). + +features: [BigInt, Symbol.toPrimitive] +---*/ + +assert.sameValue(-Object(1n), -1n, "-Object(1n) === -1n"); +assert.notSameValue(-Object(1n), 1n, "-Object(1n) !== 1n"); +assert.notSameValue(-Object(1n), Object(-1n), "-Object(1n) !== Object(-1n)"); +assert.sameValue(-Object(-1n), 1n, "-Object(-1n) === 1n"); +assert.notSameValue(-Object(-1n), -1n, "-Object(-1n) !== -1n"); +assert.notSameValue(-Object(-1n), Object(1n), "-Object(-1n) !== Object(1n)"); +assert.sameValue( + -{[Symbol.toPrimitive]: function() { return 1n; }, valueOf: function() { $ERROR(); }, toString: function() { $ERROR(); }}, -1n, + "-{[Symbol.toPrimitive]: function() { return 1n; }, valueOf: function() { $ERROR(); }, toString: function() { $ERROR(); }} === -1n"); +assert.sameValue( + -{valueOf: function() { return 1n; }, toString: function() { $ERROR(); }}, -1n, + "-{valueOf: function() { return 1n; }, toString: function() { $ERROR(); }} === -1n"); +assert.sameValue( + -{toString: function() { return 1n; }}, -1n, + "-{toString: function() { return 1n; }} === -1n"); diff --git a/test/language/expressions/unary-minus/bigint.js b/test/language/expressions/unary-minus/bigint.js new file mode 100644 index 00000000000..10b1d166141 --- /dev/null +++ b/test/language/expressions/unary-minus/bigint.js @@ -0,0 +1,34 @@ +// Copyright (C) 2017 Josh Wolfe. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +description: Unary minus for BigInt values +esid: sec-numeric-types-bigint-unaryMinus +info: | + BigInt::unaryMinus (x) + + The abstract operation BigInt::unaryMinus with an argument x of BigInt type returns the result of negating x. + + Note: There is only one 0n value; -0n is the same as 0n. + +features: [BigInt] +---*/ + +assert.sameValue(-0n, 0n, "-0n === 0n"); +assert.sameValue(-(0n), 0n, "-(0n) === 0n"); +assert.notSameValue(-1n, 1n, "-1n !== 1n"); +assert.sameValue(-(1n), -1n, "-(1n) === -1n"); +assert.notSameValue(-(1n), 1n, "-(1n) !== 1n"); +assert.sameValue(-(-1n), 1n, "-(-1n) === 1n"); +assert.notSameValue(-(-1n), -1n, "-(-1n) !== -1n"); +assert.sameValue(- - 1n, 1n, "- - 1n === 1n"); +assert.notSameValue(- - 1n, -1n, "- - 1n !== -1n"); +assert.sameValue( + -(0x1fffffffffffff01n), -0x1fffffffffffff01n, + "-(0x1fffffffffffff01n) === -0x1fffffffffffff01n"); +assert.notSameValue( + -(0x1fffffffffffff01n), 0x1fffffffffffff01n, + "-(0x1fffffffffffff01n) !== 0x1fffffffffffff01n"); +assert.notSameValue( + -(0x1fffffffffffff01n), -0x1fffffffffffff00n, + "-(0x1fffffffffffff01n) !== -0x1fffffffffffff00n");