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