Repository: dr-prodigy/python-holidays

Issue:
pop_named() sometimes generates an exception
This simple code block generates an exception when I try to pop "Columbus Day" (last line):

```
from datetime import date
  
import holidays

us_holidays = holidays.CountryHoliday('US', prov=None, state='CA', years=2022)

print(us_holidays.get('2022-10-10').format("%s"))

us_holidays.pop_named("Columbus Day")
```

The exception is `dictionary changed size during iteration`, and it seems to be related to popping elements out of a dictionary while you're iterating through it: https://stackoverflow.com/questions/11941817/how-to-avoid-runtimeerror-dictionary-changed-size-during-iteration-error.  The element to be popped isn't actually removed.

I'm far from a competent Python programmer, but iterating over `list(self)` seems to solve the problem for me - no exception, and the item is removed properly:

```
    def get_named(self, name):
        # find all dates matching provided name (accepting partial
        # strings too, case insensitive), returning them in a list
        return [key for key in list(self) if name.lower() in self[key].lower()]
```

Discussion:

Patch:
diff --git a/CHANGES b/CHANGES
index e1bd7d2f..ae8f75c8 100644
--- a/CHANGES
+++ b/CHANGES
@@ -5,11 +5,15 @@ Released ????? ??, ????
 
 - Support for Djibouti (Abdisamade)
 - Support for United Arab Emirates (marcomasulli, mborsetti)
+- Support for Chile (mborsetti, dr-p)
 - Korea 2020 fix (MYUNGJE, dr-p)
 - Australia 2020 fix (bencollerson, trauty-is-me)
-- Croatia fixes (jangrg, dr-p)
-- United States fixes (raffg, dr-p)
+- Croatia fixes and updates (jangrg, mborsetti, dr-p)
+- United States fixes (raffg, bgmiles, dr-p)
 - UK fixes (dr-p, richard-kunert)
+- Russia fixes (tserekh)
+- Ireland fixes (chiuczek)
+- France fix (mborsetti)
 
 
 Version 0.10.3
diff --git a/README.rst b/README.rst
index 2816fdbf..810a6599 100644
--- a/README.rst
+++ b/README.rst
@@ -109,7 +109,8 @@ Bulgaria            BG/BLG    None
 Burundi             BI/BDI    None
 Canada              CA/CAN    prov = AB, BC, MB, NB, NL, NS, NT, NU, **ON** (default),
                               PE, QC, SK, YU
-Chile               CL/CHL    None
+Chile               CL/CHL    state = AI, AN, AP, AR, AT, BI, CO, LI, LL, LR, MA, ML, NB,
+                              RM, TA, VS
 Colombia            CO/COL    None
 Croatia             HR/HRV    None
 Czechia             CZ/CZE    None
@@ -121,7 +122,7 @@ England                       None
 Estonia             EE/EST    None
 EuropeanCentralBank ECB/TAR   Trans-European Automated Real-time Gross Settlement (TARGET2)
 Finland             FI/FIN    None
-France              FRA       **Métropole** (default), Alsace-Moselle, Guadeloupe, Guyane,
+France              FR/FRA    **Métropole** (default), Alsace-Moselle, Guadeloupe, Guyane,
                               Martinique, Mayotte, Nouvelle-Calédonie, La Réunion,
                               Polynésie Française, Saint-Barthélémy, Saint-Martin,
                               Wallis-et-Futuna
@@ -176,7 +177,7 @@ Switzerland         CH/CHE    prov = AG, AR, AI, BL, BS, BE, FR, GE, GL, GR, JU,
 Turkey              TR/TUR    None
 Ukraine             UA/UKR    None
 UnitedArabEmirates  AE/ARE    None
-UnitedKingdom       UK/GB/GBR None
+UnitedKingdom       GB/GBR/UK None
 UnitedStates        US/USA    state = AL, AK, AS, AZ, AR, CA, CO, CT, DE, DC, FL, GA,
                               GU, HI, ID, IL, IN, IA, KS, KY, LA, ME, MD, MH, MA, MI,
                               FM, MN, MS, MO, MT, NE, NV, NH, NJ, NM, NY, NC, ND, MP,
