merged in Vitja's tab removals
[cython.git] / tests / run / cpp_classes.pyx
1 # tag: cpp
2
3 __doc__ = u"""
4     >>> test_new_del()
5     (2, 2)
6     >>> test_rect_area(3, 4)
7     12.0
8     >>> test_square_area(15)
9     (225.0, 225.0)
10 """
11
12 cdef extern from "shapes.h" namespace "shapes":
13
14     cdef cppclass Shape:
15         float area()
16
17     cdef cppclass Circle(Shape):
18         int radius
19         Circle(int)
20
21     cdef cppclass Rectangle(Shape):
22         int width
23         int height
24         Rectangle()
25         Rectangle(int, int)
26
27     cdef cppclass Square(Rectangle):
28         int side
29         Square(int)
30
31     int constructor_count, destructor_count
32
33 def test_new_del():
34     cdef Rectangle *rect = new Rectangle(10, 20)
35     cdef Circle *circ = new Circle(15)
36     del rect, circ
37     return constructor_count, destructor_count
38
39 def test_rect_area(w, h):
40     cdef Rectangle *rect = new Rectangle(w, h)
41     try:
42         return rect.area()
43     finally:
44         del rect
45
46 def test_square_area(w):
47     cdef Square *sqr = new Square(w)
48     cdef Rectangle *rect = sqr
49     try:
50         return rect.area(), sqr.area()
51     finally:
52         del sqr
53
54 cdef double get_area(Rectangle s):
55     return s.area()
56
57 def test_value_call(int w):
58     """
59     >>> test_value_call(5)
60     (25.0, 25.0)
61     """
62     cdef Square *sqr = new Square(w)
63     cdef Rectangle *rect = sqr
64     try:
65         return get_area(sqr[0]), get_area(rect[0])
66     finally:
67         del sqr