Blame tests/run/cpp_nested_classes.pyx

Packit 562c7a
# tag: cpp
Packit 562c7a
Packit 562c7a
cdef extern from "cpp_nested_classes_support.h":
Packit 562c7a
    cdef cppclass A:
Packit 562c7a
        cppclass B:
Packit 562c7a
            int square(int)
Packit 562c7a
            cppclass C:
Packit 562c7a
                int cube(int)
Packit 562c7a
        B* createB()
Packit 562c7a
        ctypedef int my_int
Packit 562c7a
        @staticmethod
Packit 562c7a
        my_int negate(my_int)
Packit 562c7a
Packit 562c7a
    cdef cppclass TypedClass[T]:
Packit 562c7a
        ctypedef T MyType
Packit 562c7a
        struct MyStruct:
Packit 562c7a
            T typed_value
Packit 562c7a
            int int_value
Packit 562c7a
        union MyUnion:
Packit 562c7a
            T typed_value
Packit 562c7a
            int int_value
Packit 562c7a
        enum MyEnum:
Packit 562c7a
            value
Packit 562c7a
Packit 562c7a
    cdef cppclass SpecializedTypedClass(TypedClass[double]):
Packit 562c7a
        pass
Packit 562c7a
Packit 562c7a
Packit 562c7a
def test_nested_classes():
Packit 562c7a
    """
Packit 562c7a
    >>> test_nested_classes()
Packit 562c7a
    """
Packit 562c7a
    cdef A a
Packit 562c7a
    cdef A.B b
Packit 562c7a
    assert b.square(3) == 9
Packit 562c7a
    cdef A.B.C c
Packit 562c7a
    assert c.cube(3) == 27
Packit 562c7a
Packit 562c7a
    cdef A.B *b_ptr = a.createB()
Packit 562c7a
    assert b_ptr.square(4) == 16
Packit 562c7a
    del b_ptr
Packit 562c7a
Packit 562c7a
def test_nested_typedef(py_x):
Packit 562c7a
    """
Packit 562c7a
    >>> test_nested_typedef(5)
Packit 562c7a
    """
Packit 562c7a
    cdef A.my_int x = py_x
Packit 562c7a
    assert A.negate(x) == -py_x
Packit 562c7a
Packit 562c7a
def test_typed_nested_typedef(x):
Packit 562c7a
    """
Packit 562c7a
    >>> test_typed_nested_typedef(4)
Packit 562c7a
    (4, 4.0)
Packit 562c7a
    """
Packit 562c7a
    cdef TypedClass[int].MyType ix = x
Packit 562c7a
    cdef TypedClass[double].MyType dx = x
Packit 562c7a
    return ix, dx
Packit 562c7a
Packit 562c7a
def test_nested_enum(TypedClass[double].MyEnum x):
Packit 562c7a
    """
Packit 562c7a
    >>> test_nested_enum(4)
Packit 562c7a
    False
Packit 562c7a
    """
Packit 562c7a
    return x == 0
Packit 562c7a
Packit 562c7a
def test_nested_union(x):
Packit 562c7a
    """
Packit 562c7a
    >>> test_nested_union(2)
Packit 562c7a
    2.0
Packit 562c7a
    """
Packit 562c7a
    cdef TypedClass[double].MyUnion u
Packit 562c7a
    u.int_value = x
Packit 562c7a
    assert u.int_value == x
Packit 562c7a
    u.typed_value = x
Packit 562c7a
    return u.typed_value
Packit 562c7a
Packit 562c7a
def test_nested_struct(x):
Packit 562c7a
    """
Packit 562c7a
    >>> test_nested_struct(2)
Packit 562c7a
    2.0
Packit 562c7a
    """
Packit 562c7a
    cdef TypedClass[double].MyStruct s
Packit 562c7a
    s.int_value = x
Packit 562c7a
    assert s.int_value == x
Packit 562c7a
    s.typed_value = x
Packit 562c7a
    return s.typed_value
Packit 562c7a
Packit 562c7a
Packit 562c7a
Packit 562c7a
def test_typed_nested_sub_typedef(x):
Packit 562c7a
    """
Packit 562c7a
    >>> test_typed_nested_sub_typedef(4)
Packit 562c7a
    4.0
Packit 562c7a
    """
Packit 562c7a
    cdef SpecializedTypedClass.MyType dx = x
Packit 562c7a
    return dx
Packit 562c7a
Packit 562c7a
def test_nested_sub_enum(SpecializedTypedClass.MyEnum x):
Packit 562c7a
    """
Packit 562c7a
    >>> test_nested_sub_enum(4)
Packit 562c7a
    False
Packit 562c7a
    """
Packit 562c7a
    return x == 0
Packit 562c7a
Packit 562c7a
def test_nested_sub_union(x):
Packit 562c7a
    """
Packit 562c7a
    >>> test_nested_sub_union(2)
Packit 562c7a
    2.0
Packit 562c7a
    """
Packit 562c7a
    cdef SpecializedTypedClass.MyUnion u
Packit 562c7a
    u.int_value = x
Packit 562c7a
    assert u.int_value == x
Packit 562c7a
    u.typed_value = x
Packit 562c7a
    return u.typed_value
Packit 562c7a
Packit 562c7a
def test_nested_sub_struct(x):
Packit 562c7a
    """
Packit 562c7a
    >>> test_nested_sub_struct(2)
Packit 562c7a
    2.0
Packit 562c7a
    """
Packit 562c7a
    cdef SpecializedTypedClass.MyStruct s
Packit 562c7a
    s.int_value = x
Packit 562c7a
    assert s.int_value == x
Packit 562c7a
    s.typed_value = x
Packit 562c7a
    return s.typed_value