~pythonxy/pythonxy-upstream/python-pandas

« back to all changes in this revision

Viewing changes to pandas/core/tests/test_datetools.py

  • Committer: Wes McKinney
  • Date: 2009-08-05 03:30:16 UTC
  • Revision ID: git-v1:c6b236db73ff81007909be6406f0e484edc4a9eb
first commit with cleaned up code

git-svn-id: http://pandas.googlecode.com/svn/trunk@5 d5231056-7de3-11de-ac95-d976489f1ece

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
from pandas.core.datetools import BDay
 
2
from datetime import datetime
 
3
from pandas.core.datetools import *
 
4
from pandas.core.daterange import XDateRange, DateRange
 
5
import pandas.core.datetools as datetools
 
6
 
 
7
####
 
8
## Misc function tests
 
9
####
 
10
def testFormat():
 
11
    actual = datetools.format(datetime(2008, 1, 15))
 
12
    assert actual == '20080115'
 
13
 
 
14
def testOle2datetime():
 
15
    actual = datetools.ole2datetime(60000)
 
16
    assert actual == datetime(2064, 4, 8)
 
17
 
 
18
def testTto_datetime1():
 
19
    actual = datetools.to_datetime(datetime(2008, 1, 15))
 
20
    assert actual == datetime(2008, 1, 15)
 
21
    
 
22
def testTto_datetime2():
 
23
    actual = datetools.to_datetime('20080115')
 
24
    assert actual == datetime(2008, 1, 15)
 
25
 
 
26
def testNormalize_date():
 
27
    actual = datetools.normalize_date(datetime(2007, 10, 1, 1, 12, 5, 10))
 
28
    assert actual == datetime(2007, 10, 1)
 
29
    
 
30
#####
 
31
### DateOffset Tests
 
32
#####
 
33
 
 
34
def myAssert(actual, expected):
 
35
    assert actual == expected
 
36
 
 
37
def testEQ():
 
38
    myAssert(datetools.BDay(2), datetools.BDay(2))
 
39
    
 
40
def testHash():
 
41
    myAssert(datetools.BDay(2).__hash__(), datetools.BDay(2).__hash__())
 
42
    
 
43
def testCall():
 
44
    myAssert(BDay(2)(datetime(2008, 1, 1)), datetime(2008, 1, 3))
 
45
    
 
46
def testRAdd():
 
47
    myAssert(datetime(2008, 1, 1) + BDay(2), BDay(2) + datetime(2008, 1, 1))
 
48
 
 
49
def testSub():
 
50
    myAssert(datetime(2008, 1, 1) - BDay(2),  datetime(2008, 1, 1) + BDay(-2))
 
51
    
 
52
def testRSub():
 
53
    myAssert(datetime(2008, 1, 1) - BDay(2), BDay(2) - datetime(2008, 1, 1))
 
54
    
 
55
def testMult1():
 
56
    myAssert(datetime(2008, 1, 1) + 10*BDay(), datetime(2008, 1, 1) + BDay(10))
 
57
 
 
58
def testMult2():    
 
59
    myAssert(datetime(2008, 1, 1) + (-5*BDay(-10)), 
 
60
             datetime(2008, 1, 1) + BDay(50))
 
61
 
 
62
    
 
63
def testRollback1():
 
64
    myAssert(BDay(10).rollback(datetime(2008, 1, 1)), datetime(2008, 1, 1))
 
65
    
 
66
def testRollback2():
 
67
    myAssert(BDay(10).rollback(datetime(2008, 1, 5)), datetime(2008, 1, 4))
 
68
    
 
69
def testRollforward1():
 
70
    myAssert(BDay(10).rollforward(datetime(2008, 1, 1)), datetime(2008, 1, 1))
 
71
    
 
72
def testRollforward2():
 
73
    myAssert(BDay(10).rollforward(datetime(2008, 1, 5)), datetime(2008, 1, 7))
 
74
 
 
75
def assertOnOffset(offset, date, expected):
 
76
    actual = offset.onOffset(date)
 
77
    assert actual == expected
 
78
    
 
79
def testOnOffset():
 
80
    
 
81
    tests = [(BDay(), datetime(2008, 1, 1), True),
 
82
             (BDay(), datetime(2008, 1, 5), False),
 
83
         
 
84
             (BMonthEnd(), datetime(2007, 12, 31), True),
 
85
             (BMonthEnd(), datetime(2008, 1, 1), False),
 
86
         
 
87
             (BQuarterEnd(1, startingMonth=1), datetime(2008, 1, 31), True),
 
88
             (BQuarterEnd(1, startingMonth=1), datetime(2007, 12, 31), False),
 
89
             (BQuarterEnd(1, startingMonth=1), datetime(2008, 2, 29), False),
 
90
             (BQuarterEnd(1, startingMonth=1), datetime(2007, 3, 30), False), 
 
91
             (BQuarterEnd(1, startingMonth=1), datetime(2007, 3, 31), False), 
 
92
             (BQuarterEnd(1, startingMonth=1), datetime(2008, 4, 30), True), 
 
93
             (BQuarterEnd(1, startingMonth=1), datetime(2008, 5, 30), False), 
 
94
             (BQuarterEnd(1, startingMonth=1), datetime(2007, 6, 29), False), 
 
95
             (BQuarterEnd(1, startingMonth=1), datetime(2007, 6, 30), False), 
 
96
             
 
97
             (BQuarterEnd(1, startingMonth=2), datetime(2008, 1, 31), False),
 
98
             (BQuarterEnd(1, startingMonth=2), datetime(2007, 12, 31), False),
 
99
             (BQuarterEnd(1, startingMonth=2), datetime(2008, 2, 29), True), 
 
100
             (BQuarterEnd(1, startingMonth=2), datetime(2007, 3, 30), False), 
 
101
             (BQuarterEnd(1, startingMonth=2), datetime(2007, 3, 31), False), 
 
102
             (BQuarterEnd(1, startingMonth=2), datetime(2008, 4, 30), False), 
 
103
             (BQuarterEnd(1, startingMonth=2), datetime(2008, 5, 30), True), 
 
104
             (BQuarterEnd(1, startingMonth=2), datetime(2007, 6, 29), False), 
 
105
             (BQuarterEnd(1, startingMonth=2), datetime(2007, 6, 30), False), 
 
106
         
 
107
             (BQuarterEnd(1, startingMonth=3), datetime(2008, 1, 31), False),
 
108
             (BQuarterEnd(1, startingMonth=3), datetime(2007, 12, 31), True),
 
109
             (BQuarterEnd(1, startingMonth=3), datetime(2008, 2, 29), False),
 
110
             (BQuarterEnd(1, startingMonth=3), datetime(2007, 3, 30), True), 
 
111
             (BQuarterEnd(1, startingMonth=3), datetime(2007, 3, 31), False), 
 
112
             (BQuarterEnd(1, startingMonth=3), datetime(2008, 4, 30), False), 
 
113
             (BQuarterEnd(1, startingMonth=3), datetime(2008, 5, 30), False),
 
114
             (BQuarterEnd(1, startingMonth=3), datetime(2007, 6, 29), True), 
 
115
             (BQuarterEnd(1, startingMonth=3), datetime(2007, 6, 30), False), 
 
116
             
 
117
             (BYearEnd(), datetime(2007, 12, 31), True),
 
118
             (BYearEnd(), datetime(2008, 1, 1), False),
 
119
             (BYearEnd(), datetime(2006, 12, 31), False),
 
120
             (BYearEnd(), datetime(2006, 12, 29), True),
 
121
             
 
122
             (MonthEnd(), datetime(2007, 3, 30), False),
 
123
             (MonthEnd(), datetime(2007, 3, 31), True),
 
124
 
 
125
             #(QuarterEnd(1, startingMonth=1), datetime(2008, 1, 31), True),
 
126
             #(QuarterEnd(1, startingMonth=1), datetime(2007, 12, 31), False),
 
127
             #(QuarterEnd(1, startingMonth=1), datetime(2008, 2, 29), False),
 
128
             #(QuarterEnd(1, startingMonth=3), datetime(2007, 3, 30), False), 
 
129
             #(QuarterEnd(1, startingMonth=3), datetime(2007, 3, 31), False), 
 
130
             #(QuarterEnd(1, startingMonth=1), datetime(2008, 4, 30), True), 
 
131
             #(QuarterEnd(1, startingMonth=2), datetime(2008, 5, 30), False), 
 
132
             #(QuarterEnd(1, startingMonth=3), datetime(2008, 6, 29), False), 
 
133
             #(QuarterEnd(1, startingMonth=3), datetime(2008, 6, 30), False), 
 
134
             
 
135
             #(QuarterEnd(1, startingMonth=2), datetime(2008, 1, 31), False),
 
136
             #(QuarterEnd(1, startingMonth=2), datetime(2007, 12, 31), False),
 
137
             #(QuarterEnd(1, startingMonth=2), datetime(2008, 2, 29), True), 
 
138
             #(QuarterEnd(1, startingMonth=3), datetime(2007, 3, 30), False), 
 
139
             #(QuarterEnd(1, startingMonth=3), datetime(2007, 3, 31), False), 
 
140
             #(QuarterEnd(1, startingMonth=2), datetime(2008, 4, 30), False), 
 
141
             #(QuarterEnd(1, startingMonth=2), datetime(2008, 5, 30), True), 
 
142
             #(QuarterEnd(1, startingMonth=3), datetime(2008, 6, 29), False), 
 
143
             #(QuarterEnd(1, startingMonth=3), datetime(2008, 6, 30), False), 
 
144
         
 
145
             #(QuarterEnd(1, startingMonth=3), datetime(2008, 1, 31), False),
 
146
             #(QuarterEnd(1, startingMonth=3), datetime(2007, 12, 31), False),
 
147
             #(QuarterEnd(1, startingMonth=3), datetime(2008, 2, 29), False),
 
148
             #(QuarterEnd(1, startingMonth=3), datetime(2007, 3, 30), False), 
 
149
             #(QuarterEnd(1, startingMonth=3), datetime(2007, 3, 31), True), 
 
150
             #(QuarterEnd(1, startingMonth=3), datetime(2008, 4, 30), False), 
 
151
             #(QuarterEnd(1, startingMonth=3), datetime(2008, 5, 30), False),
 
152
             #(QuarterEnd(1, startingMonth=3), datetime(2008, 6, 29), False), 
 
153
             #(QuarterEnd(1, startingMonth=3), datetime(2008, 6, 30), True), 
 
154
             
 
155
             (datetools.Week(dayOfWeek=0), datetime(2008, 1, 1), False),
 
156
             (datetools.Week(dayOfWeek=0), datetime(2008, 1, 2), False),
 
157
             (datetools.Week(dayOfWeek=0), datetime(2008, 1, 3), False),
 
158
             (datetools.Week(dayOfWeek=0), datetime(2008, 1, 4), False),
 
159
             (datetools.Week(dayOfWeek=0), datetime(2008, 1, 5), False),
 
160
             (datetools.Week(dayOfWeek=0), datetime(2008, 1, 6), False),
 
161
             (datetools.Week(dayOfWeek=0), datetime(2008, 1, 7), True),
 
162
 
 
163
             (datetools.Week(dayOfWeek=1), datetime(2008, 1, 1), True),
 
164
             (datetools.Week(dayOfWeek=1), datetime(2008, 1, 2), False),
 
165
             (datetools.Week(dayOfWeek=1), datetime(2008, 1, 3), False),
 
166
             (datetools.Week(dayOfWeek=1), datetime(2008, 1, 4), False),
 
167
             (datetools.Week(dayOfWeek=1), datetime(2008, 1, 5), False),
 
168
             (datetools.Week(dayOfWeek=1), datetime(2008, 1, 6), False),
 
169
             (datetools.Week(dayOfWeek=1), datetime(2008, 1, 7), False),
 
170
 
 
171
             (datetools.Week(dayOfWeek=2), datetime(2008, 1, 1), False),
 
172
             (datetools.Week(dayOfWeek=2), datetime(2008, 1, 2), True),
 
173
             (datetools.Week(dayOfWeek=2), datetime(2008, 1, 3), False),
 
174
             (datetools.Week(dayOfWeek=2), datetime(2008, 1, 4), False),
 
175
             (datetools.Week(dayOfWeek=2), datetime(2008, 1, 5), False),
 
176
             (datetools.Week(dayOfWeek=2), datetime(2008, 1, 6), False),
 
177
             (datetools.Week(dayOfWeek=2), datetime(2008, 1, 7), False),
 
178
 
 
179
             (datetools.Week(dayOfWeek=3), datetime(2008, 1, 1), False),
 
180
             (datetools.Week(dayOfWeek=3), datetime(2008, 1, 2), False),
 
181
             (datetools.Week(dayOfWeek=3), datetime(2008, 1, 3), True),
 
182
             (datetools.Week(dayOfWeek=3), datetime(2008, 1, 4), False),
 
183
             (datetools.Week(dayOfWeek=3), datetime(2008, 1, 5), False),
 
184
             (datetools.Week(dayOfWeek=3), datetime(2008, 1, 6), False),
 
185
             (datetools.Week(dayOfWeek=3), datetime(2008, 1, 7), False),
 
186
             
 
187
             (datetools.Week(dayOfWeek=4), datetime(2008, 1, 1), False),
 
188
             (datetools.Week(dayOfWeek=4), datetime(2008, 1, 2), False),
 
189
             (datetools.Week(dayOfWeek=4), datetime(2008, 1, 3), False),
 
190
             (datetools.Week(dayOfWeek=4), datetime(2008, 1, 4), True),
 
191
             (datetools.Week(dayOfWeek=4), datetime(2008, 1, 5), False),
 
192
             (datetools.Week(dayOfWeek=4), datetime(2008, 1, 6), False),
 
193
             (datetools.Week(dayOfWeek=4), datetime(2008, 1, 7), False),
 
194
             
 
195
             (datetools.Week(dayOfWeek=5), datetime(2008, 1, 1), False),
 
196
             (datetools.Week(dayOfWeek=5), datetime(2008, 1, 2), False),
 
197
             (datetools.Week(dayOfWeek=5), datetime(2008, 1, 3), False),
 
198
             (datetools.Week(dayOfWeek=5), datetime(2008, 1, 4), False),
 
199
             (datetools.Week(dayOfWeek=5), datetime(2008, 1, 5), True),
 
200
             (datetools.Week(dayOfWeek=5), datetime(2008, 1, 6), False),
 
201
             (datetools.Week(dayOfWeek=5), datetime(2008, 1, 7), False),
 
202
             
 
203
             (datetools.Week(dayOfWeek=6), datetime(2008, 1, 1), False),
 
204
             (datetools.Week(dayOfWeek=6), datetime(2008, 1, 2), False),
 
205
             (datetools.Week(dayOfWeek=6), datetime(2008, 1, 3), False),
 
206
             (datetools.Week(dayOfWeek=6), datetime(2008, 1, 4), False),
 
207
             (datetools.Week(dayOfWeek=6), datetime(2008, 1, 5), False),
 
208
             (datetools.Week(dayOfWeek=6), datetime(2008, 1, 6), True),
 
209
             (datetools.Week(dayOfWeek=6), datetime(2008, 1, 7), False),
 
210
         ]
 
211
 
 
212
    for offset, date, expected in tests:
 
213
        yield assertOnOffset, offset, date, expected
 
214
 
 
215
 
 
216
def assertEq(dateOffset, baseDate, expected):
 
217
    actual = dateOffset + baseDate
 
218
    assert actual == expected
 
219
 
 
220
def testBday():
 
221
    tests = []
 
222
    
 
223
    tests.append((datetools.bday,
 
224
                  {datetime(2008, 1, 1): datetime(2008, 1, 2),
 
225
                   datetime(2008, 1, 4): datetime(2008, 1, 7),
 
226
                   datetime(2008, 1, 5): datetime(2008, 1, 7),
 
227
                   datetime(2008, 1, 6): datetime(2008, 1, 7),
 
228
                   datetime(2008, 1, 7): datetime(2008, 1, 8)}))
 
229
    
 
230
    tests.append((2*datetools.bday,
 
231
                  {datetime(2008, 1, 1): datetime(2008, 1, 3),
 
232
                   datetime(2008, 1, 4): datetime(2008, 1, 8),
 
233
                   datetime(2008, 1, 5): datetime(2008, 1, 8),
 
234
                   datetime(2008, 1, 6): datetime(2008, 1, 8),
 
235
                   datetime(2008, 1, 7): datetime(2008, 1, 9)}))
 
