bpo-26669: Fix nan arg value error in pytime.c (#3085) · python/cpython@829dacc
@@ -485,6 +485,10 @@ def test_localtime_failure(self):
485485self.assertRaises(OSError, time.localtime, invalid_time_t)
486486self.assertRaises(OSError, time.ctime, invalid_time_t)
487487488+# Issue #26669: check for localtime() failure
489+self.assertRaises(ValueError, time.localtime, float("nan"))
490+self.assertRaises(ValueError, time.ctime, float("nan"))
491+488492def test_get_clock_info(self):
489493clocks = ['clock', 'perf_counter', 'process_time', 'time']
490494if hasattr(time, 'monotonic'):
@@ -819,6 +823,11 @@ def c_int_filter(secs):
819823lambda secs: secs * SEC_TO_NS,
820824value_filter=c_int_filter)
821825826+# test nan
827+for time_rnd, _ in ROUNDING_MODES:
828+with self.assertRaises(TypeError):
829+PyTime_FromSeconds(float('nan'))
830+822831def test_FromSecondsObject(self):
823832from _testcapi import PyTime_FromSecondsObject
824833@@ -830,6 +839,11 @@ def test_FromSecondsObject(self):
830839PyTime_FromSecondsObject,
831840lambda ns: self.decimal_round(ns * SEC_TO_NS))
832841842+# test nan
843+for time_rnd, _ in ROUNDING_MODES:
844+with self.assertRaises(ValueError):
845+PyTime_FromSecondsObject(float('nan'), time_rnd)
846+833847def test_AsSecondsDouble(self):
834848from _testcapi import PyTime_AsSecondsDouble
835849@@ -843,6 +857,11 @@ def float_converter(ns):
843857float_converter,
844858NS_TO_SEC)
845859860+# test nan
861+for time_rnd, _ in ROUNDING_MODES:
862+with self.assertRaises(TypeError):
863+PyTime_AsSecondsDouble(float('nan'))
864+846865def create_decimal_converter(self, denominator):
847866denom = decimal.Decimal(denominator)
848867@@ -948,6 +967,11 @@ def test_object_to_timeval(self):
948967self.create_converter(SEC_TO_US),
949968value_filter=self.time_t_filter)
950969970+# test nan
971+for time_rnd, _ in ROUNDING_MODES:
972+with self.assertRaises(ValueError):
973+pytime_object_to_timeval(float('nan'), time_rnd)
974+951975def test_object_to_timespec(self):
952976from _testcapi import pytime_object_to_timespec
953977@@ -959,6 +983,11 @@ def test_object_to_timespec(self):
959983self.create_converter(SEC_TO_NS),
960984value_filter=self.time_t_filter)
961985986+# test nan
987+for time_rnd, _ in ROUNDING_MODES:
988+with self.assertRaises(ValueError):
989+pytime_object_to_timespec(float('nan'), time_rnd)
990+962991963992if __name__ == "__main__":
964993unittest.main()