Repository: dr-prodigy/python-holidays

Issue:
2022-01-03 was not a holiday for NYSE (XNYS)
More info: https://www.nyse.com/markets/hours-calendars

Discussion:
coveralls: ## Pull Request Test Coverage Report for [Build 3009828274](https://coveralls.io/builds/52286647)

* **9** of **9**   **(100.0%)**  changed or added relevant lines in **1** file are covered.
* No unchanged relevant lines lost coverage.
* Overall coverage increased (+**0.0001%**) to **99.625%**

---



|  Totals | [![Coverage Status](https://coveralls.io/builds/52286647/badge)](https://coveralls.io/builds/52286647) |
| :-- | --: |
| Change from base [Build 2897604800](https://coveralls.io/builds/51817704): |  0.0001% |
| Covered Lines: | 6428 |
| Relevant Lines: | 6440 |

---
##### 💛  - [Coveralls](https://coveralls.io)


Patch:
diff --git a/CHANGES b/CHANGES
index 266dee51..1f0f973a 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,12 @@
+Version 0.16
+============
+
+Released ?????? ??, ????
+
+- Support for Moldova #695 (Thedand)
+- Support for Bolivia #698 (kasya)
+- UK updates #702 (JPunter)
+
 Version 0.15
 ============
 
diff --git a/README.rst b/README.rst
index 7a5f90fe..aab54aa7 100644
--- a/README.rst
+++ b/README.rst
@@ -141,6 +141,9 @@ following countries and their subdivisions are available:
    * - Belgium
      - BE
      - None
+   * - Bolivia
+     - BO
+     - Departments: B, C, H, L, N, O, P, S, T
    * - Botswana
      - BW
      - None
@@ -282,6 +285,9 @@ following countries and their subdivisions are available:
    * - Mexico
      - MX
      - None
+   * - Moldova
+     - MD
+     - None
    * - Morocco
      - MA
      - None
diff --git a/holidays/__init__.py b/holidays/__init__.py
index 53efbf99..56851d2a 100644
--- a/holidays/__init__.py
+++ b/holidays/__init__.py
@@ -33,4 +33,4 @@ from holidays.utils import (
     list_supported_financial,
 )
 
-__version__ = "0.15"
+__version__ = "0.16"
diff --git a/holidays/countries/__init__.py b/holidays/countries/__init__.py
index 457ebf4e..8b4369b3 100644
--- a/holidays/countries/__init__.py
+++ b/holidays/countries/__init__.py
@@ -18,6 +18,7 @@ from .azerbaijan import Azerbaijan, AZ, AZE
 from .bangladesh import Bangladesh, BD, BGD
 from .belarus import Belarus, BY, BLR
 from .belgium import Belgium, BE, BEL
+from .bolivia import Bolivia, BO, BOL
 from .botswana import Botswana, BW, BWA
 from .brazil import Brazil, BR, BRA
 from .bulgaria import Bulgaria, BG, BLG
@@ -65,6 +66,7 @@ from .malawi import Malawi, MW, MWI
 from .malaysia import Malaysia, MY, MYS
 from .malta import Malta, MT, MLT
 from .mexico import Mexico, MX, MEX
+from .moldova import Moldova, MD
 from .morocco import Morocco, MA, MOR
 from .mozambique import Mozambique, MZ, MOZ
 from .namibia import Namibia, NA, NAM
diff --git a/holidays/countries/bolivia.py b/holidays/countries/bolivia.py
new file mode 100644
index 00000000..9016d745
--- /dev/null
+++ b/holidays/countries/bolivia.py
@@ -0,0 +1,162 @@
+#  python-holidays
+#  ---------------
+#  A fast, efficient Python library for generating country, province and state
+#  specific sets of holidays on the fly. It aims to make determining whether a
+#  specific date is a holiday as fast and flexible as possible.
+#
+#  Authors: dr-prodigy <maurizio.montel@gmail.com> (c) 2017-2022
+#           ryanss <ryanssdev@icloud.com> (c) 2014-2017
+#  Website: https://github.com/dr-prodigy/python-holidays
+#  License: MIT (see LICENSE file)
+#  Copyright: Kateryna Golovanova <kate@kgthreads.com>, 2022
+
+from datetime import date
+
+from dateutil.easter import easter
+from dateutil.relativedelta import FR
+from dateutil.relativedelta import relativedelta as rd
+from holidays.constants import (
+    APR,
+    AUG,
+    DEC,
+    JAN,
+    JUL,
+    JUN,
+    MAY,
+    NOV,
+    OCT,
+    SEP,
+    SUN,
+)
+from holidays.holiday_base import HolidayBase
+
+
+class Bolivia(HolidayBase):
+    """
+    Bolivia holidays.
+    See https://en.wikipedia.org/wiki/Public_holidays_in_Bolivia for details.
+    """
+
+    country = "BO"
+    subdivisions = [
+        "B",
+        "C",
+        "H",
+        "L",
+        "N",
+        "O",
+        "P",
+        "S",
+        "T",
+    ]
+
+    def _populate(self, year):
+        # New Year's Day.
+        name = "Año Nuevo"
+        if year >= 1825:
+            self[date(year, JAN, 1)] = name
+
+        if self.observed and date(year, JAN, 1).weekday() == SUN:
+            self[date(year, JAN, 1) + rd(days=+1)] = f"{name} (Observed)"
+
+        # Plurinational State Foundation Day.
+        if year >= 2010:
+            self[
+                date(year, JAN, 22)
+            ] = "Nacimiento del Estado Plurinacional de Bolivia"
+
+        # Good Friday.
+        self[easter(year) + rd(weekday=FR(-1))] = "Viernes Santo"
+
+        # La Tablada.
+        if self.subdiv == "T":
+            self[date(year, APR, 15)] = "La Tablada"
+
+        # Carnival in Oruro.
+        if self.subdiv == "O":
+            self[easter(year) + rd(days=-51)] = "Carnaval de Oruro"
+
+        # Carnival Monday (Observed on Tuesday).
+        name = "Feriado por Carnaval"
+        self[easter(year) + rd(days=-48)] = name
+        self[easter(year) + rd(days=-47)] = f"{name} (Observed)"
+
+        # Labor Day.
+        name = "Dia del trabajo"
+        self[date(year, MAY, 1)] = name
+
+        if self.observed and date(year, MAY, 1).weekday() == SUN:
+            self[date(year, MAY, 1) + rd(days=+1)] = f"{name} (Observed)"
+
+        # Chuquisaca Day.
+        if self.subdiv == "H":
+            self[date(year, MAY, 25)] = "Día del departamento de Chuquisaca"
+
+        # Corpus Christi.
+        self[easter(year) + rd(days=+60)] = "Corpus Christi"
+
+        # Andean New Year.
+        name = "Año Nuevo Andino"
+        if year >= 2010:
+            self[date(year, JUN, 21)] = name
+
+        if self.observed and date(year, JUN, 21).weekday() == SUN:
+            self[date(year, JUN, 21) + rd(days=+1)] = f"{name} (Observed)"
+
+        # La Paz Day.
+        if self.subdiv == "L":
+            self[date(year, JUL, 16)] = "Día del departamento de La Paz"
+
+        # Agrarian Reform Day.
+        if year >= 1937:
+            self[date(year, AUG, 2)] = "Día de la Revolución Agraria"
+
+        # Independence Day.
+        name = "Dia de la Patria"
+        if year >= 1825:
+            self[date(year, AUG, 6)] = name
+
+        if self.observed and date(year, AUG, 6).weekday() > 5:
+            self[date(year, AUG, 6) + rd(days=+1)] = f"{name} (Observed)"
+
+        # Cochabamba Day.
+        if self.subdiv == "C":
+            self[date(year, SEP, 14)] = "Día del departamento de Cochabamba"
+
+        # Santa Cruz Day.
+        if self.subdiv == "S":
+            self[date(year, SEP, 24)] = "Día del departamento de Santa Cruz"
+
+        # Pando Day.
+        if self.subdiv == "N":
+            self[date(year, OCT, 11)] = "Dia del departamento de Pando"
+
+        # All Soul's Day.
+        name = "Todos Santos"
+        self[date(year, NOV, 2)] = name
+
+        if self.observed and date(year, NOV, 2).weekday() == SUN:
+            self[date(year, NOV, 2) + rd(days=+1)] = f"{name} (Observed)"
+
+        # Potosí Day.
+        if self.subdiv == "P":
+            self[date(year, NOV, 10)] = "Dia del departamento de Potosí"
+
+        # Beni Day.
+        if self.subdiv == "B":
+            self[date(year, NOV, 18)] = "Dia del departamento de Beni"
+
+        # Christmas Day.
+        name = "Navidad"
+        self[date(year, DEC, 25)] = name
+
+        if self.observed and date(year, DEC, 25).weekday() == SUN:
+            self[date(year, DEC, 25) + rd(days=+1)] = f"{name} (Observed)"
+
+
+class BO(Bolivia):
+    pass
+
+
+class BOL(Bolivia):
+    pass
diff --git a/holidays/countries/moldova.py b/holidays/countries/moldova.py
new file mode 100644
index 00000000..bc38dd4b
--- /dev/null
+++ b/holidays/countries/moldova.py
@@ -0,0 +1,73 @@
+#  python-holidays
+#  ---------------
+#  A fast, efficient Python library for generating country, province and state
+#  specific sets of holidays on the fly. It aims to make determining whether a
+#  specific date is a holiday as fast and flexible as possible.
+#
+#  Authors: dr-prodigy <maurizio.montel@gmail.com> (c) 2017-2022
+#           ryanss <ryanssdev@icloud.com> (c) 2014-2017
+#  Website: https://github.com/dr-prodigy/python-holidays
+#  License: MIT (see LICENSE file)
+
+from datetime import date
+
+from dateutil.easter import easter, EASTER_ORTHODOX
+from dateutil.relativedelta import relativedelta as rd
+
+from holidays.constants import JAN, MAR, MAY, JUN, AUG, OCT, DEC
+from holidays.holiday_base import HolidayBase
+
+
+class Moldova(HolidayBase):
+    # https://en.wikipedia.org/wiki/Public_holidays_in_Moldova
+
+    country = "MD"
+
+    def __init__(self, **kwargs):
+        HolidayBase.__init__(self, **kwargs)
+
+    def _populate(self, year):
+
+        eday = easter(year, method=EASTER_ORTHODOX)
+
+        # New Year
+        self[date(year, JAN, 1)] = "Anul Nou"
+
+        # Orthodox Christmas
+        for day in [7, 8]:
+            self[date(year, JAN, day)] = "Crăciunul"
+
+        # International Women's Day
+        self[date(year, MAR, 8)] = "Ziua Internatională a Femeii"
+
+        # Orthodox Easter
+        for day_after_easter in [-2, 0, 1]:
+            self[eday + rd(days=day_after_easter)] = "Paştele"
+
+        # Paştele Blajinilor
+        self[eday + rd(days=9)] = "Paştele Blajinilor"
+
+        # Labour Day
+        self[date(year, MAY, 1)] = "Ziua Internatională a Muncii"
+
+        # Ziua Victoriei
+        self[date(year, MAY, 9)] = "Ziua Victoriei"
+
+        # International Children's Day
+        self[date(year, JUN, 1)] = "Ziua Copilului"
+
+        # Ziua Independenţei
+        self[date(year, AUG, 27)] = "Ziua Independenţei"
+
+        # Limba noastră
+        self[date(year, AUG, 31)] = "Limba noastră"
+
+        # Ziua Natională a Vinului
+        self[date(year, OCT, 8)] = "Ziua Natională a Vinului"
+
+        # Crăciunul
+        self[date(year, DEC, 25)] = "Crăciunul"
+
+
+class MD(Moldova):
+    pass
diff --git a/holidays/countries/united_kingdom.py b/holidays/countries/united_kingdom.py
index bb17c770..0dcc56c7 100644
--- a/holidays/countries/united_kingdom.py
+++ b/holidays/countries/united_kingdom.py
@@ -15,7 +15,7 @@ from typing import Any
 from dateutil.easter import easter
 from dateutil.relativedelta import relativedelta as rd, MO, FR
 
-from holidays.constants import JAN, MAR, APR, MAY, JUN, JUL, AUG, NOV, DEC
+from holidays.constants import JAN, MAR, APR, MAY, JUN, JUL, AUG, SEP, NOV, DEC
 from holidays.constants import MON, TUE, WED, THU, FRI, SAT, SUN, WEEKEND
 from holidays.holiday_base import HolidayBase
 
@@ -181,6 +181,7 @@ class UnitedKingdom(HolidayBase):
             self[date(year, JUN, 5)] = "Diamond Jubilee of Elizabeth II"
         elif year == 2022:
             self[date(year, JUN, 3)] = "Platinum Jubilee of Elizabeth II"
+            self[date(year, SEP, 19)] = "State Funeral of Queen Elizabeth II"
 
     def _additional_holidays(self, year: int) -> None:
         # Method used to handle Isle of Man (replaced by class IsleOfMan)
diff --git a/holidays/financial/ny_stock_exchange.py b/holidays/financial/ny_stock_exchange.py
index cada1c1f..1286dcfd 100644
--- a/holidays/financial/ny_stock_exchange.py
+++ b/holidays/financial/ny_stock_exchange.py
@@ -12,57 +12,47 @@
 from datetime import date, timedelta
 
 from dateutil.easter import easter
-from dateutil.relativedelta import (
-    relativedelta as rd,
-    MO,
-    TU,
-    TH,
-    FR,
-)
-
+from dateutil.relativedelta import FR, MO, TH, TU
+from dateutil.relativedelta import relativedelta as rd
 from holidays.constants import (
-    JAN,
+    APR,
+    AUG,
+    DEC,
     FEB,
+    JAN,
+    JUL,
+    JUN,
     MAR,
-    APR,
     MAY,
-    JUN,
-    JUL,
-    AUG,
-    SEP,
-    OCT,
     NOV,
-    DEC,
+    OCT,
+    SEP,
 )
-
 from holidays.holiday_base import HolidayBase
 
 
 class NewYorkStockExchange(HolidayBase):
+    # Official regulations:
+    # https://www.nyse.com/publicdocs/nyse/regulation/nyse/NYSE_Rules.pdf
     # https://www.nyse.com/markets/hours-calendars
-    # historical data:
+    # Historical data:
     # s3.amazonaws.com/armstrongeconomics-wp/2013/07/NYSE-Closings.pdf
-    # also available for 1901- at:
-    # nyseholidays.blogspot.com/2012/11/nyse-holidays-from-<year1>-<year2>.html
-    # where year1 ends in 01, year2 ends in 00 (e.g. 1901-1910)
 
     country = "NYSE"
 
     def __init__(self, **kwargs):
         HolidayBase.__init__(self, **kwargs)
 
-    def _get_observed(self, d, always_post=False):
+    def _get_observed(self, d):
         wdnum = d.isoweekday()
-        if always_post and wdnum == 6:  # treat sat as sun
-            wdnum = 7
         if wdnum == 6:
             return d + rd(weekday=FR(-1))
         if wdnum == 7:
             return d + rd(weekday=MO(+1))
         return d
 
-    def _set_observed_date(self, date, name, always_post=False):
-        date_obs = self._get_observed(date, always_post=always_post)
+    def _set_observed_date(self, date, name):
+        date_obs = self._get_observed(date)
         if date_obs == date:
             self[date] = name
         else:
@@ -72,9 +62,17 @@ class NewYorkStockExchange(HolidayBase):
         ##############################################################
         # REGULAR HOLIDAYS
         ##############################################################
+
         # NYD
-        nyd = date(year, JAN, 1)
-        self._set_observed_date(nyd, "New Year's Day", always_post=True)
+        # This year's New Year Day.
+        self._set_observed_date(date(year, JAN, 1), "New Year's Day")
+
+        # https://www.nyse.com/publicdocs/nyse/regulation/nyse/NYSE_Rules.pdf
+        # As per Rule 7.2.: check if next year's NYD falls on Saturday and
+        # needs to be observed on Friday (Dec 31 of previous year).
+        dec_31 = date(year, DEC, 31)
+        if dec_31.isoweekday() == 5:
+            self._set_observed_date(dec_31 + rd(days=+1), "New Year's Day")
 
         # MLK - observed 1998 - 3rd Monday of Jan
         if year >= 1998:
diff --git a/setup.cfg b/setup.cfg
index f98fc028..d050053a 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -44,7 +44,7 @@ python_requires = >=3.7
 holidays = py.typed
 
 [bumpversion]
-current_version = 0.15
+current_version = 0.16
 
 [flake8]
 extend-ignore = E203,F401,W503,W504


Test patch:
diff --git a/test/countries/test_bolivia.py b/test/countries/test_bolivia.py
new file mode 100644
index 00000000..bf45d015
--- /dev/null
+++ b/test/countries/test_bolivia.py
@@ -0,0 +1,264 @@
+#  python-holidays
+#  ---------------
+#  A fast, efficient Python library for generating country, province and state
+#  specific sets of holidays on the fly. It aims to make determining whether a
+#  specific date is a holiday as fast and flexible as possible.
+#
+#  Authors: dr-prodigy <maurizio.montel@gmail.com> (c) 2017-2022
+#           ryanss <ryanssdev@icloud.com> (c) 2014-2017
+#  Website: https://github.com/dr-prodigy/python-holidays
+#  License: MIT (see LICENSE file)
+#  Copyright: Kateryna Golovanova <kate@kgthreads.com>, 2022
+
+import unittest
+from datetime import date
+
+import holidays
+
+
+class TestBO(unittest.TestCase):
+    def setUp(self):
+        self.holidays = holidays.BO(observed=False)
+        self.holidays_observed = holidays.BO(observed=True)
+
+    def test_new_years(self):
+        for dt in (date(2010, 12, 31), date(2017, 1, 2)):
+            self.assertNotIn(dt, self.holidays)
+
+        for dt in (date(2022, 1, 1), date(2021, 1, 1)):
+            self.assertIn(dt, self.holidays)
+            self.assertEqual(self.holidays[dt], "Año Nuevo")
+
+        for dt in (date(2017, 1, 2), date(2023, 1, 2)):
+            self.assertIn(dt, self.holidays_observed)
+            self.assertEqual(
+                self.holidays_observed[dt], "Año Nuevo (Observed)"
+            )
+
+    def test_plurinational_state_foundation_day(self):
+        for dt in (date(2009, 1, 22), date(2017, 1, 23)):
+            self.assertNotIn(dt, self.holidays)
+
+        for dt in (date(2010, 1, 22), date(2022, 1, 22)):
+            self.assertIn(dt, self.holidays)
+            self.assertEqual(
+                self.holidays[dt],
+                "Nacimiento del Estado Plurinacional de Bolivia",
+            )
+
+    def test_la_tablada(self):
+        self.assertNotIn(date(2010, 4, 15), self.holidays)
+
+        t_holidays = holidays.BO(subdiv="T")
+        for dt in (date(2010, 4, 16), date(2010, 4, 14)):
+            self.assertNotIn(dt, t_holidays)
+
+        for dt in (date(2015, 4, 15), date(2016, 4, 15)):
+            self.assertIn(dt, t_holidays)
+            self.assertEqual(t_holidays[dt], "La Tablada")
+
+    def test_la_tablada_and_viernes_santo(self):
+        t_holidays = holidays.BO(subdiv="T")
+        dt = date(2022, 4, 15)
+        self.assertIn(dt, t_holidays)
+        self.assertEqual(t_holidays[dt], "La Tablada, Viernes Santo")
+
+    def test_carnival_in_oruro(self):
+        self.assertNotIn(date(2020, 2, 21), self.holidays)
+
+        o_holidays = holidays.BO(subdiv="O")
+        for dt in (date(2020, 2, 22), date(2020, 2, 20)):
+            self.assertNotIn(dt, o_holidays)
+
+        for dt in (date(2020, 2, 21), date(2021, 2, 12)):
+            self.assertIn(dt, o_holidays)
+            self.assertEqual(o_holidays[dt], "Carnaval de Oruro")
+
+    def test_carnival_monday(self):
+        for dt in (date(2020, 2, 23), date(2021, 2, 14)):
+            self.assertNotIn(dt, self.holidays)
+
+        for dt in (date(2020, 2, 24), date(2023, 2, 20)):
+            self.assertIn(dt, self.holidays)
+            self.assertEqual(self.holidays[dt], "Feriado por Carnaval")
+
+        for dt in (date(2020, 2, 25), date(2023, 2, 21)):
+            self.assertIn(dt, self.holidays)
+            self.assertEqual(
+                self.holidays[dt], "Feriado por Carnaval (Observed)"
+            )
+
+    def test_good_friday(self):
+        for dt in (date(2022, 4, 20), date(2021, 4, 1)):
+            self.assertNotIn(dt, self.holidays)
+
+        for dt in (date(2022, 4, 15), date(2023, 4, 7)):
+            self.assertIn(dt, self.holidays)
+            self.assertEqual(self.holidays[dt], "Viernes Santo")
+
+    def test_labor_day(self):
+        for dt in (date(2010, 5, 2), date(2017, 4, 30)):
+            self.assertNotIn(dt, self.holidays)
+
+        for dt in (date(2021, 5, 1), date(2022, 5, 1)):
+            self.assertIn(dt, self.holidays)
+            self.assertEqual(self.holidays[dt], "Dia del trabajo")
+
+        for dt in (date(2022, 5, 2), date(2016, 5, 2)):
+            self.assertIn(dt, self.holidays_observed)
+            self.assertEqual(
+                self.holidays_observed[dt], "Dia del trabajo (Observed)"
+            )
+
+    def test_chuquisaca_day(self):
+        self.assertNotIn(date(2020, 5, 25), self.holidays)
+
+        h_holidays = holidays.BO(subdiv="H")
+        for dt in (date(2020, 5, 24), date(2020, 5, 26)):
+            self.assertNotIn(dt, h_holidays)
+
+        for dt in (date(2020, 5, 25), date(2021, 5, 25)):
+            self.assertIn(dt, h_holidays)
+            self.assertEqual(
+                h_holidays[dt], "Día del departamento de Chuquisaca"
+            )
+
+    def test_corpus_christi(self):
+        for dt in (date(2020, 6, 10), date(2020, 6, 12)):
+            self.assertNotIn(dt, self.holidays)
+
+        for dt in (date(2020, 6, 11), date(2021, 6, 3)):
+            self.assertIn(dt, self.holidays)
+            self.assertEqual(self.holidays[dt], "Corpus Christi")
+
+    def test_andean_new_year(self):
+        for dt in (date(2009, 6, 21), date(2010, 6, 20)):
+            self.assertNotIn(dt, self.holidays)
+
+        for dt in (date(2010, 6, 21), date(2011, 6, 21)):
+            self.assertIn(dt, self.holidays)
+            self.assertEqual(self.holidays[dt], "Año Nuevo Andino")
+
+        for dt in (date(2020, 6, 22), date(2015, 6, 22)):
+            self.assertIn(dt, self.holidays_observed)
+            self.assertEqual(
+                self.holidays_observed[dt], "Año Nuevo Andino (Observed)"
+            )
+
+    def test_la_paz_day(self):
+        self.assertNotIn(date(2020, 7, 16), self.holidays)
+
+        l_holidays = holidays.BO(subdiv="L")
+        for dt in (date(2020, 7, 15), date(2020, 7, 17)):
+            self.assertNotIn(dt, l_holidays)
+
+        for dt in (date(2020, 7, 16), date(2021, 7, 16)):
+            self.assertIn(dt, l_holidays)
+            self.assertEqual(l_holidays[dt], "Día del departamento de La Paz")
+
+    def test_agrarian_reform_day(self):
+        for dt in (date(1936, 8, 2), date(2020, 8, 1), date(2021, 8, 3)):
+            self.assertNotIn(dt, self.holidays)
+
+        for dt in (date(1937, 8, 2), date(2020, 8, 2), date(2021, 8, 2)):
+            self.assertIn(dt, self.holidays)
+            self.assertEqual(self.holidays[dt], "Día de la Revolución Agraria")
+
+    def test_independence_day(self):
+        for dt in (date(1824, 8, 6), date(1825, 8, 5), date(2020, 8, 7)):
+            self.assertNotIn(dt, self.holidays)
+
+        for dt in (date(1825, 8, 6), date(2020, 8, 6)):
+            self.assertIn(dt, self.holidays)
+            self.assertEqual(self.holidays[dt], "Dia de la Patria")
+
+        for dt in (date(2023, 8, 7), date(2017, 8, 7)):
+            self.assertIn(dt, self.holidays_observed)
+            self.assertEqual(
+                self.holidays_observed[dt], "Dia de la Patria (Observed)"
+            )
+
+    def test_cochabamba_day(self):
+        self.assertNotIn(date(2020, 9, 14), self.holidays)
+
+        c_holidays = holidays.BO(subdiv="C")
+        for dt in (date(2021, 9, 13), date(2021, 9, 15)):
+            self.assertNotIn(dt, c_holidays)
+
+        for dt in (date(2020, 9, 14), date(2021, 9, 14)):
+            self.assertIn(dt, c_holidays)
+            self.assertEqual(
+                c_holidays[dt], "Día del departamento de Cochabamba"
+            )
+
+    def test_santa_cruz_day(self):
+        self.assertNotIn(date(2020, 9, 24), self.holidays)
+
+        s_holidays = holidays.BO(subdiv="S")
+        for dt in (date(2021, 9, 23), date(2021, 9, 25)):
+            self.assertNotIn(dt, s_holidays)
+
+        for dt in (date(2020, 9, 24), date(2021, 9, 24)):
+            self.assertIn(dt, s_holidays)
+            self.assertEqual(
+                s_holidays[dt], "Día del departamento de Santa Cruz"
+            )
+
+    def test_pando_day(self):
+        self.assertNotIn(date(2020, 10, 11), self.holidays)
+
+        n_holidays = holidays.BO(subdiv="N")
+        for dt in (date(2021, 10, 10), date(2021, 9, 12)):
+            self.assertNotIn(dt, n_holidays)
+
+        for dt in (date(2020, 10, 11), date(2021, 10, 11)):
+            self.assertIn(dt, n_holidays)
+            self.assertEqual(n_holidays[dt], "Dia del departamento de Pando")
+
+    def test_all_souls_day(self):
+        for dt in (date(2021, 11, 1), date(2021, 11, 3)):
+            self.assertNotIn(dt, self.holidays)
+
+        for dt in (date(2020, 11, 2), date(2021, 11, 2)):
+            self.assertIn(dt, self.holidays)
+            self.assertEqual(self.holidays[dt], "Todos Santos")
+
+        for dt in (date(2025, 11, 3), date(2014, 11, 3)):
+            self.assertIn(dt, self.holidays_observed)
+            self.assertEqual(
+                self.holidays_observed[dt], "Todos Santos (Observed)"
+            )
+
+    def test_potosi_day(self):
+        self.assertNotIn(date(2020, 11, 10), self.holidays)
+
+        p_holidays = holidays.BO(subdiv="P")
+        for dt in (date(2021, 11, 9), date(2021, 11, 11)):
+            self.assertNotIn(dt, p_holidays)
+
+        for dt in (date(2020, 11, 10), date(2021, 11, 10)):
+            self.assertIn(dt, p_holidays)
+            self.assertEqual(p_holidays[dt], "Dia del departamento de Potosí")
+
+    def test_beni_day(self):
+        self.assertNotIn(date(2020, 11, 18), self.holidays)
+
+        b_holidays = holidays.BO(subdiv="B")
+        for dt in (date(2021, 11, 17), date(2021, 11, 19)):
+            self.assertNotIn(dt, b_holidays)
+
+        for dt in (date(2020, 11, 18), date(2021, 11, 18)):
+            self.assertIn(dt, b_holidays)
+            self.assertEqual(b_holidays[dt], "Dia del departamento de Beni")
+
+    def test_christmas_day(self):
+        for dt in (date(2010, 12, 24), date(2017, 12, 26)):
+            self.assertNotIn(dt, self.holidays)
+
+        for dt in (date(2017, 12, 25), date(2022, 12, 25)):
+            self.assertIn(dt, self.holidays)
+            self.assertEqual(self.holidays[dt], "Navidad")
+
+        for dt in (date(2022, 12, 26), date(2016, 12, 26)):
+            self.assertIn(dt, self.holidays_observed)
+            self.assertEqual(self.holidays_observed[dt], "Navidad (Observed)")
diff --git a/test/countries/test_moldova.py b/test/countries/test_moldova.py
new file mode 100644
index 00000000..041b725a
--- /dev/null
+++ b/test/countries/test_moldova.py
@@ -0,0 +1,38 @@
+#  python-holidays
+#  ---------------
+#  A fast, efficient Python library for generating country, province and state
+#  specific sets of holidays on the fly. It aims to make determining whether a
+#  specific date is a holiday as fast and flexible as possible.
+#
+#  Authors: dr-prodigy <maurizio.montel@gmail.com> (c) 2017-2022
+#           ryanss <ryanssdev@icloud.com> (c) 2014-2017
+#  Website: https://github.com/dr-prodigy/python-holidays
+#  License: MIT (see LICENSE file)
+
+import unittest
+
+from datetime import date
+
+import holidays
+
+
+class TestMoldova(unittest.TestCase):
+    def setUp(self):
+        self.holidays = holidays.MD()
+
+    def test_2022(self):
+        # https://en.wikipedia.org/wiki/Public_holidays_in_Moldova
+        self.assertIn(date(2022, 1, 1), self.holidays)
+        self.assertIn(date(2022, 1, 7), self.holidays)
+        self.assertIn(date(2022, 1, 8), self.holidays)
+        self.assertIn(date(2022, 3, 8), self.holidays)
+        self.assertIn(date(2022, 4, 24), self.holidays)
+        self.assertIn(date(2022, 4, 25), self.holidays)
+        self.assertIn(date(2022, 5, 1), self.holidays)
+        self.assertIn(date(2022, 5, 3), self.holidays)
+        self.assertIn(date(2022, 5, 9), self.holidays)
+        self.assertIn(date(2022, 6, 1), self.holidays)
+        self.assertIn(date(2022, 8, 27), self.holidays)
+        self.assertIn(date(2022, 8, 31), self.holidays)
+        self.assertIn(date(2022, 10, 8), self.holidays)
+        self.assertIn(date(2022, 12, 25), self.holidays)
diff --git a/test/countries/test_united_kingdom.py b/test/countries/test_united_kingdom.py
index e668fbe4..48001374 100644
--- a/test/countries/test_united_kingdom.py
+++ b/test/countries/test_united_kingdom.py
@@ -84,6 +84,14 @@ class TestUK(unittest.TestCase):
             self.assertNotIn(dt + relativedelta(years=-1), self.holidays)
             self.assertNotIn(dt + relativedelta(years=+1), self.holidays)
 
+    def test_royal_funerals(self):
+        for dt in [
+            date(2022, 9, 19),
+        ]:
+            self.assertIn(dt, self.holidays)
+            self.assertNotIn(dt + relativedelta(years=-1), self.holidays)
+            self.assertNotIn(dt + relativedelta(years=+1), self.holidays)
+
     def test_may_day(self):
         for dt in [
             date(1978, 5, 1),
diff --git a/test/financial/test_ny_stock_exchange.py b/test/financial/test_ny_stock_exchange.py
index 3f5a8272..c7d97552 100644
--- a/test/financial/test_ny_stock_exchange.py
+++ b/test/financial/test_ny_stock_exchange.py
@@ -41,13 +41,14 @@ class TestNewYorkStockExchange(unittest.TestCase):
             date(1930, JAN, 1),
             date(1950, JAN, 2),
             date(1999, JAN, 1),
-            date(2000, JAN, 3),
+            date(1999, DEC, 31),
             date(2010, JAN, 1),
             date(2018, JAN, 1),
             date(2019, JAN, 1),
             date(2020, JAN, 1),
             date(2021, JAN, 1),
-            date(2022, JAN, 3),
+            date(2021, DEC, 31),
+            date(2027, DEC, 31),
         ]:
             self.assertIn(dt, self.holidays)
             self.assertNotIn(dt + relativedelta(days=-1), self.holidays)