236
    
 
237
    tests.append((-datetools.bday,
 
238
                  {datetime(2008, 1, 1): datetime(2007, 12, 31),
 
239
                   datetime(2008, 1, 4): datetime(2008, 1, 3),
 
240
                   datetime(2008, 1, 5): datetime(2008, 1, 4),
 
241
                   datetime(2008, 1, 6): datetime(2008, 1, 4),
 
242
                   datetime(2008, 1, 7): datetime(2008, 1, 4),
 
243
                   datetime(2008, 1, 8): datetime(2008, 1, 7)}))
 
244
 
 
245
    tests.append((-2*datetools.bday,
 
246
                  {datetime(2008, 1, 1): datetime(2007, 12, 28),
 
247
                   datetime(2008, 1, 4): datetime(2008, 1, 2),
 
248
                   datetime(2008, 1, 5): datetime(2008, 1, 3),
 
249
                   datetime(2008, 1, 6): datetime(2008, 1, 3),
 
250
                   datetime(2008, 1, 7): datetime(2008, 1, 3),
 
251
                   datetime(2008, 1, 8): datetime(2008, 1, 4),
 
252
                   datetime(2008, 1, 9): datetime(2008, 1, 7)}))
 
253
 
 
254
    tests.append((datetools.BDay(0),
 
255
                  {datetime(2008, 1, 1): datetime(2008, 1, 1),
 
256
                   datetime(2008, 1, 4): datetime(2008, 1, 4),
 
257
                   datetime(2008, 1, 5): datetime(2008, 1, 7),
 
258
                   datetime(2008, 1, 6): datetime(2008, 1, 7),
 
259
                   datetime(2008, 1, 7): datetime(2008, 1, 7)}))
 
