From a13ddbf968eb1c5e4297b4a0f0fb949f63d43680 Mon Sep 17 00:00:00 2001 From: Raul Ruiz Date: Mon, 5 Aug 2024 14:45:05 +0200 Subject: [PATCH] Remove assertion to ensure FiniteDateRange difference --- tests/test_ranges.py | 88 +++++++++++++++++++++++++++++++++++++++++++- xocto/ranges.py | 1 - 2 files changed, 87 insertions(+), 2 deletions(-) diff --git a/tests/test_ranges.py b/tests/test_ranges.py index b27ecc7..3066fdd 100644 --- a/tests/test_ranges.py +++ b/tests/test_ranges.py @@ -865,7 +865,7 @@ def test_respects_other_range_boundaries(self, other): def test_doesnt_extend_union(self): """ - A union of ranges should be longer than the sum of it's parts. + A union of ranges should not be longer than the sum of it's parts. """ # This is a weird test to include, it is added because this feels like an # obvious risk with the implementation I have used. @@ -886,6 +886,92 @@ def test_finite_range(self): assert 3 in subject + class TestDifference: + def test_range_sets_overlap(self): + range_set = ranges.RangeSet( + [ + ranges.FiniteDateRange( + start=datetime.date(2024, 10, 1), + end=datetime.date(2024, 10, 31), + ) + ] + ) + other = ranges.RangeSet( + [ + ranges.FiniteDateRange( + start=datetime.date(2024, 10, 1), + end=datetime.date(2024, 10, 15), + ) + ] + ) + difference = range_set.difference(other) + + assert difference == ranges.RangeSet( + [ + ranges.FiniteDateRange( + start=datetime.date(2024, 10, 15), + end=datetime.date(2024, 10, 31), + ) + ] + ) + + def test_range_sets_overlap_multiple_ranges(self): + range_set = ranges.RangeSet( + [ + ranges.FiniteDateRange( + start=datetime.date(2024, 10, 1), + end=datetime.date(2024, 10, 31), + ), + ranges.FiniteDateRange( + start=datetime.date(2024, 11, 1), + end=datetime.date(2024, 11, 30), + ), + ] + ) + other = ranges.RangeSet( + [ + ranges.FiniteDateRange( + start=datetime.date(2024, 10, 15), + end=datetime.date(2024, 11, 15), + ) + ] + ) + + difference = range_set.difference(other) + + assert difference == ranges.RangeSet( + [ + ranges.FiniteDateRange( + start=datetime.date(2024, 10, 1), + end=datetime.date(2024, 10, 15), + ), + ranges.FiniteDateRange( + start=datetime.date(2024, 11, 15), + end=datetime.date(2024, 11, 30), + ), + ] + ) + + def test_difference_does_not_overlap(self): + range_set = ranges.RangeSet( + [ + ranges.FiniteDateRange( + start=datetime.date(2024, 1, 1), + end=datetime.date(2024, 1, 31), + ) + ] + ) + other = ranges.RangeSet( + [ + ranges.FiniteDateRange( + start=datetime.date(2024, 3, 1), + end=datetime.date(2024, 3, 31), + ) + ] + ) + difference = range_set.difference(other) + assert difference == range_set + class TestAsFiniteDatetimePeriods: def test_converts(self): diff --git a/xocto/ranges.py b/xocto/ranges.py index 7286b9c..df58281 100644 --- a/xocto/ranges.py +++ b/xocto/ranges.py @@ -876,7 +876,6 @@ def intersection(self, other: Range[datetime.date]) -> Optional["FiniteDateRange if base_intersection is None: return None - assert base_intersection.boundaries == RangeBoundaries.INCLUSIVE_INCLUSIVE return FiniteDateRange(base_intersection.start, base_intersection.end) def union(self, other: Range[datetime.date]) -> Optional["FiniteDateRange"]: