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 => 11); 9*898184e3Ssthen 10*898184e3Ssthen=pod 11*898184e3Ssthen 12*898184e3SsthenThis example is taken from: http://rt.cpan.org/Public/Bug/Display.html?id=20879 13*898184e3Ssthen 14*898184e3Ssthen --- --- --- 15*898184e3SsthenLevel 5 8 | A | 9 | B | A | C | (More General) 16*898184e3Ssthen --- --- --- V 17*898184e3Ssthen \ | / | 18*898184e3Ssthen \ | / | 19*898184e3Ssthen \ | / | 20*898184e3Ssthen \ | / | 21*898184e3Ssthen --- | 22*898184e3SsthenLevel 4 7 | D | | 23*898184e3Ssthen --- | 24*898184e3Ssthen / \ | 25*898184e3Ssthen / \ | 26*898184e3Ssthen --- --- | 27*898184e3SsthenLevel 3 4 | G | 6 | E | | 28*898184e3Ssthen --- --- | 29*898184e3Ssthen | | | 30*898184e3Ssthen | | | 31*898184e3Ssthen --- --- | 32*898184e3SsthenLevel 2 3 | H | 5 | F | | 33*898184e3Ssthen --- --- | 34*898184e3Ssthen \ / | | 35*898184e3Ssthen \ / | | 36*898184e3Ssthen \ | | 37*898184e3Ssthen / \ | | 38*898184e3Ssthen / \ | | 39*898184e3Ssthen --- --- | 40*898184e3SsthenLevel 1 1 | J | 2 | I | | 41*898184e3Ssthen --- --- | 42*898184e3Ssthen \ / | 43*898184e3Ssthen \ / | 44*898184e3Ssthen --- v 45*898184e3SsthenLevel 0 0 | K | (More Specialized) 46*898184e3Ssthen --- 47*898184e3Ssthen 48*898184e3Ssthen 49*898184e3Ssthen0123456789A 50*898184e3SsthenKJIHGFEDABC 51*898184e3Ssthen 52*898184e3Ssthen=cut 53*898184e3Ssthen 54*898184e3Ssthen{ 55*898184e3Ssthen package 텟Ṱ::ᐊ; use mro 'dfs'; 56*898184e3Ssthen 57*898184e3Ssthen package 텟Ṱ::ḅ; use mro 'dfs'; 58*898184e3Ssthen 59*898184e3Ssthen package 텟Ṱ::ȼ; use mro 'dfs'; 60*898184e3Ssthen 61*898184e3Ssthen package 텟Ṱ::Ḏ; use mro 'dfs'; 62*898184e3Ssthen use base qw/텟Ṱ::ᐊ 텟Ṱ::ḅ 텟Ṱ::ȼ/; 63*898184e3Ssthen 64*898184e3Ssthen package 텟Ṱ::Ӭ; use mro 'dfs'; 65*898184e3Ssthen use base qw/텟Ṱ::Ḏ/; 66*898184e3Ssthen 67*898184e3Ssthen package 텟Ṱ::Ḟ; use mro 'dfs'; 68*898184e3Ssthen use base qw/텟Ṱ::Ӭ/; 69*898184e3Ssthen 70*898184e3Ssthen package 텟Ṱ::ḡ; use mro 'dfs'; 71*898184e3Ssthen use base qw/텟Ṱ::Ḏ/; 72*898184e3Ssthen 73*898184e3Ssthen package 텟Ṱ::Ḣ; use mro 'dfs'; 74*898184e3Ssthen use base qw/텟Ṱ::ḡ/; 75*898184e3Ssthen 76*898184e3Ssthen package 텟Ṱ::ᶦ; use mro 'dfs'; 77*898184e3Ssthen use base qw/텟Ṱ::Ḣ 텟Ṱ::Ḟ/; 78*898184e3Ssthen 79*898184e3Ssthen package 텟Ṱ::J; use mro 'dfs'; 80*898184e3Ssthen use base qw/텟Ṱ::Ḟ/; 81*898184e3Ssthen 82*898184e3Ssthen package 텟Ṱ::Ḵ; use mro 'dfs'; 83*898184e3Ssthen use base qw/텟Ṱ::J 텟Ṱ::ᶦ/; 84*898184e3Ssthen} 85*898184e3Ssthen 86*898184e3Ssthenok(eq_array( 87*898184e3Ssthen mro::get_linear_isa('텟Ṱ::ᐊ'), 88*898184e3Ssthen [ qw(텟Ṱ::ᐊ) ] 89*898184e3Ssthen), '... got the right DFS merge order for 텟Ṱ::ᐊ'); 90*898184e3Ssthen 91*898184e3Ssthenok(eq_array( 92*898184e3Ssthen mro::get_linear_isa('텟Ṱ::ḅ'), 93*898184e3Ssthen [ qw(텟Ṱ::ḅ) ] 94*898184e3Ssthen), '... got the right DFS merge order for 텟Ṱ::ḅ'); 95*898184e3Ssthen 96*898184e3Ssthenok(eq_array( 97*898184e3Ssthen mro::get_linear_isa('텟Ṱ::ȼ'), 98*898184e3Ssthen [ qw(텟Ṱ::ȼ) ] 99*898184e3Ssthen), '... got the right DFS merge order for 텟Ṱ::ȼ'); 100*898184e3Ssthen 101*898184e3Ssthenok(eq_array( 102*898184e3Ssthen mro::get_linear_isa('텟Ṱ::Ḏ'), 103*898184e3Ssthen [ qw(텟Ṱ::Ḏ 텟Ṱ::ᐊ 텟Ṱ::ḅ 텟Ṱ::ȼ) ] 104*898184e3Ssthen), '... got the right DFS merge order for 텟Ṱ::Ḏ'); 105*898184e3Ssthen 106*898184e3Ssthenok(eq_array( 107*898184e3Ssthen mro::get_linear_isa('텟Ṱ::Ӭ'), 108*898184e3Ssthen [ qw(텟Ṱ::Ӭ 텟Ṱ::Ḏ 텟Ṱ::ᐊ 텟Ṱ::ḅ 텟Ṱ::ȼ) ] 109*898184e3Ssthen), '... got the right DFS merge order for 텟Ṱ::Ӭ'); 110*898184e3Ssthen 111*898184e3Ssthenok(eq_array( 112*898184e3Ssthen mro::get_linear_isa('텟Ṱ::Ḟ'), 113*898184e3Ssthen [ qw(텟Ṱ::Ḟ 텟Ṱ::Ӭ 텟Ṱ::Ḏ 텟Ṱ::ᐊ 텟Ṱ::ḅ 텟Ṱ::ȼ) ] 114*898184e3Ssthen), '... got the right DFS merge order for 텟Ṱ::Ḟ'); 115*898184e3Ssthen 116*898184e3Ssthenok(eq_array( 117*898184e3Ssthen mro::get_linear_isa('텟Ṱ::ḡ'), 118*898184e3Ssthen [ qw(텟Ṱ::ḡ 텟Ṱ::Ḏ 텟Ṱ::ᐊ 텟Ṱ::ḅ 텟Ṱ::ȼ) ] 119*898184e3Ssthen), '... got the right DFS merge order for 텟Ṱ::ḡ'); 120*898184e3Ssthen 121*898184e3Ssthenok(eq_array( 122*898184e3Ssthen mro::get_linear_isa('텟Ṱ::Ḣ'), 123*898184e3Ssthen [ qw(텟Ṱ::Ḣ 텟Ṱ::ḡ 텟Ṱ::Ḏ 텟Ṱ::ᐊ 텟Ṱ::ḅ 텟Ṱ::ȼ) ] 124*898184e3Ssthen), '... got the right DFS merge order for 텟Ṱ::Ḣ'); 125*898184e3Ssthen 126*898184e3Ssthenok(eq_array( 127*898184e3Ssthen mro::get_linear_isa('텟Ṱ::ᶦ'), 128*898184e3Ssthen [ qw(텟Ṱ::ᶦ 텟Ṱ::Ḣ 텟Ṱ::ḡ 텟Ṱ::Ḏ 텟Ṱ::ᐊ 텟Ṱ::ḅ 텟Ṱ::ȼ 텟Ṱ::Ḟ 텟Ṱ::Ӭ) ] 129*898184e3Ssthen), '... got the right DFS merge order for 텟Ṱ::ᶦ'); 130*898184e3Ssthen 131*898184e3Ssthenok(eq_array( 132*898184e3Ssthen mro::get_linear_isa('텟Ṱ::J'), 133*898184e3Ssthen [ qw(텟Ṱ::J 텟Ṱ::Ḟ 텟Ṱ::Ӭ 텟Ṱ::Ḏ 텟Ṱ::ᐊ 텟Ṱ::ḅ 텟Ṱ::ȼ) ] 134*898184e3Ssthen), '... got the right DFS merge order for 텟Ṱ::J'); 135*898184e3Ssthen 136*898184e3Ssthenok(eq_array( 137*898184e3Ssthen mro::get_linear_isa('텟Ṱ::Ḵ'), 138*898184e3Ssthen [ qw(텟Ṱ::Ḵ 텟Ṱ::J 텟Ṱ::Ḟ 텟Ṱ::Ӭ 텟Ṱ::Ḏ 텟Ṱ::ᐊ 텟Ṱ::ḅ 텟Ṱ::ȼ 텟Ṱ::ᶦ 텟Ṱ::Ḣ 텟Ṱ::ḡ) ] 139*898184e3Ssthen), '... got the right DFS merge order for 텟Ṱ::Ḵ'); 140