Skip to content
Snippets Groups Projects
Commit 186ec5d1 authored by Josh Wolfe's avatar Josh Wolfe Committed by Rick Waldron
Browse files

BigInt and Number type mismatch tests for infix operators

parent f9d8b29a
No related branches found
No related tags found
No related merge requests found
Showing
with 385 additions and 0 deletions
// Copyright (C) 2018 Igalia, S.L. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
esid: sec-addition-operator-plus-runtime-semantics-evaluation
description: Mixing BigInt and Number produces a TypeError for addition operator
features: [BigInt]
info: |
Let lprim be ? ToPrimitive(lval).
Let rprim be ? ToPrimitive(rval).
...
Let lnum be ? ToNumeric(lprim)
Let rnum be ? ToNumeric(rprim)
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 + 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");
// Copyright (C) 2018 Igalia, S.L. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
esid: sec-binary-bitwise-operators-runtime-semantics-evaluation
description: Mixing BigInt and Number produces a TypeError for bitwise-and 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");
// Copyright (C) 2018 Igalia, S.L. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
esid: sec-binary-bitwise-operators-runtime-semantics-evaluation
description: Mixing BigInt and Number produces a TypeError for bitwise-or 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");
// Copyright (C) 2018 Igalia, S.L. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
esid: sec-binary-bitwise-operators-runtime-semantics-evaluation
description: Mixing BigInt and Number produces a TypeError for bitwise-xor 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");
// Copyright (C) 2018 Igalia, S.L. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
esid: sec-multiplicative-operators-runtime-semantics-evaluation
description: Mixing BigInt and Number produces a TypeError for division 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");
// Copyright (C) 2018 Igalia, S.L. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
esid: sec-exp-operator-runtime-semantics-evaluation
description: Mixing BigInt and Number produces a TypeError for exponentiation operator
features: [BigInt]
info: |
Let base be ? ToNumeric(leftValue).
Let exponent be ? ToNumeric(rightValue).
If Type(base) does not equal Type(exponent), 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");
// Copyright (C) 2018 Igalia, S.L. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
esid: sec-left-shift-operator-runtime-semantics-evaluation
description: Mixing BigInt and Number produces a TypeError for left-shift 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");
// Copyright (C) 2018 Igalia, S.L. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
esid: sec-multiplicative-operators-runtime-semantics-evaluation
description: Mixing BigInt and Number produces a TypeError for modulus 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");
// Copyright (C) 2018 Igalia, S.L. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
esid: sec-multiplicative-operators-runtime-semantics-evaluation
description: Mixing BigInt and Number produces a TypeError for multiplication 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");
// Copyright (C) 2018 Igalia, S.L. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
esid: sec-signed-right-shift-operator-runtime-semantics-evaluation
description: Mixing BigInt and Number produces a TypeError for right-shift 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");
// 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");
// Copyright (C) 2018 Igalia, S.L. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
esid: sec-unsigned-right-shift-operator-runtime-semantics-evaluation
description: Mixing BigInt and Number produces a TypeError for unsigned-right-shift 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");
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment