def test_named_date_aliases():
    mlk = datetime.date(2015, 1, 19)
    assert is_named_date(mlk, "Martin Luther King, Jr. Day")
    assert is_named_date(mlk, "Martin Luther King Jr. Day")
    assert is_named_date(mlk, "MLK Day")

    presidents = datetime.date(2015, 2, 16)
    assert is_named_date(presidents, "Washington's Birthday")
    assert is_named_date(presidents, "President's Day")
def test_good_friday():
    assert is_named_date(date(1848, 4, 21), "Good Friday")
    assert is_named_date(date(1905, 4, 21), "Good Friday")
    assert is_named_date(date(1943, 4, 23), "Good Friday")
    assert is_named_date(date(2011, 4, 22), "Good Friday")
    assert is_named_date(date(2163, 4, 22), "Good Friday")
    assert is_named_date(date(2383, 4, 22), "Good Friday")
def test_creation_via_custom_function():
    register_named_date(
        "CustomDate",
        custom_func=lambda x: x.day == 25)
    assert is_named_date(date(2015, 10, 25), "CustomDate")
    assert is_named_date(date(1999, 12, 25), "CustomDate")
    assert not is_named_date(date(2015, 10, 26), "CustomDate")

    def custom_date_function(the_date):
        return the_date.month == 7

    register_named_date(
        "CustomDate2",
        custom_func=custom_date_function)
    assert is_named_date(date(2015, 7, 25), "CustomDate2")
    assert is_named_date(date(1999, 7, 25), "CustomDate2")
    assert not is_named_date(date(2015, 10, 25), "CustomDate2")
def test_named_date_creation():
    register_named_date("MyDate", 11, 3, nth=4)
    assert is_named_date(date(2015, 11, 26), "MyDate")
    assert is_named_date(date(2016, 11, 24), "MyDate")
    assert is_named_date(date(2017, 11, 23), "MyDate")
    assert not is_named_date(date(2014, 11, 26), "MyDate")
    assert not is_named_date(date(2015, 11, 25), "MyDate")
    assert not is_named_date(date(2015, 11, 27), "MyDate")

    register_named_date("MyDateHard", 11, 26)
    assert is_named_date(date(2016, 11, 26), "MyDateHard")
    assert is_named_date(date(2015, 11, 26), "MyDateHard")
    assert is_named_date(date(2014, 11, 26), "MyDateHard")
    assert not is_named_date(date(2015, 11, 25), "MyDateHard")
    assert not is_named_date(date(2016, 11, 24), "MyDateHard")

    register_named_date("SpecialDate", 9, 25)
    assert is_named_date(date(1937, 9, 25), "SpecialDate")
    assert is_named_date(date(2014, 9, 25), "SpecialDate")
    assert not is_named_date(date(2014, 12, 17), "SpecialDate")
def test_non_existing_named_date():
    clear_named_dates()  # Just to be sure nothing exists.
    with pytest.raises(NamedDateKeyError):
        is_named_date(date(2000, 1, 1), "NotANamedDate")
def test_named_dates_persist():
    # Test order matters.
    # Depends on test_named_date_creation having already run.
    assert is_named_date(date(2015, 11, 26), "MyDate")
def test_memorial_day():
    assert is_named_date(date(2015, 5, 25), "Memorial Day")
    assert is_named_date(date(2016, 5, 30), "Memorial Day")
    assert is_named_date(date(1971, 5, 31), "Memorial Day")