mirror of
https://github.com/python/cpython.git
synced 2025-09-27 02:39:58 +00:00
Merge
This commit is contained in:
commit
c9f71481d4
3 changed files with 45 additions and 23 deletions
|
@ -309,7 +309,7 @@ class TimeTestCase(unittest.TestCase):
|
||||||
for t in (-2, -1, 0, 1):
|
for t in (-2, -1, 0, 1):
|
||||||
try:
|
try:
|
||||||
tt = time.localtime(t)
|
tt = time.localtime(t)
|
||||||
except (OverflowError, ValueError):
|
except (OverflowError, OSError):
|
||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
self.assertEqual(time.mktime(tt), t)
|
self.assertEqual(time.mktime(tt), t)
|
||||||
|
@ -345,16 +345,21 @@ class TimeTestCase(unittest.TestCase):
|
||||||
|
|
||||||
def test_localtime_failure(self):
|
def test_localtime_failure(self):
|
||||||
# Issue #13847: check for localtime() failure
|
# Issue #13847: check for localtime() failure
|
||||||
invalid_time_t = 2**60
|
invalid_time_t = None
|
||||||
try:
|
for time_t in (-1, 2**30, 2**33, 2**60):
|
||||||
time.localtime(invalid_time_t)
|
try:
|
||||||
except ValueError as err:
|
time.localtime(time_t)
|
||||||
if str(err) == "timestamp out of range for platform time_t":
|
except ValueError as err:
|
||||||
self.skipTest("need 64-bit time_t")
|
if str(err) == "timestamp out of range for platform time_t":
|
||||||
else:
|
self.skipTest("need 64-bit time_t")
|
||||||
raise
|
else:
|
||||||
except OSError:
|
raise
|
||||||
pass
|
except OSError:
|
||||||
|
invalid_time_t = time_t
|
||||||
|
break
|
||||||
|
if invalid_time_t is None:
|
||||||
|
self.skipTest("unable to find an invalid time_t value")
|
||||||
|
|
||||||
self.assertRaises(OSError, time.localtime, invalid_time_t)
|
self.assertRaises(OSError, time.localtime, invalid_time_t)
|
||||||
self.assertRaises(OSError, time.gmtime, invalid_time_t)
|
self.assertRaises(OSError, time.gmtime, invalid_time_t)
|
||||||
self.assertRaises(OSError, time.ctime, invalid_time_t)
|
self.assertRaises(OSError, time.ctime, invalid_time_t)
|
||||||
|
|
|
@ -463,7 +463,8 @@ Library
|
||||||
|
|
||||||
- Issue #13847: time.localtime() and time.gmtime() now raise an OSError instead
|
- Issue #13847: time.localtime() and time.gmtime() now raise an OSError instead
|
||||||
of ValueError on failure. time.ctime() and time.asctime() now raises an
|
of ValueError on failure. time.ctime() and time.asctime() now raises an
|
||||||
OSError if localtime() failed.
|
OSError if localtime() failed. time.clock() now raises a RuntimeError if the
|
||||||
|
processor time used is not available or its value cannot be represented
|
||||||
|
|
||||||
- Issue #13862: Fix spurious failure in test_zlib due to runtime/compile time
|
- Issue #13862: Fix spurious failure in test_zlib due to runtime/compile time
|
||||||
minor versions not matching.
|
minor versions not matching.
|
||||||
|
|
|
@ -62,6 +62,31 @@ PyDoc_STRVAR(time_doc,
|
||||||
Return the current time in seconds since the Epoch.\n\
|
Return the current time in seconds since the Epoch.\n\
|
||||||
Fractions of a second may be present if the system clock provides them.");
|
Fractions of a second may be present if the system clock provides them.");
|
||||||
|
|
||||||
|
#if defined(HAVE_CLOCK)
|
||||||
|
|
||||||
|
#ifndef CLOCKS_PER_SEC
|
||||||
|
#ifdef CLK_TCK
|
||||||
|
#define CLOCKS_PER_SEC CLK_TCK
|
||||||
|
#else
|
||||||
|
#define CLOCKS_PER_SEC 1000000
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
pyclock(void)
|
||||||
|
{
|
||||||
|
clock_t value;
|
||||||
|
value = clock();
|
||||||
|
if (value == (clock_t)-1) {
|
||||||
|
PyErr_SetString(PyExc_RuntimeError,
|
||||||
|
"the processor time used is not available "
|
||||||
|
"or its value cannot be represented");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
return PyFloat_FromDouble((double)value / CLOCKS_PER_SEC);
|
||||||
|
}
|
||||||
|
#endif /* HAVE_CLOCK */
|
||||||
|
|
||||||
#if defined(MS_WINDOWS) && !defined(__BORLANDC__)
|
#if defined(MS_WINDOWS) && !defined(__BORLANDC__)
|
||||||
/* Win32 has better clock replacement; we have our own version, due to Mark
|
/* Win32 has better clock replacement; we have our own version, due to Mark
|
||||||
Hammond and Tim Peters */
|
Hammond and Tim Peters */
|
||||||
|
@ -79,8 +104,7 @@ time_clock(PyObject *self, PyObject *unused)
|
||||||
if (!QueryPerformanceFrequency(&freq) || freq.QuadPart == 0) {
|
if (!QueryPerformanceFrequency(&freq) || freq.QuadPart == 0) {
|
||||||
/* Unlikely to happen - this works on all intel
|
/* Unlikely to happen - this works on all intel
|
||||||
machines at least! Revert to clock() */
|
machines at least! Revert to clock() */
|
||||||
return PyFloat_FromDouble(((double)clock()) /
|
return pyclock();
|
||||||
CLOCKS_PER_SEC);
|
|
||||||
}
|
}
|
||||||
divisor = (double)freq.QuadPart;
|
divisor = (double)freq.QuadPart;
|
||||||
}
|
}
|
||||||
|
@ -91,18 +115,10 @@ time_clock(PyObject *self, PyObject *unused)
|
||||||
|
|
||||||
#elif defined(HAVE_CLOCK)
|
#elif defined(HAVE_CLOCK)
|
||||||
|
|
||||||
#ifndef CLOCKS_PER_SEC
|
|
||||||
#ifdef CLK_TCK
|
|
||||||
#define CLOCKS_PER_SEC CLK_TCK
|
|
||||||
#else
|
|
||||||
#define CLOCKS_PER_SEC 1000000
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
time_clock(PyObject *self, PyObject *unused)
|
time_clock(PyObject *self, PyObject *unused)
|
||||||
{
|
{
|
||||||
return PyFloat_FromDouble(((double)clock()) / CLOCKS_PER_SEC);
|
return pyclock();
|
||||||
}
|
}
|
||||||
#endif /* HAVE_CLOCK */
|
#endif /* HAVE_CLOCK */
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue