comparison test/test_dates.py @ 1896:b3f63a0615db maint-0.6

backport of Date arithmetic fixes from trunk
author Anthony Baxter <anthonybaxter@users.sourceforge.net>
date Tue, 04 Nov 2003 12:39:54 +0000
parents cc96bf971b33
children
comparison
equal deleted inserted replaced
1895:11010aae4ef0 1896:b3f63a0615db
13 # BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 13 # BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
14 # FOR A PARTICULAR PURPOSE. THE CODE PROVIDED HEREUNDER IS ON AN "AS IS" 14 # FOR A PARTICULAR PURPOSE. THE CODE PROVIDED HEREUNDER IS ON AN "AS IS"
15 # BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE, 15 # BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE,
16 # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. 16 # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
17 # 17 #
18 # $Id: test_dates.py,v 1.24 2003-04-22 20:53:54 kedder Exp $ 18 # $Id: test_dates.py,v 1.24.2.1 2003-11-04 12:39:54 anthonybaxter Exp $
19 19
20 import unittest, time 20 import unittest, time
21 21
22 from roundup.date import Date, Interval, Range, fixTimeOverflow 22 from roundup.date import Date, Interval, Range, fixTimeOverflow
23 23
171 def testIntervalInitDate(self): 171 def testIntervalInitDate(self):
172 ae = self.assertEqual 172 ae = self.assertEqual
173 now = Date('.') 173 now = Date('.')
174 now.hour = now.minute = now.second = 0 174 now.hour = now.minute = now.second = 0
175 then = now + Interval('2d') 175 then = now + Interval('2d')
176 ae(str(Interval(str(then))), '+ 2d') 176 ae((Interval(str(then))), Interval('- 2d'))
177 then = now - Interval('2d') 177 then = now - Interval('2d')
178 ae(str(Interval(str(then))), '- 2d') 178 ae(Interval(str(then)), Interval('+ 2d'))
179
180 def testIntervalAddMonthBoundary(self):
181 # force the transition over a month boundary
182 now = Date('2003-10-30.00:00:00')
183 then = now + Interval('2d')
184 self.assertEqual(str(then), '2003-11-01.00:00:00')
185 now = Date('2004-02-28.00:00:00')
186 then = now + Interval('1d')
187 self.assertEqual(str(then), '2004-02-29.00:00:00')
188 now = Date('2003-02-28.00:00:00')
189 then = now + Interval('1d')
190 self.assertEqual(str(then), '2003-03-01.00:00:00')
191 now = Date('2003-01-01.00:00:00')
192 then = now + Interval('59d')
193 self.assertEqual(str(then), '2003-03-01.00:00:00')
194 now = Date('2004-01-01.00:00:00')
195 then = now + Interval('59d')
196 self.assertEqual(str(then), '2004-02-29.00:00:00')
197
198 def testIntervalSubtractMonthBoundary(self):
199 # force the transition over a month boundary
200 now = Date('2003-11-01.00:00:00')
201 then = now - Interval('2d')
202 self.assertEqual(str(then), '2003-10-30.00:00:00')
203 now = Date('2004-02-29.00:00:00')
204 then = now - Interval('1d')
205 self.assertEqual(str(then), '2004-02-28.00:00:00')
206 now = Date('2003-03-01.00:00:00')
207 then = now - Interval('1d')
208 self.assertEqual(str(then), '2003-02-28.00:00:00')
209 now = Date('2003-03-01.00:00:00')
210 then = now - Interval('59d')
211 self.assertEqual(str(then), '2003-01-01.00:00:00')
212 now = Date('2004-02-29.00:00:00')
213 then = now - Interval('59d')
214 self.assertEqual(str(then), '2004-01-01.00:00:00')
215
216 def testIntervalAddYearBoundary(self):
217 # force the transition over a year boundary
218 now = Date('2003-12-30.00:00:00')
219 then = now + Interval('2d')
220 self.assertEqual(str(then), '2004-01-01.00:00:00')
221 now = Date('2003-01-01.00:00:00')
222 then = now + Interval('365d')
223 self.assertEqual(str(then), '2004-01-01.00:00:00')
224 now = Date('2004-01-01.00:00:00')
225 then = now + Interval('366d')
226 self.assertEqual(str(then), '2005-01-01.00:00:00')
227
228 def testIntervalSubtractYearBoundary(self):
229 # force the transition over a year boundary
230 now = Date('2003-01-01.00:00:00')
231 then = now - Interval('2d')
232 self.assertEqual(str(then), '2002-12-30.00:00:00')
233 now = Date('2004-02-01.00:00:00')
234 then = now - Interval('365d')
235 self.assertEqual(str(then), '2003-02-01.00:00:00')
236 now = Date('2005-02-01.00:00:00')
237 then = now - Interval('365d')
238 self.assertEqual(str(then), '2004-02-02.00:00:00')
239
240 def testDateSubtract(self):
241 # These are thoroughly broken right now.
242 i = Date('2003-03-15.00:00:00') - Date('2003-03-10.00:00:00')
243 self.assertEqual(i, Interval('5d'))
244 i = Date('2003-02-01.00:00:00') - Date('2003-03-01.00:00:00')
245 self.assertEqual(i, Interval('-28d'))
246 i = Date('2003-03-01.00:00:00') - Date('2003-02-01.00:00:00')
247 self.assertEqual(i, Interval('28d'))
248 i = Date('2003-03-03.00:00:00') - Date('2003-02-01.00:00:00')
249 self.assertEqual(i, Interval('30d'))
250 i = Date('2003-03-03.00:00:00') - Date('2002-02-01.00:00:00')
251 self.assertEqual(i, Interval('395d'))
252 i = Date('2003-03-03.00:00:00') - Date('2003-04-01.00:00:00')
253 self.assertEqual(i, Interval('-29d'))
254 i = Date('2003-03-01.00:00:00') - Date('2003-02-01.00:00:00')
255 self.assertEqual(i, Interval('28d'))
256 # force the transition over a year boundary
257 i = Date('2003-01-01.00:00:00') - Date('2002-01-01.00:00:00')
258 self.assertEqual(i, Interval('365d'))
179 259
180 def testIntervalAdd(self): 260 def testIntervalAdd(self):
181 ae = self.assertEqual 261 ae = self.assertEqual
182 ae(str(Interval('1y') + Interval('1y')), '+ 2y') 262 ae(str(Interval('1y') + Interval('1y')), '+ 2y')
183 ae(str(Interval('1y') + Interval('1m')), '+ 1y 1m') 263 ae(str(Interval('1y') + Interval('1m')), '+ 1y 1m')
255 ae(str(Date('2003-5', add_granularity=1)), '2003-05-31.23:59:59') 335 ae(str(Date('2003-5', add_granularity=1)), '2003-05-31.23:59:59')
256 ae(str(Interval('+1w', add_granularity=1)), '+ 14d') 336 ae(str(Interval('+1w', add_granularity=1)), '+ 14d')
257 ae(str(Interval('-2m 3w', add_granularity=1)), '- 2m 14d') 337 ae(str(Interval('-2m 3w', add_granularity=1)), '- 2m 14d')
258 338
259 def suite(): 339 def suite():
260 return unittest.makeSuite(DateTestCase, 'test') 340 return unittest.makeSuite(DateTestCase, 'test')
261 341
262 342
263 # vim: set filetype=python ts=4 sw=4 et si 343 # vim: set filetype=python ts=4 sw=4 et si

Roundup Issue Tracker: http://roundup-tracker.org/