tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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