260
 
 
261
    for dateOffset, cases in tests:
 
262
        for baseDate, expected in cases.iteritems():
 
263
            yield assertEq, dateOffset, baseDate, expected
 
264
    
 
265
def testWeek():
 
266
    tests = []
 
267
    
 
268
    tests.append((datetools.week, # not business week
 
269
                  {datetime(2008, 1, 1): datetime(2008, 1, 8),
 
270
                   datetime(2008, 1, 4): datetime(2008, 1, 11),
 
271
                   datetime(2008, 1, 5): datetime(2008, 1, 12),
 
272
                   datetime(2008, 1, 6): datetime(2008, 1, 13),
 
273
                   datetime(2008, 1, 7): datetime(2008, 1, 14)}))
 
274
    
 
275
    tests.append((datetools.Week(dayOfWeek=0), # Mon
 
276
                  {datetime(2007, 12, 31): datetime(2008, 1, 7),
 
277
                   datetime(2008, 1, 4): datetime(2008, 1, 7),
 
278
                   datetime(2008, 1, 5): datetime(2008, 1, 7),
 
279
                   datetime(2008, 1, 6): datetime(2008, 1, 7),
 
280
                   datetime(2008, 1, 7): datetime(2008, 1, 14)}))
 
281
    
 
282
    tests.append((datetools.Week(0, dayOfWeek=0), # n=0 -> roll forward. Mon
 
283
                  {datetime(2007, 12, 31): datetime(2007, 12, 31),
 
284
                   datetime(2008, 1, 4): datetime(2008, 1, 7),
 
285
                   datetime(2008, 1, 5): datetime(2008, 1, 7),
 
286
                   datetime(2008, 1, 6): datetime(2008, 1, 7),
 
287
                   datetime(2008, 1, 7): datetime(2008, 1, 7)}))
 
288
    
 
289
    for dateOffset, cases in tests:
 
290
        for baseDate, expected in cases.iteritems():
 
291
            yield assertEq, dateOffset, baseDate, expected
 
292
            
 
293
def testBMonthEnd():        
 
294
    tests = []
 
295
    
 
296
    tests.append((datetools.BMonthEnd(), 
 
297
                 {datetime(2008, 1, 1): datetime(2008, 1, 31), 
 
298
                  datetime(2008, 1, 31): datetime(2008, 2, 29),
 
299
                  datetime(2006, 12, 29): datetime(2007, 1, 31), 
 
300
                  datetime(2006, 12, 31): datetime(2007, 1, 31),
 
301
                  datetime(2007, 1, 1): datetime(2007, 1, 31), 
 
302
                  datetime(2006, 12, 1): datetime(2006, 12, 29)}))
 
303
        
 
304
    tests.append((datetools.BMonthEnd(0), 
 
305
                  {datetime(2008, 1, 1): datetime(2008, 1, 31),
 
306
                   datetime(2008, 1, 31): datetime(2008, 1, 31),
 
307
                   datetime(2006, 12, 29): datetime(2006, 12, 29),
 
308
                   datetime(2006, 12, 31): datetime(2007, 1, 31),
 
309
                   datetime(2007, 1, 1): datetime(2007, 1, 31)}))
 
310
    
 
311
    tests.append((datetools.BMonthEnd(2),
 
312
                 {datetime(2008, 1, 1): datetime(2008, 2, 29),
 
313
                  datetime(2008, 1, 31): datetime(2008, 3, 31),
 
314
                  datetime(2006, 12, 29): datetime(2007, 2, 28),
 
315
                  datetime(2006, 12, 31): datetime(2007, 2, 28),
 
316
                  datetime(2007, 1, 1): datetime(2007, 2, 28),
 
317
                  datetime(2006, 11, 1): datetime(2006, 12, 29)}))
 
318
 
 
319
    tests.append((datetools.BMonthEnd(-1),
 
320
                 {datetime(2007, 1, 1): datetime(2006, 12, 29),
 
321
                  datetime(2008, 6, 30): datetime(2008, 5, 30),
 
322
                  datetime(2008, 12, 31): datetime(2008, 11, 28),
 
323
                  datetime(2006, 12, 29): datetime(2006, 11, 30),
 
324
                  datetime(2006, 12, 30): datetime(2006, 12, 29),
 
325
                  datetime(2007, 1, 1): datetime(2006, 12, 29)}))
 
