Temporal: Add test for balancing up to weeks when year/month are present (#4305)

See tc39/proposal-temporal#2813
This commit is contained in:
Tim Chevalier 2024-12-03 14:08:20 -08:00 committed by GitHub
parent 4053ff2eaf
commit 901dd6e920
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 70 additions and 0 deletions

View File

@ -0,0 +1,70 @@
// Copyright (C) 2024 Igalia, S.L. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
esid: sec-temporal.duration.prototype.round
description: Rounds up to weeks correctly when years and months are present.
includes: [temporalHelpers.js]
features: [Temporal]
---*/
const oneMonthOneDay = new Temporal.Duration(0, 1, 0, 1, 0, 0, 0, 0, 0, 0);
const oneYearOneMonthOneDay = new Temporal.Duration(1, 1, 0, 1, 0, 0, 0, 0, 0, 0);
const severalWeeksInDays = new Temporal.Duration(0, 0, 0, 29, 0, 0, 0, 0, 0, 0);
const relativeTo = new Temporal.PlainDate(2024, 1, 1);
// largestUnit must be included
assert.throws(RangeError, () => oneMonthOneDay.round({
relativeTo,
smallestUnit: 'weeks',
roundingIncrement: 99,
roundingMode: 'ceil'
}));
TemporalHelpers.assertDuration(oneMonthOneDay.round({
relativeTo,
largestUnit: 'weeks',
smallestUnit: 'weeks',
roundingIncrement: 99,
roundingMode: 'ceil'
}), 0, 0, 99, 0, 0, 0, 0, 0, 0, 0);
TemporalHelpers.assertDuration(oneMonthOneDay.round({
relativeTo,
largestUnit: 'weeks',
smallestUnit: 'weeks',
roundingIncrement: 6,
roundingMode: 'ceil'
}), 0, 0, 6, 0, 0, 0, 0, 0, 0, 0);
TemporalHelpers.assertDuration(oneYearOneMonthOneDay.round({
relativeTo,
largestUnit: 'weeks',
smallestUnit: 'weeks',
roundingIncrement: 99,
roundingMode: 'ceil'
}), 0, 0, 99, 0, 0, 0, 0, 0, 0, 0);
TemporalHelpers.assertDuration(oneYearOneMonthOneDay.round({
relativeTo,
largestUnit: 'weeks',
smallestUnit: 'weeks',
roundingIncrement: 57,
roundingMode: 'ceil'
}), 0, 0, 57, 0, 0, 0, 0, 0, 0, 0);
TemporalHelpers.assertDuration(severalWeeksInDays.round({
relativeTo,
largestUnit: 'weeks',
smallestUnit: 'weeks',
roundingIncrement: 5,
roundingMode: 'ceil'
}), 0, 0, 5, 0, 0, 0, 0, 0, 0, 0);
TemporalHelpers.assertDuration(severalWeeksInDays.round({
relativeTo,
largestUnit: 'weeks',
smallestUnit: 'weeks',
roundingIncrement: 8,
roundingMode: 'ceil'
}), 0, 0, 8, 0, 0, 0, 0, 0, 0, 0);