Skip to content

Commit e2b88e5

Browse files
committed
TST: reorganize misplaced year / business year tests (pandas-dev#27085)
1 parent 544ebd2 commit e2b88e5

File tree

3 files changed

+542
-508
lines changed

3 files changed

+542
-508
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,220 @@
1+
"""
2+
Tests for the following offsets:
3+
- BYearBegin
4+
- BYearEnd
5+
"""
6+
from datetime import datetime
7+
8+
import pytest
9+
10+
from pandas.tests.tseries.offsets.common import (
11+
Base,
12+
assert_is_on_offset,
13+
assert_offset_equal,
14+
)
15+
16+
from pandas.tseries.offsets import (
17+
BYearBegin,
18+
BYearEnd,
19+
)
20+
21+
22+
class TestBYearBegin(Base):
23+
_offset = BYearBegin
24+
25+
def test_misspecified(self):
26+
msg = "Month must go from 1 to 12"
27+
with pytest.raises(ValueError, match=msg):
28+
BYearBegin(month=13)
29+
with pytest.raises(ValueError, match=msg):
30+
BYearEnd(month=13)
31+
32+
offset_cases = []
33+
offset_cases.append(
34+
(
35+
BYearBegin(),
36+
{
37+
datetime(2008, 1, 1): datetime(2009, 1, 1),
38+
datetime(2008, 6, 30): datetime(2009, 1, 1),
39+
datetime(2008, 12, 31): datetime(2009, 1, 1),
40+
datetime(2011, 1, 1): datetime(2011, 1, 3),
41+
datetime(2011, 1, 3): datetime(2012, 1, 2),
42+
datetime(2005, 12, 30): datetime(2006, 1, 2),
43+
datetime(2005, 12, 31): datetime(2006, 1, 2),
44+
},
45+
)
46+
)
47+
48+
offset_cases.append(
49+
(
50+
BYearBegin(0),
51+
{
52+
datetime(2008, 1, 1): datetime(2008, 1, 1),
53+
datetime(2008, 6, 30): datetime(2009, 1, 1),
54+
datetime(2008, 12, 31): datetime(2009, 1, 1),
55+
datetime(2005, 12, 30): datetime(2006, 1, 2),
56+
datetime(2005, 12, 31): datetime(2006, 1, 2),
57+
},
58+
)
59+
)
60+
61+
offset_cases.append(
62+
(
63+
BYearBegin(-1),
64+
{
65+
datetime(2007, 1, 1): datetime(2006, 1, 2),
66+
datetime(2009, 1, 4): datetime(2009, 1, 1),
67+
datetime(2009, 1, 1): datetime(2008, 1, 1),
68+
datetime(2008, 6, 30): datetime(2008, 1, 1),
69+
datetime(2008, 12, 31): datetime(2008, 1, 1),
70+
datetime(2006, 12, 29): datetime(2006, 1, 2),
71+
datetime(2006, 12, 30): datetime(2006, 1, 2),
72+
datetime(2006, 1, 1): datetime(2005, 1, 3),
73+
},
74+
)
75+
)
76+
77+
offset_cases.append(
78+
(
79+
BYearBegin(-2),
80+
{
81+
datetime(2007, 1, 1): datetime(2005, 1, 3),
82+
datetime(2007, 6, 30): datetime(2006, 1, 2),
83+
datetime(2008, 12, 31): datetime(2007, 1, 1),
84+
},
85+
)
86+
)
87+
88+
@pytest.mark.parametrize("case", offset_cases)
89+
def test_offset(self, case):
90+
offset, cases = case
91+
for base, expected in cases.items():
92+
assert_offset_equal(offset, base, expected)
93+
94+
95+
class TestBYearEnd(Base):
96+
_offset = BYearEnd
97+
98+
offset_cases = []
99+
offset_cases.append(
100+
(
101+
BYearEnd(),
102+
{
103+
datetime(2008, 1, 1): datetime(2008, 12, 31),
104+
datetime(2008, 6, 30): datetime(2008, 12, 31),
105+
datetime(2008, 12, 31): datetime(2009, 12, 31),
106+
datetime(2005, 12, 30): datetime(2006, 12, 29),
107+
datetime(2005, 12, 31): datetime(2006, 12, 29),
108+
},
109+
)
110+
)
111+
112+
offset_cases.append(
113+
(
114+
BYearEnd(0),
115+
{
116+
datetime(2008, 1, 1): datetime(2008, 12, 31),
117+
datetime(2008, 6, 30): datetime(2008, 12, 31),
118+
datetime(2008, 12, 31): datetime(2008, 12, 31),
119+
datetime(2005, 12, 31): datetime(2006, 12, 29),
120+
},
121+
)
122+
)
123+
124+
offset_cases.append(
125+
(
126+
BYearEnd(-1),
127+
{
128+
datetime(2007, 1, 1): datetime(2006, 12, 29),
129+
datetime(2008, 6, 30): datetime(2007, 12, 31),
130+
datetime(2008, 12, 31): datetime(2007, 12, 31),
131+
datetime(2006, 12, 29): datetime(2005, 12, 30),
132+
datetime(2006, 12, 30): datetime(2006, 12, 29),
133+
datetime(2007, 1, 1): datetime(2006, 12, 29),
134+
},
135+
)
136+
)
137+
138+
offset_cases.append(
139+
(
140+
BYearEnd(-2),
141+
{
142+
datetime(2007, 1, 1): datetime(2005, 12, 30),
143+
datetime(2008, 6, 30): datetime(2006, 12, 29),
144+
datetime(2008, 12, 31): datetime(2006, 12, 29),
145+
},
146+
)
147+
)
148+
149+
@pytest.mark.parametrize("case", offset_cases)
150+
def test_offset(self, case):
151+
offset, cases = case
152+
for base, expected in cases.items():
153+
assert_offset_equal(offset, base, expected)
154+
155+
on_offset_cases = [
156+
(BYearEnd(), datetime(2007, 12, 31), True),
157+
(BYearEnd(), datetime(2008, 1, 1), False),
158+
(BYearEnd(), datetime(2006, 12, 31), False),
159+
(BYearEnd(), datetime(2006, 12, 29), True),
160+
]
161+
162+
@pytest.mark.parametrize("case", on_offset_cases)
163+
def test_is_on_offset(self, case):
164+
offset, dt, expected = case
165+
assert_is_on_offset(offset, dt, expected)
166+
167+
168+
class TestBYearEndLagged(Base):
169+
_offset = BYearEnd
170+
171+
def test_bad_month_fail(self):
172+
msg = "Month must go from 1 to 12"
173+
with pytest.raises(ValueError, match=msg):
174+
BYearEnd(month=13)
175+
with pytest.raises(ValueError, match=msg):
176+
BYearEnd(month=0)
177+
178+
offset_cases = []
179+
offset_cases.append(
180+
(
181+
BYearEnd(month=6),
182+
{
183+
datetime(2008, 1, 1): datetime(2008, 6, 30),
184+
datetime(2007, 6, 30): datetime(2008, 6, 30),
185+
},
186+
)
187+
)
188+
189+
offset_cases.append(
190+
(
191+
BYearEnd(n=-1, month=6),
192+
{
193+
datetime(2008, 1, 1): datetime(2007, 6, 29),
194+
datetime(2007, 6, 30): datetime(2007, 6, 29),
195+
},
196+
)
197+
)
198+
199+
@pytest.mark.parametrize("case", offset_cases)
200+
def test_offset(self, case):
201+
offset, cases = case
202+
for base, expected in cases.items():
203+
assert_offset_equal(offset, base, expected)
204+
205+
def test_roll(self):
206+
offset = BYearEnd(month=6)
207+
date = datetime(2009, 11, 30)
208+
209+
assert offset.rollforward(date) == datetime(2010, 6, 30)
210+
assert offset.rollback(date) == datetime(2009, 6, 30)
211+
212+
on_offset_cases = [
213+
(BYearEnd(month=2), datetime(2007, 2, 28), True),
214+
(BYearEnd(month=6), datetime(2007, 6, 30), False),
215+
]
216+
217+
@pytest.mark.parametrize("case", on_offset_cases)
218+
def test_is_on_offset(self, case):
219+
offset, dt, expected = case
220+
assert_is_on_offset(offset, dt, expected)

0 commit comments

Comments
 (0)