@@ -74,183 +74,288 @@ def test_timeparse_multipliers(self):
7474 self .assertEqual (timeparse .timeparse ('1 sec' ),
7575 1 )
7676
77+ def test_timeparse_signs (self ):
78+ '''Test parsing time signs.'''
79+ self .assertEqual (timeparse .timeparse ('+32 m 1 s' ), 1921 )
80+ self .assertEqual (timeparse .timeparse ('+ 32 m 1 s' ), 1921 )
81+ self .assertEqual (timeparse .timeparse ('-32 m 1 s' ), - 1921 )
82+ self .assertEqual (timeparse .timeparse ('- 32 m 1 s' ), - 1921 )
83+ self .assertIsNone (timeparse .timeparse ('32 m - 1 s' ))
84+ self .assertIsNone (timeparse .timeparse ('32 m + 1 s' ))
85+
7786 def test_timeparse_1 (self ):
7887 '''timeparse test case 1.'''
7988 self .assertEqual (timeparse .timeparse ('32m' ), 1920 )
89+ self .assertEqual (timeparse .timeparse ('+32m' ), 1920 )
90+ self .assertEqual (timeparse .timeparse ('-32m' ), - 1920 )
8091
8192 def test_timeparse_2 (self ):
8293 '''timeparse test case 2.'''
8394 self .assertEqual (timeparse .timeparse ('2h32m' ), 9120 )
95+ self .assertEqual (timeparse .timeparse ('+2h32m' ), 9120 )
96+ self .assertEqual (timeparse .timeparse ('-2h32m' ), - 9120 )
8497
8598 def test_timeparse_3 (self ):
8699 '''timeparse test case 3.'''
87100 self .assertEqual (timeparse .timeparse ('3d2h32m' ), 268320 )
101+ self .assertEqual (timeparse .timeparse ('+3d2h32m' ), 268320 )
102+ self .assertEqual (timeparse .timeparse ('-3d2h32m' ), - 268320 )
88103
89104 def test_timeparse_4 (self ):
90105 '''timeparse test case 4.'''
91106 self .assertEqual (timeparse .timeparse ('1w3d2h32m' ), 873120 )
107+ self .assertEqual (timeparse .timeparse ('+1w3d2h32m' ), 873120 )
108+ self .assertEqual (timeparse .timeparse ('-1w3d2h32m' ), - 873120 )
92109
93110 def test_timeparse_5 (self ):
94111 '''timeparse test case 5.'''
95112 self .assertEqual (timeparse .timeparse ('1w 3d 2h 32m' ), 873120 )
113+ self .assertEqual (timeparse .timeparse ('+1w 3d 2h 32m' ), 873120 )
114+ self .assertEqual (timeparse .timeparse ('-1w 3d 2h 32m' ), - 873120 )
96115
97116 def test_timeparse_6 (self ):
98117 '''timeparse test case 6.'''
99118 self .assertEqual (timeparse .timeparse ('1 w 3 d 2 h 32 m' ), 873120 )
119+ self .assertEqual (timeparse .timeparse ('+1 w 3 d 2 h 32 m' ), 873120 )
120+ self .assertEqual (timeparse .timeparse ('-1 w 3 d 2 h 32 m' ), - 873120 )
100121
101122 def test_timeparse_7 (self ):
102123 '''timeparse test case 7.'''
103124 self .assertEqual (timeparse .timeparse ('4:13' ), 253 )
125+ self .assertEqual (timeparse .timeparse ('+4:13' ), 253 )
126+ self .assertEqual (timeparse .timeparse ('-4:13' ), - 253 )
104127
105128 def test_timeparse_bare_seconds (self ):
106129 '''timeparse test bare seconds, without minutes.'''
107130 self .assertEqual (timeparse .timeparse (':13' ), 13 )
131+ self .assertEqual (timeparse .timeparse ('+:13' ), 13 )
132+ self .assertEqual (timeparse .timeparse ('-:13' ), - 13 )
108133
109134 def test_timeparse_8 (self ):
110135 '''timeparse test case 8.'''
111136 self .assertEqual (timeparse .timeparse ('4:13:02' ), 15182 )
137+ self .assertEqual (timeparse .timeparse ('+4:13:02' ), 15182 )
138+ self .assertEqual (timeparse .timeparse ('-4:13:02' ), - 15182 )
112139
113140 def test_timeparse_9 (self ):
114141 '''timeparse test case 9.'''
115142 self .assertAlmostEqual (timeparse .timeparse ('4:13:02.266' ), 15182.266 )
143+ self .assertAlmostEqual (timeparse .timeparse ('+4:13:02.266' ), 15182.266 )
144+ self .assertAlmostEqual (timeparse .timeparse ('-4:13:02.266' ), - 15182.266 )
116145
117146 def test_timeparse_10 (self ):
118147 '''timeparse test case 10.'''
119148 self .assertAlmostEqual (timeparse .timeparse ('2:04:13:02.266' ),
120149 187982.266 )
150+ self .assertAlmostEqual (timeparse .timeparse ('+2:04:13:02.266' ),
151+ 187982.266 )
152+ self .assertAlmostEqual (timeparse .timeparse ('-2:04:13:02.266' ),
153+ - 187982.266 )
121154
122155 def test_timeparse_granularity_1 (self ):
123156 '''Check that minute-level granularity applies correctly.'''
124157 self .assertEqual (timeparse .timeparse ('4:32' , granularity = 'minutes' ), 272 * 60 )
125-
158+ self .assertEqual (timeparse .timeparse ('+4:32' , granularity = 'minutes' ), 272 * 60 )
159+ self .assertEqual (timeparse .timeparse ('-4:32' , granularity = 'minutes' ), - 272 * 60 )
160+
126161 def test_timeparse_granularity_2 (self ):
127162 '''Check that minute-level granularity does not apply inappropriately.'''
128163 self .assertEqual (timeparse .timeparse ('4:32:02' , granularity = 'minutes' ), 272 * 60 + 2 )
129-
164+ self .assertEqual (timeparse .timeparse ('+4:32:02' , granularity = 'minutes' ), 272 * 60 + 2 )
165+ self .assertEqual (timeparse .timeparse ('-4:32:02' , granularity = 'minutes' ), - (272 * 60 + 2 ))
166+
130167 def test_timeparse_granularity_3 (self ):
131168 '''Check that minute-level granularity does not apply inappropriately.'''
132169 self .assertAlmostEqual (timeparse .timeparse ('7:02.223' , granularity = 'minutes' ), 7 * 60 + 2.223 )
133-
170+ self .assertAlmostEqual (timeparse .timeparse ('+7:02.223' , granularity = 'minutes' ), 7 * 60 + 2.223 )
171+ self .assertAlmostEqual (timeparse .timeparse ('-7:02.223' , granularity = 'minutes' ), - (7 * 60 + 2.223 ))
172+
134173 def test_timeparse_granularity_4 (self ):
135174 '''Check that minute-level granularity does not apply inappropriately.'''
136175 self .assertEqual (timeparse .timeparse ('0:02' , granularity = 'seconds' ), 2 )
137-
176+ self .assertEqual (timeparse .timeparse ('+0:02' , granularity = 'seconds' ), 2 )
177+ self .assertEqual (timeparse .timeparse ('-0:02' , granularity = 'seconds' ), - 2 )
178+
138179 def test_timeparse_11 (self ):
139180 '''timeparse test case 11.'''
140181 # uptime format
141182 self .assertEqual (timeparse .timeparse ('2 days, 4:13:02' ), 187982 )
183+ self .assertEqual (timeparse .timeparse ('+2 days, 4:13:02' ), 187982 )
184+ self .assertEqual (timeparse .timeparse ('-2 days, 4:13:02' ), - 187982 )
142185
143186 def test_timeparse_12 (self ):
144187 '''timeparse test case 12.'''
145188 self .assertAlmostEqual (timeparse .timeparse ('2 days, 4:13:02.266' ),
146189 187982.266 )
190+ self .assertAlmostEqual (timeparse .timeparse ('+2 days, 4:13:02.266' ),
191+ 187982.266 )
192+ self .assertAlmostEqual (timeparse .timeparse ('-2 days, 4:13:02.266' ),
193+ - 187982.266 )
147194
148195 def test_timeparse_13 (self ):
149196 '''timeparse test case 13.'''
150197 self .assertEqual (timeparse .timeparse ('5hr34m56s' ), 20096 )
198+ self .assertEqual (timeparse .timeparse ('+5hr34m56s' ), 20096 )
199+ self .assertEqual (timeparse .timeparse ('-5hr34m56s' ), - 20096 )
151200
152201 def test_timeparse_14 (self ):
153202 '''timeparse test case 14.'''
154203 self .assertEqual (timeparse .timeparse ('5 hours, 34 minutes, 56 seconds' ),
155204 20096 )
205+ self .assertEqual (timeparse .timeparse ('+5 hours, 34 minutes, 56 seconds' ),
206+ 20096 )
207+ self .assertEqual (timeparse .timeparse ('-5 hours, 34 minutes, 56 seconds' ),
208+ - 20096 )
156209
157210 def test_timeparse_15 (self ):
158211 '''timeparse test case 15.'''
159212 self .assertEqual (timeparse .timeparse ('5 hrs, 34 mins, 56 secs' ), 20096 )
213+ self .assertEqual (timeparse .timeparse ('+5 hrs, 34 mins, 56 secs' ), 20096 )
214+ self .assertEqual (timeparse .timeparse ('-5 hrs, 34 mins, 56 secs' ), - 20096 )
160215
161216 def test_timeparse_16 (self ):
162217 '''timeparse test case 16.'''
163218 self .assertEqual (
164219 timeparse .timeparse ('2 days, 5 hours, 34 minutes, 56 seconds' ),
165220 192896 )
221+ self .assertEqual (
222+ timeparse .timeparse ('+2 days, 5 hours, 34 minutes, 56 seconds' ),
223+ 192896 )
224+ self .assertEqual (
225+ timeparse .timeparse ('-2 days, 5 hours, 34 minutes, 56 seconds' ),
226+ - 192896 )
166227
167228 def test_timeparse_16b (self ):
168229 '''timeparse test case 16b.'''
169230 self .assertAlmostEqual (timeparse .timeparse ('1.75 s' ), 1.75 )
231+ self .assertAlmostEqual (timeparse .timeparse ('+1.75 s' ), 1.75 )
232+ self .assertAlmostEqual (timeparse .timeparse ('-1.75 s' ), - 1.75 )
170233
171234 def test_timeparse_16c (self ):
172235 '''timeparse test case 16c.'''
173236 self .assertAlmostEqual (timeparse .timeparse ('1.75 sec' ), 1.75 )
237+ self .assertAlmostEqual (timeparse .timeparse ('+1.75 sec' ), 1.75 )
238+ self .assertAlmostEqual (timeparse .timeparse ('-1.75 sec' ), - 1.75 )
174239
175240 def test_timeparse_16d (self ):
176241 '''timeparse test case 16d.'''
177242 self .assertAlmostEqual (timeparse .timeparse ('1.75 secs' ), 1.75 )
243+ self .assertAlmostEqual (timeparse .timeparse ('+1.75 secs' ), 1.75 )
244+ self .assertAlmostEqual (timeparse .timeparse ('-1.75 secs' ), - 1.75 )
178245
179246 def test_timeparse_16e (self ):
180247 '''timeparse test case 16e.'''
181248 self .assertAlmostEqual (timeparse .timeparse ('1.75 second' ), 1.75 )
249+ self .assertAlmostEqual (timeparse .timeparse ('+1.75 second' ), 1.75 )
250+ self .assertAlmostEqual (timeparse .timeparse ('-1.75 second' ), - 1.75 )
182251
183252 def test_timeparse_16f (self ):
184253 '''timeparse test case 16f.'''
185254 self .assertAlmostEqual (timeparse .timeparse ('1.75 seconds' ), 1.75 )
255+ self .assertAlmostEqual (timeparse .timeparse ('+1.75 seconds' ), 1.75 )
256+ self .assertAlmostEqual (timeparse .timeparse ('-1.75 seconds' ), - 1.75 )
186257
187258 def test_timeparse_17 (self ):
188259 '''timeparse test case 17.'''
189260 self .assertEqual (timeparse .timeparse ('1.2 m' ), 72 )
261+ self .assertEqual (timeparse .timeparse ('+1.2 m' ), 72 )
262+ self .assertEqual (timeparse .timeparse ('-1.2 m' ), - 72 )
190263
191264 def test_timeparse_18 (self ):
192265 '''timeparse test case 18.'''
193266 self .assertEqual (timeparse .timeparse ('1.2 min' ), 72 )
267+ self .assertEqual (timeparse .timeparse ('+1.2 min' ), 72 )
268+ self .assertEqual (timeparse .timeparse ('-1.2 min' ), - 72 )
194269
195270 def test_timeparse_19 (self ):
196271 '''timeparse test case 19.'''
197272 self .assertEqual (timeparse .timeparse ('1.2 mins' ), 72 )
273+ self .assertEqual (timeparse .timeparse ('+1.2 mins' ), 72 )
274+ self .assertEqual (timeparse .timeparse ('-1.2 mins' ), - 72 )
198275
199276 def test_timeparse_20 (self ):
200277 '''timeparse test case 20.'''
201278 self .assertEqual (timeparse .timeparse ('1.2 minute' ), 72 )
279+ self .assertEqual (timeparse .timeparse ('+1.2 minute' ), 72 )
280+ self .assertEqual (timeparse .timeparse ('-1.2 minute' ), - 72 )
202281
203282 def test_timeparse_21 (self ):
204283 '''timeparse test case 21.'''
205284 self .assertEqual (timeparse .timeparse ('1.2 minutes' ), 72 )
285+ self .assertEqual (timeparse .timeparse ('+1.2 minutes' ), 72 )
286+ self .assertEqual (timeparse .timeparse ('-1.2 minutes' ), - 72 )
206287
207288 def test_timeparse_22 (self ):
208289 '''timeparse test case 22.'''
209290 self .assertEqual (timeparse .timeparse ('172 hours' ), 619200 )
291+ self .assertEqual (timeparse .timeparse ('+172 hours' ), 619200 )
292+ self .assertEqual (timeparse .timeparse ('-172 hours' ), - 619200 )
210293
211294 def test_timeparse_23 (self ):
212295 '''timeparse test case 23.'''
213296 self .assertEqual (timeparse .timeparse ('172 hr' ), 619200 )
297+ self .assertEqual (timeparse .timeparse ('+172 hr' ), 619200 )
298+ self .assertEqual (timeparse .timeparse ('-172 hr' ), - 619200 )
214299
215300 def test_timeparse_24 (self ):
216301 '''timeparse test case 24.'''
217302 self .assertEqual (timeparse .timeparse ('172 h' ), 619200 )
303+ self .assertEqual (timeparse .timeparse ('+172 h' ), 619200 )
304+ self .assertEqual (timeparse .timeparse ('-172 h' ), - 619200 )
218305
219306 def test_timeparse_25 (self ):
220307 '''timeparse test case 25.'''
221308 self .assertEqual (timeparse .timeparse ('172 hrs' ), 619200 )
309+ self .assertEqual (timeparse .timeparse ('+172 hrs' ), 619200 )
310+ self .assertEqual (timeparse .timeparse ('-172 hrs' ), - 619200 )
222311
223312 def test_timeparse_26 (self ):
224313 '''timeparse test case 26.'''
225314 self .assertEqual (timeparse .timeparse ('172 hour' ), 619200 )
315+ self .assertEqual (timeparse .timeparse ('+172 hour' ), 619200 )
316+ self .assertEqual (timeparse .timeparse ('-172 hour' ), - 619200 )
226317
227318 def test_timeparse_27 (self ):
228319 '''timeparse test case 27.'''
229320 self .assertEqual (timeparse .timeparse ('1.24 days' ), 107136 )
321+ self .assertEqual (timeparse .timeparse ('+1.24 days' ), 107136 )
322+ self .assertEqual (timeparse .timeparse ('-1.24 days' ), - 107136 )
230323
231324 def test_timeparse_28 (self ):
232325 '''timeparse test case 28.'''
233326 self .assertEqual (timeparse .timeparse ('5 d' ), 432000 )
327+ self .assertEqual (timeparse .timeparse ('+5 d' ), 432000 )
328+ self .assertEqual (timeparse .timeparse ('-5 d' ), - 432000 )
234329
235330 def test_timeparse_29 (self ):
236331 '''timeparse test case 29.'''
237332 self .assertEqual (timeparse .timeparse ('5 day' ), 432000 )
333+ self .assertEqual (timeparse .timeparse ('+5 day' ), 432000 )
334+ self .assertEqual (timeparse .timeparse ('-5 day' ), - 432000 )
238335
239336 def test_timeparse_30 (self ):
240337 '''timeparse test case 30.'''
241338 self .assertEqual (timeparse .timeparse ('5 days' ), 432000 )
339+ self .assertEqual (timeparse .timeparse ('+5 days' ), 432000 )
340+ self .assertEqual (timeparse .timeparse ('-5 days' ), - 432000 )
242341
243342 def test_timeparse_31 (self ):
244343 '''timeparse test case 31.'''
245344 self .assertEqual (timeparse .timeparse ('5.6 wk' ), 3386880 )
345+ self .assertEqual (timeparse .timeparse ('+5.6 wk' ), 3386880 )
346+ self .assertEqual (timeparse .timeparse ('-5.6 wk' ), - 3386880 )
246347
247348 def test_timeparse_32 (self ):
248349 '''timeparse test case 32.'''
249350 self .assertEqual (timeparse .timeparse ('5.6 week' ), 3386880 )
351+ self .assertEqual (timeparse .timeparse ('+5.6 week' ), 3386880 )
352+ self .assertEqual (timeparse .timeparse ('-5.6 week' ), - 3386880 )
250353
251354 def test_timeparse_33 (self ):
252355 '''timeparse test case 33.'''
253356 self .assertEqual (timeparse .timeparse ('5.6 weeks' ), 3386880 )
357+ self .assertEqual (timeparse .timeparse ('+5.6 weeks' ), 3386880 )
358+ self .assertEqual (timeparse .timeparse ('-5.6 weeks' ), - 3386880 )
254359
255360 def test_doctest (self ):
256361 '''Run timeparse doctests.'''
0 commit comments