mirror of https://github.com/tc39/test262.git
Test exact precision for DurationFormat
`Intl.DurationFormat` is currently spec'ed to use unlimited precision. See: https://github.com/tc39/proposal-intl-duration-format/issues/157
This commit is contained in:
parent
71091f1541
commit
c9548956f9
93
test/intl402/DurationFormat/prototype/format/precision-exact-mathematical-values.js
vendored
Normal file
93
test/intl402/DurationFormat/prototype/format/precision-exact-mathematical-values.js
vendored
Normal file
|
@ -0,0 +1,93 @@
|
|||
// Copyright (C) 2023 André Bargull. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-Intl.DurationFormat.prototype.format
|
||||
description: >
|
||||
PartitionDurationFormatPattern computes on exact mathematical values.
|
||||
info: |
|
||||
PartitionDurationFormatPattern ( durationFormat, duration )
|
||||
...
|
||||
4. While done is false, repeat for each row in Table 1 in order, except the header row:
|
||||
...
|
||||
j. If unit is "seconds", "milliseconds", or "microseconds", then
|
||||
i. If unit is "seconds", then
|
||||
1. Let nextStyle be durationFormat.[[MillisecondsStyle]].
|
||||
...
|
||||
iv. If nextStyle is "numeric", then
|
||||
1. If unit is "seconds", then
|
||||
a. Set value to value + duration.[[Milliseconds]] / 10^3 + duration.[[Microseconds]] / 10^6 + duration.[[Nanoseconds]] / 10^9.
|
||||
...
|
||||
l. If value is not 0 or display is not "auto", then
|
||||
ii. If style is "2-digit" or "numeric", then
|
||||
...
|
||||
7. Let parts be ! PartitionNumberPattern(nf, value).
|
||||
...
|
||||
|
||||
locale: [en-US]
|
||||
includes: [testIntl.js]
|
||||
features: [Intl.DurationFormat]
|
||||
---*/
|
||||
|
||||
const durations = [
|
||||
// 10000000 + (1 / 10^9)
|
||||
// = 10000000.000000001
|
||||
{
|
||||
seconds: 10_000_000,
|
||||
nanoseconds: 1,
|
||||
},
|
||||
|
||||
// 9007199254740991 + (9007199254740991 / 10^3) + (9007199254740991 / 10^6) + (9007199254740991 / 10^9)
|
||||
// = 9.016215470202185986731991 × 10^15
|
||||
{
|
||||
seconds: Number.MAX_SAFE_INTEGER,
|
||||
milliseconds: Number.MAX_SAFE_INTEGER,
|
||||
microseconds: Number.MAX_SAFE_INTEGER,
|
||||
nanoseconds: Number.MAX_SAFE_INTEGER,
|
||||
},
|
||||
{
|
||||
seconds: Number.MIN_SAFE_INTEGER,
|
||||
milliseconds: Number.MIN_SAFE_INTEGER,
|
||||
microseconds: Number.MIN_SAFE_INTEGER,
|
||||
nanoseconds: Number.MIN_SAFE_INTEGER,
|
||||
},
|
||||
|
||||
// 1 + (2 / 10^3) + (3 / 10^6) + (9007199254740991 / 10^9)
|
||||
// = 9.007200256743991 × 10^6
|
||||
{
|
||||
seconds: 1,
|
||||
milliseconds: 2,
|
||||
microseconds: 3,
|
||||
nanoseconds: Number.MAX_SAFE_INTEGER,
|
||||
},
|
||||
|
||||
// 9007199254740991 + (10^3 / 10^3) + (10^6 / 10^6) + (10^9 / 10^9)
|
||||
// = 9007199254740991 + 3
|
||||
// = 9007199254740994
|
||||
{
|
||||
seconds: Number.MAX_SAFE_INTEGER,
|
||||
milliseconds: 10 ** 3,
|
||||
microseconds: 10 ** 6,
|
||||
nanoseconds: 10 ** 9,
|
||||
},
|
||||
|
||||
// ~1.7976931348623157e+308 / 10^9
|
||||
// = ~1.7976931348623157 × 10^299
|
||||
{
|
||||
seconds: 0,
|
||||
milliseconds: 0,
|
||||
microseconds: 0,
|
||||
nanoseconds: Number.MAX_VALUE,
|
||||
},
|
||||
];
|
||||
|
||||
const df = new Intl.DurationFormat("en", {style: "digital"});
|
||||
|
||||
for (let duration of durations) {
|
||||
let expected = formatDurationFormatPattern(duration, "digital");
|
||||
assert.sameValue(
|
||||
df.format(duration),
|
||||
expected,
|
||||
`Duration is ${JSON.stringify(duration)}`
|
||||
);
|
||||
}
|
Loading…
Reference in New Issue