|
4 | 4 | from openfisca_core.periods import Instant, Period |
5 | 5 |
|
6 | 6 |
|
| 7 | +@pytest.fixture |
| 8 | +def instant(): |
| 9 | + return Instant((2022, 12, 31)) |
| 10 | + |
| 11 | + |
7 | 12 | @pytest.mark.parametrize("date_unit, instant, size, expected", [ |
8 | 13 | [periods.YEAR, Instant((2022, 1, 1)), 1, "2022"], |
9 | 14 | [periods.MONTH, Instant((2022, 1, 1)), 12, "2022"], |
@@ -34,20 +39,48 @@ def test_str_with_days(date_unit, instant, size, expected): |
34 | 39 | assert str(Period((date_unit, instant, size))) == expected |
35 | 40 |
|
36 | 41 |
|
37 | | -@pytest.mark.parametrize("period, unit, length, first, last", [ |
38 | | - (periods.period('year:2014:2'), periods.YEAR, 2, periods.period('2014'), periods.period('2015')), |
39 | | - (periods.period(2017), periods.MONTH, 12, periods.period('2017-01'), periods.period('2017-12')), |
40 | | - (periods.period('year:2014:2'), periods.MONTH, 24, periods.period('2014-01'), periods.period('2015-12')), |
41 | | - (periods.period('month:2014-03:3'), periods.MONTH, 3, periods.period('2014-03'), periods.period('2014-05')), |
42 | | - (periods.period(2017), periods.DAY, 365, periods.period('2017-01-01'), periods.period('2017-12-31')), |
43 | | - (periods.period('year:2014:2'), periods.DAY, 730, periods.period('2014-01-01'), periods.period('2015-12-31')), |
44 | | - (periods.period('month:2014-03:3'), periods.DAY, 92, periods.period('2014-03-01'), periods.period('2014-05-31')), |
| 42 | +@pytest.mark.parametrize("period_unit, unit, start, cease, count", [ |
| 43 | + [periods.YEAR, periods.YEAR, Instant((2022, 1, 1)), Instant((2024, 1, 1)), 3], |
| 44 | + [periods.YEAR, periods.MONTH, Instant((2022, 12, 1)), Instant((2025, 11, 1)), 36], |
| 45 | + [periods.YEAR, periods.DAY, Instant((2022, 12, 31)), Instant((2025, 12, 30)), 1096], |
| 46 | + [periods.MONTH, periods.MONTH, Instant((2022, 12, 1)), Instant((2023, 2, 1)), 3], |
| 47 | + [periods.MONTH, periods.DAY, Instant((2022, 12, 31)), Instant((2023, 3, 30)), 90], |
| 48 | + [periods.DAY, periods.DAY, Instant((2022, 12, 31)), Instant((2023, 1, 2)), 3], |
45 | 49 | ]) |
46 | | -def test_subperiods(period, unit, length, first, last): |
| 50 | +def test_subperiods(instant, period_unit, unit, start, cease, count): |
| 51 | + period = Period((period_unit, instant, 3)) |
47 | 52 | subperiods = period.get_subperiods(unit) |
48 | | - assert len(subperiods) == length |
49 | | - assert subperiods[0] == first |
50 | | - assert subperiods[-1] == last |
| 53 | + assert len(subperiods) == count |
| 54 | + assert subperiods[0] == Period((unit, start, 1)) |
| 55 | + assert subperiods[-1] == Period((unit, cease, 1)) |
| 56 | + |
| 57 | + |
| 58 | +@pytest.mark.parametrize("period_unit, offset, unit, expected", [ |
| 59 | + [periods.YEAR, "first-of", periods.YEAR, Period(('year', Instant((2022, 1, 1)), 3))], |
| 60 | + [periods.YEAR, "first-of", periods.MONTH, Period(('year', Instant((2022, 12, 1)), 3))], |
| 61 | + [periods.YEAR, "last-of", periods.YEAR, Period(('year', Instant((2022, 12, 31)), 3))], |
| 62 | + [periods.YEAR, "last-of", periods.MONTH, Period(('year', Instant((2022, 12, 31)), 3))], |
| 63 | + [periods.YEAR, -3, periods.YEAR, Period(('year', Instant((2019, 12, 31)), 3))], |
| 64 | + [periods.YEAR, 1, periods.MONTH, Period(('year', Instant((2023, 1, 31)), 3))], |
| 65 | + [periods.YEAR, 3, periods.DAY, Period(('year', Instant((2023, 1, 3)), 3))], |
| 66 | + [periods.MONTH, "first-of", periods.YEAR, Period(('month', Instant((2022, 1, 1)), 3))], |
| 67 | + [periods.MONTH, "first-of", periods.MONTH, Period(('month', Instant((2022, 12, 1)), 3))], |
| 68 | + [periods.MONTH, "last-of", periods.YEAR, Period(('month', Instant((2022, 12, 31)), 3))], |
| 69 | + [periods.MONTH, "last-of", periods.MONTH, Period(('month', Instant((2022, 12, 31)), 3))], |
| 70 | + [periods.MONTH, -3, periods.YEAR, Period(('month', Instant((2019, 12, 31)), 3))], |
| 71 | + [periods.MONTH, 1, periods.MONTH, Period(('month', Instant((2023, 1, 31)), 3))], |
| 72 | + [periods.MONTH, 3, periods.DAY, Period(('month', Instant((2023, 1, 3)), 3))], |
| 73 | + [periods.DAY, "first-of", periods.YEAR, Period(('day', Instant((2022, 1, 1)), 3))], |
| 74 | + [periods.DAY, "first-of", periods.MONTH, Period(('day', Instant((2022, 12, 1)), 3))], |
| 75 | + [periods.DAY, "last-of", periods.YEAR, Period(('day', Instant((2022, 12, 31)), 3))], |
| 76 | + [periods.DAY, "last-of", periods.MONTH, Period(('day', Instant((2022, 12, 31)), 3))], |
| 77 | + [periods.DAY, -3, periods.YEAR, Period(('day', Instant((2019, 12, 31)), 3))], |
| 78 | + [periods.DAY, 1, periods.MONTH, Period(('day', Instant((2023, 1, 31)), 3))], |
| 79 | + [periods.DAY, 3, periods.DAY, Period(('day', Instant((2023, 1, 3)), 3))], |
| 80 | + ]) |
| 81 | +def test_offset(instant, period_unit, offset, unit, expected): |
| 82 | + period = Period((period_unit, instant, 3)) |
| 83 | + assert period.offset(offset, unit) == expected |
51 | 84 |
|
52 | 85 |
|
53 | 86 | @pytest.mark.parametrize("date_unit, instant, size, expected", [ |
|
0 commit comments