Skip to content

Commit 2833ad2

Browse files
committed
Truncated timepoint addition returns next matching point instead of the original point if the two already match
1 parent caa9e0e commit 2833ad2

File tree

2 files changed

+27
-10
lines changed

2 files changed

+27
-10
lines changed

metomi/isodatetime/data.py

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1572,7 +1572,7 @@ def find_next_month_and_day(
15721572
def find_next_month_and_day(
15731573
self, month: Optional[int], day: Optional[int]
15741574
) -> 'TimePoint':
1575-
"""Return the next TimePoint after this one (inclusive) that has the
1575+
"""Return the next TimePoint after this one that has the
15761576
same month and/or day as specified.
15771577
15781578
Args:
@@ -1594,18 +1594,25 @@ def _next_month_and_day(
15941594
for i, year in enumerate(years_to_check):
15951595
self._year = year
15961596
if month:
1597-
if month >= self._month_of_year and (
1598-
day is None or
1599-
self._day_of_month <= day <= get_days_in_month(month, year)
1600-
):
1601-
self._month_of_year = month
1602-
self._day_of_month = day or 1
1603-
return
1597+
if day is None:
1598+
if month > self._month_of_year:
1599+
self._month_of_year = month
1600+
self._day_of_month = 1
1601+
return
1602+
else:
1603+
if month >= self._month_of_year and (
1604+
self._day_of_month < day <= get_days_in_month(
1605+
month, year
1606+
)
1607+
):
1608+
self._month_of_year = month
1609+
self._day_of_month = day
1610+
return
16041611
else:
16051612
for month_ in range(
16061613
self._month_of_year, CALENDAR.MONTHS_IN_YEAR + 1
16071614
):
1608-
if self._day_of_month <= day <= get_days_in_month(
1615+
if self._day_of_month < day <= get_days_in_month(
16091616
month_, year
16101617
):
16111618
self._month_of_year = month_

metomi/isodatetime/tests/test_01.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -720,13 +720,18 @@ def tp_add_param(timepoint, other, expected):
720720
tp_add_param(
721721
data.TimePoint(year=2000, day_of_month=15),
722722
data.TimePoint(month_of_year=1, day_of_month=15, truncated=True),
723-
data.TimePoint(year=2000, day_of_month=15),
723+
data.TimePoint(year=2001, day_of_month=15),
724724
),
725725
tp_add_param(
726726
data.TimePoint(year=2000, day_of_month=15),
727727
data.TimePoint(month_of_year=1, day_of_month=14, truncated=True),
728728
data.TimePoint(year=2001, day_of_month=14),
729729
),
730+
tp_add_param(
731+
data.TimePoint(year=2000, day_of_month=31),
732+
data.TimePoint(day_of_month=31, truncated=True),
733+
data.TimePoint(year=2000, month_of_year=3, day_of_month=31),
734+
),
730735
tp_add_param(
731736
data.TimePoint(year=2000, day_of_month=15),
732737
data.TimePoint(day_of_month=14, truncated=True),
@@ -769,6 +774,11 @@ def test_timepoint_add(
769774
'-11-02',
770775
data.TimePoint(year=2011, month_of_year=2, day_of_month=1)
771776
),
777+
tp_add_param(
778+
'2014-04-10T00Z',
779+
'-14-04',
780+
data.TimePoint(year=2114, month_of_year=4, day_of_month=1)
781+
),
772782
]
773783
)
774784
def test_timepoint_add__extra(

0 commit comments

Comments
 (0)