mirror of
https://github.com/python/cpython
synced 2024-10-16 20:53:42 +00:00
merge
This commit is contained in:
commit
5ceef131d4
|
@ -151,6 +151,13 @@ The module defines the following functions and data items:
|
|||
.. versionadded:: 3.3
|
||||
|
||||
|
||||
.. function:: clock_settime(clk_id, time)
|
||||
|
||||
Set the time of the specified clock *clk_id*.
|
||||
|
||||
.. versionadded:: 3.3
|
||||
|
||||
|
||||
.. data:: CLOCK_REALTIME
|
||||
|
||||
System-wide real-time clock. Setting this clock requires appropriate
|
||||
|
@ -159,6 +166,15 @@ The module defines the following functions and data items:
|
|||
.. versionadded:: 3.3
|
||||
|
||||
|
||||
.. data:: CLOCK_HIGHRES
|
||||
|
||||
The Solaris OS has a CLOCK_HIGHRES timer that attempts to use an optimal
|
||||
hardware source, and may give close to nanosecond resolution. CLOCK_HIGHRES
|
||||
is the nonadjustable, high-resolution clock.
|
||||
|
||||
.. versionadded:: 3.3
|
||||
|
||||
|
||||
.. data:: CLOCK_MONOTONIC
|
||||
|
||||
Clock that cannot be set and represents monotonic time since some
|
||||
|
|
|
@ -56,76 +56,6 @@
|
|||
fractions = {C:cfractions, P:pfractions}
|
||||
sys.modules['decimal'] = orig_sys_decimal
|
||||
|
||||
############ RunFirst ############
|
||||
class RunFirst(unittest.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
self.save_default = self.decimal.DefaultContext.copy()
|
||||
|
||||
def tearDown(self):
|
||||
DefaultContext = self.decimal.DefaultContext
|
||||
|
||||
DefaultContext.prec = self.save_default.prec
|
||||
DefaultContext.rounding = self.save_default.rounding
|
||||
DefaultContext.Emax = self.save_default.Emax
|
||||
DefaultContext.Emin = self.save_default.Emin
|
||||
DefaultContext.capitals = self.save_default.capitals
|
||||
DefaultContext.clamp = self.save_default.clamp
|
||||
DefaultContext.flags = self.save_default.flags
|
||||
DefaultContext.traps = self.save_default.traps
|
||||
|
||||
self.decimal.setcontext(self.decimal.DefaultContext)
|
||||
|
||||
def test_00default_context(self):
|
||||
# The test depends on the fact that getcontext() is called
|
||||
# for the first time.
|
||||
DefaultContext = self.decimal.DefaultContext
|
||||
ROUND_05UP = self.decimal.ROUND_05UP
|
||||
Clamped = self.decimal.Clamped
|
||||
InvalidOperation = self.decimal.InvalidOperation
|
||||
|
||||
DefaultContext.prec = 5001
|
||||
DefaultContext.rounding = ROUND_05UP
|
||||
DefaultContext.Emax = 10025
|
||||
DefaultContext.Emin = -10025
|
||||
DefaultContext.capitals = 0
|
||||
DefaultContext.clamp = 1
|
||||
DefaultContext.flags[InvalidOperation] = True
|
||||
DefaultContext.clear_traps()
|
||||
DefaultContext.traps[Clamped] = True
|
||||
|
||||
# implicit initialization on first access
|
||||
c = self.decimal.getcontext()
|
||||
|
||||
self.assertEqual(c.prec, 5001)
|
||||
self.assertEqual(c.rounding, ROUND_05UP)
|
||||
self.assertEqual(c.Emax, 10025)
|
||||
self.assertEqual(c.Emin, -10025)
|
||||
self.assertEqual(c.capitals, 0)
|
||||
self.assertEqual(c.clamp, 1)
|
||||
for k in c.flags:
|
||||
self.assertFalse(c.flags[k])
|
||||
for k in c.traps:
|
||||
if k is Clamped:
|
||||
self.assertTrue(c.traps[k])
|
||||
else:
|
||||
self.assertFalse(c.traps[k])
|
||||
|
||||
# explicit initialization
|
||||
self.decimal.setcontext(DefaultContext)
|
||||
c = self.decimal.getcontext()
|
||||
for k in c.flags:
|
||||
self.assertFalse(c.flags[k])
|
||||
|
||||
class CRunFirst(RunFirst):
|
||||
decimal = C
|
||||
class PyRunFirst(RunFirst):
|
||||
decimal = P
|
||||
if C:
|
||||
run_unittest(CRunFirst, PyRunFirst)
|
||||
else:
|
||||
run_unittest(PyRunFirst)
|
||||
############ END RunFirst ############
|
||||
|
||||
# Useful Test Constant
|
||||
Signals = {
|
||||
|
|
|
@ -132,7 +132,6 @@ def test_save_exception_state_on_error(self):
|
|||
# See issue #14474
|
||||
def task():
|
||||
started.release()
|
||||
sys.stderr = stderr
|
||||
raise SyntaxError
|
||||
def mywrite(self, *args):
|
||||
try:
|
||||
|
|
|
@ -47,6 +47,17 @@ def test_clock_getres(self):
|
|||
self.assertGreater(res, 0.0)
|
||||
self.assertLessEqual(res, 1.0)
|
||||
|
||||
@unittest.skipUnless(hasattr(time, 'clock_settime'),
|
||||
'need time.clock_settime()')
|
||||
def test_clock_settime(self):
|
||||
t = time.clock_gettime(time.CLOCK_REALTIME)
|
||||
try:
|
||||
time.clock_settime(time.CLOCK_REALTIME, t)
|
||||
except PermissionError:
|
||||
pass
|
||||
|
||||
self.assertRaises(OSError, time.clock_settime, time.CLOCK_MONOTONIC, 0)
|
||||
|
||||
def test_conversions(self):
|
||||
self.assertEqual(time.ctime(self.t),
|
||||
time.asctime(time.localtime(self.t)))
|
||||
|
|
|
@ -1510,7 +1510,7 @@ current_context(void)
|
|||
#define CURRENT_CONTEXT_ADDR(ctx) \
|
||||
ctx = CTX(current_context())
|
||||
|
||||
/* Return current context, increment reference */
|
||||
/* Return a new reference to the current context */
|
||||
static PyObject *
|
||||
PyDec_GetCurrentContext(void)
|
||||
{
|
||||
|
@ -1614,7 +1614,7 @@ current_context(void)
|
|||
ctx = CTX(_c_t_x_o_b_j); \
|
||||
}
|
||||
|
||||
/* Return current context, increment reference */
|
||||
/* Return a new reference to the current context */
|
||||
static PyObject *
|
||||
PyDec_GetCurrentContext(void)
|
||||
{
|
||||
|
@ -1759,7 +1759,7 @@ static PyTypeObject PyDecContextManager_Type =
|
|||
0, /* tp_print */
|
||||
(getattrfunc) 0, /* tp_getattr */
|
||||
(setattrfunc) 0, /* tp_setattr */
|
||||
0, /* tp_compare */
|
||||
0, /* tp_reserved */
|
||||
(reprfunc) 0, /* tp_repr */
|
||||
0, /* tp_as_number */
|
||||
0, /* tp_as_sequence */
|
||||
|
@ -2699,7 +2699,7 @@ ctx_create_decimal(PyObject *context, PyObject *args)
|
|||
|
||||
|
||||
/******************************************************************************/
|
||||
/* Implicit conversions to Decimal */
|
||||
/* Implicit conversions to Decimal */
|
||||
/******************************************************************************/
|
||||
|
||||
/* Try to convert PyObject v to a new PyDecObject conv. If the conversion
|
||||
|
@ -2796,7 +2796,7 @@ convert_op(int type_err, PyObject **conv, PyObject *v, PyObject *context)
|
|||
|
||||
|
||||
/******************************************************************************/
|
||||
/* Implicit conversions to Decimal for comparison */
|
||||
/* Implicit conversions to Decimal for comparison */
|
||||
/******************************************************************************/
|
||||
|
||||
/* Convert rationals for comparison */
|
||||
|
|
|
@ -158,6 +158,33 @@ PyDoc_STRVAR(clock_gettime_doc,
|
|||
"clock_gettime(clk_id) -> floating point number\n\
|
||||
\n\
|
||||
Return the time of the specified clock clk_id.");
|
||||
|
||||
static PyObject *
|
||||
time_clock_settime(PyObject *self, PyObject *args)
|
||||
{
|
||||
clockid_t clk_id;
|
||||
PyObject *obj;
|
||||
struct timespec tp;
|
||||
int ret;
|
||||
|
||||
if (!PyArg_ParseTuple(args, "iO:clock_settime", &clk_id, &obj))
|
||||
return NULL;
|
||||
|
||||
if (_PyTime_ObjectToTimespec(obj, &tp.tv_sec, &tp.tv_nsec) == -1)
|
||||
return NULL;
|
||||
|
||||
ret = clock_settime((clockid_t)clk_id, &tp);
|
||||
if (ret != 0) {
|
||||
PyErr_SetFromErrno(PyExc_IOError);
|
||||
return NULL;
|
||||
}
|
||||
Py_RETURN_NONE;
|
||||
}
|
||||
|
||||
PyDoc_STRVAR(clock_settime_doc,
|
||||
"clock_settime(clk_id, time)\n\
|
||||
\n\
|
||||
Set the time of the specified clock clk_id.");
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CLOCK_GETRES
|
||||
|
@ -962,6 +989,9 @@ PyInit_timezone(PyObject *m) {
|
|||
#ifdef CLOCK_MONOTONIC_RAW
|
||||
PyModule_AddIntMacro(m, CLOCK_MONOTONIC_RAW);
|
||||
#endif
|
||||
#ifdef CLOCK_HIGHRES
|
||||
PyModule_AddIntMacro(m, CLOCK_HIGHRES);
|
||||
#endif
|
||||
#ifdef CLOCK_PROCESS_CPUTIME_ID
|
||||
PyModule_AddIntMacro(m, CLOCK_PROCESS_CPUTIME_ID);
|
||||
#endif
|
||||
|
@ -980,6 +1010,9 @@ static PyMethodDef time_methods[] = {
|
|||
#ifdef HAVE_CLOCK_GETTIME
|
||||
{"clock_gettime", time_clock_gettime, METH_VARARGS, clock_gettime_doc},
|
||||
#endif
|
||||
#ifdef HAVE_CLOCK_GETTIME
|
||||
{"clock_settime", time_clock_settime, METH_VARARGS, clock_settime_doc},
|
||||
#endif
|
||||
#ifdef HAVE_CLOCK_GETRES
|
||||
{"clock_getres", time_clock_getres, METH_VARARGS, clock_getres_doc},
|
||||
#endif
|
||||
|
|
Loading…
Reference in a new issue