xref: /openbsd-src/gnu/usr.bin/perl/t/mro/basic_02_dfs_utf8.t (revision 898184e3e61f9129feb5978fad5a8c6865f00b92)
1*898184e3Ssthen#!./perl
2*898184e3Ssthen
3*898184e3Ssthenuse strict;
4*898184e3Ssthenuse warnings;
5*898184e3Ssthenuse utf8;
6*898184e3Ssthenuse open qw( :utf8 :std );
7*898184e3Ssthen
8*898184e3Ssthenrequire q(./test.pl); plan(tests => 10);
9*898184e3Ssthen
10*898184e3Ssthen=pod
11*898184e3Ssthen
12*898184e3SsthenThis example is take from: http://www.python.org/2.3/mro.html
13*898184e3Ssthen
14*898184e3Ssthen"My first example"
15*898184e3Ssthenclass O: pass
16*898184e3Ssthenclass F(O): pass
17*898184e3Ssthenclass E(O): pass
18*898184e3Ssthenclass D(O): pass
19*898184e3Ssthenclass C(D,F): pass
20*898184e3Ssthenclass B(D,E): pass
21*898184e3Ssthenclass A(B,C): pass
22*898184e3Ssthen
23*898184e3Ssthen
24*898184e3Ssthen                          6
25*898184e3Ssthen                         ---
26*898184e3SsthenLevel 3                 | O |                  (more general)
27*898184e3Ssthen                      /  ---  \
28*898184e3Ssthen                     /    |    \                      |
29*898184e3Ssthen                    /     |     \                     |
30*898184e3Ssthen                   /      |      \                    |
31*898184e3Ssthen                  ---    ---    ---                   |
32*898184e3SsthenLevel 2        3 | D | 4| E |  | F | 5                |
33*898184e3Ssthen                  ---    ---    ---                   |
34*898184e3Ssthen                   \  \ _ /       |                   |
35*898184e3Ssthen                    \    / \ _    |                   |
36*898184e3Ssthen                     \  /      \  |                   |
37*898184e3Ssthen                      ---      ---                    |
38*898184e3SsthenLevel 1            1 | B |    | C | 2                 |
39*898184e3Ssthen                      ---      ---                    |
40*898184e3Ssthen                        \      /                      |
41*898184e3Ssthen                         \    /                      \ /
42*898184e3Ssthen                           ---
43*898184e3SsthenLevel 0                 0 | A |                (more specialized)
44*898184e3Ssthen                           ---
45*898184e3Ssthen
46*898184e3Ssthen=cut
47*898184e3Ssthen
48*898184e3Ssthen{
49*898184e3Ssthen    package 텟ţ::ᴼ;
50*898184e3Ssthen    use mro 'dfs';
51*898184e3Ssthen
52*898184e3Ssthen    package 텟ţ::Ḟ;
53*898184e3Ssthen    use mro 'dfs';
54*898184e3Ssthen    use base '텟ţ::ᴼ';
55*898184e3Ssthen
56*898184e3Ssthen    package 텟ţ::ऍ;
57*898184e3Ssthen    use base '텟ţ::ᴼ';
58*898184e3Ssthen    use mro 'dfs';
59*898184e3Ssthen
60*898184e3Ssthen    sub ƈ_or_ऍ { '텟ţ::ऍ' }
61*898184e3Ssthen
62*898184e3Ssthen    package 텟ţ::Ḋ;
63*898184e3Ssthen    use mro 'dfs';
64*898184e3Ssthen    use base '텟ţ::ᴼ';
65*898184e3Ssthen
66*898184e3Ssthen    sub ƈ_or_Ḋ { '텟ţ::Ḋ' }
67*898184e3Ssthen
68*898184e3Ssthen    package 텟ţ::ƈ;
69*898184e3Ssthen    use base ('텟ţ::Ḋ', '텟ţ::Ḟ');
70*898184e3Ssthen    use mro 'dfs';
71*898184e3Ssthen
72*898184e3Ssthen    sub ƈ_or_Ḋ { '텟ţ::ƈ' }
73*898184e3Ssthen    sub ƈ_or_ऍ { '텟ţ::ƈ' }
74*898184e3Ssthen
75*898184e3Ssthen    package 텟ţ::ᛒ;
76*898184e3Ssthen    use mro 'dfs';
77*898184e3Ssthen    use base ('텟ţ::Ḋ', '텟ţ::ऍ');
78*898184e3Ssthen
79*898184e3Ssthen    package 텟ţ::ଅ;
80*898184e3Ssthen    use base ('텟ţ::ᛒ', '텟ţ::ƈ');
81*898184e3Ssthen    use mro 'dfs';
82*898184e3Ssthen}
83*898184e3Ssthen
84*898184e3Ssthenok(eq_array(
85*898184e3Ssthen    mro::get_linear_isa('텟ţ::Ḟ'),
86*898184e3Ssthen    [ qw(텟ţ::Ḟ 텟ţ::ᴼ) ]
87*898184e3Ssthen), '... got the right MRO for 텟ţ::Ḟ');
88*898184e3Ssthen
89*898184e3Ssthenok(eq_array(
90*898184e3Ssthen    mro::get_linear_isa('텟ţ::ऍ'),
91*898184e3Ssthen    [ qw(텟ţ::ऍ 텟ţ::ᴼ) ]
92*898184e3Ssthen), '... got the right MRO for 텟ţ::ऍ');
93*898184e3Ssthen
94*898184e3Ssthenok(eq_array(
95*898184e3Ssthen    mro::get_linear_isa('텟ţ::Ḋ'),
96*898184e3Ssthen    [ qw(텟ţ::Ḋ 텟ţ::ᴼ) ]
97*898184e3Ssthen), '... got the right MRO for 텟ţ::Ḋ');
98*898184e3Ssthen
99*898184e3Ssthenok(eq_array(
100*898184e3Ssthen    mro::get_linear_isa('텟ţ::ƈ'),
101*898184e3Ssthen    [ qw(텟ţ::ƈ 텟ţ::Ḋ 텟ţ::ᴼ 텟ţ::Ḟ) ]
102*898184e3Ssthen), '... got the right MRO for 텟ţ::ƈ');
103*898184e3Ssthen
104*898184e3Ssthenok(eq_array(
105*898184e3Ssthen    mro::get_linear_isa('텟ţ::ᛒ'),
106*898184e3Ssthen    [ qw(텟ţ::ᛒ 텟ţ::Ḋ 텟ţ::ᴼ 텟ţ::ऍ) ]
107*898184e3Ssthen), '... got the right MRO for 텟ţ::ᛒ');
108*898184e3Ssthen
109*898184e3Ssthenok(eq_array(
110*898184e3Ssthen    mro::get_linear_isa('텟ţ::ଅ'),
111*898184e3Ssthen    [ qw(텟ţ::ଅ 텟ţ::ᛒ 텟ţ::Ḋ 텟ţ::ᴼ 텟ţ::ऍ 텟ţ::ƈ 텟ţ::Ḟ) ]
112*898184e3Ssthen), '... got the right MRO for 텟ţ::ଅ');
113*898184e3Ssthen
114*898184e3Ssthenis(텟ţ::ଅ->ƈ_or_Ḋ, '텟ţ::Ḋ', '... got the expected method output');
115*898184e3Ssthenis(텟ţ::ଅ->can('ƈ_or_Ḋ')->(), '텟ţ::Ḋ', '... can got the expected method output');
116*898184e3Ssthenis(텟ţ::ଅ->ƈ_or_ऍ, '텟ţ::ऍ', '... got the expected method output');
117*898184e3Ssthenis(텟ţ::ଅ->can('ƈ_or_ऍ')->(), '텟ţ::ऍ', '... can got the expected method output');
118