summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorErlend E. Aasland <erlend@python.org>2024-03-11 07:44:42 (GMT)
committerGitHub <noreply@github.com>2024-03-11 07:44:42 (GMT)
commit8d7fde655fbb57e393831b9f30ebba80d6da366f (patch)
tree1d8e1b5016d035afbfaa8906d62d7ddfcc9251aa /Lib
parent4704e55a71c859c5d17cc2747ba62f49da58ea2d (diff)
downloadcpython-8d7fde655fbb57e393831b9f30ebba80d6da366f.zip
cpython-8d7fde655fbb57e393831b9f30ebba80d6da366f.tar.gz
cpython-8d7fde655fbb57e393831b9f30ebba80d6da366f.tar.bz2
gh-116417: Argument Clinic: test generated Limited C API code for float args (#116573)
Diffstat (limited to 'Lib')
-rw-r--r--Lib/test/test_clinic.py58
1 files changed, 56 insertions, 2 deletions
diff --git a/Lib/test/test_clinic.py b/Lib/test/test_clinic.py
index 02a293e..cf3eeaa 100644
--- a/Lib/test/test_clinic.py
+++ b/Lib/test/test_clinic.py
@@ -21,9 +21,9 @@ with test_tools.imports_under_tool('clinic'):
from clinic import DSLParser
-def _make_clinic(*, filename='clinic_tests'):
+def _make_clinic(*, filename='clinic_tests', limited_capi=False):
clang = clinic.CLanguage(filename)
- c = clinic.Clinic(clang, filename=filename, limited_capi=False)
+ c = clinic.Clinic(clang, filename=filename, limited_capi=limited_capi)
c.block_parser = clinic.BlockParser('', clang)
return c
@@ -3614,6 +3614,46 @@ class ClinicFunctionalTest(unittest.TestCase):
self.assertRaises(TypeError, fn, a="a", b="b", c="c", d="d", e="e", f="f", g="g")
+class LimitedCAPIOutputTests(unittest.TestCase):
+
+ def setUp(self):
+ self.clinic = _make_clinic(limited_capi=True)
+
+ @staticmethod
+ def wrap_clinic_input(block):
+ return dedent(f"""
+ /*[clinic input]
+ output everything buffer
+ {block}
+ [clinic start generated code]*/
+ /*[clinic input]
+ dump buffer
+ [clinic start generated code]*/
+ """)
+
+ def test_limited_capi_float(self):
+ block = self.wrap_clinic_input("""
+ func
+ f: float
+ /
+ """)
+ generated = self.clinic.parse(block)
+ self.assertNotIn("PyFloat_AS_DOUBLE", generated)
+ self.assertIn("float f;", generated)
+ self.assertIn("f = (float) PyFloat_AsDouble", generated)
+
+ def test_limited_capi_double(self):
+ block = self.wrap_clinic_input("""
+ func
+ f: double
+ /
+ """)
+ generated = self.clinic.parse(block)
+ self.assertNotIn("PyFloat_AS_DOUBLE", generated)
+ self.assertIn("double f;", generated)
+ self.assertIn("f = PyFloat_AsDouble", generated)
+
+
try:
import _testclinic_limited
except ImportError:
@@ -3644,6 +3684,20 @@ class LimitedCAPIFunctionalTest(unittest.TestCase):
with self.assertRaises(TypeError):
_testclinic_limited.my_int_sum(1, "str")
+ def test_my_double_sum(self):
+ for func in (
+ _testclinic_limited.my_float_sum,
+ _testclinic_limited.my_double_sum,
+ ):
+ with self.subTest(func=func.__name__):
+ self.assertEqual(func(1.0, 2.5), 3.5)
+ with self.assertRaises(TypeError):
+ func()
+ with self.assertRaises(TypeError):
+ func(1)
+ with self.assertRaises(TypeError):
+ func(1., "2")
+
class PermutationTests(unittest.TestCase):