summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorStefan Behnel <stefan_ml@behnel.de>2023-04-21 08:57:34 +0200
committerscoder <stefan_ml@behnel.de>2023-04-24 16:05:24 +0200
commiteb79e600256440895561fcb8404e486c77b2842c (patch)
tree76bd498089a758f0abb835ba072818d236b9b2ad /tests
parent1183af2c99c62af93bf6fe89bc13a5772fb4f10b (diff)
downloadcython-eb79e600256440895561fcb8404e486c77b2842c.tar.gz
Ignore (and warn about) simple type-tuples in annotations (like "(int, int)") and require "tuple[int, int]" instead.
Closes https://github.com/cython/cython/issues/5397
Diffstat (limited to 'tests')
-rw-r--r--tests/run/annotation_typing.pyx24
-rw-r--r--tests/run/ctuple.pyx11
2 files changed, 29 insertions, 6 deletions
diff --git a/tests/run/annotation_typing.pyx b/tests/run/annotation_typing.pyx
index f2086789d..7c49fea40 100644
--- a/tests/run/annotation_typing.pyx
+++ b/tests/run/annotation_typing.pyx
@@ -149,6 +149,15 @@ def return_tuple_for_carray() -> tuple:
return x
+def invalid_ctuple_syntax(a: (cython.int, cython.int), b: (int, int)):
+ """
+ >>> invalid_ctuple_syntax([1, 2], [3, 4])
+ [1, 2, 3, 4]
+ """
+ result: (cython.int, cython.int, cython.int, cython.int) = a + b
+ return result
+
+
MyStruct = cython.struct(x=cython.int, y=cython.int, data=cython.double)
@@ -394,14 +403,17 @@ _WARNINGS = """
63:70: PEP-484 recommends 'typing.Optional[...]' for arguments that can be None.
90:44: Found Python 2.x type 'long' in a Python annotation. Did you mean to use 'cython.long'?
90:70: PEP-484 recommends 'typing.Optional[...]' for arguments that can be None.
-283:44: Unknown type declaration in annotation, ignoring
-311:15: Annotation ignored since class-level attributes must be Python objects. Were you trying to set up an instance attribute?
+152:30: Tuples cannot be declared as simple tuples of types. Use 'tuple[type1, type2, ...]'.
+152:59: Tuples cannot be declared as simple tuples of types. Use 'tuple[type1, type2, ...]'.
+157:13: Tuples cannot be declared as simple tuples of types. Use 'tuple[type1, type2, ...]'.
+292:44: Unknown type declaration in annotation, ignoring
+320:15: Annotation ignored since class-level attributes must be Python objects. Were you trying to set up an instance attribute?
# DUPLICATE:
63:44: Found Python 2.x type 'long' in a Python annotation. Did you mean to use 'cython.long'?
# BUG:
63:6: 'pytypes_cpdef' redeclared
-155:0: 'struct_io' redeclared
-190:0: 'struct_convert' redeclared
-209:0: 'exception_default' redeclared
-240:0: 'exception_default_uint' redeclared
+164:0: 'struct_io' redeclared
+199:0: 'struct_convert' redeclared
+218:0: 'exception_default' redeclared
+249:0: 'exception_default_uint' redeclared
"""
diff --git a/tests/run/ctuple.pyx b/tests/run/ctuple.pyx
index 4053df42b..2d92f8bad 100644
--- a/tests/run/ctuple.pyx
+++ b/tests/run/ctuple.pyx
@@ -225,6 +225,17 @@ def test_mul((int, int) ab, int c):
"""
return ab * c
+def test_mul_to_ctuple((int, int) ab, int c):
+ """
+ >>> test_mul_to_ctuple((1, 2), 2)
+ (1, 2, 1, 2)
+ >>> test_mul_to_ctuple((1, 2), 3)
+ Traceback (most recent call last):
+ TypeError: Expected a tuple of size 4, got tuple
+ """
+ result: tuple[cython.int, cython.int, cython.int, cython.int] = ab * c
+ return result
+
def test_unop((int, int) ab):
"""
>>> test_unop((1, 2))