xref: /openbsd/gnu/usr.bin/perl/t/mro/complex_c3_utf8.t (revision d415bd75)
1#!./perl
2
3use strict;
4use warnings;
5use utf8;
6use open qw( :utf8 :std );
7
8require q(./test.pl); plan(tests => 12);
9
10=pod
11
12This example is taken from: http://rt.cpan.org/Public/Bug/Display.html?id=20879
13
14               ---     ---     ---
15Level 5     8 | A | 9 | B | A | C |    (More General)
16               ---     ---     ---       V
17                  \     |     /          |
18                   \    |    /           |
19                    \   |   /            |
20                     \  |  /             |
21                       ---               |
22Level 4             7 | D |              |
23                       ---               |
24                      /   \              |
25                     /     \             |
26                  ---       ---          |
27Level 3        4 | G |   6 | E |         |
28                  ---       ---          |
29                   |         |           |
30                   |         |           |
31                  ---       ---          |
32Level 2        3 | H |   5 | F |         |
33                  ---       ---          |
34                      \   /  |           |
35                       \ /   |           |
36                        \    |           |
37                       / \   |           |
38                      /   \  |           |
39                  ---       ---          |
40Level 1        1 | J |   2 | I |         |
41                  ---       ---          |
42                    \       /            |
43                     \     /             |
44                       ---               v
45Level 0             0 | K |            (More Specialized)
46                       ---
47
48
490123456789A
50KJIHGFEDABC
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
89ok(eq_array(
90    mro::get_linear_isa('텟Ṱ::ᐊ'),
91    [ qw(텟Ṱ::ᐊ) ]
92), '... got the right C3 merge order for 텟Ṱ::ᐊ');
93
94ok(eq_array(
95    mro::get_linear_isa('텟Ṱ::ḅ'),
96    [ qw(텟Ṱ::ḅ) ]
97), '... got the right C3 merge order for 텟Ṱ::ḅ');
98
99ok(eq_array(
100    mro::get_linear_isa('텟Ṱ::ȼ'),
101    [ qw(텟Ṱ::ȼ) ]
102), '... got the right C3 merge order for 텟Ṱ::ȼ');
103
104ok(eq_array(
105    mro::get_linear_isa('텟Ṱ::Ḏ'),
106    [ qw(텟Ṱ::Ḏ 텟Ṱ::ᐊ 텟Ṱ::ḅ 텟Ṱ::ȼ) ]
107), '... got the right C3 merge order for 텟Ṱ::Ḏ');
108
109ok(eq_array(
110    mro::get_linear_isa('텟Ṱ::Ӭ'),
111    [ qw(텟Ṱ::Ӭ 텟Ṱ::Ḏ 텟Ṱ::ᐊ 텟Ṱ::ḅ 텟Ṱ::ȼ) ]
112), '... got the right C3 merge order for 텟Ṱ::Ӭ');
113
114ok(eq_array(
115    mro::get_linear_isa('텟Ṱ::Ḟ'),
116    [ qw(텟Ṱ::Ḟ 텟Ṱ::Ӭ 텟Ṱ::Ḏ 텟Ṱ::ᐊ 텟Ṱ::ḅ 텟Ṱ::ȼ) ]
117), '... got the right C3 merge order for 텟Ṱ::Ḟ');
118
119ok(eq_array(
120    mro::get_linear_isa('텟Ṱ::ḡ'),
121    [ qw(텟Ṱ::ḡ 텟Ṱ::Ḏ 텟Ṱ::ᐊ 텟Ṱ::ḅ 텟Ṱ::ȼ) ]
122), '... got the right C3 merge order for 텟Ṱ::ḡ');
123
124ok(eq_array(
125    mro::get_linear_isa('텟Ṱ::Ḣ'),
126    [ qw(텟Ṱ::Ḣ 텟Ṱ::ḡ 텟Ṱ::Ḏ 텟Ṱ::ᐊ 텟Ṱ::ḅ 텟Ṱ::ȼ) ]
127), '... got the right C3 merge order for 텟Ṱ::Ḣ');
128
129ok(eq_array(
130    mro::get_linear_isa('텟Ṱ::ᶦ'),
131    [ qw(텟Ṱ::ᶦ 텟Ṱ::Ḣ 텟Ṱ::ḡ 텟Ṱ::Ḟ 텟Ṱ::Ӭ 텟Ṱ::Ḏ 텟Ṱ::ᐊ 텟Ṱ::ḅ 텟Ṱ::ȼ) ]
132), '... got the right C3 merge order for 텟Ṱ::ᶦ');
133
134ok(eq_array(
135    mro::get_linear_isa('텟Ṱ::J'),
136    [ qw(텟Ṱ::J 텟Ṱ::Ḟ 텟Ṱ::Ӭ 텟Ṱ::Ḏ 텟Ṱ::ᐊ 텟Ṱ::ḅ 텟Ṱ::ȼ) ]
137), '... got the right C3 merge order for 텟Ṱ::J');
138
139ok(eq_array(
140    mro::get_linear_isa('텟Ṱ::Ḵ'),
141    [ qw(텟Ṱ::Ḵ 텟Ṱ::J 텟Ṱ::ᶦ 텟Ṱ::Ḣ 텟Ṱ::ḡ 텟Ṱ::Ḟ 텟Ṱ::Ӭ 텟Ṱ::Ḏ 텟Ṱ::ᐊ 텟Ṱ::ḅ 텟Ṱ::ȼ) ]
142), '... got the right C3 merge order for 텟Ṱ::Ḵ');
143
144is(텟Ṱ::Ḵ->testmèth(), "right", 'next::method working ok');
145