@@ -28,8 +28,13 @@ class _PyTime(enum.IntEnum):
2828 ROUND_DOWN = 0
2929 # Round away from zero
3030 ROUND_UP = 1
31+ # Round towards -Infinity
32+ ROUND_FLOOR = 2
3133
32- ALL_ROUNDING_METHODS = (_PyTime .ROUND_UP , _PyTime .ROUND_DOWN )
34+ ALL_ROUNDING_METHODS = (
35+ _PyTime .ROUND_UP ,
36+ _PyTime .ROUND_DOWN ,
37+ _PyTime .ROUND_FLOOR )
3338
3439
3540class TimeTestCase (unittest .TestCase ):
@@ -631,53 +636,6 @@ def test_time_t(self):
631636 self .assertRaises (OverflowError ,
632637 pytime_object_to_time_t , invalid , rnd )
633638
634- @support .cpython_only
635- def test_timeval (self ):
636- from _testcapi import pytime_object_to_timeval
637- for obj , timeval , rnd in (
638- # Round towards zero
639- (0 , (0 , 0 ), _PyTime .ROUND_DOWN ),
640- (- 1 , (- 1 , 0 ), _PyTime .ROUND_DOWN ),
641- (- 1.0 , (- 1 , 0 ), _PyTime .ROUND_DOWN ),
642- (1e-6 , (0 , 1 ), _PyTime .ROUND_DOWN ),
643- (1e-7 , (0 , 0 ), _PyTime .ROUND_DOWN ),
644- (- 1e-6 , (- 1 , 999999 ), _PyTime .ROUND_DOWN ),
645- (- 1e-7 , (- 1 , 999999 ), _PyTime .ROUND_DOWN ),
646- (- 1.2 , (- 2 , 800000 ), _PyTime .ROUND_DOWN ),
647- (0.9999999 , (0 , 999999 ), _PyTime .ROUND_DOWN ),
648- (0.0000041 , (0 , 4 ), _PyTime .ROUND_DOWN ),
649- (1.1234560 , (1 , 123456 ), _PyTime .ROUND_DOWN ),
650- (1.1234569 , (1 , 123456 ), _PyTime .ROUND_DOWN ),
651- (- 0.0000040 , (- 1 , 999996 ), _PyTime .ROUND_DOWN ),
652- (- 0.0000041 , (- 1 , 999995 ), _PyTime .ROUND_DOWN ),
653- (- 1.1234560 , (- 2 , 876544 ), _PyTime .ROUND_DOWN ),
654- (- 1.1234561 , (- 2 , 876543 ), _PyTime .ROUND_DOWN ),
655- # Round away from zero
656- (0 , (0 , 0 ), _PyTime .ROUND_UP ),
657- (- 1 , (- 1 , 0 ), _PyTime .ROUND_UP ),
658- (- 1.0 , (- 1 , 0 ), _PyTime .ROUND_UP ),
659- (1e-6 , (0 , 1 ), _PyTime .ROUND_UP ),
660- (1e-7 , (0 , 1 ), _PyTime .ROUND_UP ),
661- (- 1e-6 , (- 1 , 999999 ), _PyTime .ROUND_UP ),
662- (- 1e-7 , (- 1 , 999999 ), _PyTime .ROUND_UP ),
663- (- 1.2 , (- 2 , 800000 ), _PyTime .ROUND_UP ),
664- (0.9999999 , (1 , 0 ), _PyTime .ROUND_UP ),
665- (0.0000041 , (0 , 5 ), _PyTime .ROUND_UP ),
666- (1.1234560 , (1 , 123457 ), _PyTime .ROUND_UP ),
667- (1.1234569 , (1 , 123457 ), _PyTime .ROUND_UP ),
668- (- 0.0000040 , (- 1 , 999996 ), _PyTime .ROUND_UP ),
669- (- 0.0000041 , (- 1 , 999995 ), _PyTime .ROUND_UP ),
670- (- 1.1234560 , (- 2 , 876544 ), _PyTime .ROUND_UP ),
671- (- 1.1234561 , (- 2 , 876543 ), _PyTime .ROUND_UP ),
672- ):
673- with self .subTest (obj = obj , round = rnd , timeval = timeval ):
674- self .assertEqual (pytime_object_to_timeval (obj , rnd ), timeval )
675-
676- rnd = _PyTime .ROUND_DOWN
677- for invalid in self .invalid_values :
678- self .assertRaises (OverflowError ,
679- pytime_object_to_timeval , invalid , rnd )
680-
681639 @support .cpython_only
682640 def test_timespec (self ):
683641 from _testcapi import pytime_object_to_timespec
@@ -835,24 +793,31 @@ def test_FromSecondsObject(self):
835793 # Conversion giving different results depending on the rounding method
836794 UP = _PyTime .ROUND_UP
837795 DOWN = _PyTime .ROUND_DOWN
796+ FLOOR = _PyTime .ROUND_FLOOR
838797 for obj , ts , rnd in (
839798 # close to zero
840799 ( 1e-10 , 1 , UP ),
841800 ( 1e-10 , 0 , DOWN ),
801+ ( 1e-10 , 0 , FLOOR ),
842802 (- 1e-10 , 0 , DOWN ),
843803 (- 1e-10 , - 1 , UP ),
804+ (- 1e-10 , - 1 , FLOOR ),
844805
845806 # test rounding of the last nanosecond
846807 ( 1.1234567899 , 1123456790 , UP ),
847808 ( 1.1234567899 , 1123456789 , DOWN ),
809+ ( 1.1234567899 , 1123456789 , FLOOR ),
848810 (- 1.1234567899 , - 1123456789 , DOWN ),
849811 (- 1.1234567899 , - 1123456790 , UP ),
812+ (- 1.1234567899 , - 1123456790 , FLOOR ),
850813
851814 # close to 1 second
852815 ( 0.9999999999 , 1000000000 , UP ),
853816 ( 0.9999999999 , 999999999 , DOWN ),
817+ ( 0.9999999999 , 999999999 , FLOOR ),
854818 (- 0.9999999999 , - 999999999 , DOWN ),
855819 (- 0.9999999999 , - 1000000000 , UP ),
820+ (- 0.9999999999 , - 1000000000 , FLOOR ),
856821 ):
857822 with self .subTest (obj = obj , round = rnd , timestamp = ts ):
858823 self .assertEqual (PyTime_FromSecondsObject (obj , rnd ), ts )
@@ -924,18 +889,23 @@ def test_timeval(self):
924889
925890 UP = _PyTime .ROUND_UP
926891 DOWN = _PyTime .ROUND_DOWN
892+ FLOOR = _PyTime .ROUND_FLOOR
927893 for ns , tv , rnd in (
928894 # nanoseconds
929895 (1 , (0 , 1 ), UP ),
930896 (1 , (0 , 0 ), DOWN ),
897+ (1 , (0 , 0 ), FLOOR ),
931898 (- 1 , (0 , 0 ), DOWN ),
932899 (- 1 , (- 1 , 999999 ), UP ),
900+ (- 1 , (- 1 , 999999 ), FLOOR ),
933901
934902 # seconds + nanoseconds
935903 (1234567001 , (1 , 234568 ), UP ),
936904 (1234567001 , (1 , 234567 ), DOWN ),
905+ (1234567001 , (1 , 234567 ), FLOOR ),
937906 (- 1234567001 , (- 2 , 765433 ), DOWN ),
938907 (- 1234567001 , (- 2 , 765432 ), UP ),
908+ (- 1234567001 , (- 2 , 765432 ), FLOOR ),
939909 ):
940910 with self .subTest (nanoseconds = ns , timeval = tv , round = rnd ):
941911 self .assertEqual (PyTime_AsTimeval (ns , rnd ), tv )
0 commit comments