mirror of
https://github.com/python/cpython.git
synced 2025-07-29 06:05:00 +00:00
Add a test for Py_ssize_t. Correct typo in getargs.c.
This commit is contained in:
parent
b1ed7fac12
commit
7f573f7319
3 changed files with 41 additions and 14 deletions
|
@ -48,7 +48,7 @@ LARGE = 0x7FFFFFFF
|
|||
VERY_LARGE = 0xFF0000121212121212121242L
|
||||
|
||||
from _testcapi import UCHAR_MAX, USHRT_MAX, UINT_MAX, ULONG_MAX, INT_MAX, \
|
||||
INT_MIN, LONG_MIN, LONG_MAX
|
||||
INT_MIN, LONG_MIN, LONG_MAX, PY_SSIZE_T_MIN, PY_SSIZE_T_MAX
|
||||
|
||||
# fake, they are not defined in Python's header files
|
||||
LLONG_MAX = 2**63-1
|
||||
|
@ -182,6 +182,23 @@ class Signed_TestCase(unittest.TestCase):
|
|||
self.failUnlessEqual(42, getargs_l(42L))
|
||||
self.assertRaises(OverflowError, getargs_l, VERY_LARGE)
|
||||
|
||||
def test_n(self):
|
||||
from _testcapi import getargs_n
|
||||
# n returns 'Py_ssize_t', and does range checking
|
||||
# (PY_SSIZE_T_MIN ... PY_SSIZE_T_MAX)
|
||||
self.failUnlessEqual(3, getargs_n(3.14))
|
||||
self.failUnlessEqual(99, getargs_n(Long()))
|
||||
self.failUnlessEqual(99, getargs_n(Int()))
|
||||
|
||||
self.assertRaises(OverflowError, getargs_n, PY_SSIZE_T_MIN-1)
|
||||
self.failUnlessEqual(PY_SSIZE_T_MIN, getargs_n(PY_SSIZE_T_MIN))
|
||||
self.failUnlessEqual(PY_SSIZE_T_MAX, getargs_n(PY_SSIZE_T_MAX))
|
||||
self.assertRaises(OverflowError, getargs_n, PY_SSIZE_T_MAX+1)
|
||||
|
||||
self.failUnlessEqual(42, getargs_n(42))
|
||||
self.failUnlessEqual(42, getargs_n(42L))
|
||||
self.assertRaises(OverflowError, getargs_n, VERY_LARGE)
|
||||
|
||||
|
||||
class LongLong_TestCase(unittest.TestCase):
|
||||
def test_L(self):
|
||||
|
|
|
@ -360,6 +360,15 @@ getargs_l(PyObject *self, PyObject *args)
|
|||
return PyLong_FromLong(value);
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
getargs_n(PyObject *self, PyObject *args)
|
||||
{
|
||||
Py_ssize_t value;
|
||||
if (!PyArg_ParseTuple(args, "n", &value))
|
||||
return NULL;
|
||||
return PyInt_FromSsize_t(value);
|
||||
}
|
||||
|
||||
#ifdef HAVE_LONG_LONG
|
||||
static PyObject *
|
||||
getargs_L(PyObject *self, PyObject *args)
|
||||
|
@ -661,17 +670,18 @@ static PyMethodDef TestMethods[] = {
|
|||
{"test_k_code", (PyCFunction)test_k_code, METH_NOARGS},
|
||||
{"test_null_strings", (PyCFunction)test_null_strings, METH_NOARGS},
|
||||
|
||||
{"getargs_b", (PyCFunction)getargs_b, METH_VARARGS},
|
||||
{"getargs_B", (PyCFunction)getargs_B, METH_VARARGS},
|
||||
{"getargs_H", (PyCFunction)getargs_H, METH_VARARGS},
|
||||
{"getargs_I", (PyCFunction)getargs_I, METH_VARARGS},
|
||||
{"getargs_k", (PyCFunction)getargs_k, METH_VARARGS},
|
||||
{"getargs_i", (PyCFunction)getargs_i, METH_VARARGS},
|
||||
{"getargs_l", (PyCFunction)getargs_l, METH_VARARGS},
|
||||
{"getargs_b", getargs_b, METH_VARARGS},
|
||||
{"getargs_B", getargs_B, METH_VARARGS},
|
||||
{"getargs_H", getargs_H, METH_VARARGS},
|
||||
{"getargs_I", getargs_I, METH_VARARGS},
|
||||
{"getargs_k", getargs_k, METH_VARARGS},
|
||||
{"getargs_i", getargs_i, METH_VARARGS},
|
||||
{"getargs_l", getargs_l, METH_VARARGS},
|
||||
{"getargs_n", getargs_n, METH_VARARGS},
|
||||
#ifdef HAVE_LONG_LONG
|
||||
{"getargs_L", (PyCFunction)getargs_L, METH_VARARGS},
|
||||
{"getargs_K", (PyCFunction)getargs_K, METH_VARARGS},
|
||||
{"test_longlong_api", (PyCFunction)test_longlong_api, METH_NOARGS},
|
||||
{"getargs_L", getargs_L, METH_VARARGS},
|
||||
{"getargs_K", getargs_K, METH_VARARGS},
|
||||
{"test_longlong_api", test_longlong_api, METH_NOARGS},
|
||||
{"test_L_code", (PyCFunction)test_L_code, METH_NOARGS},
|
||||
{"codec_incrementalencoder",
|
||||
(PyCFunction)codec_incrementalencoder, METH_VARARGS},
|
||||
|
@ -682,7 +692,7 @@ static PyMethodDef TestMethods[] = {
|
|||
{"test_u_code", (PyCFunction)test_u_code, METH_NOARGS},
|
||||
#endif
|
||||
#ifdef WITH_THREAD
|
||||
{"_test_thread_state", (PyCFunction)test_thread_state, METH_VARARGS},
|
||||
{"_test_thread_state", test_thread_state, METH_VARARGS},
|
||||
#endif
|
||||
{NULL, NULL} /* sentinel */
|
||||
};
|
||||
|
|
|
@ -647,10 +647,10 @@ convertsimple(PyObject *arg, const char **p_format, va_list *p_va, int flags,
|
|||
Py_ssize_t *p = va_arg(*p_va, Py_ssize_t *);
|
||||
Py_ssize_t ival;
|
||||
if (float_argument_error(arg))
|
||||
return converterr("integer<i>", arg, msgbuf, bufsize);
|
||||
return converterr("integer<n>", arg, msgbuf, bufsize);
|
||||
ival = PyInt_AsSsize_t(arg);
|
||||
if (ival == -1 && PyErr_Occurred())
|
||||
return converterr("integer<i>", arg, msgbuf, bufsize);
|
||||
return converterr("integer<n>", arg, msgbuf, bufsize);
|
||||
*p = ival;
|
||||
break;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue