Blame tests/run/cpp_type_inference.pyx
|
Packit |
562c7a |
# mode: run
|
|
Packit |
562c7a |
# tag: cpp, werror
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
cdef extern from "shapes.h" namespace "shapes":
|
|
Packit |
562c7a |
cdef cppclass Shape:
|
|
Packit |
562c7a |
float area()
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
cdef cppclass Circle(Shape):
|
|
Packit |
562c7a |
int radius
|
|
Packit |
562c7a |
Circle(int)
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
cdef cppclass Square(Shape):
|
|
Packit |
562c7a |
Square(int)
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
from cython cimport typeof
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
from cython.operator cimport dereference as d
|
|
Packit |
562c7a |
from cython.operator cimport preincrement as incr
|
|
Packit |
562c7a |
from libcpp.vector cimport vector
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
def test_reversed_vector_iteration(L):
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
>>> test_reversed_vector_iteration([1,2,3])
|
|
Packit |
562c7a |
int: 3
|
|
Packit |
562c7a |
int: 2
|
|
Packit |
562c7a |
int: 1
|
|
Packit |
562c7a |
int
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
cdef vector[int] v = L
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
it = v.rbegin()
|
|
Packit |
562c7a |
while it != v.rend():
|
|
Packit |
562c7a |
a = d(it)
|
|
Packit |
562c7a |
incr(it)
|
|
Packit |
562c7a |
print('%s: %s' % (typeof(a), a))
|
|
Packit |
562c7a |
print(typeof(a))
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
def test_derived_types(int size, bint round):
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
>>> test_derived_types(5, True)
|
|
Packit |
562c7a |
Shape *
|
|
Packit |
562c7a |
>>> test_derived_types(5, False)
|
|
Packit |
562c7a |
Shape *
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
if round:
|
|
Packit |
562c7a |
ptr = new Circle(size)
|
|
Packit |
562c7a |
else:
|
|
Packit |
562c7a |
ptr = new Square(size)
|
|
Packit |
562c7a |
print typeof(ptr)
|
|
Packit |
562c7a |
del ptr
|