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

/*---
es6id: 20.1.1.1
esid: sec-number-constructor-number-value
description: >
  Return abrupt from ToNumber(value)
info: |
  Number ( value )

  1. If no arguments were passed to this function invocation, let n be +0.
  2. Else, let n be ? ToNumber(value).
  [...]
---*/

var obj1 = {
  valueOf: function() {
    throw new Test262Error();
  }
};

var obj2 = {
  toString: function() {
    throw new Test262Error();
  }
};

assert.throws(Test262Error, function() {
  Number(obj1);
}, "NewTarget is undefined, {}.valueOf");

assert.throws(Test262Error, function() {
  Number(obj2);
}, "NewTarget is undefined, {}.toString");

assert.throws(Test262Error, function() {
  new Number(obj1);
}, "NewTarget is defined, {}.valueOf");

assert.throws(Test262Error, function() {
  new Number(obj2);
}, "NewTarget is defined, {}.toString");