diff --git a/holidays/countries/__init__.py b/holidays/countries/__init__.py
index d3e1d230..a8d8d4c4 100644
--- a/holidays/countries/__init__.py
+++ b/holidays/countries/__init__.py
@@ -30,7 +30,7 @@ from .egypt import Egypt, EG, EGY
 from .estonia import Estonia, EE, EST
 from .european_central_bank import EuropeanCentralBank, ECB, TAR
 from .finland import Finland, FI, FIN
-from .france import France, FRA
+from .france import France, FR, FRA
 from .germany import Germany, DE, DEU
 from .greece import Greece, GR, GRC
 from .honduras import Honduras, HN, HND
diff --git a/holidays/countries/chile.py b/holidays/countries/chile.py
index 44d52ea4..d66b71b4 100644
--- a/holidays/countries/chile.py
+++ b/holidays/countries/chile.py
@@ -14,92 +14,143 @@
 from datetime import date
 
 from dateutil.easter import easter
-from dateutil.relativedelta import relativedelta as rd, FR
+from dateutil.relativedelta import relativedelta as rd, MO, FR, SA
 
 from holidays.constants import JAN, MAY, JUN, JUL, AUG, SEP, OCT, \
     NOV, DEC
-from holidays.constants import WED, THU
+from holidays.constants import TUE, THU, FRI, SAT, SUN
 from holidays.holiday_base import HolidayBase
 
 
 class Chile(HolidayBase):
     # https://www.feriados.cl
+    # http://www.feriadoschilenos.cl/ (excellent history)
     # https://es.wikipedia.org/wiki/Anexo:D%C3%ADas_feriados_en_Chile
 
+    # ISO 3166-2 codes for the principal subdivisions, called regions
+    STATES = ['AI', 'AN', 'AP', 'AR', 'AT', 'BI', 'CO', 'LI', 'LL', 'LR',
+              'MA', 'ML', 'NB', 'RM', 'TA', 'VS']
+
     def __init__(self, **kwargs):
         self.country = 'CL'
         HolidayBase.__init__(self, **kwargs)
 
     def _populate(self, year):
-        # New Year's Day
+        # New Year's Day (Law 2.977)
         self[date(year, JAN, 1)] = "Año Nuevo [New Year's Day]"
+        # Day after, if it's a Sunday (Law 20.983)
+        if year > 2016 and date(year, JAN, 1).weekday() == SUN:
+            self[date(year, JAN, 2)] = "Fiestas Patrias [Holiday]"
 
-        # Holy Week
-        name_fri = "Semana Santa (Viernes Santo)  [Holy day (Holy Friday)]"
+        # Holy Week (Law 2.977)
+        name_fri = "Semana Santa (Viernes Santo) [Good Friday)]"
+        name_sat = "Semana Santa (Sábado Santo) [Good Saturday)]"
         name_easter = 'Día de Pascuas [Easter Day]'
 
         self[easter(year) + rd(weekday=FR(-1))] = name_fri
+        self[easter(year) + rd(weekday=SA(-1))] = name_sat
         self[easter(year)] = name_easter
 
-        # Labor Day
-        name = "Día del Trabajo [Labour Day]"
+        # Labor Day (Law 2.200, renamed with Law 18.018)
+        name = "Día Nacional del Trabajo [Labour Day]"
         self[date(year, MAY, 1)] = name
 
-        # Naval Glories Day
-        name = "Día de las Glorias Navales [Naval Glories Day]"
+        # Naval Glories Day (Law 2.977)
+        name = "Día de las Glorias Navales [Navy Day]"
         self[date(year, MAY, 21)] = name
 
-        # Saint Peter and Saint Paul.
+        # Saint Peter and Saint Paul (Law 18.432)
         name = "San Pedro y San Pablo [Saint Peter and Saint Paul]"
