Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Temporal.Duration normalization tests, part 1 of 3 #3957

Merged
merged 4 commits into from
Nov 16, 2023

Conversation

ptomato
Copy link
Contributor

@ptomato ptomato commented Nov 6, 2023

(stacked on top of #3956, will rebase as appropriate)

This PR contains tests that cover a Temporal normative change that reached consensus in July 2023.
Normative PR: tc39/proposal-temporal#2722

Copy link
Contributor

@cjtenny cjtenny left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The only change I don't understand is the february leap year math - could you walk me through that? Happy to discuss offline in a call if that's easier

Copy link
Contributor

@cjtenny cjtenny left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Discussed offline: the february leap year rounding test was previously not testing what it stated. Temporal is supposed to use RFC 5545 arithmetic (add years, then months, then days) and wasn't correctly doing that in duration before; the normative changes fix that. Instead, the test will be changed to have a start date (1968-03-01) such that the date arithmetic ends in a leap month. The durations remain the same. Thanks @ptomato for walking through it with me!

Approved pending that change

A few results change because the algorithm previously used for rounding
didn't always add duration units to dates in RFC 5545 order, and we also
introduce a special case for rounding with largestUnit years or months and
smallestUnit weeks.
Tests with conditions that would trip a division by zero in
implementations if they didn't carefully implement the spec.
@ptomato
Copy link
Contributor Author

ptomato commented Nov 15, 2023

Thanks for the review. I've pushed a change addressing the comment about the February leap year test (I picked 1972-03-01 as the starting date instead of 1968-03-01, it works just as well with that) as well as incorporating results that changed from the largestUnit years/months + smallestUnit weeks workaround that came up in code review of tc39/proposal-temporal#2722.

Click to reveal a convenient diff of what changed
diff --git a/test/built-ins/Temporal/Duration/prototype/round/calendar-possibly-required.js b/test/built-ins/Temporal/Duration/prototype/round/calendar-possibly-required.js
index 84c88a69be..0d2a1098a6 100644
--- a/test/built-ins/Temporal/Duration/prototype/round/calendar-possibly-required.js
+++ b/test/built-ins/Temporal/Duration/prototype/round/calendar-possibly-required.js
@@ -45,8 +45,8 @@ assert.throws(
   "rounding a week Duration fails without largest/smallest unit"
 );
 
-TemporalHelpers.assertDuration(duration3.round(relativeToYears), 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, "round week duration to years");
-TemporalHelpers.assertDuration(duration3.round(relativeToMonths), 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, "round week duration to months");
+TemporalHelpers.assertDuration(duration3.round(relativeToYears), 0, 1, 0, 4, 0, 0, 0, 0, 0, 0, "round week duration to years");
+TemporalHelpers.assertDuration(duration3.round(relativeToMonths), 0, 1, 0, 4, 0, 0, 0, 0, 0, 0, "round week duration to months");
 TemporalHelpers.assertDuration(duration3.round(relativeToWeeks), 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, "round week duration to weeks");
 TemporalHelpers.assertDuration(duration3.round(relativeToDays), 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, "round week duration to days");
 
diff --git a/test/built-ins/Temporal/Duration/prototype/round/february-leap-year.js b/test/built-ins/Temporal/Duration/prototype/round/february-leap-year.js
index 5d21105ba9..bd7cd6b463 100644
--- a/test/built-ins/Temporal/Duration/prototype/round/february-leap-year.js
+++ b/test/built-ins/Temporal/Duration/prototype/round/february-leap-year.js
@@ -10,29 +10,29 @@ features: [Temporal]
 
 // Based on a test case by André Bargull <andre.bargull@gmail.com>
 
-// Note: February in a leap year.
-const relativeTo = new Temporal.PlainDate(1972, 2, 1);
+// Note: One day after February in a leap year.
+const relativeTo = new Temporal.PlainDate(1972, 3, 1);
 
 const options = {
   largestUnit: "years",
   relativeTo,
 };
 
-const twoDaysLessThanFourYears = new Temporal.Duration(3, 11, 0, 29);
+const twoDaysLessThanFourYears = new Temporal.Duration(3, 11, 0, 27);
 TemporalHelpers.assertDuration(
   twoDaysLessThanFourYears.round(options),
-  3, 11, 0, 29, 0, 0, 0, 0, 0, 0,
+  3, 11, 0, 27, 0, 0, 0, 0, 0, 0,
   "Two days less than four years starting in February in a leap year shouldn't balance up"
 );
 
-const oneDayLessThanFourYears = new Temporal.Duration(3, 11, 0, 30);
+const oneDayLessThanFourYears = new Temporal.Duration(3, 11, 0, 28);
 TemporalHelpers.assertDuration(
   oneDayLessThanFourYears.round(options),
-  3, 11, 0, 30, 0, 0, 0, 0, 0, 0,
+  3, 11, 0, 28, 0, 0, 0, 0, 0, 0,
   "One day less than four years starting in February in a leap year shouldn't balance up"
 );
 
-const fourYears = new Temporal.Duration(3, 11, 0, 31);
+const fourYears = new Temporal.Duration(3, 11, 0, 29);
 TemporalHelpers.assertDuration(
   fourYears.round(options),
   4, 0, 0, 0, 0, 0, 0, 0, 0, 0,
diff --git a/test/built-ins/Temporal/Duration/prototype/round/order-of-operations.js b/test/built-ins/Temporal/Duration/prototype/round/order-of-operations.js
index 76123dc6de..b42a868e63 100644
--- a/test/built-ins/Temporal/Duration/prototype/round/order-of-operations.js
+++ b/test/built-ins/Temporal/Duration/prototype/round/order-of-operations.js
@@ -424,10 +424,32 @@ const expectedOpsForUnbalanceRoundBalance = expectedOpsForZonedRelativeTo.concat
   "call options.relativeTo.calendar.dateAdd",    // 10.d
   "call options.relativeTo.calendar.dateUntil",  // 10.e
 ]);
