mirror of
https://github.com/python/cpython.git
synced 2025-07-28 21:55:21 +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
|
VERY_LARGE = 0xFF0000121212121212121242L
|
||||||
|
|
||||||
from _testcapi import UCHAR_MAX, USHRT_MAX, UINT_MAX, ULONG_MAX, INT_MAX, \
|
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
|
# fake, they are not defined in Python's header files
|
||||||
LLONG_MAX = 2**63-1
|
LLONG_MAX = 2**63-1
|
||||||
|
@ -182,6 +182,23 @@ class Signed_TestCase(unittest.TestCase):
|
||||||
self.failUnlessEqual(42, getargs_l(42L))
|
self.failUnlessEqual(42, getargs_l(42L))
|
||||||
self.assertRaises(OverflowError, getargs_l, VERY_LARGE)
|
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):
|
class LongLong_TestCase(unittest.TestCase):
|
||||||
def test_L(self):
|
def test_L(self):
|
||||||
|
|
|
@ -360,6 +360,15 @@ getargs_l(PyObject *self, PyObject *args)
|
||||||
return PyLong_FromLong(value);
|
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
|
#ifdef HAVE_LONG_LONG
|
||||||
static PyObject *
|
static PyObject *
|
||||||
getargs_L(PyObject *self, PyObject *args)
|
getargs_L(PyObject *self, PyObject *args)
|
||||||
|
@ -661,17 +670,18 @@ static PyMethodDef TestMethods[] = {
|
||||||
{"test_k_code", (PyCFunction)test_k_code, METH_NOARGS},
|
{"test_k_code", (PyCFunction)test_k_code, METH_NOARGS},
|
||||||
{"test_null_strings", (PyCFunction)test_null_strings, METH_NOARGS},
|
{"test_null_strings", (PyCFunction)test_null_strings, METH_NOARGS},
|
||||||
|
|
||||||
{"getargs_b", (PyCFunction)getargs_b, METH_VARARGS},
|
{"getargs_b", getargs_b, METH_VARARGS},
|
||||||
{"getargs_B", (PyCFunction)getargs_B, METH_VARARGS},
|
{"getargs_B", getargs_B, METH_VARARGS},
|
||||||
{"getargs_H", (PyCFunction)getargs_H, METH_VARARGS},
|
{"getargs_H", getargs_H, METH_VARARGS},
|
||||||
{"getargs_I", (PyCFunction)getargs_I, METH_VARARGS},
|
{"getargs_I", getargs_I, METH_VARARGS},
|
||||||
{"getargs_k", (PyCFunction)getargs_k, METH_VARARGS},
|
{"getargs_k", getargs_k, METH_VARARGS},
|
||||||
{"getargs_i", (PyCFunction)getargs_i, METH_VARARGS},
|
{"getargs_i", getargs_i, METH_VARARGS},
|
||||||
{"getargs_l", (PyCFunction)getargs_l, METH_VARARGS},
|
{"getargs_l", getargs_l, METH_VARARGS},
|
||||||
|
{"getargs_n", getargs_n, METH_VARARGS},
|
||||||
#ifdef HAVE_LONG_LONG
|
#ifdef HAVE_LONG_LONG
|
||||||
{"getargs_L", (PyCFunction)getargs_L, METH_VARARGS},
|
{"getargs_L", getargs_L, METH_VARARGS},
|
||||||
{"getargs_K", (PyCFunction)getargs_K, METH_VARARGS},
|
{"getargs_K", getargs_K, METH_VARARGS},
|
||||||
{"test_longlong_api", (PyCFunction)test_longlong_api, METH_NOARGS},
|
{"test_longlong_api", test_longlong_api, METH_NOARGS},
|
||||||
{"test_L_code", (PyCFunction)test_L_code, METH_NOARGS},
|
{"test_L_code", (PyCFunction)test_L_code, METH_NOARGS},
|
||||||
{"codec_incrementalencoder",
|
{"codec_incrementalencoder",
|
||||||
(PyCFunction)codec_incrementalencoder, METH_VARARGS},
|
(PyCFunction)codec_incrementalencoder, METH_VARARGS},
|
||||||
|
@ -682,7 +692,7 @@ static PyMethodDef TestMethods[] = {
|
||||||
{"test_u_code", (PyCFunction)test_u_code, METH_NOARGS},
|
{"test_u_code", (PyCFunction)test_u_code, METH_NOARGS},
|
||||||
#endif
|
#endif
|
||||||
#ifdef WITH_THREAD
|
#ifdef WITH_THREAD
|
||||||
{"_test_thread_state", (PyCFunction)test_thread_state, METH_VARARGS},
|
{"_test_thread_state", test_thread_state, METH_VARARGS},
|
||||||
#endif
|
#endif
|
||||||
{NULL, NULL} /* sentinel */
|
{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 *p = va_arg(*p_va, Py_ssize_t *);
|
||||||
Py_ssize_t ival;
|
Py_ssize_t ival;
|
||||||
if (float_argument_error(arg))
|
if (float_argument_error(arg))
|
||||||
return converterr("integer<i>", arg, msgbuf, bufsize);
|
return converterr("integer<n>", arg, msgbuf, bufsize);
|
||||||
ival = PyInt_AsSsize_t(arg);
|
ival = PyInt_AsSsize_t(arg);
|
||||||
if (ival == -1 && PyErr_Occurred())
|
if (ival == -1 && PyErr_Occurred())
|
||||||
return converterr("integer<i>", arg, msgbuf, bufsize);
|
return converterr("integer<n>", arg, msgbuf, bufsize);
|
||||||
*p = ival;
|
*p = ival;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue