add streak-releted basic functionality
This commit is contained in:
60
tests/test_streak.py
Normal file
60
tests/test_streak.py
Normal file
@ -0,0 +1,60 @@
|
||||
import unittest
|
||||
from datetime import date
|
||||
|
||||
from common.time import daterange, streak_bruteforce
|
||||
|
||||
|
||||
class StreakTest(unittest.TestCase):
|
||||
streak = streak_bruteforce
|
||||
|
||||
def test_daterange_exclusive(self):
|
||||
d = daterange(date(2024, 8, 1), date(2024, 8, 3))
|
||||
self.assertEqual(
|
||||
d,
|
||||
[date(2024, 8, 1), date(2024, 8, 2)],
|
||||
)
|
||||
|
||||
def test_daterange_inclusive(self):
|
||||
d = daterange(date(2024, 8, 1), date(2024, 8, 3), end_inclusive=True)
|
||||
self.assertEqual(
|
||||
d,
|
||||
[date(2024, 8, 1), date(2024, 8, 2), date(2024, 8, 3)],
|
||||
)
|
||||
|
||||
def test_1day_streak(self):
|
||||
self.assertEqual(streak([date(2024, 8, 1)])["days"], 1)
|
||||
|
||||
def test_2day_streak(self):
|
||||
self.assertEqual(streak([date(2024, 8, 1), date(2024, 8, 2)])["days"], 2)
|
||||
|
||||
def test_31day_streak(self):
|
||||
self.assertEqual(
|
||||
streak(daterange(date(2024, 8, 1), date(2024, 8, 31), end_inclusive=True))[
|
||||
"days"
|
||||
],
|
||||
31,
|
||||
)
|
||||
|
||||
def test_5day_streak_in_10_days(self):
|
||||
d = daterange(
|
||||
date(2024, 8, 1), date(2024, 8, 5), end_inclusive=True
|
||||
) + daterange(date(2024, 8, 7), date(2024, 8, 10), end_inclusive=True)
|
||||
self.assertEqual(streak(d)["days"], 5)
|
||||
|
||||
def test_10day_streak_in_31_days(self):
|
||||
d = daterange(date(2024, 8, 1), date(2024, 8, 31), end_inclusive=True)
|
||||
d.remove(date(2024, 8, 8))
|
||||
d.remove(date(2024, 8, 15))
|
||||
d.remove(date(2024, 8, 21))
|
||||
self.assertEqual(streak(d)["days"], 10)
|
||||
|
||||
def test_10day_streak_in_31_days_with_consecutive_missing(self):
|
||||
d = daterange(date(2024, 8, 1), date(2024, 8, 31), end_inclusive=True)
|
||||
d.remove(date(2024, 8, 4))
|
||||
d.remove(date(2024, 8, 5))
|
||||
d.remove(date(2024, 8, 6))
|
||||
d.remove(date(2024, 8, 7))
|
||||
d.remove(date(2024, 8, 8))
|
||||
d.remove(date(2024, 8, 15))
|
||||
d.remove(date(2024, 8, 21))
|
||||
self.assertEqual(streak(d)["days"], 10)
|
Reference in New Issue
Block a user