]> granicus.if.org Git - python/commitdiff
Add missing tests for PyArg_Parse* with format 'h'
authorMark Dickinson <dickinsm@gmail.com>
Sun, 20 Dec 2009 15:57:56 +0000 (15:57 +0000)
committerMark Dickinson <dickinsm@gmail.com>
Sun, 20 Dec 2009 15:57:56 +0000 (15:57 +0000)
Lib/test/test_getargs2.py
Modules/_testcapimodule.c

index d7866ca7e7ec70f5ec866a6a8b86201131d47c70..12e9756ea9ead89fffef7f7ffc6e77c5dfe3708b 100644 (file)
@@ -48,7 +48,8 @@ LARGE = 0x7FFFFFFF
 VERY_LARGE = 0xFF0000121212121212121242L
 
 from _testcapi import UCHAR_MAX, USHRT_MAX, UINT_MAX, ULONG_MAX, INT_MAX, \
-     INT_MIN, LONG_MIN, LONG_MAX, PY_SSIZE_T_MIN, PY_SSIZE_T_MAX
+     INT_MIN, LONG_MIN, LONG_MAX, PY_SSIZE_T_MIN, PY_SSIZE_T_MAX, \
+     SHRT_MIN, SHRT_MAX
 
 # fake, they are not defined in Python's header files
 LLONG_MAX = 2**63-1
@@ -150,6 +151,22 @@ class Unsigned_TestCase(unittest.TestCase):
         self.assertEqual(VERY_LARGE & ULONG_MAX, getargs_k(VERY_LARGE))
 
 class Signed_TestCase(unittest.TestCase):
+    def test_h(self):
+        from _testcapi import getargs_h
+        # h returns 'short', and does range checking (SHRT_MIN ... SHRT_MAX)
+        self.assertEqual(3, getargs_h(3.14))
+        self.assertEqual(99, getargs_h(Long()))
+        self.assertEqual(99, getargs_h(Int()))
+
+        self.assertRaises(OverflowError, getargs_h, SHRT_MIN-1)
+        self.assertEqual(SHRT_MIN, getargs_h(SHRT_MIN))
+        self.assertEqual(SHRT_MAX, getargs_h(SHRT_MAX))
+        self.assertRaises(OverflowError, getargs_h, SHRT_MAX+1)
+
+        self.assertEqual(42, getargs_h(42))
+        self.assertEqual(42, getargs_h(42L))
+        self.assertRaises(OverflowError, getargs_h, VERY_LARGE)
+
     def test_i(self):
         from _testcapi import getargs_i
         # i returns 'int', and does range checking (INT_MIN ... INT_MAX)
index c5c2c6be9758661d1e35b9ee34bc836ec9848474..b68e76dc0aac5ca028f06d004c264b3f00a18045 100644 (file)
@@ -453,6 +453,15 @@ getargs_B(PyObject *self, PyObject *args)
        return PyLong_FromUnsignedLong((unsigned long)value);
 }
 
+static PyObject *
+getargs_h(PyObject *self, PyObject *args)
+{
+       short value;
+       if (!PyArg_ParseTuple(args, "h", &value))
+               return NULL;
+       return PyLong_FromLong((long)value);
+}
+
 static PyObject *
 getargs_H(PyObject *self, PyObject *args)
 {
@@ -1045,6 +1054,7 @@ static PyMethodDef TestMethods[] = {
          METH_VARARGS|METH_KEYWORDS},
        {"getargs_b",           getargs_b,                       METH_VARARGS},
        {"getargs_B",           getargs_B,                       METH_VARARGS},
+       {"getargs_h",           getargs_h,                       METH_VARARGS},
        {"getargs_H",           getargs_H,                       METH_VARARGS},
        {"getargs_I",           getargs_I,                       METH_VARARGS},
        {"getargs_k",           getargs_k,                       METH_VARARGS},