Skip to content

Commit

Permalink
Refactor and improve tests for JalaliDate class
Browse files Browse the repository at this point in the history
  • Loading branch information
majiidd committed Jun 28, 2024
1 parent bc5b53c commit 7f7935d
Showing 1 changed file with 155 additions and 145 deletions.
300 changes: 155 additions & 145 deletions tests/test_jalalidate.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,115 +11,120 @@

class TestJalaliDate(TestCase):
def test_shamsi_to_gregorian(self):
self.assertEqual(JalaliDate(1367, 2, 14).to_gregorian(), date(1988, 5, 4))
self.assertEqual(JalaliDate(1395, 3, 21).to_gregorian(), date(2016, 6, 10))
self.assertEqual(JalaliDate(1395, 12, 9).to_gregorian(), date(2017, 2, 27))
self.assertEqual(JalaliDate(1400, 6, 31).to_gregorian(), date(2021, 9, 22))
self.assertEqual(JalaliDate(1396, 7, 27).to_gregorian(), date(2017, 10, 19))
self.assertEqual(JalaliDate(1397, 11, 29).to_gregorian(), date(2019, 2, 18))
self.assertEqual(JalaliDate(1398, 12, 29).to_gregorian(), date(2020, 3, 19))
self.assertEqual(JalaliDate(1399, 10, 11).to_gregorian(), date(2020, 12, 31))
self.assertEqual(JalaliDate(1399, 11, 23).to_gregorian(), date(2021, 2, 11))
self.assertEqual(JalaliDate(1399, 12, 29).to_gregorian(), date(2021, 3, 19))
self.assertEqual(JalaliDate(1400, 4, 25).to_gregorian(), date(2021, 7, 16))
self.assertEqual(JalaliDate(1400, 12, 20).to_gregorian(), date(2022, 3, 11))
self.assertEqual(JalaliDate(1403, 1, 5).to_gregorian(), date(2024, 3, 24))
self.assertEqual(JalaliDate(1402, 10, 10).to_gregorian(), date(2023, 12, 31))
self.assertEqual(JalaliDate(1402, 12, 29).to_gregorian(), date(2024, 3, 19))
self.assertEqual(JalaliDate(1403, 10, 11).to_gregorian(), date(2024, 12, 31))
self.assertEqual(JalaliDate(1403, 2, 23).to_gregorian(), date(2024, 5, 12))
self.assertEqual(JalaliDate(1403, 4, 3).to_gregorian(), date(2024, 6, 23))
self.assertEqual(JalaliDate(1403, 4, 8).to_gregorian(), date(2024, 6, 28))

self.assertEqual(JalaliDate(1391, 12, 30).to_gregorian(), date(2013, 3, 20))
self.assertEqual(JalaliDate(1395, 12, 30).to_gregorian(), date(2017, 3, 20))
self.assertEqual(JalaliDate(1399, 12, 30).to_gregorian(), date(2021, 3, 20))
self.assertEqual(JalaliDate(1403, 12, 30).to_gregorian(), date(2025, 3, 20))

self.assertEqual(JalaliDate(1366, 10, 11).to_gregorian(), date(1988, 1, 1))
self.assertEqual(JalaliDate(1378, 10, 11).to_gregorian(), date(2000, 1, 1))
self.assertEqual(JalaliDate(1379, 10, 12).to_gregorian(), date(2001, 1, 1))
self.assertEqual(JalaliDate(1390, 10, 11).to_gregorian(), date(2012, 1, 1))
self.assertEqual(JalaliDate(1393, 10, 11).to_gregorian(), date(2015, 1, 1))
self.assertEqual(JalaliDate(1398, 10, 11).to_gregorian(), date(2020, 1, 1))
self.assertEqual(JalaliDate(1399, 10, 12).to_gregorian(), date(2021, 1, 1))
self.assertEqual(JalaliDate(1400, 10, 11).to_gregorian(), date(2022, 1, 1))
self.assertEqual(JalaliDate(1402, 10, 11).to_gregorian(), date(2024, 1, 1))
self.assertEqual(JalaliDate(1403, 10, 12).to_gregorian(), date(2025, 1, 1))

