]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Add a test for Py_ssize_t. Correct typo in getargs.c.
authorGeorg Brandl <georg@python.org>
Thu, 13 Apr 2006 07:59:30 +0000 (07:59 +0000)
committerGeorg Brandl <georg@python.org>
Thu, 13 Apr 2006 07:59:30 +0000 (07:59 +0000)
Lib/test/test_getargs2.py
Modules/_testcapimodule.c
Python/getargs.c

index 47db73f73f42bd807080cc0e963e866ac6f497fe..670c9453f591e719bdd52e44da2bf1104c7004e0 100644 (file)
@@ -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):
index dcf0db2c19fce2fa8586f01f778834ab7829be21..1138258ec960615ed7973416a431bb094f1237dd 100644 (file)
@@ -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 */
 };
index 8143d33eb00a98d43a9a6e4f2fd9d33d9e57b4b6..e6f607a4531f5010604ce44d5b2cc4066ad7bbca 100644 (file)
@@ -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;
        }