Skip to content

Commit ea5fb67

Browse files
committed
TST: reorganize misplaced month / business month tests (pandas-dev#27085)
1 parent cc5eba9 commit ea5fb67

File tree

3 files changed

+379
-361
lines changed

3 files changed

+379
-361
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,196 @@
1+
"""
2+
Tests for the following offsets:
3+
- BMonthBegin
4+
- BMonthEnd
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+
BMonthBegin,
18+
BMonthEnd,
19+
)
20+
21+
22+
class TestBMonthBegin(Base):
23+
_offset = BMonthBegin
24+
25+
def test_offsets_compare_equal(self):
26+
# root cause of #456
27+
offset1 = BMonthBegin()
28+
offset2 = BMonthBegin()
29+
assert not offset1 != offset2
30+
31+
offset_cases = []
32+
offset_cases.append(
33+
(
34+
BMonthBegin(),
35+
{
36+
datetime(2008, 1, 1): datetime(2008, 2, 1),
37+
datetime(2008, 1, 31): datetime(2008, 2, 1),
38+
datetime(2006, 12, 29): datetime(2007, 1, 1),
39+
datetime(2006, 12, 31): datetime(2007, 1, 1),
40+
datetime(2006, 9, 1): datetime(2006, 10, 2),
41+
datetime(2007, 1, 1): datetime(2007, 2, 1),
42+
datetime(2006, 12, 1): datetime(2007, 1, 1),
43+
},
44+
)
45+
)
46+
47+
offset_cases.append(
48+
(
49+
BMonthBegin(0),
50+
{
51+
datetime(2008, 1, 1): datetime(2008, 1, 1),
52+
datetime(2006, 10, 2): datetime(2006, 10, 2),
53+
datetime(2008, 1, 31): datetime(2008, 2, 1),
54+
datetime(2006, 12, 29): datetime(2007, 1, 1),
55+
datetime(2006, 12, 31): datetime(2007, 1, 1),
56+
datetime(2006, 9, 15): datetime(2006, 10, 2),
57+
},
58+
)
59+
)
60+
61+
offset_cases.append(
62+
(
63+
BMonthBegin(2),
64+
{
65+
datetime(2008, 1, 1): datetime(2008, 3, 3),
66+
datetime(2008, 1, 15): datetime(2008, 3, 3),
67+
datetime(2006, 12, 29): datetime(2007, 2, 1),
68+
datetime(2006, 12, 31): datetime(2007, 2, 1),
69+
datetime(2007, 1, 1): datetime(2007, 3, 1),
70+
datetime(2006, 11, 1): datetime(2007, 1, 1),
71+
},
72+
)
73+
)
74+
75+
offset_cases.append(
76+
(
77+
BMonthBegin(-1),
78+
{
79+
datetime(2007, 1, 1): datetime(2006, 12, 1),
80+
datetime(2008, 6, 30): datetime(2008, 6, 2),
81+
datetime(2008, 6, 1): datetime(2008, 5, 1),
82+
datetime(2008, 3, 10): datetime(2008, 3, 3),
83+
datetime(2008, 12, 31): datetime(2008, 12, 1),
84+
datetime(2006, 12, 29): datetime(2006, 12, 1),
85+
datetime(2006, 12, 30): datetime(2006, 12, 1),
86+
datetime(2007, 1, 1): datetime(2006, 12, 1),
87+
},
88+
)
89+
)
90+
91+
@pytest.mark.parametrize("case", offset_cases)
92+
def test_offset(self, case):
93+
offset, cases = case
94+
for base, expected in cases.items():
95+
assert_offset_equal(offset, base, expected)
96+
97+
on_offset_cases = [
98+
(BMonthBegin(), datetime(2007, 12, 31), False),
99+
(BMonthBegin(), datetime(2008, 1, 1), True),
100+
(BMonthBegin(), datetime(2001, 4, 2), True),
101+
(BMonthBegin(), datetime(2008, 3, 3), True),
102+
]
103+
104+
@pytest.mark.parametrize("case", on_offset_cases)
105+
def test_is_on_offset(self, case):
106+
offset, dt, expected = case
107+
assert_is_on_offset(offset, dt, expected)
108+
109+
110+
class TestBMonthEnd(Base):
111+
_offset = BMonthEnd
112+
113+
def test_normalize(self):
114+
dt = datetime(2007, 1, 1, 3)
115+
116+
result = dt + BMonthEnd(normalize=True)
117+
expected = dt.replace(hour=0) + BMonthEnd()
118+
assert result == expected
119+
120+
def test_offsets_compare_equal(self):
121+
# root cause of #456
122+
offset1 = BMonthEnd()
123+
offset2 = BMonthEnd()
124+
assert not offset1 != offset2
125+
126+
offset_cases = []
127+
offset_cases.append(
128+
(
129+
BMonthEnd(),
130+
{
131+
datetime(2008, 1, 1): datetime(2008, 1, 31),
132+
datetime(2008, 1, 31): datetime(2008, 2, 29),
133+
datetime(2006, 12, 29): datetime(2007, 1, 31),
134+
datetime(2006, 12, 31): datetime(2007, 1, 31),
135+
datetime(2007, 1, 1): datetime(2007, 1, 31),
136+
datetime(2006, 12, 1): datetime(2006, 12, 29),
137+
},
138+
)
139+
)
140+
141+
offset_cases.append(
142+
(
143+
BMonthEnd(0),
144+
{
145+
datetime(2008, 1, 1): datetime(2008, 1, 31),
146+
datetime(2008, 1, 31): datetime(2008, 1, 31),
147+
datetime(2006, 12, 29): datetime(2006, 12, 29),
148+
datetime(2006, 12, 31): datetime(2007, 1, 31),
149+
datetime(2007, 1, 1): datetime(2007, 1, 31),
150+
},
151+
)
152+
)
153+
154+
offset_cases.append(
155+
(
156+
BMonthEnd(2),
157+
{
158+
datetime(2008, 1, 1): datetime(2008, 2, 29),
159+
datetime(2008, 1, 31): datetime(2008, 3, 31),
160+
datetime(2006, 12, 29): datetime(2007, 2, 28),
161+
datetime(2006, 12, 31): datetime(2007, 2, 28),
162+
datetime(2007, 1, 1): datetime(2007, 2, 28),
163+
datetime(2006, 11, 1): datetime(2006, 12, 29),
164+
},
165+
)
166+
)
167+
168+
offset_cases.append(
169+
(
170+
BMonthEnd(-1),
171+
{
172+
datetime(2007, 1, 1): datetime(2006, 12, 29),
173+
datetime(2008, 6, 30): datetime(2008, 5, 30),
174+
datetime(2008, 12, 31): datetime(2008, 11, 28),
175+
datetime(2006, 12, 29): datetime(2006, 11, 30),
176+
datetime(2006, 12, 30): datetime(2006, 12, 29),
177+
datetime(2007, 1, 1): datetime(2006, 12, 29),
178+
},
179+
)
180+
)
181+
182+
@pytest.mark.parametrize("case", offset_cases)
183+
def test_offset(self, case):
184+
offset, cases = case
185+
for base, expected in cases.items():
186+
assert_offset_equal(offset, base, expected)
187+
188+
on_offset_cases = [
189+
(BMonthEnd(), datetime(2007, 12, 31), True),
190+
(BMonthEnd(), datetime(2008, 1, 1), False),
191+
]
192+
193+
@pytest.mark.parametrize("case", on_offset_cases)
194+
def test_is_on_offset(self, case):
195+
offset, dt, expected = case
196+
assert_is_on_offset(offset, dt, expected)

0 commit comments

Comments
 (0)