summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMark Dickinson <dickinsm@gmail.com>2009-12-20 15:57:56 (GMT)
committerMark Dickinson <dickinsm@gmail.com>2009-12-20 15:57:56 (GMT)
commitb5e348b305760b9d0d04669fe66602610b6e00fa (patch)
tree3090c68982414031b18079a0421fbc191468d4d6
parent1c2353b0d958d1ab7a3db473bab7c78429cb7e8e (diff)
downloadcpython-b5e348b305760b9d0d04669fe66602610b6e00fa.zip
cpython-b5e348b305760b9d0d04669fe66602610b6e00fa.tar.gz
cpython-b5e348b305760b9d0d04669fe66602610b6e00fa.tar.bz2
Add missing tests for PyArg_Parse* with format 'h'
-rw-r--r--Lib/test/test_getargs2.py19
-rw-r--r--Modules/_testcapimodule.c10
2 files changed, 28 insertions, 1 deletions
diff --git a/Lib/test/test_getargs2.py b/Lib/test/test_getargs2.py
index d7866ca..12e9756 100644
--- a/Lib/test/test_getargs2.py
+++ b/Lib/test/test_getargs2.py
@@ -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)
diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c
index c5c2c6b..b68e76d 100644
--- a/Modules/_testcapimodule.c
+++ b/Modules/_testcapimodule.c
@@ -454,6 +454,15 @@ getargs_B(PyObject *self, PyObject *args)
}
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)
{
unsigned short value;
@@ -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},