tor-browser

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

formatRange-BigInt.js (4265B)


      1 // |reftest| skip-if(!this.hasOwnProperty("Intl"))
      2 
      3 // Int64-BigInts which can be exactly represented as doubles receive a fast-path.
      4 
      5 const tests = {
      6  "en": {
      7    options: {},
      8    ranges: [
      9      // BigInt around Number.MIN_SAFE_INTEGER.
     10      {
     11        start: -0x20000000000001n,
     12        end: -0x20000000000000n,
     13        result: "-9,007,199,254,740,993 – -9,007,199,254,740,992",
     14      },
     15      {
     16        start: -0x20000000000000n,
     17        end: -0x20000000000000n,
     18        result: "~-9,007,199,254,740,992",
     19      },
     20      {
     21        start: -0x20000000000000n,
     22        end: -0x1fffffffffffffn,
     23        result: "-9,007,199,254,740,992 – -9,007,199,254,740,991",
     24      },
     25      {
     26        start: -0x1fffffffffffffn,
     27        end: -0x1fffffffffffffn,
     28        result: "~-9,007,199,254,740,991",
     29      },
     30      {
     31        start: -0x1fffffffffffffn,
     32        end: -0x1ffffffffffffen,
     33        result: "-9,007,199,254,740,991 – -9,007,199,254,740,990",
     34      },
     35      {
     36        start: -0x1ffffffffffffen,
     37        end: -0x1ffffffffffffen,
     38        result: "~-9,007,199,254,740,990",
     39      },
     40 
     41      // BigInt around Number.MAX_SAFE_INTEGER.
     42      {
     43        start: 0x1ffffffffffffen,
     44        end: 0x1ffffffffffffen,
     45        result: "~9,007,199,254,740,990",
     46      },
     47      {
     48        start: 0x1ffffffffffffen,
     49        end: 0x1fffffffffffffn,
     50        result: "9,007,199,254,740,990–9,007,199,254,740,991",
     51      },
     52      {
     53        start: 0x1fffffffffffffn,
     54        end: 0x1fffffffffffffn,
     55        result: "~9,007,199,254,740,991",
     56      },
     57      {
     58        start: 0x1fffffffffffffn,
     59        end: 0x20000000000000n,
     60        result: "9,007,199,254,740,991–9,007,199,254,740,992",
     61      },
     62      {
     63        start: 0x20000000000000n,
     64        end: 0x20000000000000n,
     65        result: "~9,007,199,254,740,992",
     66      },
     67      {
     68        start: 0x20000000000000n,
     69        end: 0x20000000000001n,
     70        result: "9,007,199,254,740,992–9,007,199,254,740,993",
     71      },
     72 
     73      // BigInt around INT64_MIN.
     74      {
     75        start: -0x8000000000000002n,
     76        end: -0x8000000000000001n,
     77        result: "-9,223,372,036,854,775,810 – -9,223,372,036,854,775,809",
     78      },
     79      {
     80        start: -0x8000000000000001n,
     81        end: -0x8000000000000001n,
     82        result: "~-9,223,372,036,854,775,809",
     83      },
     84      {
     85        start: -0x8000000000000001n,
     86        end: -0x8000000000000000n,
     87        result: "-9,223,372,036,854,775,809 – -9,223,372,036,854,775,808",
     88      },
     89      {
     90        start: -0x8000000000000000n,
     91        end: -0x8000000000000000n,
     92        result: "~-9,223,372,036,854,775,808",
     93      },
     94      {
     95        start: -0x8000000000000000n,
     96        end: -0x7fffffffffffffffn,
     97        result: "-9,223,372,036,854,775,808 – -9,223,372,036,854,775,807",
     98      },
     99      {
    100        start: -0x7fffffffffffffffn,
    101        end: -0x7fffffffffffffffn,
    102        result: "~-9,223,372,036,854,775,807",
    103      },
    104 
    105      // BigInt around INT64_MAX.
    106      {
    107        start: 0x7ffffffffffffffen,
    108        end: 0x7ffffffffffffffen,
    109        result: "~9,223,372,036,854,775,806",
    110      },
    111      {
    112        start: 0x7ffffffffffffffen,
    113        end: 0x7fffffffffffffffn,
    114        result: "9,223,372,036,854,775,806–9,223,372,036,854,775,807",
    115      },
    116      {
    117        start: 0x7fffffffffffffffn,
    118        end: 0x7fffffffffffffffn,
    119        result: "~9,223,372,036,854,775,807",
    120      },
    121      {
    122        start: 0x7fffffffffffffffn,
    123        end: 0x8000000000000000n,
    124        result: "9,223,372,036,854,775,807–9,223,372,036,854,775,808",
    125      },
    126      {
    127        start: 0x8000000000000000n,
    128        end: 0x8000000000000000n,
    129        result: "~9,223,372,036,854,775,808",
    130      },
    131      {
    132        start: 0x8000000000000000n,
    133        end: 0x8000000000000001n,
    134        result: "9,223,372,036,854,775,808–9,223,372,036,854,775,809",
    135      },
    136    ],
    137  },
    138 };
    139 
    140 for (let [locale, {options, ranges}] of Object.entries(tests)) {
    141  let nf = new Intl.NumberFormat(locale, options);
    142  for (let {start, end, result} of ranges) {
    143    assertEq(nf.formatRange(start, end), result, `${start}-${end}`);
    144    assertEq(nf.formatRangeToParts(start, end).reduce((acc, part) => acc + part.value, ""),
    145             result, `${start}-${end}`);
    146  }
    147 }
    148 
    149 if (typeof reportCompare === "function")
    150  reportCompare(true, true);