diff options
Diffstat (limited to 'tests/run/pep526_variable_annotations_cy.pyx')
-rw-r--r-- | tests/run/pep526_variable_annotations_cy.pyx | 58 |
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)) |