summaryrefslogtreecommitdiffstats
path: root/js/src/tests/non262/Intl/NumberFormat/formatRange-BigInt.js
blob: f856073b710200c5861909a0ca48858b546d1f4c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
// |reftest| skip-if(!this.hasOwnProperty("Intl"))

// Int64-BigInts which can be exactly represented as doubles receive a fast-path.

const tests = {
  "en": {
    options: {},
    ranges: [
      // BigInt around Number.MIN_SAFE_INTEGER.
      {
        start: -0x20000000000001n,
        end: -0x20000000000000n,
        result: "-9,007,199,254,740,993 – -9,007,199,254,740,992",
      },
      {
        start: -0x20000000000000n,
        end: -0x20000000000000n,
        result: "~-9,007,199,254,740,992",
      },
      {
        start: -0x20000000000000n,
        end: -0x1fffffffffffffn,
        result: "-9,007,199,254,740,992 – -9,007,199,254,740,991",
      },
      {
        start: -0x1fffffffffffffn,
        end: -0x1fffffffffffffn,
        result: "~-9,007,199,254,740,991",
      },
      {
        start: -0x1fffffffffffffn,
        end: -0x1ffffffffffffen,
        result: "-9,007,199,254,740,991 – -9,007,199,254,740,990",
      },
      {
        start: -0x1ffffffffffffen,
        end: -0x1ffffffffffffen,
        result: "~-9,007,199,254,740,990",
      },

      // BigInt around Number.MAX_SAFE_INTEGER.
      {
        start: 0x1ffffffffffffen,
        end: 0x1ffffffffffffen,
        result: "~9,007,199,254,740,990",
      },
      {
        start: 0x1ffffffffffffen,
        end: 0x1fffffffffffffn,
        result: "9,007,199,254,740,990–9,007,199,254,740,991",
      },
      {
        start: 0x1fffffffffffffn,
        end: 0x1fffffffffffffn,
        result: "~9,007,199,254,740,991",
      },
      {
        start: 0x1fffffffffffffn,
        end: 0x20000000000000n,
        result: "9,007,199,254,740,991–9,007,199,254,740,992",
      },
      {
        start: 0x20000000000000n,
        end: 0x20000000000000n,
        result: "~9,007,199,254,740,992",
      },
      {
        start: 0x20000000000000n,
        end: 0x20000000000001n,
        result: "9,007,199,254,740,992–9,007,199,254,740,993",
      },

      // BigInt around INT64_MIN.
      {
        start: -0x8000000000000002n,
        end: -0x8000000000000001n,
        result: "-9,223,372,036,854,775,810 – -9,223,372,036,854,775,809",
      },
      {
        start: -0x8000000000000001n,
        end: -0x8000000000000001n,
        result: "~-9,223,372,036,854,775,809",
      },
      {
        start: -0x8000000000000001n,
        end: -0x8000000000000000n,
        result: "-9,223,372,036,854,775,809 – -9,223,372,036,854,775,808",
      },
      {
        start: -0x8000000000000000n,
        end: -0x8000000000000000n,
        result: "~-9,223,372,036,854,775,808",
      },
      {
        start: -0x8000000000000000n,
        end: -0x7fffffffffffffffn,
        result: "-9,223,372,036,854,775,808 – -9,223,372,036,854,775,807",
      },
      {
        start: -0x7fffffffffffffffn,
        end: -0x7fffffffffffffffn,
        result: "~-9,223,372,036,854,775,807",
      },

      // BigInt around INT64_MAX.
      {
        start: 0x7ffffffffffffffen,
        end: 0x7ffffffffffffffen,
        result: "~9,223,372,036,854,775,806",
      },
      {
        start: 0x7ffffffffffffffen,
        end: 0x7fffffffffffffffn,
        result: "9,223,372,036,854,775,806–9,223,372,036,854,775,807",
      },
      {
        start: 0x7fffffffffffffffn,
        end: 0x7fffffffffffffffn,
        result: "~9,223,372,036,854,775,807",
      },
      {
        start: 0x7fffffffffffffffn,
        end: 0x8000000000000000n,
        result: "9,223,372,036,854,775,807–9,223,372,036,854,775,808",
      },
      {
        start: 0x8000000000000000n,
        end: 0x8000000000000000n,
        result: "~9,223,372,036,854,775,808",
      },
      {
        start: 0x8000000000000000n,
        end: 0x8000000000000001n,
        result: "9,223,372,036,854,775,808–9,223,372,036,854,775,809",
      },
    ],
  },
};

for (let [locale, {options, ranges}] of Object.entries(tests)) {
  let nf = new Intl.NumberFormat(locale, options);
  for (let {start, end, result} of ranges) {
    assertEq(nf.formatRange(start, end), result, `${start}-${end}`);
    assertEq(nf.formatRangeToParts(start, end).reduce((acc, part) => acc + part.value, ""),
             result, `${start}-${end}`);
  }
}

if (typeof reportCompare === "function")
  reportCompare(true, true);