Commit | Line | Data |
---|---|---|
204e6232 BF |
1 | #!./perl |
2 | ||
3 | use strict; | |
4 | use warnings; | |
5 | use utf8; | |
6 | use open qw( :utf8 :std ); | |
7 | ||
8 | require q(./test.pl); plan(tests => 12); | |
9 | ||
10 | =pod | |
11 | ||
12 | This example is taken from: http://rt.cpan.org/Public/Bug/Display.html?id=20879 | |
13 | ||
14 | --- --- --- | |
15 | Level 5 8 | A | 9 | B | A | C | (More General) | |
16 | --- --- --- V | |
17 | \ | / | | |
18 | \ | / | | |
19 | \ | / | | |
20 | \ | / | | |
21 | --- | | |
22 | Level 4 7 | D | | | |
23 | --- | | |
24 | / \ | | |
25 | / \ | | |
26 | --- --- | | |
27 | Level 3 4 | G | 6 | E | | | |
28 | --- --- | | |
29 | | | | | |
30 | | | | | |
31 | --- --- | | |
32 | Level 2 3 | H | 5 | F | | | |
33 | --- --- | | |
34 | \ / | | | |
35 | \ / | | | |
36 | \ | | | |
37 | / \ | | | |
38 | / \ | | | |
39 | --- --- | | |
40 | Level 1 1 | J | 2 | I | | | |
41 | --- --- | | |
42 | \ / | | |
43 | \ / | | |
44 | --- v | |
45 | Level 0 0 | K | (More Specialized) | |
46 | --- | |
47 | ||
48 | ||
49 | 0123456789A | |
50 | KJIHGFEDABC | |
51 | ||
52 | =cut | |
53 | ||
54 | { | |
55 | package 텟Ṱ::ᐊ; use mro 'c3'; | |
56 | ||
57 | package 텟Ṱ::ḅ; use mro 'c3'; | |
58 | ||
59 | package 텟Ṱ::ȼ; use mro 'c3'; | |
60 | ||
61 | package 텟Ṱ::Ḏ; use mro 'c3'; | |
62 | use base qw/텟Ṱ::ᐊ 텟Ṱ::ḅ 텟Ṱ::ȼ/; | |
63 | ||
64 | package 텟Ṱ::Ӭ; use mro 'c3'; | |
65 | use base qw/텟Ṱ::Ḏ/; | |
66 | ||
67 | package 텟Ṱ::Ḟ; use mro 'c3'; | |
68 | use base qw/텟Ṱ::Ӭ/; | |
69 | sub testmèth { "wrong" } | |
70 | ||
71 | package 텟Ṱ::ḡ; use mro 'c3'; | |
72 | use base qw/텟Ṱ::Ḏ/; | |
73 | ||
74 | package 텟Ṱ::Ḣ; use mro 'c3'; | |
75 | use base qw/텟Ṱ::ḡ/; | |
76 | ||
77 | package 텟Ṱ::ᶦ; use mro 'c3'; | |
78 | use base qw/텟Ṱ::Ḣ 텟Ṱ::Ḟ/; | |
79 | sub testmèth { "right" } | |
80 | ||
81 | package 텟Ṱ::J; use mro 'c3'; | |
82 | use base qw/텟Ṱ::Ḟ/; | |
83 | ||
84 | package 텟Ṱ::Ḵ; use mro 'c3'; | |
85 | use base qw/텟Ṱ::J 텟Ṱ::ᶦ/; | |
86 | sub testmèth { shift->next::method } | |
87 | } | |
88 | ||
89 | ok(eq_array( | |
90 | mro::get_linear_isa('텟Ṱ::ᐊ'), | |
91 | [ qw(텟Ṱ::ᐊ) ] | |
92 | ), '... got the right C3 merge order for 텟Ṱ::ᐊ'); | |
93 | ||
94 | ok(eq_array( | |
95 | mro::get_linear_isa('텟Ṱ::ḅ'), | |
96 | [ qw(텟Ṱ::ḅ) ] | |
97 | ), '... got the right C3 merge order for 텟Ṱ::ḅ'); | |
98 | ||
99 | ok(eq_array( | |
100 | mro::get_linear_isa('텟Ṱ::ȼ'), | |
101 | [ qw(텟Ṱ::ȼ) ] | |
102 | ), '... got the right C3 merge order for 텟Ṱ::ȼ'); | |
103 | ||
104 | ok(eq_array( | |
105 | mro::get_linear_isa('텟Ṱ::Ḏ'), | |
106 | [ qw(텟Ṱ::Ḏ 텟Ṱ::ᐊ 텟Ṱ::ḅ 텟Ṱ::ȼ) ] | |
107 | ), '... got the right C3 merge order for 텟Ṱ::Ḏ'); | |
108 | ||
109 | ok(eq_array( | |
110 | mro::get_linear_isa('텟Ṱ::Ӭ'), | |
111 | [ qw(텟Ṱ::Ӭ 텟Ṱ::Ḏ 텟Ṱ::ᐊ 텟Ṱ::ḅ 텟Ṱ::ȼ) ] | |
112 | ), '... got the right C3 merge order for 텟Ṱ::Ӭ'); | |
113 | ||
114 | ok(eq_array( | |
115 | mro::get_linear_isa('텟Ṱ::Ḟ'), | |
116 | [ qw(텟Ṱ::Ḟ 텟Ṱ::Ӭ 텟Ṱ::Ḏ 텟Ṱ::ᐊ 텟Ṱ::ḅ 텟Ṱ::ȼ) ] | |
117 | ), '... got the right C3 merge order for 텟Ṱ::Ḟ'); | |
118 | ||
119 | ok(eq_array( | |
120 | mro::get_linear_isa('텟Ṱ::ḡ'), | |
121 | [ qw(텟Ṱ::ḡ 텟Ṱ::Ḏ 텟Ṱ::ᐊ 텟Ṱ::ḅ 텟Ṱ::ȼ) ] | |
122 | ), '... got the right C3 merge order for 텟Ṱ::ḡ'); | |
123 | ||
124 | ok(eq_array( | |
125 | mro::get_linear_isa('텟Ṱ::Ḣ'), | |
126 | [ qw(텟Ṱ::Ḣ 텟Ṱ::ḡ 텟Ṱ::Ḏ 텟Ṱ::ᐊ 텟Ṱ::ḅ 텟Ṱ::ȼ) ] | |
127 | ), '... got the right C3 merge order for 텟Ṱ::Ḣ'); | |
128 | ||
129 | ok(eq_array( | |
130 | mro::get_linear_isa('텟Ṱ::ᶦ'), | |
131 | [ qw(텟Ṱ::ᶦ 텟Ṱ::Ḣ 텟Ṱ::ḡ 텟Ṱ::Ḟ 텟Ṱ::Ӭ 텟Ṱ::Ḏ 텟Ṱ::ᐊ 텟Ṱ::ḅ 텟Ṱ::ȼ) ] | |
132 | ), '... got the right C3 merge order for 텟Ṱ::ᶦ'); | |
133 | ||
134 | ok(eq_array( | |
135 | mro::get_linear_isa('텟Ṱ::J'), | |
136 | [ qw(텟Ṱ::J 텟Ṱ::Ḟ 텟Ṱ::Ӭ 텟Ṱ::Ḏ 텟Ṱ::ᐊ 텟Ṱ::ḅ 텟Ṱ::ȼ) ] | |
137 | ), '... got the right C3 merge order for 텟Ṱ::J'); | |
138 | ||
139 | ok(eq_array( | |
140 | mro::get_linear_isa('텟Ṱ::Ḵ'), | |
141 | [ qw(텟Ṱ::Ḵ 텟Ṱ::J 텟Ṱ::ᶦ 텟Ṱ::Ḣ 텟Ṱ::ḡ 텟Ṱ::Ḟ 텟Ṱ::Ӭ 텟Ṱ::Ḏ 텟Ṱ::ᐊ 텟Ṱ::ḅ 텟Ṱ::ȼ) ] | |
142 | ), '... got the right C3 merge order for 텟Ṱ::Ḵ'); | |
143 | ||
144 | is(텟Ṱ::Ḵ->testmèth(), "right", 'next::method working ok'); |