@@ -310,6 +310,19 @@ def test_lte(self, earlier, later):
310310 assert earlier <= later
311311 assert later >= earlier
312312
313+ def test_gt_lt_unknown_years (self ):
314+ # unknown years cannot be compared on either side...
315+ year100 = Undate (100 )
316+ some_january = Undate (month = 1 )
317+ assert not year100 < some_january
318+ assert not year100 <= some_january
319+ assert not year100 > some_january
320+ assert not year100 >= some_january
321+ assert not some_january < year100
322+ assert not some_january <= year100
323+ assert not some_january > year100
324+ assert not some_january >= year100
325+
313326 def test_lt_notimplemented (self ):
314327 # how to compare mixed precision where dates overlap?
315328 # if the second date falls *within* earliest/latest,
@@ -362,6 +375,9 @@ def test_contains(self, date1, date2):
362375 (Undate (1980 , "XX" ), Undate (1980 , "XX" )),
363376 # - partially unknown month to unknown month
364377 (Undate (1801 , "1X" ), Undate (1801 , "XX" )),
378+ # fully unknown year
379+ (Undate (month = 6 , day = 1 ), Undate (2022 )),
380+ (Undate (1950 ), Undate (day = 31 )),
365381 ]
366382
367383 @pytest .mark .parametrize ("date1,date2" , testdata_not_contains )
@@ -500,6 +516,7 @@ def test_partiallyknownyear_duration(self):
500516 assert Undate ("XXX" , calendar = "Hebrew" ).duration ().days == UnInt (353 , 385 )
501517
502518 def test_known_year (self ):
519+ # known OR partially known
503520 assert Undate (2022 ).known_year is True
504521 assert Undate (month = 2 , day = 5 ).known_year is False
505522 # partially known year is not known
@@ -521,6 +538,34 @@ def test_is_known_day(self):
521538 assert Undate (month = 1 , day = "X5" ).is_known ("day" ) is False
522539 assert Undate (month = 1 , day = "XX" ).is_known ("day" ) is False
523540
541+ def test_unknown_year (self ):
542+ # fully unknown year
543+ assert Undate (month = 2 , day = 5 ).unknown_year is True
544+ # known or partially known years = all false for unknown
545+ assert Undate (2022 ).unknown_year is False
546+ # partially known year is not unknown
547+ assert Undate ("19XX" ).unknown_year is False
548+ # fully known string year should be known
549+ assert Undate ("1900" ).unknown_year is False
550+
551+ def test_is_unknown_month (self ):
552+ # fully unknown month
553+ assert Undate (2022 ).is_unknown ("month" ) is True
554+ assert Undate (day = 10 ).is_unknown ("month" ) is True
555+ assert Undate (2022 , 2 ).is_unknown ("month" ) is False
556+ assert Undate (2022 , "5" ).is_unknown ("month" ) is False
557+ assert Undate (2022 , "1X" ).is_unknown ("month" ) is False
558+ assert Undate (2022 , "XX" ).is_unknown ("month" ) is False
559+
560+ def test_is_unknown_day (self ):
561+ # fully unknown day
562+ assert Undate (1984 ).is_unknown ("day" ) is True
563+ assert Undate (month = 5 ).is_unknown ("day" ) is True
564+ assert Undate (month = 1 , day = 3 ).is_unknown ("day" ) is False
565+ assert Undate (month = 1 , day = "5" ).is_unknown ("day" ) is False
566+ assert Undate (month = 1 , day = "X5" ).is_unknown ("day" ) is False
567+ assert Undate (month = 1 , day = "XX" ).is_unknown ("day" ) is False
568+
524569 def test_parse (self ):
525570 assert Undate .parse ("1984" , "EDTF" ) == Undate (1984 )
526571 assert Undate .parse ("1984-04" , "EDTF" ) == Undate (1984 , 4 )
0 commit comments