-        self[date(year, JUN, 29)] = name
+        if year < 2020:
+            self[date(year, JUN, 29)] = name
+        else:
+            # floating Monday holiday (Law 19.668)
+            if date(year, JUN, 29).weekday() <= THU:
+                self[date(year, JUN, 29) + rd(date(year, JUN, 29),
+                                              weekday=MO(-1))] = name
+            elif date(year, JUN, 29).weekday() == FRI:
+                self[date(year, JUN, 29) + rd(weekday=MO)] = name
+            else:
+                self[date(year, JUN, 29)] = name
+
+        # Day of Virgin of Carmen (Law 20.148)
+        if year > 2006:
+            name = "Virgen del Carmen [Our Lady of Mount Carmel]"
+            self[date(year, JUL, 16)] = name
+
+        # Day of Assumption of the Virgin (Law 2.977)
+        name = "Asunción de la Virgen [Assumption of Mary]"
+        self[date(year, AUG, 15)] = name
 
-        # Day of Virgin of Carmen.
-        name = "Virgen del Carmen [Virgin of Carmen]"
-        self[date(year, JUL, 16)] = name
+        # National Holiday Friday preceding Independence Day (Law 20.983)
+        if year > 2016 and date(year, SEP, 18).weekday() == SAT:
+            self[date(year, SEP, 17)] = "Fiestas Patrias [Holiday]"
 
-        # Day of Assumption of the Virgin
-        name = "Asunsión de la Virgen [Assumption of the Virgin]"
-        self[date(year, AUG, 15)] = name
+        # National Holiday Monday preceding Independence Day (Law 20.215)
+        if year > 2007 and date(year, SEP, 18).weekday() == TUE:
+            self[date(year, SEP, 17)] = "Fiestas Patrias [Holiday]"
 
-        # Independence Day
+        # Independence Day (Law 2.977)
         name = "Día de la Independencia [Independence Day]"
         self[date(year, SEP, 18)] = name
 
-        # Day of Glories of the Army of Chile
-        name = "Día de las Glorias del Ejército de Chile [Day of " \
-               "Glories of the Army of Chile]"
+        # Day of Glories of the Army of Chile (Law 2.977)
+        name = "Día de las Glorias del Ejército [Army Day]"
         self[date(year, SEP, 19)] = name
-        # National Holidays Ley 20.215
-        name = "Fiestas Patrias [National Holidays]"
-        if year > 2014 and date(year, SEP, 19).weekday() in [WED, THU]:
-            self[date(year, SEP, 20)] = name
 
-        # Day of the Meeting of Two Worlds
+        # National Holiday Friday following Army Day (Law 20.215)
+        if year > 2007 and date(year, SEP, 19).weekday() == THU:
+            self[date(year, SEP, 20)] = "Fiestas Patrias [Holiday]"
+
+        # Day of the Meeting of Two Worlds (Law 3.810)
         if year < 2010:
             self[date(year, OCT, 12)] = "Día de la Raza [Columbus day]"
-        else:
+        elif year < 2020:
             self[date(year, OCT, 12)] = "Día del Respeto a la Diversidad"\
                                         " [Day of the Meeting " \
                                         " of Two Worlds]"
-
-        # National Day of the Evangelical and Protestant Churches
-        name = "Día Nacional de las Iglesias Evangélicas y Protestantes " \
-               " [National Day of the " \
-               " Evangelical and " \
-               " Protestant Churches]"
-        self[date(year, OCT, 31)] = name
-
-        # All Saints Day
+        else:
+            # floating Monday holiday (Law 19.668)
+            name = ("Día del Descubrimiento de dos Mundos [Columbus Day]")
+            if date(year, OCT, 12).weekday() <= THU:
+                self[date(year, OCT, 12) + rd(date(year, OCT, 12),
+                                              weekday=MO(-1))] = name
+            elif date(year, OCT, 12).weekday() == FRI:
+                self[date(year, OCT, 12) + rd(weekday=MO)] = name
+            else:
+                self[date(year, OCT, 12)] = name
+
+        # National Day of the Evangelical and Protestant Churches (Law 20.299)
+        if year > 2007:
+            name = ("Día Nacional de las Iglesias Evangélicas y Protestantes "
+                    " [Reformation Day]")
+            self[date(year, OCT, 31)] = name
+
+        # All Saints Day (Law 2.977)
         name = "Día de Todos los Santos [All Saints Day]"
         self[date(year, NOV, 1)] = name
 
