@@ -865,7 +865,7 @@ def test_respects_other_range_boundaries(self, other):
865
865
866
866
def test_doesnt_extend_union (self ):
867
867
"""
868
- A union of ranges should be longer than the sum of it's parts.
868
+ A union of ranges should not be longer than the sum of it's parts.
869
869
"""
870
870
# This is a weird test to include, it is added because this feels like an
871
871
# obvious risk with the implementation I have used.
@@ -886,6 +886,118 @@ def test_finite_range(self):
886
886
887
887
assert 3 in subject
888
888
889
+ class TestDifference :
890
+ def test_paco (self ):
891
+ r1 = ranges .FiniteDateRange (
892
+ start = datetime .date (2024 , 10 , 1 ),
893
+ end = datetime .date (2024 , 10 , 30 ),
894
+ )
895
+ r2 = ranges .FiniteDateRange (
896
+ start = datetime .date (2024 , 10 , 5 ),
897
+ end = datetime .date (2024 , 10 , 15 ),
898
+ )
899
+ r3 = ranges .FiniteDateRange (
900
+ start = datetime .date (2024 , 12 , 1 ),
901
+ end = datetime .date (2024 , 12 , 30 ),
902
+ )
903
+ f1 = ranges .FiniteRangeSet ([r1 ])
904
+ f2 = ranges .FiniteRangeSet ([r2 ])
905
+ f3 = ranges .FiniteRangeSet ([r3 ])
906
+ r1 .difference (r2 )
907
+ r1 .difference (r3 )
908
+
909
+ f1 - f2
910
+
911
+
912
+
913
+ def test_range_sets_overlap (self ):
914
+ range_set = ranges .FiniteRangeSet (
915
+ [
916
+ ranges .FiniteDateRange (
917
+ start = datetime .date (2024 , 10 , 1 ),
918
+ end = datetime .date (2024 , 10 , 31 ),
919
+ )
920
+ ]
921
+ )
922
+ other = ranges .FiniteRangeSet (
923
+ [
924
+ ranges .FiniteDateRange (
925
+ start = datetime .date (2024 , 10 , 1 ),
926
+ end = datetime .date (2024 , 10 , 15 ),
927
+ )
928
+ ]
929
+ )
930
+ difference = range_set .difference (other )
931
+
932
+ assert difference == ranges .FiniteRangeSet (
933
+ [
934
+ ranges .FiniteDateRange (
935
+ start = datetime .date (2024 , 10 , 15 ),
936
+ end = datetime .date (2024 , 10 , 31 ),
937
+ )
938
+ ]
939
+ )
940
+
941
+ def test_range_sets_overlap_multiple_ranges (self ):
942
+ range_set = ranges .FiniteRangeSet (
943
+ [
944
+ ranges .FiniteDateRange (
945
+ start = datetime .date (2024 , 1 , 1 ),
946
+ end = datetime .date (2024 , 2 , 28 ),
947
+ ),
948
+ ranges .FiniteDateRange (
949
+ start = datetime .date (2024 , 5 , 1 ),
950
+ end = datetime .date (2024 , 6 , 30 ),
951
+ ),
952
+ ]
953
+ )
954
+ other = ranges .FiniteRangeSet (
955
+ [
956
+ ranges .FiniteDateRange (
957
+ start = datetime .date (2024 , 1 , 1 ),
958
+ end = datetime .date (2024 , 2 , 15 ),
959
+ ),
960
+ ranges .FiniteDateRange (
961
+ start = datetime .date (2024 , 5 , 15 ),
962
+ end = datetime .date (2024 , 6 , 30 ),
963
+ )
964
+ ]
965
+ )
966
+ difference = range_set .difference (other )
967
+
968
+ assert difference == ranges .FiniteRangeSet (
969
+ [
970
+ ranges .FiniteDateRange (
971
+ start = datetime .date (2024 , 2 , 15 ),
972
+ end = datetime .date (2024 , 2 , 28 ),
973
+ ),
974
+ ranges .FiniteDateRange (
975
+ start = datetime .date (2024 , 5 ,1 ),
976
+ end = datetime .date (2024 , 5 , 15 ),
977
+ ),
978
+ ]
979
+ )
980
+
981
+ def test_difference_does_not_overlap (self ):
982
+ range_set = ranges .FiniteRangeSet (
983
+ [
984
+ ranges .FiniteDateRange (
985
+ start = datetime .date (2024 , 1 , 1 ),
986
+ end = datetime .date (2024 , 1 , 31 ),
987
+ )
988
+ ]
989
+ )
990
+ other = ranges .FiniteRangeSet (
991
+ [
992
+ ranges .FiniteDateRange (
993
+ start = datetime .date (2024 , 3 , 1 ),
994
+ end = datetime .date (2024 , 3 , 31 ),
995
+ )
996
+ ]
997
+ )
998
+ difference = range_set .difference (other )
999
+ assert difference == range_set
1000
+
889
1001
890
1002
class TestAsFiniteDatetimePeriods :
891
1003
def test_converts (self ):
0 commit comments