[Python-checkins] r76931 - in python/branches/py3k: Lib/test/test_getargs2.py Modules/_testcapimodule.c

mark.dickinson python-checkins at python.org
Sun Dec 20 17:03:30 CET 2009


Author: mark.dickinson
Date: Sun Dec 20 17:03:30 2009
New Revision: 76931

Log:
Merged revisions 76930 via svnmerge from 
svn+ssh://pythondev@svn.python.org/python/trunk

........
  r76930 | mark.dickinson | 2009-12-20 15:57:56 +0000 (Sun, 20 Dec 2009) | 1 line
  
  Add missing tests for PyArg_Parse* with format 'h'
........


Modified:
   python/branches/py3k/   (props changed)
   python/branches/py3k/Lib/test/test_getargs2.py
   python/branches/py3k/Modules/_testcapimodule.c

Modified: python/branches/py3k/Lib/test/test_getargs2.py
==============================================================================
--- python/branches/py3k/Lib/test/test_getargs2.py	(original)
+++ python/branches/py3k/Lib/test/test_getargs2.py	Sun Dec 20 17:03:30 2009
@@ -48,7 +48,8 @@
 VERY_LARGE = 0xFF0000121212121212121242
 
 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
@@ -135,6 +136,20 @@
         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.assertRaises(TypeError, getargs_h, 3.14)
+        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.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)

Modified: python/branches/py3k/Modules/_testcapimodule.c
==============================================================================
--- python/branches/py3k/Modules/_testcapimodule.c	(original)
+++ python/branches/py3k/Modules/_testcapimodule.c	Sun Dec 20 17:03:30 2009
@@ -455,6 +455,15 @@
 }
 
 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;
@@ -1566,6 +1575,7 @@
 	  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},


More information about the Python-checkins mailing list