-        # Immaculate Conception
+        # Immaculate Conception (Law 2.977)
         self[date(year, DEC, 8)] = "La Inmaculada Concepción" \
                                    " [Immaculate Conception]"
 
-        # Christmas
+        # Christmas (Law 2.977)
         self[date(year, DEC, 25)] = "Navidad [Christmas]"
 
+        # región de Arica y Parinacota
+        if self.state == 'AP' and year >= 2020:
+            # Law 20.663
+            self[date(year, JUN, 7)] = ("Asalto y Toma del Morro de Arica"
+                                        " [Assault and Capture of Cape Arica]")
+
+        # región de Ñuble
+        if self.state == 'NB' and year >= 2014:
+            # Law 20.678
+            self[date(year, AUG, 20)] =\
+                ("Nacimiento del Prócer de la Independencia"
+                 " (Chillán y Chillán Viejo)"
+                 " [Nativity of Bernardo O'Higgins]")
+
 
 class CL(Chile):
     pass
diff --git a/holidays/countries/croatia.py b/holidays/countries/croatia.py
index 519fe18b..0136f1e3 100644
--- a/holidays/countries/croatia.py
+++ b/holidays/countries/croatia.py
@@ -11,18 +11,18 @@
 #  Website: https://github.com/dr-prodigy/python-holidays
 #  License: MIT (see LICENSE file)
 
-from datetime import date
+from datetime import date, timedelta
 
 from dateutil.easter import easter
-from dateutil.relativedelta import relativedelta as rd
 
-from holidays.constants import JAN, MAY, JUN, AUG, OCT, \
-    NOV, DEC
+from holidays.constants import JAN, MAY, JUN, AUG, OCT, NOV, DEC
 from holidays.holiday_base import HolidayBase
 
 
 class Croatia(HolidayBase):
 
+    # Updated with act 022-03 / 19-01 / 219 of 14 November 2019
+    # https://narodne-novine.nn.hr/clanci/sluzbeni/2019_11_110_2212.html
     # https://en.wikipedia.org/wiki/Public_holidays_in_Croatia
 
     def __init__(self, **kwargs):
@@ -32,6 +32,7 @@ class Croatia(HolidayBase):
     def _populate(self, year):
         # New years
         self[date(year, JAN, 1)] = "Nova Godina"
+
         # Epiphany
         self[date(year, JAN, 6)] = "Sveta tri kralja"
         easter_date = easter(year)
@@ -39,23 +40,23 @@ class Croatia(HolidayBase):
         # Easter
         self[easter_date] = "Uskrs"
         # Easter Monday
-        self[easter_date + rd(days=1)] = "Uskršnji ponedjeljak"
+        self[easter_date + timedelta(days=1)] = "Uskrsni ponedjeljak"
 
         # Corpus Christi
-        self[easter_date + rd(days=60)] = "Tijelovo"
+        self[easter_date + timedelta(days=60)] = "Tijelovo"
 
         # International Workers' Day
         self[date(year, MAY, 1)] = "Međunarodni praznik rada"
 
+        # Statehood day (new)
         if year >= 2020:
-            # Statehood day
             self[date(year, MAY, 30)] = "Dan državnosti"
 
         # Anti-fascist struggle day
         self[date(year, JUN, 22)] = "Dan antifašističke borbe"
 
+        # Statehood day (old)
         if year < 2020:
