@@ -205,19 +205,23 @@ def test_parse_datetime_no_timezone(self):
205205 self .assertEqual (
206206 self .DATETIME ("2007-01-01 13:30:29.123456" , self .curs ).tzinfo , None )
207207
208+ def _check_interval (self , s , want_secs = None ):
209+ self .curs .execute (
210+ "select %s::interval, extract('epoch' from %s::interval)" ,
211+ (s , s ))
212+ td , secs = self .curs .fetchone ()
213+ if want_secs is not None :
214+ secs = want_secs
215+
216+ self .assertEqual (total_seconds (td ), secs ,
217+ "'%s'::interval -> '%s' = %s sec instead of %s"
218+ % (s , td , total_seconds (td ), secs ))
219+
208220 def test_parse_interval (self ):
209- value = self .INTERVAL ('42 days 12:34:56.123456' , self .curs )
210- self .assertNotEqual (value , None )
211- self .assertEqual (value .days , 42 )
212- self .assertEqual (value .seconds , 45296 )
213- self .assertEqual (value .microseconds , 123456 )
221+ self ._check_interval ('42 days 12:34:56.123456' )
214222
215223 def test_parse_negative_interval (self ):
216- value = self .INTERVAL ('-42 days -12:34:56.123456' , self .curs )
217- self .assertNotEqual (value , None )
218- self .assertEqual (value .days , - 43 )
219- self .assertEqual (value .seconds , 41103 )
220- self .assertEqual (value .microseconds , 876544 )
224+ self ._check_interval ('-42 days -12:34:56.123456' )
221225
222226 def test_parse_infinity (self ):
223227 value = self .DATETIME ('-infinity' , self .curs )
@@ -340,39 +344,19 @@ def test_time_24(self):
340344
341345 @skip_before_postgres (8 , 1 )
342346 def test_large_interval (self ):
343- t = self .execute ("select '999999:00:00'::interval" )
344- self .assertEqual (total_seconds (t ), 999999 * 60 * 60 )
345-
346- t = self .execute ("select '-999999:00:00'::interval" )
347- self .assertEqual (total_seconds (t ), - 999999 * 60 * 60 )
348-
349- t = self .execute ("select '999999:00:00.1'::interval" )
350- self .assertEqual (total_seconds (t ), 999999 * 60 * 60 + 0.1 )
351-
352- t = self .execute ("select '999999:00:00.9'::interval" )
353- self .assertEqual (total_seconds (t ), 999999 * 60 * 60 + 0.9 )
354-
355- t = self .execute ("select '-999999:00:00.1'::interval" )
356- self .assertEqual (total_seconds (t ), - 999999 * 60 * 60 - 0.1 )
357-
358- t = self .execute ("select '-999999:00:00.9'::interval" )
359- self .assertEqual (total_seconds (t ), - 999999 * 60 * 60 - 0.9 )
347+ self ._check_interval ('999999:00:00' )
348+ self ._check_interval ('-999999:00:00' )
349+ self ._check_interval ('999999:00:00.1' )
350+ self ._check_interval ('999999:00:00.9' )
351+ self ._check_interval ('-999999:00:00.1' )
352+ self ._check_interval ('-999999:00:00.9' )
360353
361354 def test_micros_rounding (self ):
362- t = self .execute ("select '0.1'::interval" )
363- self .assertEqual (total_seconds (t ), 0.1 )
364-
365- t = self .execute ("select '0.01'::interval" )
366- self .assertEqual (total_seconds (t ), 0.01 )
367-
368- t = self .execute ("select '0.000001'::interval" )
369- self .assertEqual (total_seconds (t ), 1e-6 )
370-
371- t = self .execute ("select '0.0000004'::interval" )
372- self .assertEqual (total_seconds (t ), 0 )
373-
374- t = self .execute ("select '0.0000006'::interval" )
375- self .assertEqual (total_seconds (t ), 1e-6 )
355+ self ._check_interval ('0.1' )
356+ self ._check_interval ('0.01' )
357+ self ._check_interval ('0.000001' )
358+ self ._check_interval ('0.0000004' , 0 )
359+ self ._check_interval ('0.0000006' , 1e-6 )
376360
377361 def test_interval_overflow (self ):
378362 cur = self .conn .cursor ()
0 commit comments