|
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
|