-            # Statehood day
             self[date(year, JUN, 25)] = "Dan državnosti"
 
         # Victory and Homeland Thanksgiving Day
@@ -64,17 +65,16 @@ class Croatia(HolidayBase):
         # Assumption of Mary
         self[date(year, AUG, 15)] = "Velika Gospa"
 
+        # Independence Day (old)
         if year < 2020:
-            # Independence Day
             self[date(year, OCT, 8)] = "Dan neovisnosti"
 
         # All Saints' Day
-        self[date(year, NOV, 1)] = "Dan svih svetih"
+        self[date(year, NOV, 1)] = "Svi sveti"
 
         if year >= 2020:
             # Memorial day
-            self[date(year, NOV, 18)] =\
-                "Dan sjećanja na žrtve Domovinskog rata"
+            self[date(year, NOV, 18)] = "Dan sjećanja"
 
         # Christmas day
         self[date(year, DEC, 25)] = "Božić"
diff --git a/holidays/countries/france.py b/holidays/countries/france.py
index 8f57f518..66d99534 100644
--- a/holidays/countries/france.py
+++ b/holidays/countries/france.py
@@ -123,6 +123,10 @@ class France(HolidayBase):
             self[date(year, DEC, 20)] = "Abolition de l'esclavage"
 
 
-# FR already exists (Friday), we don't want to mess it up
+# *Warning* FR is also used by dateutlis (Friday), so be careful with its use
+class FR(France):
+    pass
+
+
 class FRA(France):
     pass
diff --git a/holidays/countries/russia.py b/holidays/countries/russia.py
index 8e935295..41d36c92 100644
--- a/holidays/countries/russia.py
+++ b/holidays/countries/russia.py
@@ -53,8 +53,12 @@ class Russia(HolidayBase):
         self[date(year, MAY, 9)] = "День Победы"
         # Russia's Day
         self[date(year, JUN, 12)] = "День России"
-        # Unity Day
-        self[date(year, NOV, 4)] = "День народного единства"
+        if year >= 2005:
+            # Unity Day
+            self[date(year, NOV, 4)] = "День народного единства"
+        else:
+            # October Revolution Day
+            self[date(year, NOV, 7)] = "День Октябрьской революции"
 
 
 class RU(Russia):
diff --git a/holidays/countries/united_kingdom.py b/holidays/countries/united_kingdom.py
index 4054b559..dfa92fae 100644
--- a/holidays/countries/united_kingdom.py
+++ b/holidays/countries/united_kingdom.py
@@ -166,6 +166,8 @@ class UnitedKingdom(HolidayBase):
 
         # Boxing Day
         name = "Boxing Day"
+        if self.country == "Ireland":
+            name = "St. Stephen's Day"
         self[date(year, DEC, 26)] = name
         if self.observed and date(year, DEC, 26).weekday() == SAT:
             self[date(year, DEC, 28)] = name + " (Observed)"
diff --git a/holidays/countries/united_states.py b/holidays/countries/united_states.py
index 595005e5..428eac78 100644
--- a/holidays/countries/united_states.py
+++ b/holidays/countries/united_states.py
@@ -452,12 +452,12 @@ class UnitedStates(HolidayBase):
         # American Indian Heritage Day
         # Family Day
         # New Mexico Presidents' Day
