tor-browser

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

throws-on-non-number.js (1766B)


      1 // |reftest| skip-if(!Math.sumPrecise) -- Math.sumPrecise is not enabled unconditionally
      2 // Copyright (C) 2024 Kevin Gibbons. All rights reserved.
      3 // This code is governed by the BSD license found in the LICENSE file.
      4 
      5 /*---
      6 esid: sec-math.sumprecise
      7 description: Math.sumPrecise throws and closes the iterator if any element is not a Number
      8 features: [Math.sumPrecise]
      9 ---*/
     10 
     11 assert.throws(TypeError, function () {
     12  Math.sumPrecise([{}]);
     13 });
     14 
     15 assert.throws(TypeError, function () {
     16  Math.sumPrecise([0n]);
     17 });
     18 
     19 
     20 var coercions = 0;
     21 var objectWithValueOf = {
     22  valueOf: function() {
     23    ++coercions;
     24    throw new Test262Error("valueOf should not be called");
     25  },
     26  toString: function() {
     27    ++coercions;
     28    throw new Test262Error("toString should not be called");
     29  }
     30 };
     31 
     32 assert.throws(TypeError, function () {
     33  Math.sumPrecise([objectWithValueOf]);
     34 });
     35 assert.sameValue(coercions, 0);
     36 
     37 assert.throws(TypeError, function () {
     38  Math.sumPrecise([objectWithValueOf, NaN]);
     39 });
     40 assert.sameValue(coercions, 0);
     41 
     42 assert.throws(TypeError, function () {
     43  Math.sumPrecise([NaN, objectWithValueOf]);
     44 });
     45 assert.sameValue(coercions, 0);
     46 
     47 assert.throws(TypeError, function () {
     48  Math.sumPrecise([-Infinity, Infinity, objectWithValueOf]);
     49 });
     50 assert.sameValue(coercions, 0);
     51 
     52 var nextCalls = 0;
     53 var returnCalls = 0;
     54 var iterator = {
     55  next: function () {
     56    ++nextCalls;
     57    return { done: false, value: objectWithValueOf };
     58  },
     59  return: function () {
     60    ++returnCalls;
     61    return {};
     62  }
     63 };
     64 var iterable = {
     65  [Symbol.iterator]: function () {
     66    return iterator;
     67  }
     68 };
     69 
     70 assert.throws(TypeError, function () {
     71  Math.sumPrecise(iterable);
     72 });
     73 assert.sameValue(coercions, 0);
     74 assert.sameValue(nextCalls, 1);
     75 assert.sameValue(returnCalls, 1);
     76 
     77 reportCompare(0, 0);