summaryrefslogtreecommitdiff
path: root/tests/run/pep526_variable_annotations_cy.pyx
diff options
context:
space:
mode:
Diffstat (limited to 'tests/run/pep526_variable_annotations_cy.pyx')
-rw-r--r--tests/run/pep526_variable_annotations_cy.pyx58
1 files changed, 58 insertions, 0 deletions
diff --git a/tests/run/pep526_variable_annotations_cy.pyx b/tests/run/pep526_variable_annotations_cy.pyx
new file mode 100644
index 000000000..448824b36
--- /dev/null
+++ b/tests/run/pep526_variable_annotations_cy.pyx
@@ -0,0 +1,58 @@
+# mode: run
+
+import cython
+
+try:
+ import typing
+ from typing import List, Tuple
+ from typing import Set as _SET_
+except:
+ pass # this should allow Cython to interpret the directives even when the module doesn't exist
+
+def test_subscripted_types():
+ """
+ >>> test_subscripted_types()
+ dict object
+ list object
+ set object
+ """
+ cdef typing.Dict[int, float] a = {}
+ cdef List[int] b = []
+ cdef _SET_[object] c = set()
+
+ print(cython.typeof(a))
+ print(cython.typeof(b))
+ print(cython.typeof(c))
+
+cdef class TestClassVar:
+ """
+ >>> TestClassVar.cls
+ 5
+ >>> TestClassVar.regular # doctest: +IGNORE_EXCEPTION_DETAIL
+ Traceback (most recent call last):
+ ...
+ AttributeError:
+ """
+ cdef int regular
+ cdef typing.ClassVar[int] cls
+ cls = 5
+
+# because tuple is specifically special cased to go to ctuple where possible
+def test_tuple(typing.Tuple[int, float] a, typing.Tuple[int, ...] b,
+ Tuple[int, object] c # cannot be a ctuple
+ ):
+ """
+ >>> test_tuple((1, 1.0), (1, 1.0), (1, 1.0))
+ int
+ int
+ tuple object
+ tuple object
+ """
+ cdef typing.Tuple[int, float] x = (a[0], a[1]) # C int/float
+ cdef Tuple[int, ...] y = (1,2.)
+ z = a[0] # should infer to C int
+
+ print(cython.typeof(z))
+ print(cython.typeof(x[0]))
+ print(cython.typeof(y))
+ print(cython.typeof(c))