326
        
 
327
    for dateOffset, cases in tests:
 
328
        for baseDate, expected in cases.iteritems():
 
329
            yield assertEq, dateOffset, baseDate, expected
 
330
  
 
331
 
 
332
def testBYearEnd():
 
333
    tests = []
 
334
    
 
335
    tests.append((datetools.BYearEnd(),
 
336
                  {datetime(2008, 1, 1): datetime(2008, 12, 31),
 
337
                   datetime(2008, 6, 30): datetime(2008, 12, 31),
 
338
                   datetime(2008, 12, 31): datetime(2009, 12, 31),
 
339
                   datetime(2005, 12, 30): datetime(2006, 12, 29),
 
340
                   datetime(2005, 12, 31): datetime(2006, 12, 29),}))
 
341
 
 
342
    tests.append((datetools.BYearEnd(0),
 
343
                  {datetime(2008, 1, 1): datetime(2008, 12, 31),
 
344
                   datetime(2008, 6, 30): datetime(2008, 12, 31),
 
345
                   datetime(2008, 12, 31): datetime(2008, 12, 31),
 
346
                   datetime(2005, 12, 31): datetime(2006, 12, 29),}))
 
347
 
 
348
    tests.append((datetools.BYearEnd(-1),
 
349
                  {datetime(2007, 1, 1): datetime(2006, 12, 29),
 
350
                   datetime(2008, 6, 30): datetime(2007, 12, 31),
 
351
                   datetime(2008, 12, 31): datetime(2007, 12, 31),
 
352
                   datetime(2006, 12, 29): datetime(2005, 12, 30),
 
353
                   datetime(2006, 12, 30): datetime(2006, 12, 29),
 
354
                   datetime(2007, 1, 1): datetime(2006, 12, 29),}))
 
355
 
 
356
    tests.append((datetools.BYearEnd(-2),
 
357
                  {datetime(2007, 1, 1): datetime(2005, 12, 30),
 
358
                   datetime(2008, 6, 30): datetime(2006, 12, 29),
 
359
                   datetime(2008, 12, 31): datetime(2006, 12, 29),}))
 
360
    
 
361
    for dateOffset, cases in tests:
 
362
        for baseDate, expected in cases.iteritems():
 
363
            yield assertEq, dateOffset, baseDate, expected
 
364
 
 
365
def testYearBegin():
 
366
    tests = []
 
367
    
 
368
    tests.append((datetools.YearBegin(),
 
369
                  {datetime(2008, 1, 1): datetime(2009, 1, 1),
 
370
                   datetime(2008, 6, 30): datetime(2009, 1, 1),
 
371
                   datetime(2008, 12, 31): datetime(2009, 1, 1),
 
372
                   datetime(2005, 12, 30): datetime(2006, 1, 1),
 
373
                   datetime(2005, 12, 31): datetime(2006, 1, 1),}))
 
374
 
 
375
    tests.append((datetools.YearBegin(0),
 
376
                  {datetime(2008, 1, 1): datetime(2008, 1, 1),
 
377
                   datetime(2008, 6, 30): datetime(2009, 1, 1),
 
378
                   datetime(2008, 12, 31): datetime(2009, 1, 1),
 
379
                   datetime(2005, 12, 30): datetime(2006, 1, 1),
 
380
                   datetime(2005, 12, 31): datetime(2006, 1, 1),}))
 
381
 
 
382
 
 
383
    tests.append((datetools.YearBegin(-1),
 
384
                  {datetime(2007, 1, 1): datetime(2006, 1, 1),
 
385
                   datetime(2008, 6, 30): datetime(2008, 1, 1),
 
386
                   datetime(2008, 12, 31): datetime(2008, 1, 1),
 
387
                   datetime(2006, 12, 29): datetime(2006, 1, 1),
 
388
                   datetime(2006, 12, 30): datetime(2006, 1, 1),
 
389
                   datetime(2007, 1, 1): datetime(2006, 1, 1),}))
 
390
 
 
391
    tests.append((datetools.YearBegin(-2),
 
392
                  {datetime(2007, 1, 1): datetime(2005, 1, 1),
 
393
                   datetime(2008, 6, 30): datetime(2007, 1, 1),
 
394
                   datetime(2008, 12, 31): datetime(2007, 1, 1),}))
 
395
    
 
396
    for dateOffset, cases in tests:
 
397
        for baseDate, expected in cases.iteritems():
 
