toprimitive-valid-result.js (2151B)
1 // Copyright (C) 2016 The V8 Project authors. All rights reserved. 2 // This code is governed by the BSD license found in the LICENSE file. 3 4 /*--- 5 esid: sec-isfinite-number 6 description: > 7 Use non-object value returned from @@toPrimitive method 8 info: | 9 isFinite (number) 10 11 1. Let num be ? ToNumber(number). 12 13 ToPrimitive ( input [ , PreferredType ] ) 14 15 [...] 16 4. Let exoticToPrim be ? GetMethod(input, @@toPrimitive). 17 5. If exoticToPrim is not undefined, then 18 a. Let result be ? Call(exoticToPrim, input, « hint »). 19 b. If Type(result) is not Object, return result. 20 features: [Symbol.toPrimitive] 21 ---*/ 22 23 var called = 0; 24 var obj = { 25 valueOf: function() { 26 called = NaN; 27 return Infinity; 28 }, 29 toString: function() { 30 called = NaN; 31 return Infinity; 32 } 33 }; 34 35 obj[Symbol.toPrimitive] = function() { 36 called += 1; 37 return 42; 38 }; 39 assert.sameValue(isFinite(obj), true, "use returned value - number"); 40 assert.sameValue(called, 1, "toPrimitive is called - number"); 41 42 called = 0; 43 obj[Symbol.toPrimitive] = function() { 44 called += 1; 45 return "42"; 46 }; 47 assert.sameValue(isFinite(obj), true, "use returned value - string"); 48 assert.sameValue(called, 1, "toPrimitive is called - string"); 49 50 called = 0; 51 obj[Symbol.toPrimitive] = function() { 52 called += 1; 53 return true; 54 }; 55 assert.sameValue(isFinite(obj), true, "use returned value - boolean true"); 56 assert.sameValue(called, 1, "toPrimitive is called - boolean true"); 57 58 called = 0; 59 obj[Symbol.toPrimitive] = function() { 60 called += 1; 61 return false; 62 }; 63 assert.sameValue(isFinite(obj), true, "use returned value - boolean false"); 64 assert.sameValue(called, 1, "toPrimitive is called - boolean false"); 65 66 called = 0; 67 obj[Symbol.toPrimitive] = function() { 68 called += 1; 69 return Infinity; 70 }; 71 assert.sameValue(isFinite(obj), false, "use returned value - Infinity"); 72 assert.sameValue(called, 1, "toPrimitive is called - Infinity"); 73 74 called = 0; 75 obj[Symbol.toPrimitive] = function() { 76 called += 1; 77 return -Infinity; 78 }; 79 assert.sameValue(isFinite(obj), false, "use returned value - -Infinity"); 80 assert.sameValue(called, 1, "toPrimitive is called - -Infinity"); 81 82 reportCompare(0, 0);