// 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');