self.assertEqual(JalaliDate(1367, 1, 1).to_gregorian(), date(1988, 3, 21))
self.assertEqual(JalaliDate(1388, 1, 1).to_gregorian(), date(2009, 3, 21))
self.assertEqual(JalaliDate(1396, 1, 1).to_gregorian(), date(2017, 3, 21))
self.assertEqual(JalaliDate(1399, 1, 1).to_gregorian(), date(2020, 3, 20))
self.assertEqual(JalaliDate(1400, 1, 1).to_gregorian(), date(2021, 3, 21))
self.assertEqual(JalaliDate(1402, 1, 1).to_gregorian(), date(2023, 3, 21))
self.assertEqual(JalaliDate(1403, 1, 1).to_gregorian(), date(2024, 3, 20))
self.assertEqual(JalaliDate(1404, 1, 1).to_gregorian(), date(2025, 3, 21))

self.assertEqual(JalaliDate.today().to_gregorian(), date.today())
cases = [
(JalaliDate(1367, 2, 14), date(1988, 5, 4)),
(JalaliDate(1395, 3, 21), date(2016, 6, 10)),
(JalaliDate(1395, 12, 9), date(2017, 2, 27)),
(JalaliDate(1400, 6, 31), date(2021, 9, 22)),
(JalaliDate(1396, 7, 27), date(2017, 10, 19)),
(JalaliDate(1397, 11, 29), date(2019, 2, 18)),
(JalaliDate(1399, 10, 11), date(2020, 12, 31)),
(JalaliDate(1399, 11, 23), date(2021, 2, 11)),
(JalaliDate(1400, 4, 25), date(2021, 7, 16)),
(JalaliDate(1400, 12, 20), date(2022, 3, 11)),
(JalaliDate(1403, 1, 5), date(2024, 3, 24)),
(JalaliDate(1402, 10, 10), date(2023, 12, 31)),
(JalaliDate(1403, 10, 11), date(2024, 12, 31)),
(JalaliDate(1403, 2, 23), date(2024, 5, 12)),
(JalaliDate(1403, 4, 3), date(2024, 6, 23)),
(JalaliDate(1403, 4, 8), date(2024, 6, 28)),
(JalaliDate(1367, 12, 29), date(1989, 3, 20)),
(JalaliDate(1392, 12, 29), date(2014, 3, 20)),
(JalaliDate(1398, 12, 29), date(2020, 3, 19)),
(JalaliDate(1399, 12, 29), date(2021, 3, 19)),
(JalaliDate(1400, 12, 29), date(2022, 3, 20)),
(JalaliDate(1402, 12, 29), date(2024, 3, 19)),
(JalaliDate(1403, 12, 29), date(2025, 3, 19)),
(JalaliDate(1391, 12, 30), date(2013, 3, 20)),
(JalaliDate(1395, 12, 30), date(2017, 3, 20)),
(JalaliDate(1399, 12, 30), date(2021, 3, 20)),
(JalaliDate(1403, 12, 30), date(2025, 3, 20)),
(JalaliDate(1408, 12, 30), date(2030, 3, 20)),
(JalaliDate(1366, 10, 11), date(1988, 1, 1)),
(JalaliDate(1378, 10, 11), date(2000, 1, 1)),
(JalaliDate(1379, 10, 12), date(2001, 1, 1)),
(JalaliDate(1390, 10, 11), date(2012, 1, 1)),
(JalaliDate(1393, 10, 11), date(2015, 1, 1)),
(JalaliDate(1398, 10, 11), date(2020, 1, 1)),
(JalaliDate(1399, 10, 12), date(2021, 1, 1)),
(JalaliDate(1400, 10, 11), date(2022, 1, 1)),
(JalaliDate(1402, 10, 11), date(2024, 1, 1)),
(JalaliDate(1403, 10, 12), date(2025, 1, 1)),
(JalaliDate(1367, 1, 1), date(1988, 3, 21)),
(JalaliDate(1388, 1, 1), date(2009, 3, 21)),
(JalaliDate(1396, 1, 1), date(2017, 3, 21)),
(JalaliDate(1399, 1, 1), date(2020, 3, 20)),
(JalaliDate(1400, 1, 1), date(2021, 3, 21)),
(JalaliDate(1401, 1, 1), date(2022, 3, 21)),
(JalaliDate(1402, 1, 1), date(2023, 3, 21)),
(JalaliDate(1403, 1, 1), date(2024, 3, 20)),
(JalaliDate(1404, 1, 1), date(2025, 3, 21)),
(JalaliDate.today(), date.today()),
]
for jdate, gdate in cases:
self.assertEqual(jdate.to_gregorian(), gdate)

