import datetime import dates from dates import Precision def test_easter_known_years(): # Anonymous Gregorian algorithm — verified against published tables assert dates.easter(2024) == datetime.date(2024, 3, 31) assert dates.easter(2000) == datetime.date(2000, 4, 23) assert dates.easter(1922) == datetime.date(1922, 4, 16) assert dates.easter(1888) == datetime.date(1888, 4, 1) def test_resolve_feast_movable(): assert dates.resolve_feast_or_season("Pfingsten", 1922) == ("1922-06-04", Precision.DAY) assert dates.resolve_feast_or_season("Ostern", 2024) == ("2024-03-31", Precision.DAY) assert dates.resolve_feast_or_season("Pfingstmontag", 1922) == ("1922-06-05", Precision.DAY) def test_resolve_feast_fixed(): assert dates.resolve_feast_or_season("Weihnachten", 1900) == ("1900-12-25", Precision.DAY) assert dates.resolve_feast_or_season("Neujahr", 1910) == ("1910-01-01", Precision.DAY) def test_resolve_season(): assert dates.resolve_feast_or_season("Herbst", 1913) == ("1913-10-01", Precision.SEASON) assert dates.resolve_feast_or_season("Sommer", 1910) == ("1910-07-01", Precision.SEASON) def test_resolve_unknown_token_returns_none(): assert dates.resolve_feast_or_season("Freitag", 1919) is None def test_expand_year(): assert dates.expand_year("1888") == 1888 assert dates.expand_year("889") == 1889 # 3-digit -> 1DDD assert dates.expand_year("923") == 1923 assert dates.expand_year("08") == 1908 # 00..57 -> 19xx assert dates.expand_year("17") == 1917 assert dates.expand_year("57") == 1957 assert dates.expand_year("73") == 1873 # 73..99 -> 18xx assert dates.expand_year("99") == 1899 assert dates.expand_year("65") is None # 58..72 ambiguous assert dates.expand_year("x") is None