test_ccalendar.py 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. from datetime import (
  2. date,
  3. datetime,
  4. )
  5. from hypothesis import given
  6. import numpy as np
  7. import pytest
  8. from pandas._libs.tslibs import ccalendar
  9. from pandas._testing._hypothesis import DATETIME_IN_PD_TIMESTAMP_RANGE_NO_TZ
  10. @pytest.mark.parametrize(
  11. "date_tuple,expected",
  12. [
  13. ((2001, 3, 1), 60),
  14. ((2004, 3, 1), 61),
  15. ((1907, 12, 31), 365), # End-of-year, non-leap year.
  16. ((2004, 12, 31), 366), # End-of-year, leap year.
  17. ],
  18. )
  19. def test_get_day_of_year_numeric(date_tuple, expected):
  20. assert ccalendar.get_day_of_year(*date_tuple) == expected
  21. def test_get_day_of_year_dt():
  22. dt = datetime.fromordinal(1 + np.random.randint(365 * 4000))
  23. result = ccalendar.get_day_of_year(dt.year, dt.month, dt.day)
  24. expected = (dt - dt.replace(month=1, day=1)).days + 1
  25. assert result == expected
  26. @pytest.mark.parametrize(
  27. "input_date_tuple, expected_iso_tuple",
  28. [
  29. [(2020, 1, 1), (2020, 1, 3)],
  30. [(2019, 12, 31), (2020, 1, 2)],
  31. [(2019, 12, 30), (2020, 1, 1)],
  32. [(2009, 12, 31), (2009, 53, 4)],
  33. [(2010, 1, 1), (2009, 53, 5)],
  34. [(2010, 1, 3), (2009, 53, 7)],
  35. [(2010, 1, 4), (2010, 1, 1)],
  36. [(2006, 1, 1), (2005, 52, 7)],
  37. [(2005, 12, 31), (2005, 52, 6)],
  38. [(2008, 12, 28), (2008, 52, 7)],
  39. [(2008, 12, 29), (2009, 1, 1)],
  40. ],
  41. )
  42. def test_dt_correct_iso_8601_year_week_and_day(input_date_tuple, expected_iso_tuple):
  43. result = ccalendar.get_iso_calendar(*input_date_tuple)
  44. expected_from_date_isocalendar = date(*input_date_tuple).isocalendar()
  45. assert result == expected_from_date_isocalendar
  46. assert result == expected_iso_tuple
  47. @given(DATETIME_IN_PD_TIMESTAMP_RANGE_NO_TZ)
  48. def test_isocalendar(dt):
  49. expected = dt.isocalendar()
  50. result = ccalendar.get_iso_calendar(dt.year, dt.month, dt.day)
  51. assert result == expected