def test_gregorian_to_shamsi(self):
self.assertEqual(JalaliDate(date(1988, 5, 4)), JalaliDate(1367, 2, 14))
self.assertEqual(JalaliDate(date(2122, 1, 31)), JalaliDate(1500, 11, 11))
self.assertEqual(JalaliDate(date(2017, 3, 20)), JalaliDate(1395, 12, 30))
self.assertEqual(JalaliDate(date(2000, 1, 1)), JalaliDate(1378, 10, 11))
self.assertEqual(JalaliDate(date(2017, 10, 19)), JalaliDate(1396, 7, 27))
self.assertEqual(JalaliDate(date(2019, 2, 18)), JalaliDate(1397, 11, 29))
self.assertEqual(JalaliDate(date(2020, 3, 20)), JalaliDate(1399, 1, 1))
self.assertEqual(JalaliDate(date(2021, 3, 21)), JalaliDate(1400, 1, 1))
self.assertEqual(JalaliDate(date(2023, 3, 21)), JalaliDate(1402, 1, 1))
self.assertEqual(JalaliDate(date(2025, 1, 1)), JalaliDate(1403, 10, 12))

self.assertEqual(JalaliDate.to_jalali(1990, 9, 23), JalaliDate(1369, 7, 1))
self.assertEqual(JalaliDate.to_jalali(1990, 9, 23), JalaliDate(1369, 7, 1))
self.assertEqual(JalaliDate.to_jalali(2013, 9, 16), JalaliDate(1392, 6, 25))
self.assertEqual(JalaliDate.to_jalali(2018, 3, 20), JalaliDate(1396, 12, 29))
self.assertEqual(JalaliDate.to_jalali(2021, 2, 11), JalaliDate(1399, 11, 23))
self.assertEqual(JalaliDate.to_jalali(2021, 7, 16), JalaliDate(1400, 4, 25))
self.assertEqual(JalaliDate.to_jalali(2024, 3, 24), JalaliDate(1403, 1, 5))
self.assertEqual(JalaliDate.to_jalali(2020, 3, 19), JalaliDate(1398, 12, 29))
self.assertEqual(JalaliDate.to_jalali(2023, 12, 31), JalaliDate(1402, 10, 10))
self.assertEqual(JalaliDate.to_jalali(2024, 12, 31), JalaliDate(1403, 10, 11))
self.assertEqual(JalaliDate.to_jalali(2024, 5, 12), JalaliDate(1403, 2, 23))
self.assertEqual(JalaliDate.to_jalali(2024, 6, 23), JalaliDate(1403, 4, 3))

self.assertEqual(JalaliDate.to_jalali(2021, 3, 20), JalaliDate(1399, 12, 30))
self.assertEqual(JalaliDate.to_jalali(2025, 3, 20), JalaliDate(1403, 12, 30))

self.assertEqual(JalaliDate.to_jalali(2000, 1, 1), JalaliDate(1378, 10, 11))
self.assertEqual(JalaliDate.to_jalali(2012, 1, 1), JalaliDate(1390, 10, 11))
self.assertEqual(JalaliDate.to_jalali(2013, 1, 1), JalaliDate(1391, 10, 12))
self.assertEqual(JalaliDate.to_jalali(2020, 1, 1), JalaliDate(1398, 10, 11))
self.assertEqual(JalaliDate.to_jalali(2024, 1, 1), JalaliDate(1402, 10, 11))
self.assertEqual(JalaliDate.to_jalali(2025, 1, 1), JalaliDate(1403, 10, 12))

self.assertEqual(JalaliDate.to_jalali(1988, 3, 21), JalaliDate(1367, 1, 1))
self.assertEqual(JalaliDate.to_jalali(2009, 3, 21), JalaliDate(1388, 1, 1))
self.assertEqual(JalaliDate.to_jalali(2019, 3, 21), JalaliDate(1398, 1, 1))
self.assertEqual(JalaliDate.to_jalali(2020, 3, 20), JalaliDate(1399, 1, 1))
self.assertEqual(JalaliDate.to_jalali(2021, 3, 21), JalaliDate(1400, 1, 1))
self.assertEqual(JalaliDate.to_jalali(2024, 3, 20), JalaliDate(1403, 1, 1))
self.assertEqual(JalaliDate.to_jalali(2025, 3, 21), JalaliDate(1404, 1, 1))