-new Temporal.Duration(0, 1, 1).round(createOptionsObserver({ largestUnit: "months", smallestUnit: "weeks", relativeTo: zonedRelativeTo }));
+new Temporal.Duration(0, 1, 1).round(createOptionsObserver({ largestUnit: "years", smallestUnit: "weeks", relativeTo: zonedRelativeTo }));
 assert.compareArray(
   actual,
   expectedOpsForUnbalanceRoundBalance,
+  "order of operations with largestUnit = years, smallestUnit = weeks, and ZonedDateTime relativeTo"
+);
+actual.splice(0); // clear
+
+// code path that skips user code calls in BalanceDateDurationRelative due to
+// special case for largestUnit months and smallestUnit weeks
+const expectedOpsForWeeksSpecialCase = expectedOpsForZonedRelativeTo.concat([
+  // ToTemporalDate
+  "call options.relativeTo.timeZone.getOffsetNanosecondsFor",
+  // lookup in Duration.p.round
+  "get options.relativeTo.calendar.dateAdd",
+  "get options.relativeTo.calendar.dateUntil",
+  // RoundDuration → MoveRelativeZonedDateTime → AddZonedDateTime
+  "call options.relativeTo.calendar.dateAdd",
+  "call options.relativeTo.timeZone.getPossibleInstantsFor",   // 13. GetInstantFor
+  // RoundDuration
+  "call options.relativeTo.calendar.dateAdd",  // 14.p MoveRelativeDate
+]);
+new Temporal.Duration(0, 1, 1).round(createOptionsObserver({ largestUnit: "months", smallestUnit: "weeks", relativeTo: zonedRelativeTo }));
+assert.compareArray(
+  actual,
+  expectedOpsForWeeksSpecialCase,
   "order of operations with largestUnit = months, smallestUnit = weeks, and ZonedDateTime relativeTo"
 );
 actual.splice(0); // clear
diff --git a/test/built-ins/Temporal/Duration/prototype/round/roundingmode-ceil.js b/test/built-ins/Temporal/Duration/prototype/round/roundingmode-ceil.js
index 6da85af6b8..27306ed1df 100644
--- a/test/built-ins/Temporal/Duration/prototype/round/roundingmode-ceil.js
+++ b/test/built-ins/Temporal/Duration/prototype/round/roundingmode-ceil.js
@@ -9,19 +9,23 @@ features: [Temporal]
 ---*/
 
 const instance = new Temporal.Duration(5, 6, 7, 8, 40, 30, 20, 123, 987, 500);
-const relativeTo = new Temporal.PlainDate(2020, 1, 1);
+// Chosen such that 8 months forwards from relativeToForwards is the
+// same number of days as 8 months backwards from relativeToBackwards
+// (for convenience)
+const relativeToForwards = new Temporal.PlainDate(2020, 4, 1);
+const relativeToBackwards = new Temporal.PlainDate(2020, 12, 1);
 
 const expected = [
   ["years", [6], [-5]],
   ["months", [5, 8], [-5, -7]],
   ["weeks", [5, 6, 9], [-5, -6, -8]],
-  ["days", [5, 6, 7, 10], [-5, -6, -7, -9]],
-  ["hours", [5, 6, 7, 9, 17], [-5, -6, -7, -9, -16]],
-  ["minutes", [5, 6, 7, 9, 16, 31], [-5, -6, -7, -9, -16, -30]],
-  ["seconds", [5, 6, 7, 9, 16, 30, 21], [-5, -6, -7, -9, -16, -30, -20]],
-  ["milliseconds", [5, 6, 7, 9, 16, 30, 20, 124], [-5, -6, -7, -9, -16, -30, -20, -123]],
-  ["microseconds", [5, 6, 7, 9, 16, 30, 20, 123, 988], [-5, -6, -7, -9, -16, -30, -20, -123, -987]],
-  ["nanoseconds", [5, 6, 7, 9, 16, 30, 20, 123, 987, 500], [-5, -6, -7, -9, -16, -30, -20, -123, -987, -500]],
+  ["days", [5, 7, 0, 28], [-5, -7, 0, -27]],
+  ["hours", [5, 7, 0, 27, 17], [-5, -7, 0, -27, -16]],
+  ["minutes", [5, 7, 0, 27, 16, 31], [-5, -7, 0, -27, -16, -30]],
+  ["seconds", [5, 7, 0, 27, 16, 30, 21], [-5, -7, 0, -27, -16, -30, -20]],
+  ["milliseconds", [5, 7, 0, 27, 16, 30, 20, 124], [-5, -7, 0, -27, -16, -30, -20, -123]],
+  ["microseconds", [5, 7, 0, 27, 16, 30, 20, 123, 988], [-5, -7, 0, -27, -16, -30, -20, -123, -987]],
+  ["nanoseconds", [5, 7, 0, 27, 16, 30, 20, 123, 987, 500], [-5, -7, 0, -27, -16, -30, -20, -123, -987, -500]],
 ];
 
 const roundingMode = "ceil";