-        if (self.state in ('DE', 'FL', 'NH', 'NC', 'OK', 'TX', 'WV') and
+        if (self.state in ('CA', 'DE', 'FL', 'NH', 'NC', 'OK', 'TX', 'WV') and
             year >= 1975) \
                 or (self.state == 'IN' and year >= 2010) \
                 or (self.state == 'MD' and year >= 2008) \
                 or self.state in ('NV', 'NM'):
-            if self.state in ('DE', 'NH', 'NC', 'OK', 'WV'):
+            if self.state in ('CA', 'DE', 'NH', 'NC', 'OK', 'WV'):
                 name = "Day After Thanksgiving"
             elif self.state in ('FL', 'TX'):
                 name = "Friday After Thanksgiving"
diff --git a/holidays/holiday_base.py b/holidays/holiday_base.py
index 813d5180..8143e4eb 100644
--- a/holidays/holiday_base.py
+++ b/holidays/holiday_base.py
@@ -147,7 +147,8 @@ class HolidayBase(dict):
     def get_named(self, name):
         # find all dates matching provided name (accepting partial
         # strings too, case insensitive), returning them in a list
-        return [key for key in self if name.lower() in self[key].lower()]
+        matches = [key for key in self if name.lower() in self[key].lower()]
+        return matches
 
     def pop(self, key, default=None):
         if default is None:


Test patch:
diff --git a/tests.py b/tests.py
index 6832fdd4..e933c165 100644
--- a/tests.py
+++ b/tests.py
@@ -1937,6 +1937,7 @@ class TestUS(unittest.TestCase):
         self.assertIn(date(2017, 11, 20), pr_holidays)
 
     def test_thanksgiving_day(self):
+        ca_holidays = holidays.US(state='CA')
         de_holidays = holidays.US(state='DE')
         fl_holidays = holidays.US(state='FL')
         in_holidays = holidays.US(state='IN')
@@ -1955,6 +1956,8 @@ class TestUS(unittest.TestCase):
             self.assertNotIn(dt + relativedelta(days=-1), self.holidays)
             self.assertNotIn(dt + relativedelta(days=+1), self.holidays)
             self.assertIn(dt + relativedelta(days=+1), de_holidays)
+            self.assertEqual(ca_holidays.get(dt + relativedelta(days=+1)),
+                             "Day After Thanksgiving")
             self.assertEqual(de_holidays.get(dt + relativedelta(days=+1)),
                              "Day After Thanksgiving")
             self.assertEqual(nh_holidays.get(dt + relativedelta(days=+1)),
@@ -3974,8 +3977,8 @@ class TestFrance(unittest.TestCase):
 
     def setUp(self):
         self.holidays = holidays.France()
-        self.prov_holidays = {prov: holidays.France(prov=prov)
-                              for prov in holidays.France.PROVINCES}
+        self.prov_holidays = {prov: holidays.FR(prov=prov)
+                              for prov in holidays.FRA.PROVINCES}
 
     def test_2017(self):
         self.assertIn(date(2017, 1, 1), self.holidays)
@@ -4949,6 +4952,9 @@ class TestCroatia(unittest.TestCase):
         self.assertIn(date(2018, 11, 1), self.holidays)
         self.assertIn(date(2018, 12, 25), self.holidays)
         self.assertIn(date(2018, 12, 26), self.holidays)
+
+    def test_2020_new(self):
+        self.assertIn(date(2020, 5, 30), self.holidays)
         self.assertIn(date(2020, 11, 18), self.holidays)
 
 
@@ -5282,6 +5288,10 @@ class TestRussia(unittest.TestCase):
 
     def setUp(self):
         self.holidays = holidays.RU()
+        
+    def test_before_2005(self):
+        self.assertIn(date(2004, 11, 7), self.holidays)
+        self.assertNotIn(date(2004, 11, 4), self.holidays)
 
     def test_2018(self):
         # https://en.wikipedia.org/wiki/Public_holidays_in_Russia
@@ -5299,6 +5309,7 @@ class TestRussia(unittest.TestCase):
         self.assertIn(date(2018, 5, 9), self.holidays)
         self.assertIn(date(2018, 6, 12), self.holidays)
         self.assertIn(date(2018, 11, 4), self.holidays)
+        self.assertNotIn(date(2018, 11, 7), self.holidays)
 
 
 class TestLatvia(unittest.TestCase):
@@ -5733,6 +5744,17 @@ class TestNigeria(unittest.TestCase):
 class TestChile(unittest.TestCase):
     def setUp(self):
         self.holidays = holidays.Chile()
+        self.holidays_AP = holidays.CL(state='AP')
+        self.holidays_NB = holidays.CHL(state='NB')
+
+    def test_2009(self):
+        self.assertIn(date(2009, 10, 12), self.holidays)
+
+    def test_2017(self):
+        self.assertIn(date(2017, 1, 2), self.holidays)
+
+    def test_2018(self):
+        self.assertIn(date(2018, 9, 17), self.holidays)
 
     def test_2019(self):
         # No laborables (sector público) not included
@@ -5747,12 +5769,58 @@ class TestChile(unittest.TestCase):
         self.assertIn(date(2019, 9, 18), self.holidays)
         self.assertIn(date(2019, 9, 19), self.holidays)
         self.assertIn(date(2019, 9, 20), self.holidays)
-        self.assertIn(date(2009, 10, 12), self.holidays)
         self.assertIn(date(2019, 10, 12), self.holidays)
         self.assertIn(date(2019, 11, 1), self.holidays)
         self.assertIn(date(2019, 12, 8), self.holidays)
         self.assertIn(date(2019, 12, 25), self.holidays)
 
+    def test_2020(self):
+        # from https://feriados.cl/2020.htm
+        self.assertIn(date(2020, 1, 1), self.holidays)
+        self.assertIn(date(2020, 4, 10), self.holidays)
+        self.assertIn(date(2020, 4, 11), self.holidays)
+        self.assertIn(date(2020, 5, 1), self.holidays)
+        self.assertIn(date(2020, 5, 21), self.holidays)
+        self.assertIn(date(2020, 6, 29), self.holidays)
+        self.assertIn(date(2020, 7, 16), self.holidays)
+        self.assertIn(date(2020, 8, 15), self.holidays)
+        self.assertIn(date(2020, 9, 18), self.holidays)
+        self.assertIn(date(2020, 9, 19), self.holidays)
+        self.assertIn(date(2020, 10, 12), self.holidays)
+        self.assertIn(date(2020, 10, 31), self.holidays)
+        self.assertIn(date(2020, 11, 1), self.holidays)
+        self.assertIn(date(2020, 12, 8), self.holidays)
+        self.assertIn(date(2020, 12, 25), self.holidays)
+        self.assertIn(date(2020, 6, 7), self.holidays_AP)
+        self.assertIn(date(2020, 8, 20), self.holidays_NB)
+
+    def test_2021(self):
+        # from https://feriados.cl/2021.htm
+        self.assertIn(date(2021, 1, 1), self.holidays)
+        self.assertIn(date(2021, 4, 2), self.holidays)
+        self.assertIn(date(2021, 4, 3), self.holidays)
+        self.assertIn(date(2021, 5, 1), self.holidays)
+        self.assertIn(date(2021, 5, 21), self.holidays)
+        self.assertIn(date(2021, 6, 28), self.holidays)
+        self.assertIn(date(2021, 7, 16), self.holidays)
+        self.assertIn(date(2021, 8, 15), self.holidays)
+        self.assertIn(date(2021, 9, 18), self.holidays)
+        self.assertIn(date(2021, 9, 19), self.holidays)
+        self.assertIn(date(2021, 10, 11), self.holidays)
+        self.assertIn(date(2021, 10, 31), self.holidays)
+        self.assertIn(date(2021, 11, 1), self.holidays)
+        self.assertIn(date(2021, 12, 8), self.holidays)
+        self.assertIn(date(2021, 12, 25), self.holidays)
+        self.assertIn(date(2021, 6, 7), self.holidays_AP)
+        self.assertIn(date(2021, 8, 20), self.holidays_NB)
+
+    def test_2024(self):
+        self.assertIn(date(2024, 10, 12), self.holidays)
+
+    def test_2029(self):
+        self.assertIn(date(2029, 7, 2), self.holidays)
+        self.assertIn(date(2029, 10, 15), self.holidays)
+
 
 class TestDominicanRepublic(unittest.TestCase):
     def setUp(self):