self.assertEqual(JalaliDate(date.today()), JalaliDate.today())
cases = [
(date(1988, 5, 4), JalaliDate(1367, 2, 14)),
(date(2122, 1, 31), JalaliDate(1500, 11, 11)),
(date(2017, 10, 19), JalaliDate(1396, 7, 27)),
(date(2019, 2, 18), JalaliDate(1397, 11, 29)),
(date(1990, 9, 23), JalaliDate(1369, 7, 1)),
(date(2013, 9, 16), JalaliDate(1392, 6, 25)),
(date(2018, 3, 20), JalaliDate(1396, 12, 29)),
(date(2021, 2, 11), JalaliDate(1399, 11, 23)),
(date(2021, 7, 16), JalaliDate(1400, 4, 25)),
(date(2024, 3, 24), JalaliDate(1403, 1, 5)),
(date(2020, 3, 19), JalaliDate(1398, 12, 29)),
(date(2024, 5, 12), JalaliDate(1403, 2, 23)),
(date(2024, 6, 23), JalaliDate(1403, 4, 3)),
(date(2000, 12, 31), JalaliDate(1379, 10, 11)),
(date(2023, 12, 31), JalaliDate(1402, 10, 10)),
(date(2024, 12, 31), JalaliDate(1403, 10, 11)),
(date(2017, 3, 20), JalaliDate(1395, 12, 30)),
(date(2021, 3, 20), JalaliDate(1399, 12, 30)),
(date(2025, 3, 20), JalaliDate(1403, 12, 30)),
(date(2000, 1, 1), JalaliDate(1378, 10, 11)),
(date(2012, 1, 1), JalaliDate(1390, 10, 11)),
(date(2013, 1, 1), JalaliDate(1391, 10, 12)),
(date(2020, 1, 1), JalaliDate(1398, 10, 11)),
(date(2024, 1, 1), JalaliDate(1402, 10, 11)),
(date(2025, 1, 1), JalaliDate(1403, 10, 12)),
(date(1988, 3, 21), JalaliDate(1367, 1, 1)),
(date(2009, 3, 21), JalaliDate(1388, 1, 1)),
(date(2019, 3, 21), JalaliDate(1398, 1, 1)),
(date(2020, 3, 20), JalaliDate(1399, 1, 1)),
(date(2021, 3, 21), JalaliDate(1400, 1, 1)),
(date(2023, 3, 21), JalaliDate(1402, 1, 1)),
(date(2024, 3, 20), JalaliDate(1403, 1, 1)),
(date(2025, 3, 21), JalaliDate(1404, 1, 1)),
(date.today(), JalaliDate.today()),
]
for gdate, jdate in cases:
self.assertEqual(JalaliDate(gdate), jdate)

def test_checkdate(self):
self.assertEqual(JalaliDate.check_date(1367, 2, 14), True)
self.assertEqual(JalaliDate.check_date(1395, 12, 30), True)
self.assertEqual(JalaliDate.check_date(1394, 12, 30), False)
self.assertEqual(JalaliDate.check_date(13, 13, 30), False)
self.assertEqual(JalaliDate.check_date(0, 0, 0), False)
self.assertEqual(JalaliDate.check_date(9378, 0, 0), False)
self.assertEqual(JalaliDate.check_date("1300", "1", "1"), False)
self.assertEqual(JalaliDate.check_date(1396, 12, 30), False)
self.assertEqual(JalaliDate.check_date(1397, 7, 1), True)
self.assertEqual(JalaliDate.check_date(1396, 7, 27), True)
self.assertEqual(JalaliDate.check_date(1397, 11, 29), True)
self.assertEqual(JalaliDate.check_date(1399, 11, 31), False)
self.assertEqual(JalaliDate.check_date(1400, 4, 25), True)
self.assertEqual(JalaliDate.check_date(1400, 12, 30), False)
self.assertEqual(JalaliDate.check_date(1403, 4, 3), True)
self.assertEqual(JalaliDate.check_date(1403, 12, 30), True)
cases = [
(1367, 2, 14, True),
(1395, 12, 30, True),
(1394, 12, 30, False),
(13, 13, 30, False),
(0, 0, 0, False),
(9378, 0, 0, False),
("1300", "1", "1", False),
(1396, 12, 30, False),
(1397, 7, 1, True),
(1396, 7, 27, True),
(1397, 11, 29, True),
(1399, 11, 31, False),
(1400, 4, 25, True),
(1400, 12, 30, False),
(1403, 4, 3, True),
(1403, 12, 30, True),
]
for year, month, day, valid in cases:
self.assertEqual(JalaliDate.check_date(year, month, day), valid)

def test_completeday(self):
jdate = JalaliDate(1398, 3, 17)
Expand All @@ -146,25 +151,26 @@ def test_completeday(self):
self.assertEqual(jdate.week_of_year(), 48)

def test_timetuple(self):
self.assertEqual(
JalaliDate(1398, 3, 17).timetuple(),
struct_time((2019, 6, 7, 0, 0, 0, 4, 158, -1)),
)
self.assertEqual(
JalaliDate(1367, 2, 14).timetuple(),
struct_time((1988, 5, 4, 0, 0, 0, 2, 125, -1)),
)
cases = [
(JalaliDate(1398, 3, 17), struct_time((2019, 6, 7, 0, 0, 0, 4, 158, -1))),
(JalaliDate(1367, 2, 14), struct_time((1988, 5, 4, 0, 0, 0, 2, 125, -1))),
]
for jdate, ttuple in cases:
self.assertEqual(jdate.timetuple(), ttuple)

def test_isocalendar(self):
self.assertEqual(JalaliDate(1364, 1, 31).isocalendar(), (1364, 6, 1))
self.assertEqual(JalaliDate(1398, 3, 17).isocalendar(), (1398, 12, 7))
self.assertEqual(JalaliDate(1398, 1, 1).isocalendar(), (1398, 1, 6))
self.assertEqual(JalaliDate(1399, 1, 2).isocalendar(), (1399, 2, 1))
self.assertEqual(JalaliDate(1403, 1, 5).isocalendar(), (1403, 2, 2))
cases = [
(JalaliDate(1364, 1, 31), (1364, 6, 1)),
(JalaliDate(1398, 3, 17), (1398, 12, 7)),
(JalaliDate(1398, 1, 1), (1398, 1, 6)),
(JalaliDate(1399, 1, 2), (1399, 2, 1)),
(JalaliDate(1403, 1, 5), (1403, 2, 2)),
]
for jdate, iso in cases:
self.assertEqual(jdate.isocalendar(), iso)

def test_additions(self):
self.assertEqual(JalaliDate(JalaliDate(1395, 3, 21)), JalaliDate(1395, 3, 21))

self.assertEqual(JalaliDate.days_before_month(1), 0)
self.assertEqual(JalaliDate.days_before_month(12), 336)

Expand All @@ -184,32 +190,36 @@ def test_additions(self):
JalaliDate(1400, 1, 1, "us")

def test_leap(self):
self.assertEqual(JalaliDate.is_leap(1214), True)
self.assertEqual(JalaliDate.is_leap(1216), False)
self.assertEqual(JalaliDate.is_leap(1218), True)
self.assertEqual(JalaliDate.is_leap(1309), True)
self.assertEqual(JalaliDate.is_leap(1313), True)
self.assertEqual(JalaliDate.is_leap(1321), True)
self.assertEqual(JalaliDate.is_leap(1342), True)
self.assertEqual(JalaliDate.is_leap(1346), True)
self.assertEqual(JalaliDate.is_leap(1358), True)
self.assertEqual(JalaliDate.is_leap(1366), True)
self.assertEqual(JalaliDate.is_leap(1367), False)
self.assertEqual(JalaliDate.is_leap(1370), True)
self.assertEqual(JalaliDate.is_leap(1387), True)
self.assertEqual(JalaliDate.is_leap(1395), True)
self.assertEqual(JalaliDate.is_leap(1396), False)
self.assertEqual(JalaliDate.is_leap(1397), False)
self.assertEqual(JalaliDate.is_leap(1398), False)
self.assertEqual(JalaliDate.is_leap(1399), True)
self.assertEqual(JalaliDate.is_leap(1400), False)
self.assertEqual(JalaliDate.is_leap(1402), False)
self.assertEqual(JalaliDate.is_leap(1403), True)
self.assertEqual(JalaliDate.is_leap(1407), False)
self.assertEqual(JalaliDate.is_leap(1408), True)
self.assertEqual(JalaliDate.is_leap(1424), True)
self.assertEqual(JalaliDate.is_leap(1474), True)
self.assertEqual(JalaliDate.is_leap(1498), True)
cases = [
(1214, True),
(1216, False),
(1218, True),
(1309, True),
(1313, True),
(1321, True),
(1342, True),
(1346, True),
(1358, True),
(1366, True),
(1367, False),
(1370, True),
(1387, True),
(1395, True),
(1396, False),
(1397, False),
(1398, False),
(1399, True),
(1400, False),
(1402, False),
(1403, True),
(1407, False),
(1408, True),
(1424, True),
(1474, True),
(1498, True),
]
for year, is_leap in cases:
self.assertEqual(JalaliDate.is_leap(year), is_leap)

def test_format(self):
j = JalaliDate(date(1988, 5, 4))
Expand Down

0 comments on commit 7f7935d

Please sign in to comment.