Skip to content

Commit

Permalink
pythongh-116417: Argument Clinic: test generated Limited C API code f…
Browse files Browse the repository at this point in the history
…or float args (python#116573)
  • Loading branch information
erlend-aasland authored and diegorusso committed Apr 17, 2024
1 parent fafb430 commit 1c4c950
Showing 1 changed file with 56 additions and 2 deletions.
58 changes: 56 additions & 2 deletions Lib/test/test_clinic.py
Expand Up @@ -21,9 +21,9 @@
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

Expand Down Expand Up @@ -3614,6 +3614,46 @@ def test_depr_multi(self):
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:
Expand Down Expand Up @@ -3644,6 +3684,20 @@ def test_my_int_sum(self):
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):
Expand Down

0 comments on commit 1c4c950

Please sign in to comment.