398
            yield assertEq, dateOffset, baseDate, expected            
 
399
            
 
400
            
 
401
def testBQuarterEnd():
 
402
    tests = []
 
403
    
 
404
    tests.append((datetools.BQuarterEnd(),
 
405
                  {datetime(2008, 1, 1): datetime(2008, 3, 31),
 
406
                   datetime(2008, 1, 31): datetime(2008, 3, 31),
 
407
                   datetime(2008, 2, 15): datetime(2008, 3, 31),
 
408
                   datetime(2008, 2, 29): datetime(2008, 3, 31),        
 
409
                   datetime(2008, 3, 15): datetime(2008, 3, 31),
 
410
                   datetime(2008, 3, 31): datetime(2008, 6, 30),
 
411
                   datetime(2008, 4, 15): datetime(2008, 6, 30),
 
412
                   datetime(2008, 4, 30): datetime(2008, 6, 30),}))
 
413
    
 
414
    tests.append((datetools.BQuarterEnd(n = 0),
 
415
                  {datetime(2008, 1, 1): datetime(2008, 3, 31),
 
416
                   datetime(2008, 1, 31): datetime(2008, 3, 31),
 
417
                   datetime(2008, 2, 15): datetime(2008, 3, 31),
 
418
                   datetime(2008, 2, 29): datetime(2008, 3, 31),        
 
419
                   datetime(2008, 3, 15): datetime(2008, 3, 31),
 
420
                   datetime(2008, 3, 31): datetime(2008, 3, 31),
 
421
                   datetime(2008, 4, 15): datetime(2008, 6, 30),
 
422
                   datetime(2008, 4, 30): datetime(2008, 6, 30),}))
 
423
    
 
424
    tests.append((datetools.BQuarterEnd(n = -1),
 
425
                  {datetime(2008, 1, 1): datetime(2007, 12, 31),
 
426
                   datetime(2008, 1, 31): datetime(2007, 12, 31),
 
427
                   datetime(2008, 2, 15): datetime(2007, 12, 31),
 
428
                   datetime(2008, 2, 29): datetime(2007, 12, 31),        
 
429
                   datetime(2008, 3, 15): datetime(2007, 12, 31),
 
430
                   datetime(2008, 3, 31): datetime(2007, 12, 31),
 
431
                   datetime(2008, 4, 15): datetime(2008, 3, 31),
 
432
                  datetime(2008, 4, 30): datetime(2008, 3, 31),}))
 
433
    
 
434
    tests.append((datetools.BQuarterEnd(n = 2),
 
435
                  {datetime(2008, 1, 1): datetime(2008, 6, 30),
 
436
                   datetime(2008, 1, 31): datetime(2008, 6, 30),
 
437
                   datetime(2008, 2, 15): datetime(2008, 6, 30),
 
438
                   datetime(2008, 2, 29): datetime(2008, 6, 30),        
 
439
                   datetime(2008, 3, 15): datetime(2008, 6, 30),
 
440
                   datetime(2008, 3, 31): datetime(2008, 9, 30),
 
441
                   datetime(2008, 4, 15): datetime(2008, 9, 30),
 
442
                   datetime(2008, 4, 30): datetime(2008, 9, 30),}))
 
443
    
 
444
    for dateOffset, cases in tests:
 
445
        for baseDate, expected in cases.iteritems():
 
446
            yield assertEq, dateOffset, baseDate, expected
 
447
 
 
448
def testBQuarterEndOffsets():
 
449
    tests = []
 
450
    
 
451
    tests.append((datetools.BQuarterEnd(startingMonth=1),
 
452
                  {datetime(2008, 1, 1): datetime(2008, 1, 31),
 
453
                   datetime(2008, 1, 31): datetime(2008, 4, 30),
 
454
                   datetime(2008, 2, 15): datetime(2008, 4, 30),
 
455
                   datetime(2008, 2, 29): datetime(2008, 4, 30),        
 
456
                   datetime(2008, 3, 15): datetime(2008, 4, 30),
 
457
                   datetime(2008, 3, 31): datetime(2008, 4, 30),
 
458
                   datetime(2008, 4, 15): datetime(2008, 4, 30),
 
459
                   datetime(2008, 4, 30): datetime(2008, 7, 31),}))
 