@@ -30,12 +34,12 @@ expected.forEach(([smallestUnit, expectedPositive, expectedNegative]) => {
   const [py, pm = 0, pw = 0, pd = 0, ph = 0, pmin = 0, ps = 0, pms = 0, pµs = 0, pns = 0] = expectedPositive;
   const [ny, nm = 0, nw = 0, nd = 0, nh = 0, nmin = 0, ns = 0, nms = 0, nµs = 0, nns = 0] = expectedNegative;
   TemporalHelpers.assertDuration(
-    instance.round({ smallestUnit, relativeTo, roundingMode }),
+    instance.round({ smallestUnit, relativeTo: relativeToForwards, roundingMode }),
     py, pm, pw, pd, ph, pmin, ps, pms, pµs, pns,
     `rounds to ${smallestUnit} (roundingMode = ${roundingMode}, positive case)`
   );
   TemporalHelpers.assertDuration(
-    instance.negated().round({ smallestUnit, relativeTo, roundingMode }),
+    instance.negated().round({ smallestUnit, relativeTo: relativeToBackwards, roundingMode }),
     ny, nm, nw, nd, nh, nmin, ns, nms, nµs, nns,
     `rounds to ${smallestUnit} (rounding mode = ${roundingMode}, negative case)`
   );
diff --git a/test/built-ins/Temporal/Duration/prototype/round/roundingmode-expand.js b/test/built-ins/Temporal/Duration/prototype/round/roundingmode-expand.js
index 86e9ee64aa..1119637349 100644
--- a/test/built-ins/Temporal/Duration/prototype/round/roundingmode-expand.js
+++ b/test/built-ins/Temporal/Duration/prototype/round/roundingmode-expand.js
@@ -9,19 +9,23 @@ features: [Temporal]
 ---*/
 
 const instance = new Temporal.Duration(5, 6, 7, 8, 40, 30, 20, 123, 987, 500);
-const relativeTo = new Temporal.PlainDate(2020, 1, 1);
+// Chosen such that 8 months forwards from relativeToForwards is the
+// same number of days as 8 months backwards from relativeToBackwards
+// (for convenience)
+const relativeToForwards = new Temporal.PlainDate(2020, 4, 1);
+const relativeToBackwards = new Temporal.PlainDate(2020, 12, 1);
 
 const expected = [
   ["years", [6], [-6]],
   ["months", [5, 8], [-5, -8]],
   ["weeks", [5, 6, 9], [-5, -6, -9]],
-  ["days", [5, 6, 7, 10], [-5, -6, -7, -10]],
-  ["hours", [5, 6, 7, 9, 17], [-5, -6, -7, -9, -17]],
-  ["minutes", [5, 6, 7, 9, 16, 31], [-5, -6, -7, -9, -16, -31]],
-  ["seconds", [5, 6, 7, 9, 16, 30, 21], [-5, -6, -7, -9, -16, -30, -21]],
-  ["milliseconds", [5, 6, 7, 9, 16, 30, 20, 124], [-5, -6, -7, -9, -16, -30, -20, -124]],
-  ["microseconds", [5, 6, 7, 9, 16, 30, 20, 123, 988], [-5, -6, -7, -9, -16, -30, -20, -123, -988]],
-  ["nanoseconds", [5, 6, 7, 9, 16, 30, 20, 123, 987, 500], [-5, -6, -7, -9, -16, -30, -20, -123, -987, -500]],
+  ["days", [5, 7, 0, 28], [-5, -7, 0, -28]],
+  ["hours", [5, 7, 0, 27, 17], [-5, -7, 0, -27, -17]],
+  ["minutes", [5, 7, 0, 27, 16, 31], [-5, -7, 0, -27, -16, -31]],
+  ["seconds", [5, 7, 0, 27, 16, 30, 21], [-5, -7, 0, -27, -16, -30, -21]],
+  ["milliseconds", [5, 7, 0, 27, 16, 30, 20, 124], [-5, -7, 0, -27, -16, -30, -20, -124]],
+  ["microseconds", [5, 7, 0, 27, 16, 30, 20, 123, 988], [-5, -7, 0, -27, -16, -30, -20, -123, -988]],
+  ["nanoseconds", [5, 7, 0, 27, 16, 30, 20, 123, 987, 500], [-5, -7, 0, -27, -16, -30, -20, -123, -987, -500]],
 ];
 
 const roundingMode = "expand";
@@ -30,12 +34,12 @@ expected.forEach(([smallestUnit, expectedPositive, expectedNegative]) => {
   const [py, pm = 0, pw = 0, pd = 0, ph = 0, pmin = 0, ps = 0, pms = 0, pµs = 0, pns = 0] = expectedPositive;
   const [ny, nm = 0, nw = 0, nd = 0, nh = 0, nmin = 0, ns = 0, nms = 0, nµs = 0, nns = 0] = expectedNegative;
   TemporalHelpers.assertDuration(
-    instance.round({ smallestUnit, relativeTo, roundingMode }),
+    instance.round({ smallestUnit, relativeTo: relativeToForwards, roundingMode }),
     py, pm, pw, pd, ph, pmin, ps, pms, pµs, pns,
     `rounds to ${smallestUnit} (roundingMode = ${roundingMode}, positive case)`
   );
   TemporalHelpers.assertDuration(
-    instance.negated().round({ smallestUnit, relativeTo, roundingMode }),
+    instance.negated().round({ smallestUnit, relativeTo: relativeToBackwards, roundingMode }),
     ny, nm, nw, nd, nh, nmin, ns, nms, nµs, nns,
     `rounds to ${smallestUnit} (rounding mode = ${roundingMode}, negative case)`
   );
diff --git a/test/built-ins/Temporal/Duration/prototype/round/roundingmode-floor.js b/test/built-ins/Temporal/Duration/prototype/round/roundingmode-floor.js
index 3ab95f9794..7e875cc95c 100644
--- a/test/built-ins/Temporal/Duration/prototype/round/roundingmode-floor.js
+++ b/test/built-ins/Temporal/Duration/prototype/round/roundingmode-floor.js
@@ -9,19 +9,23 @@ features: [Temporal]
 ---*/
 
 const instance = new Temporal.Duration(5, 6, 7, 8, 40, 30, 20, 123, 987, 500);
-const relativeTo = new Temporal.PlainDate(2020, 1, 1);
+// Chosen such that 8 months forwards from relativeToForwards is the
+// same number of days as 8 months backwards from relativeToBackwards
+// (for convenience)
+const relativeToForwards = new Temporal.PlainDate(2020, 4, 1);
+const relativeToBackwards = new Temporal.PlainDate(2020, 12, 1);
 
 const expected = [
   ["years", [5], [-6]],
   ["months", [5, 7], [-5, -8]],
   ["weeks", [5, 6, 8], [-5, -6, -9]],
-  ["days", [5, 6, 7, 9], [-5, -6, -7, -10]],
-  ["hours", [5, 6, 7, 9, 16], [-5, -6, -7, -9, -17]],
-  ["minutes", [5, 6, 7, 9, 16, 30], [-5, -6, -7, -9, -16, -31]],
-  ["seconds", [5, 6, 7, 9, 16, 30, 20], [-5, -6, -7, -9, -16, -30, -21]],
-  ["milliseconds", [5, 6, 7, 9, 16, 30, 20, 123], [-5, -6, -7, -9, -16, -30, -20, -124]],
-  ["microseconds", [5, 6, 7, 9, 16, 30, 20, 123, 987], [-5, -6, -7, -9, -16, -30, -20, -123, -988]],
-  ["nanoseconds", [5, 6, 7, 9, 16, 30, 20, 123, 987, 500], [-5, -6, -7, -9, -16, -30, -20, -123, -987, -500]],
+  ["days", [5, 7, 0, 27], [-5, -7, 0, -28]],
+  ["hours", [5, 7, 0, 27, 16], [-5, -7, 0, -27, -17]],
+  ["minutes", [5, 7, 0, 27, 16, 30], [-5, -7, 0, -27, -16, -31]],
+  ["seconds", [5, 7, 0, 27, 16, 30, 20], [-5, -7, 0, -27, -16, -30, -21]],
+  ["milliseconds", [5, 7, 0, 27, 16, 30, 20, 123], [-5, -7, 0, -27, -16, -30, -20, -124]],
+  ["microseconds", [5, 7, 0, 27, 16, 30, 20, 123, 987], [-5, -7, 0, -27, -16, -30, -20, -123, -988]],
+  ["nanoseconds", [5, 7, 0, 27, 16, 30, 20, 123, 987, 500], [-5, -7, 0, -27, -16, -30, -20, -123, -987, -500]],
 ];
 
 const roundingMode = "floor";
@@ -30,12 +34,12 @@ expected.forEach(([smallestUnit, expectedPositive, expectedNegative]) => {
   const [py, pm = 0, pw = 0, pd = 0, ph = 0, pmin = 0, ps = 0, pms = 0, pµs = 0, pns = 0] = expectedPositive;
   const [ny, nm = 0, nw = 0, nd = 0, nh = 0, nmin = 0, ns = 0, nms = 0, nµs = 0, nns = 0] = expectedNegative;
   TemporalHelpers.assertDuration(
-    instance.round({ smallestUnit, relativeTo, roundingMode }),
+    instance.round({ smallestUnit, relativeTo: relativeToForwards, roundingMode }),
     py, pm, pw, pd, ph, pmin, ps, pms, pµs, pns,
     `rounds to ${smallestUnit} (roundingMode = ${roundingMode}, positive case)`
   );
   TemporalHelpers.assertDuration(
-    instance.negated().round({ smallestUnit, relativeTo, roundingMode }),
+    instance.negated().round({ smallestUnit, relativeTo: relativeToBackwards, roundingMode }),
     ny, nm, nw, nd, nh, nmin, ns, nms, nµs, nns,
     `rounds to ${smallestUnit} (rounding mode = ${roundingMode}, negative case)`
   );
diff --git a/test/built-ins/Temporal/Duration/prototype/round/roundingmode-halfCeil.js b/test/built-ins/Temporal/Duration/prototype/round/roundingmode-halfCeil.js
index 2955e900ba..556638410c 100644
--- a/test/built-ins/Temporal/Duration/prototype/round/roundingmode-halfCeil.js
+++ b/test/built-ins/Temporal/Duration/prototype/round/roundingmode-halfCeil.js
@@ -9,19 +9,23 @@ features: [Temporal]
 ---*/
 
 const instance = new Temporal.Duration(5, 6, 7, 8, 40, 30, 20, 123, 987, 500);
-const relativeTo = new Temporal.PlainDate(2020, 1, 1);
+// Chosen such that 8 months forwards from relativeToForwards is the
+// same number of days as 8 months backwards from relativeToBackwards
+// (for convenience)
+const relativeToForwards = new Temporal.PlainDate(2020, 4, 1);
+const relativeToBackwards = new Temporal.PlainDate(2020, 12, 1);
 
 const expected = [
   ["years", [6], [-6]],
   ["months", [5, 8], [-5, -8]],
   ["weeks", [5, 6, 8], [-5, -6, -8]],
-  ["days", [5, 6, 7, 10], [-5, -6, -7, -10]],
-  ["hours", [5, 6, 7, 9, 17], [-5, -6, -7, -9, -17]],
-  ["minutes", [5, 6, 7, 9, 16, 30], [-5, -6, -7, -9, -16, -30]],
-  ["seconds", [5, 6, 7, 9, 16, 30, 20], [-5, -6, -7, -9, -16, -30, -20]],
-  ["milliseconds", [5, 6, 7, 9, 16, 30, 20, 124], [-5, -6, -7, -9, -16, -30, -20, -124]],
-  ["microseconds", [5, 6, 7, 9, 16, 30, 20, 123, 988], [-5, -6, -7, -9, -16, -30, -20, -123, -987]],
-  ["nanoseconds", [5, 6, 7, 9, 16, 30, 20, 123, 987, 500], [-5, -6, -7, -9, -16, -30, -20, -123, -987, -500]],
+  ["days", [5, 7, 0, 28], [-5, -7, 0, -28]],
+  ["hours", [5, 7, 0, 27, 17], [-5, -7, 0, -27, -17]],
+  ["minutes", [5, 7, 0, 27, 16, 30], [-5, -7, 0, -27, -16, -30]],
+  ["seconds", [5, 7, 0, 27, 16, 30, 20], [-5, -7, 0, -27, -16, -30, -20]],
+  ["milliseconds", [5, 7, 0, 27, 16, 30, 20, 124], [-5, -7, 0, -27, -16, -30, -20, -124]],
+  ["microseconds", [5, 7, 0, 27, 16, 30, 20, 123, 988], [-5, -7, 0, -27, -16, -30, -20, -123, -987]],
+  ["nanoseconds", [5, 7, 0, 27, 16, 30, 20, 123, 987, 500], [-5, -7, 0, -27, -16, -30, -20, -123, -987, -500]],
 ];
 
 const roundingMode = "halfCeil";
@@ -30,12 +34,12 @@ expected.forEach(([smallestUnit, expectedPositive, expectedNegative]) => {
   const [py, pm = 0, pw = 0, pd = 0, ph = 0, pmin = 0, ps = 0, pms = 0, pµs = 0, pns = 0] = expectedPositive;
   const [ny, nm = 0, nw = 0, nd = 0, nh = 0, nmin = 0, ns = 0, nms = 0, nµs = 0, nns = 0] = expectedNegative;
   TemporalHelpers.assertDuration(
-    instance.round({ smallestUnit, relativeTo, roundingMode }),
+    instance.round({ smallestUnit, relativeTo: relativeToForwards, roundingMode }),
     py, pm, pw, pd, ph, pmin, ps, pms, pµs, pns,
     `rounds to ${smallestUnit} (roundingMode = ${roundingMode}, positive case)`
   );
   TemporalHelpers.assertDuration(
-    instance.negated().round({ smallestUnit, relativeTo, roundingMode }),
+    instance.negated().round({ smallestUnit, relativeTo: relativeToBackwards, roundingMode }),
     ny, nm, nw, nd, nh, nmin, ns, nms, nµs, nns,
     `rounds to ${smallestUnit} (rounding mode = ${roundingMode}, negative case)`
   );
diff --git a/test/built-ins/Temporal/Duration/prototype/round/roundingmode-halfEven.js b/test/built-ins/Temporal/Duration/prototype/round/roundingmode-halfEven.js
index d7bd41745a..1facefa910 100644
--- a/test/built-ins/Temporal/Duration/prototype/round/roundingmode-halfEven.js
+++ b/test/built-ins/Temporal/Duration/prototype/round/roundingmode-halfEven.js
@@ -9,19 +9,23 @@ features: [Temporal]
 ---*/
 
 const instance = new Temporal.Duration(5, 6, 7, 8, 40, 30, 20, 123, 987, 500);
-const relativeTo = new Temporal.PlainDate(2020, 1, 1);
+// Chosen such that 8 months forwards from relativeToForwards is the
+// same number of days as 8 months backwards from relativeToBackwards
+// (for convenience)
+const relativeToForwards = new Temporal.PlainDate(2020, 4, 1);
+const relativeToBackwards = new Temporal.PlainDate(2020, 12, 1);
 
 const expected = [
   ["years", [6], [-6]],
   ["months", [5, 8], [-5, -8]],
   ["weeks", [5, 6, 8], [-5, -6, -8]],
-  ["days", [5, 6, 7, 10], [-5, -6, -7, -10]],
-  ["hours", [5, 6, 7, 9, 17], [-5, -6, -7, -9, -17]],
-  ["minutes", [5, 6, 7, 9, 16, 30], [-5, -6, -7, -9, -16, -30]],
-  ["seconds", [5, 6, 7, 9, 16, 30, 20], [-5, -6, -7, -9, -16, -30, -20]],
-  ["milliseconds", [5, 6, 7, 9, 16, 30, 20, 124], [-5, -6, -7, -9, -16, -30, -20, -124]],
-  ["microseconds", [5, 6, 7, 9, 16, 30, 20, 123, 988], [-5, -6, -7, -9, -16, -30, -20, -123, -988]],
-  ["nanoseconds", [5, 6, 7, 9, 16, 30, 20, 123, 987, 500], [-5, -6, -7, -9, -16, -30, -20, -123, -987, -500]],
+  ["days", [5, 7, 0, 28], [-5, -7, 0, -28]],
+  ["hours", [5, 7, 0, 27, 17], [-5, -7, 0, -27, -17]],
+  ["minutes", [5, 7, 0, 27, 16, 30], [-5, -7, 0, -27, -16, -30]],
+  ["seconds", [5, 7, 0, 27, 16, 30, 20], [-5, -7, 0, -27, -16, -30, -20]],
+  ["milliseconds", [5, 7, 0, 27, 16, 30, 20, 124], [-5, -7, 0, -27, -16, -30, -20, -124]],
+  ["microseconds", [5, 7, 0, 27, 16, 30, 20, 123, 988], [-5, -7, 0, -27, -16, -30, -20, -123, -988]],
+  ["nanoseconds", [5, 7, 0, 27, 16, 30, 20, 123, 987, 500], [-5, -7, 0, -27, -16, -30, -20, -123, -987, -500]],
 ];
 
 const roundingMode = "halfEven";
@@ -30,12 +34,12 @@ expected.forEach(([smallestUnit, expectedPositive, expectedNegative]) => {
   const [py, pm = 0, pw = 0, pd = 0, ph = 0, pmin = 0, ps = 0, pms = 0, pµs = 0, pns = 0] = expectedPositive;
   const [ny, nm = 0, nw = 0, nd = 0, nh = 0, nmin = 0, ns = 0, nms = 0, nµs = 0, nns = 0] = expectedNegative;
   TemporalHelpers.assertDuration(
-    instance.round({ smallestUnit, relativeTo, roundingMode }),
+    instance.round({ smallestUnit, relativeTo: relativeToForwards, roundingMode }),
     py, pm, pw, pd, ph, pmin, ps, pms, pµs, pns,
     `rounds to ${smallestUnit} (roundingMode = ${roundingMode}, positive case)`
   );
   TemporalHelpers.assertDuration(
-    instance.negated().round({ smallestUnit, relativeTo, roundingMode }),
+    instance.negated().round({ smallestUnit, relativeTo: relativeToBackwards, roundingMode }),
     ny, nm, nw, nd, nh, nmin, ns, nms, nµs, nns,
     `rounds to ${smallestUnit} (rounding mode = ${roundingMode}, negative case)`
   );
diff --git a/test/built-ins/Temporal/Duration/prototype/round/roundingmode-halfExpand.js b/test/built-ins/Temporal/Duration/prototype/round/roundingmode-halfExpand.js
index 3cb7ac5fcb..e5544b0e2b 100644
--- a/test/built-ins/Temporal/Duration/prototype/round/roundingmode-halfExpand.js
+++ b/test/built-ins/Temporal/Duration/prototype/round/roundingmode-halfExpand.js
@@ -9,19 +9,23 @@ features: [Temporal]
 ---*/
 
 const instance = new Temporal.Duration(5, 6, 7, 8, 40, 30, 20, 123, 987, 500);
-const relativeTo = new Temporal.PlainDate(2020, 1, 1);
+// Chosen such that 8 months forwards from relativeToForwards is the
+// same number of days as 8 months backwards from relativeToBackwards
+// (for convenience)
+const relativeToForwards = new Temporal.PlainDate(2020, 4, 1);
+const relativeToBackwards = new Temporal.PlainDate(2020, 12, 1);
 
 const expected = [
   ["years", [6], [-6]],
   ["months", [5, 8], [-5, -8]],
   ["weeks", [5, 6, 8], [-5, -6, -8]],
-  ["days", [5, 6, 7, 10], [-5, -6, -7, -10]],
-  ["hours", [5, 6, 7, 9, 17], [-5, -6, -7, -9, -17]],
-  ["minutes", [5, 6, 7, 9, 16, 30], [-5, -6, -7, -9, -16, -30]],
-  ["seconds", [5, 6, 7, 9, 16, 30, 20], [-5, -6, -7, -9, -16, -30, -20]],
-  ["milliseconds", [5, 6, 7, 9, 16, 30, 20, 124], [-5, -6, -7, -9, -16, -30, -20, -124]],
-  ["microseconds", [5, 6, 7, 9, 16, 30, 20, 123, 988], [-5, -6, -7, -9, -16, -30, -20, -123, -988]],
-  ["nanoseconds", [5, 6, 7, 9, 16, 30, 20, 123, 987, 500], [-5, -6, -7, -9, -16, -30, -20, -123, -987, -500]],
+  ["days", [5, 7, 0, 28], [-5, -7, 0, -28]],
+  ["hours", [5, 7, 0, 27, 17], [-5, -7, 0, -27, -17]],
+  ["minutes", [5, 7, 0, 27, 16, 30], [-5, -7, 0, -27, -16, -30]],
+  ["seconds", [5, 7, 0, 27, 16, 30, 20], [-5, -7, 0, -27, -16, -30, -20]],
+  ["milliseconds", [5, 7, 0, 27, 16, 30, 20, 124], [-5, -7, 0, -27, -16, -30, -20, -124]],
+  ["microseconds", [5, 7, 0, 27, 16, 30, 20, 123, 988], [-5, -7, 0, -27, -16, -30, -20, -123, -988]],
+  ["nanoseconds", [5, 7, 0, 27, 16, 30, 20, 123, 987, 500], [-5, -7, 0, -27, -16, -30, -20, -123, -987, -500]],
 ];
 
 const roundingMode = "halfExpand";
@@ -30,12 +34,12 @@ expected.forEach(([smallestUnit, expectedPositive, expectedNegative]) => {
   const [py, pm = 0, pw = 0, pd = 0, ph = 0, pmin = 0, ps = 0, pms = 0, pµs = 0, pns = 0] = expectedPositive;
   const [ny, nm = 0, nw = 0, nd = 0, nh = 0, nmin = 0, ns = 0, nms = 0, nµs = 0, nns = 0] = expectedNegative;
   TemporalHelpers.assertDuration(
-    instance.round({ smallestUnit, relativeTo, roundingMode }),
+    instance.round({ smallestUnit, relativeTo: relativeToForwards, roundingMode }),
     py, pm, pw, pd, ph, pmin, ps, pms, pµs, pns,
     `rounds to ${smallestUnit} (roundingMode = ${roundingMode}, positive case)`
   );
   TemporalHelpers.assertDuration(
-    instance.negated().round({ smallestUnit, relativeTo, roundingMode }),
+    instance.negated().round({ smallestUnit, relativeTo: relativeToBackwards, roundingMode }),
     ny, nm, nw, nd, nh, nmin, ns, nms, nµs, nns,
     `rounds to ${smallestUnit} (rounding mode = ${roundingMode}, negative case)`
   );
diff --git a/test/built-ins/Temporal/Duration/prototype/round/roundingmode-halfFloor.js b/test/built-ins/Temporal/Duration/prototype/round/roundingmode-halfFloor.js
index 7d284fc62a..452893743f 100644
--- a/test/built-ins/Temporal/Duration/prototype/round/roundingmode-halfFloor.js
+++ b/test/built-ins/Temporal/Duration/prototype/round/roundingmode-halfFloor.js
@@ -9,19 +9,23 @@ features: [Temporal]
 ---*/
 
 const instance = new Temporal.Duration(5, 6, 7, 8, 40, 30, 20, 123, 987, 500);
-const relativeTo = new Temporal.PlainDate(2020, 1, 1);
+// Chosen such that 8 months forwards from relativeToForwards is the
+// same number of days as 8 months backwards from relativeToBackwards
+// (for convenience)
+const relativeToForwards = new Temporal.PlainDate(2020, 4, 1);
+const relativeToBackwards = new Temporal.PlainDate(2020, 12, 1);
 
 const expected = [
   ["years", [6], [-6]],
   ["months", [5, 8], [-5, -8]],
   ["weeks", [5, 6, 8], [-5, -6, -8]],
-  ["days", [5, 6, 7, 10], [-5, -6, -7, -10]],
-  ["hours", [5, 6, 7, 9, 17], [-5, -6, -7, -9, -17]],
-  ["minutes", [5, 6, 7, 9, 16, 30], [-5, -6, -7, -9, -16, -30]],
-  ["seconds", [5, 6, 7, 9, 16, 30, 20], [-5, -6, -7, -9, -16, -30, -20]],
-  ["milliseconds", [5, 6, 7, 9, 16, 30, 20, 124], [-5, -6, -7, -9, -16, -30, -20, -124]],
-  ["microseconds", [5, 6, 7, 9, 16, 30, 20, 123, 987], [-5, -6, -7, -9, -16, -30, -20, -123, -988]],
-  ["nanoseconds", [5, 6, 7, 9, 16, 30, 20, 123, 987, 500], [-5, -6, -7, -9, -16, -30, -20, -123, -987, -500]],
+  ["days", [5, 7, 0, 28], [-5, -7, 0, -28]],
+  ["hours", [5, 7, 0, 27, 17], [-5, -7, 0, -27, -17]],
+  ["minutes", [5, 7, 0, 27, 16, 30], [-5, -7, 0, -27, -16, -30]],
+  ["seconds", [5, 7, 0, 27, 16, 30, 20], [-5, -7, 0, -27, -16, -30, -20]],
+  ["milliseconds", [5, 7, 0, 27, 16, 30, 20, 124], [-5, -7, 0, -27, -16, -30, -20, -124]],
+  ["microseconds", [5, 7, 0, 27, 16, 30, 20, 123, 987], [-5, -7, 0, -27, -16, -30, -20, -123, -988]],
+  ["nanoseconds", [5, 7, 0, 27, 16, 30, 20, 123, 987, 500], [-5, -7, 0, -27, -16, -30, -20, -123, -987, -500]],
 ];
 
 const roundingMode = "halfFloor";
@@ -30,12 +34,12 @@ expected.forEach(([smallestUnit, expectedPositive, expectedNegative]) => {
   const [py, pm = 0, pw = 0, pd = 0, ph = 0, pmin = 0, ps = 0, pms = 0, pµs = 0, pns = 0] = expectedPositive;
   const [ny, nm = 0, nw = 0, nd = 0, nh = 0, nmin = 0, ns = 0, nms = 0, nµs = 0, nns = 0] = expectedNegative;
   TemporalHelpers.assertDuration(
-    instance.round({ smallestUnit, relativeTo, roundingMode }),
+    instance.round({ smallestUnit, relativeTo: relativeToForwards, roundingMode }),
     py, pm, pw, pd, ph, pmin, ps, pms, pµs, pns,
     `rounds to ${smallestUnit} (roundingMode = ${roundingMode}, positive case)`
   );
   TemporalHelpers.assertDuration(
-    instance.negated().round({ smallestUnit, relativeTo, roundingMode }),
+    instance.negated().round({ smallestUnit, relativeTo: relativeToBackwards, roundingMode }),
     ny, nm, nw, nd, nh, nmin, ns, nms, nµs, nns,
     `rounds to ${smallestUnit} (rounding mode = ${roundingMode}, negative case)`
   );
diff --git a/test/built-ins/Temporal/Duration/prototype/round/roundingmode-halfTrunc.js b/test/built-ins/Temporal/Duration/prototype/round/roundingmode-halfTrunc.js
index f63582f809..2fa6a810b8 100644
--- a/test/built-ins/Temporal/Duration/prototype/round/roundingmode-halfTrunc.js
+++ b/test/built-ins/Temporal/Duration/prototype/round/roundingmode-halfTrunc.js
@@ -9,19 +9,23 @@ features: [Temporal]
 ---*/
 
 const instance = new Temporal.Duration(5, 6, 7, 8, 40, 30, 20, 123, 987, 500);
-const relativeTo = new Temporal.PlainDate(2020, 1, 1);
+// Chosen such that 8 months forwards from relativeToForwards is the
+// same number of days as 8 months backwards from relativeToBackwards
+// (for convenience)
+const relativeToForwards = new Temporal.PlainDate(2020, 4, 1);
+const relativeToBackwards = new Temporal.PlainDate(2020, 12, 1);
 
 const expected = [
   ["years", [6], [-6]],
   ["months", [5, 8], [-5, -8]],
   ["weeks", [5, 6, 8], [-5, -6, -8]],
-  ["days", [5, 6, 7, 10], [-5, -6, -7, -10]],
-  ["hours", [5, 6, 7, 9, 17], [-5, -6, -7, -9, -17]],
-  ["minutes", [5, 6, 7, 9, 16, 30], [-5, -6, -7, -9, -16, -30]],
-  ["seconds", [5, 6, 7, 9, 16, 30, 20], [-5, -6, -7, -9, -16, -30, -20]],
-  ["milliseconds", [5, 6, 7, 9, 16, 30, 20, 124], [-5, -6, -7, -9, -16, -30, -20, -124]],
-  ["microseconds", [5, 6, 7, 9, 16, 30, 20, 123, 987], [-5, -6, -7, -9, -16, -30, -20, -123, -987]],
-  ["nanoseconds", [5, 6, 7, 9, 16, 30, 20, 123, 987, 500], [-5, -6, -7, -9, -16, -30, -20, -123, -987, -500]],
+  ["days", [5, 7, 0, 28], [-5, -7, 0, -28]],
+  ["hours", [5, 7, 0, 27, 17], [-5, -7, 0, -27, -17]],
+  ["minutes", [5, 7, 0, 27, 16, 30], [-5, -7, 0, -27, -16, -30]],
+  ["seconds", [5, 7, 0, 27, 16, 30, 20], [-5, -7, 0, -27, -16, -30, -20]],
+  ["milliseconds", [5, 7, 0, 27, 16, 30, 20, 124], [-5, -7, 0, -27, -16, -30, -20, -124]],
+  ["microseconds", [5, 7, 0, 27, 16, 30, 20, 123, 987], [-5, -7, 0, -27, -16, -30, -20, -123, -987]],
+  ["nanoseconds", [5, 7, 0, 27, 16, 30, 20, 123, 987, 500], [-5, -7, 0, -27, -16, -30, -20, -123, -987, -500]],
 ];
 
 const roundingMode = "halfTrunc";
@@ -30,12 +34,12 @@ expected.forEach(([smallestUnit, expectedPositive, expectedNegative]) => {
   const [py, pm = 0, pw = 0, pd = 0, ph = 0, pmin = 0, ps = 0, pms = 0, pµs = 0, pns = 0] = expectedPositive;
   const [ny, nm = 0, nw = 0, nd = 0, nh = 0, nmin = 0, ns = 0, nms = 0, nµs = 0, nns = 0] = expectedNegative;
   TemporalHelpers.assertDuration(
-    instance.round({ smallestUnit, relativeTo, roundingMode }),
+    instance.round({ smallestUnit, relativeTo: relativeToForwards, roundingMode }),
     py, pm, pw, pd, ph, pmin, ps, pms, pµs, pns,
     `rounds to ${smallestUnit} (roundingMode = ${roundingMode}, positive case)`
   );
   TemporalHelpers.assertDuration(
-    instance.negated().round({ smallestUnit, relativeTo, roundingMode }),
+    instance.negated().round({ smallestUnit, relativeTo: relativeToBackwards, roundingMode }),
     ny, nm, nw, nd, nh, nmin, ns, nms, nµs, nns,
     `rounds to ${smallestUnit} (rounding mode = ${roundingMode}, negative case)`
   );
diff --git a/test/built-ins/Temporal/Duration/prototype/round/roundingmode-trunc.js b/test/built-ins/Temporal/Duration/prototype/round/roundingmode-trunc.js
index a85bd36580..ffe1beb00c 100644
--- a/test/built-ins/Temporal/Duration/prototype/round/roundingmode-trunc.js
+++ b/test/built-ins/Temporal/Duration/prototype/round/roundingmode-trunc.js
@@ -9,19 +9,23 @@ features: [Temporal]
 ---*/
 
 const instance = new Temporal.Duration(5, 6, 7, 8, 40, 30, 20, 123, 987, 500);
-const relativeTo = new Temporal.PlainDate(2020, 1, 1);
+// Chosen such that 8 months forwards from relativeToForwards is the
+// same number of days as 8 months backwards from relativeToBackwards
+// (for convenience)
+const relativeToForwards = new Temporal.PlainDate(2020, 4, 1);
+const relativeToBackwards = new Temporal.PlainDate(2020, 12, 1);
 
 const expected = [
   ["years", [5], [-5]],
   ["months", [5, 7], [-5, -7]],
   ["weeks", [5, 6, 8], [-5, -6, -8]],
-  ["days", [5, 6, 7, 9], [-5, -6, -7, -9]],
-  ["hours", [5, 6, 7, 9, 16], [-5, -6, -7, -9, -16]],
-  ["minutes", [5, 6, 7, 9, 16, 30], [-5, -6, -7, -9, -16, -30]],
-  ["seconds", [5, 6, 7, 9, 16, 30, 20], [-5, -6, -7, -9, -16, -30, -20]],
-  ["milliseconds", [5, 6, 7, 9, 16, 30, 20, 123], [-5, -6, -7, -9, -16, -30, -20, -123]],
-  ["microseconds", [5, 6, 7, 9, 16, 30, 20, 123, 987], [-5, -6, -7, -9, -16, -30, -20, -123, -987]],
-  ["nanoseconds", [5, 6, 7, 9, 16, 30, 20, 123, 987, 500], [-5, -6, -7, -9, -16, -30, -20, -123, -987, -500]],
+  ["days", [5, 7, 0, 27], [-5, -7, 0, -27]],
+  ["hours", [5, 7, 0, 27, 16], [-5, -7, 0, -27, -16]],
+  ["minutes", [5, 7, 0, 27, 16, 30], [-5, -7, 0, -27, -16, -30]],
+  ["seconds", [5, 7, 0, 27, 16, 30, 20], [-5, -7, 0, -27, -16, -30, -20]],
+  ["milliseconds", [5, 7, 0, 27, 16, 30, 20, 123], [-5, -7, 0, -27, -16, -30, -20, -123]],
+  ["microseconds", [5, 7, 0, 27, 16, 30, 20, 123, 987], [-5, -7, 0, -27, -16, -30, -20, -123, -987]],
+  ["nanoseconds", [5, 7, 0, 27, 16, 30, 20, 123, 987, 500], [-5, -7, 0, -27, -16, -30, -20, -123, -987, -500]],
 ];
 
 const roundingMode = "trunc";
@@ -30,12 +34,12 @@ expected.forEach(([smallestUnit, expectedPositive, expectedNegative]) => {
   const [py, pm = 0, pw = 0, pd = 0, ph = 0, pmin = 0, ps = 0, pms = 0, pµs = 0, pns = 0] = expectedPositive;
   const [ny, nm = 0, nw = 0, nd = 0, nh = 0, nmin = 0, ns = 0, nms = 0, nµs = 0, nns = 0] = expectedNegative;
   TemporalHelpers.assertDuration(
-    instance.round({ smallestUnit, relativeTo, roundingMode }),
+    instance.round({ smallestUnit, relativeTo: relativeToForwards, roundingMode }),
     py, pm, pw, pd, ph, pmin, ps, pms, pµs, pns,
     `rounds to ${smallestUnit} (roundingMode = ${roundingMode}, positive case)`
   );
   TemporalHelpers.assertDuration(
-    instance.negated().round({ smallestUnit, relativeTo, roundingMode }),
+    instance.negated().round({ smallestUnit, relativeTo: relativeToBackwards, roundingMode }),
     ny, nm, nw, nd, nh, nmin, ns, nms, nµs, nns,
     `rounds to ${smallestUnit} (rounding mode = ${roundingMode}, negative case)`
   );
diff --git a/test/staging/Temporal/Duration/old/round.js b/test/staging/Temporal/Duration/old/round.js
index b7fd879a06..5bc92fb56a 100644
--- a/test/staging/Temporal/Duration/old/round.js
+++ b/test/staging/Temporal/Duration/old/round.js
@@ -208,7 +208,7 @@ assert.sameValue(`${ hours25.round({
   assert.sameValue(`${ d.round({
     smallestUnit: "seconds",
     relativeTo
-  }) }`, "P5Y5M5W5DT5H5M5S");
+  }) }`, "P5Y6M10DT5H5M5S");
 });
 
 // does not accept non-string primitives for relativeTo
@@ -325,24 +325,24 @@ var roundAndBalanceResults = {
     years: "P6Y",
     months: "P5Y6M",
     weeks: "P5Y5M6W",
-    days: "P5Y5M5W5D",
-    hours: "P5Y5M5W5DT5H",
-    minutes: "P5Y5M5W5DT5H5M",
-    seconds: "P5Y5M5W5DT5H5M5S",
-    milliseconds: "P5Y5M5W5DT5H5M5.005S",
-    microseconds: "P5Y5M5W5DT5H5M5.005005S",
-    nanoseconds: "P5Y5M5W5DT5H5M5.005005005S"
+    days: "P5Y6M10D",
+    hours: "P5Y6M10DT5H",
+    minutes: "P5Y6M10DT5H5M",
+    seconds: "P5Y6M10DT5H5M5S",
+    milliseconds: "P5Y6M10DT5H5M5.005S",
+    microseconds: "P5Y6M10DT5H5M5.005005S",
+    nanoseconds: "P5Y6M10DT5H5M5.005005005S"
   },
   months: {
     months: "P66M",
     weeks: "P65M6W",
-    days: "P65M5W5D",
-    hours: "P65M5W5DT5H",
-    minutes: "P65M5W5DT5H5M",
-    seconds: "P65M5W5DT5H5M5S",
-    milliseconds: "P65M5W5DT5H5M5.005S",
-    microseconds: "P65M5W5DT5H5M5.005005S",
-    nanoseconds: "P65M5W5DT5H5M5.005005005S"
+    days: "P66M10D",
+    hours: "P66M10DT5H",
+    minutes: "P66M10DT5H5M",
+    seconds: "P66M10DT5H5M5S",
+    milliseconds: "P66M10DT5H5M5.005S",
+    microseconds: "P66M10DT5H5M5.005005S",
+    nanoseconds: "P66M10DT5H5M5.005005005S"
   },
   weeks: {
     weeks: "P288W",
@@ -521,42 +521,42 @@ assert.sameValue(`${ d.round({
   smallestUnit: "hours",
   roundingIncrement: 3,
   relativeTo
-}) }`, "P5Y5M5W5DT6H");
+}) }`, "P5Y6M10DT6H");
 
 // rounds to an increment of minutes
 assert.sameValue(`${ d.round({
   smallestUnit: "minutes",
   roundingIncrement: 30,
   relativeTo
-}) }`, "P5Y5M5W5DT5H");
+}) }`, "P5Y6M10DT5H");
 
 // rounds to an increment of seconds
 assert.sameValue(`${ d.round({
   smallestUnit: "seconds",
   roundingIncrement: 15,
   relativeTo
-}) }`, "P5Y5M5W5DT5H5M");
+}) }`, "P5Y6M10DT5H5M");
 
 // rounds to an increment of milliseconds
 assert.sameValue(`${ d.round({
   smallestUnit: "milliseconds",
   roundingIncrement: 10,
   relativeTo
-}) }`, "P5Y5M5W5DT5H5M5.01S");
+}) }`, "P5Y6M10DT5H5M5.01S");
 
 // rounds to an increment of microseconds
 assert.sameValue(`${ d.round({
   smallestUnit: "microseconds",
   roundingIncrement: 10,
   relativeTo
-}) }`, "P5Y5M5W5DT5H5M5.00501S");
+}) }`, "P5Y6M10DT5H5M5.00501S");
 
 // rounds to an increment of nanoseconds
 assert.sameValue(`${ d.round({
   smallestUnit: "nanoseconds",
   roundingIncrement: 10,
   relativeTo
-}) }`, "P5Y5M5W5DT5H5M5.00500501S");
+}) }`, "P5Y6M10DT5H5M5.00500501S");
 
 // valid hour increments divide into 24
 [

@ptomato ptomato changed the title Temporal.Duration normalization tests, part 1 of 2 Temporal.Duration normalization tests, part 1 of 3 Nov 16, 2023
@ptomato ptomato merged commit 27a7501 into tc39:main Nov 16, 2023
9 checks passed
@ptomato ptomato deleted the duration-normalize-part-1 branch November 16, 2023 19:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants