BigInt and Number type mismatch tests for infix operators

This commit is contained in:
Josh Wolfe 2018-01-18 11:21:31 -07:00 committed by Rick Waldron
parent f9d8b29ae4
commit 186ec5d177
12 changed files with 385 additions and 0 deletions

View File

@ -0,0 +1,33 @@
// 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");

View File

@ -0,0 +1,32 @@
// 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");

View File

@ -0,0 +1,32 @@
// 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");

View File

@ -0,0 +1,32 @@
// 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");

View File

@ -0,0 +1,32 @@
// 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");

View File

@ -0,0 +1,32 @@
// 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");

View File

@ -0,0 +1,32 @@
// 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");

View File

@ -0,0 +1,32 @@
// 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");

View File

@ -0,0 +1,32 @@
// 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");

View File

@ -0,0 +1,32 @@
// 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");

View File

@ -0,0 +1,32 @@
// 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");

View File

@ -0,0 +1,32 @@
// 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");