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/left-shift/bigint-non-primitive.js | |
parent | Initial commit. (diff) | |
download | firefox-2aa4a82499d4becd2284cdb482213d541b8804dd.tar.xz firefox-2aa4a82499d4becd2284cdb482213d541b8804dd.zip |
Adding upstream version 86.0.1.upstream/86.0.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'js/src/tests/test262/language/expressions/left-shift/bigint-non-primitive.js')
-rw-r--r-- | js/src/tests/test262/language/expressions/left-shift/bigint-non-primitive.js | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/js/src/tests/test262/language/expressions/left-shift/bigint-non-primitive.js b/js/src/tests/test262/language/expressions/left-shift/bigint-non-primitive.js new file mode 100644 index 0000000000..2ecd5f2c0e --- /dev/null +++ b/js/src/tests/test262/language/expressions/left-shift/bigint-non-primitive.js @@ -0,0 +1,89 @@ +// Copyright (C) 2017 Josh Wolfe. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +description: Left shift for non-primitive BigInt values +esid: sec-left-shift-operator-runtime-semantics-evaluation +info: | + ShiftExpression : ShiftExpression << AdditiveExpression + + 1. Let lref be the result of evaluating ShiftExpression. + 2. Let lval be ? GetValue(lref). + 3. Let rref be the result of evaluating AdditiveExpression. + 4. Let rval be ? GetValue(rref). + 5. Let lnum be ? ToNumeric(lval). + 6. Let rnum be ? ToNumeric(rval). + 7. If Type(lnum) does not equal Type(rnum), throw a TypeError exception. + 8. Let T be Type(lnum). + 9. Return T::leftShift(lnum, rnum). + +features: [BigInt, Symbol.toPrimitive] +---*/ +assert.sameValue(Object(0b101n) << 1n, 0b1010n, 'The result of (Object(0b101n) << 1n) is 0b1010n'); + +assert.sameValue( + Object(0b101n) << Object(1n), + 0b1010n, + 'The result of (Object(0b101n) << Object(1n)) is 0b1010n' +); + +function err() { + throw new Test262Error(); +} + +assert.sameValue({ + [Symbol.toPrimitive]: function() { + return 0b101n; + }, + + valueOf: err, + toString: err +} << 1n, 0b1010n, 'The result of (({[Symbol.toPrimitive]: function() {return 0b101n;}, valueOf: err, toString: err}) << 1n) is 0b1010n'); + +assert.sameValue({ + valueOf: function() { + return 0b101n; + }, + + toString: err +} << 1n, 0b1010n, 'The result of (({valueOf: function() {return 0b101n;}, toString: err}) << 1n) is 0b1010n'); + +assert.sameValue({ + toString: function() { + return 0b101n; + } +} << 1n, 0b1010n, 'The result of (({toString: function() {return 0b101n;}}) << 1n) is 0b1010n'); + +assert.sameValue(0b101n << { + [Symbol.toPrimitive]: function() { + return 1n; + }, + + valueOf: err, + toString: err +}, 0b1010n, 'The result of (0b101n << {[Symbol.toPrimitive]: function() {return 1n;}, valueOf: err, toString: err}) is 0b1010n'); + +assert.sameValue(0b101n << { + valueOf: function() { + return 1n; + }, + + toString: err +}, 0b1010n, 'The result of (0b101n << {valueOf: function() {return 1n;}, toString: err}) is 0b1010n'); + +assert.sameValue(0b101n << { + toString: function() { + return 1n; + } +}, 0b1010n, 'The result of (0b101n << {toString: function() {return 1n;}}) is 0b1010n'); + +assert.sameValue({ + valueOf: function() { + return 0b101n; + } +} << { + valueOf: function() { + return 1n; + } +}, 0b1010n, 'The result of (({valueOf: function() {return 0b101n;}}) << {valueOf: function() {return 1n;}}) is 0b1010n'); + +reportCompare(0, 0); |