460
 
 
461
    tests.append((datetools.BQuarterEnd(startingMonth=2),
 
462
                  {datetime(2008, 1, 1): datetime(2008, 2, 29),
 
463
                   datetime(2008, 1, 31): datetime(2008, 2, 29),
 
464
                   datetime(2008, 2, 15): datetime(2008, 2, 29),
 
465
                   datetime(2008, 2, 29): datetime(2008, 5, 30),        
 
466
                   datetime(2008, 3, 15): datetime(2008, 5, 30),
 
467
                   datetime(2008, 3, 31): datetime(2008, 5, 30),
 
468
                   datetime(2008, 4, 15): datetime(2008, 5, 30),
 
469
                   datetime(2008, 4, 30): datetime(2008, 5, 30),}))
 
470
    
 
471
    tests.append((datetools.BQuarterEnd(startingMonth=1, n=0),
 
472
                  {datetime(2008, 1, 1): datetime(2008, 1, 31),
 
473
                   datetime(2008, 1, 31): datetime(2008, 1, 31),
 
474
                   datetime(2008, 2, 15): datetime(2008, 4, 30),
 
475
                   datetime(2008, 2, 29): datetime(2008, 4, 30),        
 
476
                   datetime(2008, 3, 15): datetime(2008, 4, 30),
 
477
                   datetime(2008, 3, 31): datetime(2008, 4, 30),
 
478
                   datetime(2008, 4, 15): datetime(2008, 4, 30),
 
479
                   datetime(2008, 4, 30): datetime(2008, 4, 30),}))
 
480
     
 
481
    tests.append((datetools.BQuarterEnd(startingMonth=1, n=-1),
 
482
                  {datetime(2008, 1, 1): datetime(2007, 10, 31),
 
483
                   datetime(2008, 1, 31): datetime(2007, 10, 31),
 
484
                   datetime(2008, 2, 15): datetime(2008, 1, 31),
 
485
                   datetime(2008, 2, 29): datetime(2008, 1, 31),        
 
486
                   datetime(2008, 3, 15): datetime(2008, 1, 31),
 
487
                   datetime(2008, 3, 31): datetime(2008, 1, 31),
 
488
                   datetime(2008, 4, 15): datetime(2008, 1, 31),
 
489
                   datetime(2008, 4, 30): datetime(2008, 1, 31),}))
 
490
    
 
491
    tests.append((datetools.BQuarterEnd(startingMonth=1, n=2),
 
492
                  {datetime(2008, 1, 31): datetime(2008, 7, 31),
 
493
                   datetime(2008, 2, 15): datetime(2008, 7, 31),
 
494
                   datetime(2008, 2, 29): datetime(2008, 7, 31),        
 
495
                   datetime(2008, 3, 15): datetime(2008, 7, 31),
 
496
                   datetime(2008, 3, 31): datetime(2008, 7, 31),
 
497
                   datetime(2008, 4, 15): datetime(2008, 7, 31),
 
498
                   datetime(2008, 4, 30): datetime(2008, 10, 31),}))
 
499
 
 
500
    for dateOffset, cases in tests:
 
501
        for baseDate, expected in cases.iteritems():
 
502
            yield assertEq, dateOffset, baseDate, expected
 
503
 
 
504
 
 
505
        
 
506
####
 
507
## XDateRange Tests
 
508
####
 
509
def eqXDateRange(kwargs, expected):
 
510
    actual = list(XDateRange(**kwargs))
 
511
    assert actual == expected
 
512
    
 
513
def testXDateRange1():    
 
514
    eqXDateRange(dict(fromDate = datetime(2009, 3, 25),
 
515
                      nPeriods = 2), 
 
516
                 [datetime(2009, 3, 25), datetime(2009, 3, 26)])
 
517
 
 
518
def testXDateRange2():    
 
519
    eqXDateRange(dict(fromDate = datetime(2008, 1, 1),
 
520
                      toDate = datetime(2008, 1, 3)),
 
521
                 [datetime(2008, 1, 1),
 
522
                  datetime(2008, 1, 2),
 
523
                  datetime(2008, 1, 3)])
 
524
    
 
525
def testXDateRange3():    
 
526
    eqXDateRange(dict(fromDate = datetime(2008, 1, 5),
 
527
                      toDate = datetime(2008, 1, 6)),
 
528
                 [])
 
529
    
 
530
 
 
531
    
 
532
# DateRange test
 
533
 
 
534
def assertEqual(a, b):
 
535
    actual = dateOffset + baseDate
 
536
    assert actual == expected
 
537
 
 
538
def testDateRange1():
 
539
    toDate = datetime(2009, 5, 13)
 
540
    dr = DateRange(toDate=toDate, periods=20)
 
541
    firstDate = toDate - 19 * datetools.bday
 
542
    
 
543
    assert len(dr) == 20
 
544
    assert dr[0] == firstDate
 
545
    assert dr[-1] == toDate