This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Update Pod::Simple from version 3.38 to 3.39
[perl5.git] / t / mro / vulcan_dfs.t
1 #!./perl
2
3 use strict;
4 use warnings;
5
6 require q(./test.pl); plan(tests => 1);
7
8 =pod
9
10 example taken from: L<http://www.opendylan.org/books/drm/Method_Dispatch>
11
12          Object
13            ^
14            |
15         LifeForm 
16          ^    ^
17         /      \
18    Sentient    BiPedal
19       ^          ^
20       |          |
21  Intelligent  Humanoid
22        ^        ^
23         \      /
24          Vulcan
25
26  define class <sentient> (<life-form>) end class;
27  define class <bipedal> (<life-form>) end class;
28  define class <intelligent> (<sentient>) end class;
29  define class <humanoid> (<bipedal>) end class;
30  define class <vulcan> (<intelligent>, <humanoid>) end class;
31
32 =cut
33
34 {
35     package Object;    
36     use mro 'dfs';
37     
38     package LifeForm;
39     use mro 'dfs';
40     use base 'Object';
41     
42     package Sentient;
43     use mro 'dfs';
44     use base 'LifeForm';
45     
46     package BiPedal;
47     use mro 'dfs';    
48     use base 'LifeForm';
49     
50     package Intelligent;
51     use mro 'dfs';    
52     use base 'Sentient';
53     
54     package Humanoid;
55     use mro 'dfs';    
56     use base 'BiPedal';
57     
58     package Vulcan;
59     use mro 'dfs';    
60     use base ('Intelligent', 'Humanoid');
61 }
62
63 ok(eq_array(
64     mro::get_linear_isa('Vulcan'),
65     [ qw(Vulcan Intelligent Sentient LifeForm Object Humanoid BiPedal) ]
66 ), '... got the right MRO for the Vulcan Dylan Example');