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