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 ������::���; use mro 'c3'; 82 use base qw/������::���/; 83 84 package ������::���; use mro 'c3'; 85 use base qw/������::��� ������::���/; 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('������::���'), 136 [ qw(������::��� ������::��� ������::�� ������::��� ������::��� ������::��� ������::��) ] 137), '... got the right C3 merge order for ������::���'); 138 139ok(eq_array( 140 mro::get_linear_isa('������::���'), 141 [ qw(������::��� ������::��� ������::��� ������::��� ������::��� ������::��� ������::�� ������::��� ������::��� ������::��� ������::��) ] 142), '... got the right C3 merge order for ������::���'); 143 144is(������::���->testm��th(), "right", 'next::method working ok'); 145