@@ -113,20 +113,25 @@ def test_init_basic_datetime_timezone(self):
113113 assert interval .end == datetime .datetime (2026 , 11 , 12 , 23 , 52 , 22 , tzinfo = datetime .timezone .utc )
114114
115115 @pytest .mark .parametrize (
116- ["given " , "expected" ],
116+ ["interval " , "expected" ],
117117 [
118- (["2026-09-10" , "2026-11-12" ], DateTimeInterval ("2026-09-10" , "2026-11-12" )),
119- (("2026-09-10" , "2026-11-12" ), DateTimeInterval ("2026-09-10" , "2026-11-12" )),
120- ({"start" : "2026-09-10" , "end" : "2026-11-12" }, DateTimeInterval ("2026-09-10" , "2026-11-12" )),
121- ("foobar" , None ),
122- (["2026-09-10" ], None ),
123- (["2026-09-10" , "2026-11-12" , "2026-12-01" ], None ),
124- ({"color" : "green" }, None ),
125- ({"start" : "2026-09-10" }, None ),
118+ (DateTimeInterval ("2026-09-10" , "2026-09-20" ), True ),
119+ (DateTimeInterval ("2026-09-10T00:00:00" , "2026-09-20T00:00:00" ), True ),
120+ (DateTimeInterval ("2026-09-10T01:00:00+01:00" , "2026-09-20T00:00:00" ), True ),
121+ (DateTimeInterval ("2026-09-10T01:00:00" , "2026-09-20T00:00:00" ), False ),
126122 ],
127123 )
128- def test_try_from (self , given , expected ):
129- assert DateTimeInterval .try_from (given ) == expected
124+ def test_equality (self , interval , expected ):
125+ ref = DateTimeInterval ("2026-09-10" , "2026-09-20" )
126+ assert (ref == interval ) == expected
127+ assert (interval == ref ) == expected
128+
129+ def test_equality_end_inclusive (self ):
130+ d1 = "2026-09-10"
131+ d2 = "2026-09-20"
132+ assert DateTimeInterval (d1 , d2 ) == DateTimeInterval (d1 , d2 , end_inclusive = True )
133+ assert DateTimeInterval (d1 , d2 ) != DateTimeInterval (d1 , d2 , end_inclusive = False )
134+ assert DateTimeInterval (d1 , d2 , end_inclusive = False ) == DateTimeInterval (d1 , d2 , end_inclusive = False )
130135
131136 def test_as_tuple (self ):
132137 interval = DateTimeInterval ("2026-09-10" , "2026-11-12T11:22:33Z" )
@@ -174,3 +179,27 @@ def test_intersection(self, interval1, interval2, expected):
174179 interval2 = DateTimeInterval (* interval2 )
175180 assert interval1 .intersection (interval2 ) == expected
176181 assert interval2 .intersection (interval1 ) == expected
182+
183+ @pytest .mark .parametrize (
184+ ["interval1" , "interval2" , "expected" ],
185+ [
186+ (
187+ DateTimeInterval ("2026-08-20" , "2026-09-01" ),
188+ DateTimeInterval ("2026-09-01" , "2026-09-30" ),
189+ DateTimeInterval ("2026-09-01" , "2026-09-01" ),
190+ ),
191+ (
192+ DateTimeInterval ("2026-08-20" , "2026-09-01" , end_inclusive = False ),
193+ DateTimeInterval ("2026-09-01" , "2026-09-30" ),
194+ None ,
195+ ),
196+ (
197+ DateTimeInterval ("2026-08-20" , "2026-09-01" , end_inclusive = False ),
198+ DateTimeInterval ("2026-08-25" , "2026-09-30" ),
199+ DateTimeInterval ("2026-08-25" , "2026-09-01" , end_inclusive = False ),
200+ ),
201+ ],
202+ )
203+ def test_intersection_end_inclusive (self , interval1 , interval2 , expected ):
204+ assert interval1 .intersection (interval2 ) == expected
205+ assert interval2 .intersection (interval1 ) == expected
0 commit comments