2 # Copyright (C) 2001-2005, The Perl Foundation.
7 use lib qw( . lib ../lib ../../lib );
9 use Parrot::Test tests => 6;
13 t/pmc/object-mro.t - Object Methods Resolution Order
17 % prove t/pmc/object-mro.t
21 These are tests for the C3 MRO order
25 pir_output_is( <<'CODE', <<'OUTPUT', "print mro diamond" );
34 .local pmc A, B, C, D, E, F, m, p, it
64 pir_output_is( <<'CODE', <<'OUTPUT', "print mro 1" );
66 # example take from: http://www.python.org/2.3/mro.html
78 # Level 3 | O | (more general)
84 # Level 2 3 | D | 4| E | | F | 5 |
90 # Level 1 1 | B | | C | 2 |
95 # Level 0 0 | A | (more specialized)
99 .local pmc A, B, C, D, E, F, O
117 it = new .Iterator, m
134 pir_output_is( <<'CODE', <<'OUTPUT', "print mro 2" );
136 # example take from: http://www.python.org/2.3/mro.html
154 # Level 2 2 | E | 4 | D | | F | 5
160 # Level 1 1 | B | | C | 3
170 .local pmc A, B, C, D, E, F, O
188 it = new .Iterator, m
205 pir_output_is( <<'CODE', <<'OUTPUT', "print mro 3" );
216 .local pmc A, B, C, D
226 it = new .Iterator, m
243 pir_output_is( <<'CODE', <<'OUTPUT', "print mro 4" );
254 # Intelligent Humanoid
259 # example taken from: L<http://gauss.gwydiondylan.org/books/drm/drm_50.html>
261 # define class <sentient> (<life-form>) end class;
262 # define class <bipedal> (<life-form>) end class;
263 # define class <intelligent> (<sentient>) end class;
264 # define class <humanoid> (<bipedal>) end class;
265 # define class <vulcan> (<intelligent>, <humanoid>) end class;
268 .local pmc TestObject, LifeForm, Sentient, BiPedal, Intelligent, Humanoid, Vulcan
270 newclass TestObject, "TestObject"
272 subclass LifeForm, TestObject, "LifeForm"
274 subclass Sentient, LifeForm, "Sentient"
275 subclass Intelligent, Sentient, "Intelligent"
277 subclass BiPedal, LifeForm, "BiPedal"
278 subclass Humanoid, BiPedal, "Humanoid"
280 subclass Vulcan, Intelligent, "Vulcan"
281 addparent Vulcan, Humanoid
286 it = new .Iterator, m
300 Vulcan Intelligent Sentient Humanoid BiPedal LifeForm TestObject R
303 # ... now some tests which fail to compose the class
305 pir_output_like( <<'CODE', <<'OUTPUT', "mro error 1" );
307 # example take from: http://www.python.org/2.3/mro.html
309 # "Serious order disagreement" # From Guido
316 # class Z(A,B): pass # creates Z(A,B) in Python 2.2
318 # pass # Z(A,B) cannot be created in Python 2.3
321 .local pmc O, X, Y, A, B, Z
337 /inconsisten class hierarchy/
342 # cperl-indent-level: 4
345 # vim: expandtab shiftwidth=4: