// Copyright 2009 the Sputnik authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- info: | Result of number conversion from object value is the result of conversion from primitive value es5id: 9.3_A5_T1 description: > new Number(), new Number(0), new Number(Number.NaN), new Number(null), new Number(void 0) and others convert to Number by explicit transformation ---*/ assert.sameValue(Number(new Number()), 0, 'Number(new Number()) must return 0'); assert.sameValue(Number(new Number(0)), 0, 'Number(new Number(0)) must return 0'); // CHECK#3 assert.sameValue(Number(new Number(NaN)), NaN, 'Number(new Number(NaN)) returns NaN'); assert.sameValue(Number(new Number(null)), 0, 'Number(new Number(null)) must return 0'); // CHECK#5 assert.sameValue(Number(new Number(void 0)), NaN, 'Number(new Number(void 0)) returns NaN'); assert.sameValue(Number(new Number(true)), 1, 'Number(new Number(true)) must return 1'); assert.sameValue(Number(new Number(false)), +0, 'Number(new Number(false)) must return +0'); assert.sameValue(Number(new Boolean(true)), 1, 'Number(new Boolean(true)) must return 1'); assert.sameValue(Number(new Boolean(false)), +0, 'Number(new Boolean(false)) must return +0'); // CHECK#10 assert.sameValue(Number(new Array(2, 4, 8, 16, 32)), NaN, 'Number(new Array(2, 4, 8, 16, 32)) returns NaN'); // CHECK#11 var myobj1 = { ToNumber: function() { return 12345; }, toString: function() { return "67890"; }, valueOf: function() { return "[object MyObj]"; } }; assert.sameValue(Number(myobj1), NaN, 'Number("{ToNumber: function() {return 12345;}, toString: function() {return "67890";}, valueOf: function() {return "[object MyObj]";}}) returns NaN'); // CHECK#12 var myobj2 = { ToNumber: function() { return 12345; }, toString: function() { return "67890"; }, valueOf: function() { return "9876543210"; } }; assert.sameValue( Number(myobj2), 9876543210, 'Number("{ToNumber: function() {return 12345;}, toString: function() {return "67890";}, valueOf: function() {return "9876543210";}}) must return 9876543210' ); // CHECK#13 var myobj3 = { ToNumber: function() { return 12345; }, toString: function() { return "[object MyObj]"; } }; assert.sameValue(Number(myobj3), NaN, 'Number("{ToNumber: function() {return 12345;}, toString: function() {return "[object MyObj]";}}) returns NaN'); // CHECK#14 var myobj4 = { ToNumber: function() { return 12345; }, toString: function() { return "67890"; } }; assert.sameValue( Number(myobj4), 67890, 'Number("{ToNumber: function() {return 12345;}, toString: function() {return "67890";}}) must return 67890' ); // CHECK#15 var myobj5 = { ToNumber: function() { return 12345; } }; assert.sameValue(Number(myobj5), NaN, 'Number({ToNumber: function() {return 12345;}}) returns NaN');