Skip to content

Commit 66bf8b8

Browse files
authored
Temporal: Add coverage for adding durations with large subsecond values to a PlainTime (#4625)
* Temporal: Add coverage for adding durations with large subsecond values to a PlainTime * Add tests for PlainDateTime and ZonedDateTime
1 parent 678c434 commit 66bf8b8

File tree

6 files changed

+135
-0
lines changed

6 files changed

+135
-0
lines changed
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
// Copyright (C) 2025 Igalia, S.L. All rights reserved.
2+
// This code is governed by the BSD license found in the LICENSE file.
3+
4+
/*---
5+
esid: sec-temporal.plaindatetime.prototype.add
6+
description: Adding unbalanced durations with large subsecond values to a datetime
7+
includes: [temporalHelpers.js]
8+
features: [Temporal]
9+
---*/
10+
11+
const t = new Temporal.PlainDateTime(0, 1, 1);
12+
const bigNumber = 9007199254740990976;
13+
assert.throws(RangeError, () => t.add(Temporal.Duration.from({milliseconds: bigNumber})));
14+
assert.throws(RangeError, () => t.add(Temporal.Duration.from({milliseconds: -bigNumber})));
15+
assert.throws(RangeError, () => t.add(Temporal.Duration.from({microseconds: bigNumber})));
16+
assert.throws(RangeError, () => t.add(Temporal.Duration.from({microseconds: -bigNumber})));
17+
18+
TemporalHelpers.assertPlainDateTime(t.add(Temporal.Duration.from({nanoseconds: bigNumber})),
19+
285, 6, "M06", 4, 23, 47, 34, 740, 990, 976);
20+
TemporalHelpers.assertPlainDateTime(t.add(Temporal.Duration.from({nanoseconds: -bigNumber})),
21+
-286, 7, "M07", 29, 0, 12, 25, 259, 9, 24);
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
// Copyright (C) 2025 Igalia, S.L. All rights reserved.
2+
// This code is governed by the BSD license found in the LICENSE file.
3+
4+
/*---
5+
esid: sec-temporal.plaindatetime.prototype.subtract
6+
description: Subtracting unbalanced durations with large subsecond values from a datetime
7+
includes: [temporalHelpers.js]
8+
features: [Temporal]
9+
---*/
10+
11+
const t = new Temporal.PlainDateTime(0, 1, 1);
12+
const bigNumber = 9007199254740990976;
13+
assert.throws(RangeError, () => t.subtract(Temporal.Duration.from({milliseconds: bigNumber})));
14+
assert.throws(RangeError, () => t.subtract(Temporal.Duration.from({milliseconds: -bigNumber})));
15+
assert.throws(RangeError, () => t.subtract(Temporal.Duration.from({microseconds: bigNumber})));
16+
assert.throws(RangeError, () => t.subtract(Temporal.Duration.from({microseconds: -bigNumber})));
17+
18+
TemporalHelpers.assertPlainDateTime(t.subtract(Temporal.Duration.from({nanoseconds: bigNumber})),
19+
-286, 7, "M07", 29, 0, 12, 25, 259, 9, 24);
20+
TemporalHelpers.assertPlainDateTime(t.subtract(Temporal.Duration.from({nanoseconds: -bigNumber})),
21+
285, 6, "M06", 4, 23, 47, 34, 740, 990, 976);
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
// Copyright (C) 2025 Igalia, S.L. All rights reserved.
2+
// This code is governed by the BSD license found in the LICENSE file.
3+
4+
/*---
5+
esid: sec-temporal.plaintime.prototype.add
6+
description: Adding unbalanced durations with large subsecond values to a time
7+
includes: [temporalHelpers.js]
8+
features: [Temporal]
9+
---*/
10+
11+
const t = new Temporal.PlainTime(0);
12+
const bigNumber = 9007199254740990976;
13+
TemporalHelpers.assertPlainTime(t.add(Temporal.Duration.from({milliseconds: bigNumber})),
14+
7, 36, 30, 976, 0, 0);
15+
TemporalHelpers.assertPlainTime(t.add(Temporal.Duration.from({milliseconds: -bigNumber})),
16+
16, 23, 29, 24, 0, 0);
17+
18+
TemporalHelpers.assertPlainTime(t.add(Temporal.Duration.from({microseconds: bigNumber})),
19+
8, 59, 0, 990, 976, 0);
20+
TemporalHelpers.assertPlainTime(t.add(Temporal.Duration.from({microseconds: -bigNumber})),
21+
15, 0, 59, 9, 24, 0);
22+
23+
TemporalHelpers.assertPlainTime(t.add(Temporal.Duration.from({nanoseconds: bigNumber})),
24+
23, 47, 34, 740, 990, 976);
25+
TemporalHelpers.assertPlainTime(t.add(Temporal.Duration.from({nanoseconds: -bigNumber})),
26+
0, 12, 25, 259, 9, 24);
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
// Copyright (C) 2025 Igalia, S.L. All rights reserved.
2+
// This code is governed by the BSD license found in the LICENSE file.
3+
4+
/*---
5+
esid: sec-temporal.plaintime.prototype.subtract
6+
description: Subtracting unbalanced durations with large subsecond values from a time
7+
includes: [temporalHelpers.js]
8+
features: [Temporal]
9+
---*/
10+
11+
const t = new Temporal.PlainTime(0);
12+
const bigNumber = 9007199254740990976;
13+
TemporalHelpers.assertPlainTime(t.subtract(Temporal.Duration.from({milliseconds: bigNumber})),
14+
16, 23, 29, 24, 0, 0);
15+
TemporalHelpers.assertPlainTime(t.subtract(Temporal.Duration.from({milliseconds: -bigNumber})),
16+
7, 36, 30, 976, 0, 0);
17+
18+
TemporalHelpers.assertPlainTime(t.subtract(Temporal.Duration.from({microseconds: bigNumber})),
19+
15, 0, 59, 9, 24, 0);
20+
TemporalHelpers.assertPlainTime(t.subtract(Temporal.Duration.from({microseconds: -bigNumber})),
21+
8, 59, 0, 990, 976, 0);
22+
23+
TemporalHelpers.assertPlainTime(t.subtract(Temporal.Duration.from({nanoseconds: bigNumber})),
24+
0, 12, 25, 259, 9, 24);
25+
TemporalHelpers.assertPlainTime(t.subtract(Temporal.Duration.from({nanoseconds: -bigNumber})),
26+
23, 47, 34, 740, 990, 976);
27+
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
// Copyright (C) 2025 Igalia, S.L. All rights reserved.
2+
// This code is governed by the BSD license found in the LICENSE file.
3+
4+
/*---
5+
esid: sec-temporal.zoneddatetime.prototype.add
6+
description: Adding unbalanced durations with large subsecond values to a datetime
7+
features: [Temporal]
8+
---*/
9+
10+
const z = new Temporal.ZonedDateTime(0n, "UTC");
11+
const bigNumber = 9007199254740990976;
12+
assert.throws(RangeError, () => z.add(Temporal.Duration.from({milliseconds: bigNumber})));
13+
assert.throws(RangeError, () => z.add(Temporal.Duration.from({milliseconds: -bigNumber})));
14+
assert.throws(RangeError, () => z.add(Temporal.Duration.from({microseconds: bigNumber})));
15+
assert.throws(RangeError, () => z.add(Temporal.Duration.from({microseconds: -bigNumber})));
16+
17+
assert.sameValue(z.add(Temporal.Duration.from({nanoseconds: bigNumber})).epochNanoseconds,
18+
9007199254740990976n);
19+
assert.sameValue(z.add(Temporal.Duration.from({nanoseconds: -bigNumber})).epochNanoseconds,
20+
-9007199254740990976n);
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
// Copyright (C) 2025 Igalia, S.L. All rights reserved.
2+
// This code is governed by the BSD license found in the LICENSE file.
3+
4+
/*---
5+
esid: sec-temporal.zoneddatetime.prototype.add
6+
description: Subtracting unbalanced durations with large subsecond values from a datetime
7+
features: [Temporal]
8+
---*/
9+
10+
const z = new Temporal.ZonedDateTime(0n, "UTC");
11+
const bigNumber = 9007199254740990976;
12+
assert.throws(RangeError, () => z.add(Temporal.Duration.from({milliseconds: bigNumber})));
13+
assert.throws(RangeError, () => z.add(Temporal.Duration.from({milliseconds: -bigNumber})));
14+
assert.throws(RangeError, () => z.add(Temporal.Duration.from({microseconds: bigNumber})));
15+
assert.throws(RangeError, () => z.add(Temporal.Duration.from({microseconds: -bigNumber})));
16+
17+
assert.sameValue(z.subtract(Temporal.Duration.from({nanoseconds: bigNumber})).epochNanoseconds,
18+
-9007199254740990976n);
19+
assert.sameValue(z.subtract(Temporal.Duration.from({nanoseconds: -bigNumber})).epochNanoseconds,
20+
9007199254740990976n);

0 commit comments

Comments
 (0)