// Copyright (C) 2016 The V8 Project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
es6id: 18.2.3
esid: sec-isnan-number
description: >
  Throws a TypeError if number.@@toPrimitive is not null, undefined, or callable
info: |
  isNaN (number)

  1. Let num be ? ToNumber(number).

  ToPrimitive ( input [ , PreferredType ] )

  [...]
  4. Let exoticToPrim be ? GetMethod(input, @@toPrimitive).

  GetMethod (V, P)

  [...]
  2. Let func be ? GetV(V, P).
  3. If func is either undefined or null, return undefined.
  4. If IsCallable(func) is false, throw a TypeError exception.
features: [Symbol.toPrimitive]
---*/

var obj = {};

obj[Symbol.toPrimitive] = 42;
assert.throws(TypeError, function() {
  isNaN(obj);
}, "number");

obj[Symbol.toPrimitive] = "";
assert.throws(TypeError, function() {
  isNaN(obj);
}, "string");

obj[Symbol.toPrimitive] = true;
assert.throws(TypeError, function() {
  isNaN(obj);
}, "boolean");

obj[Symbol.toPrimitive] = Symbol.toPrimitive;
assert.throws(TypeError, function() {
  isNaN(obj);
}, "symbol");

obj[Symbol.toPrimitive] = {};
assert.throws(TypeError, function() {
  isNaN(obj);
}, "object");
