1#!./perl 2 3use strict; 4use warnings; 5use utf8; 6use open qw( :utf8 :std ); 7 8require q(./test.pl); plan(tests => 11); 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 'dfs'; 56 57 package 텟Ṱ::ḅ; use mro 'dfs'; 58 59 package 텟Ṱ::ȼ; use mro 'dfs'; 60 61 package 텟Ṱ::Ḏ; use mro 'dfs'; 62 use base qw/텟Ṱ::ᐊ 텟Ṱ::ḅ 텟Ṱ::ȼ/; 63 64 package 텟Ṱ::Ӭ; use mro 'dfs'; 65 use base qw/텟Ṱ::Ḏ/; 66 67 package 텟Ṱ::Ḟ; use mro 'dfs'; 68 use base qw/텟Ṱ::Ӭ/; 69 70 package 텟Ṱ::ḡ; use mro 'dfs'; 71 use base qw/텟Ṱ::Ḏ/; 72 73 package 텟Ṱ::Ḣ; use mro 'dfs'; 74 use base qw/텟Ṱ::ḡ/; 75 76 package 텟Ṱ::ᶦ; use mro 'dfs'; 77 use base qw/텟Ṱ::Ḣ 텟Ṱ::Ḟ/; 78 79 package 텟Ṱ::J; use mro 'dfs'; 80 use base qw/텟Ṱ::Ḟ/; 81 82 package 텟Ṱ::Ḵ; use mro 'dfs'; 83 use base qw/텟Ṱ::J 텟Ṱ::ᶦ/; 84} 85 86ok(eq_array( 87 mro::get_linear_isa('텟Ṱ::ᐊ'), 88 [ qw(텟Ṱ::ᐊ) ] 89), '... got the right DFS merge order for 텟Ṱ::ᐊ'); 90 91ok(eq_array( 92 mro::get_linear_isa('텟Ṱ::ḅ'), 93 [ qw(텟Ṱ::ḅ) ] 94), '... got the right DFS merge order for 텟Ṱ::ḅ'); 95 96ok(eq_array( 97 mro::get_linear_isa('텟Ṱ::ȼ'), 98 [ qw(텟Ṱ::ȼ) ] 99), '... got the right DFS merge order for 텟Ṱ::ȼ'); 100 101ok(eq_array( 102 mro::get_linear_isa('텟Ṱ::Ḏ'), 103 [ qw(텟Ṱ::Ḏ 텟Ṱ::ᐊ 텟Ṱ::ḅ 텟Ṱ::ȼ) ] 104), '... got the right DFS merge order for 텟Ṱ::Ḏ'); 105 106ok(eq_array( 107 mro::get_linear_isa('텟Ṱ::Ӭ'), 108 [ qw(텟Ṱ::Ӭ 텟Ṱ::Ḏ 텟Ṱ::ᐊ 텟Ṱ::ḅ 텟Ṱ::ȼ) ] 109), '... got the right DFS merge order for 텟Ṱ::Ӭ'); 110 111ok(eq_array( 112 mro::get_linear_isa('텟Ṱ::Ḟ'), 113 [ qw(텟Ṱ::Ḟ 텟Ṱ::Ӭ 텟Ṱ::Ḏ 텟Ṱ::ᐊ 텟Ṱ::ḅ 텟Ṱ::ȼ) ] 114), '... got the right DFS merge order for 텟Ṱ::Ḟ'); 115 116ok(eq_array( 117 mro::get_linear_isa('텟Ṱ::ḡ'), 118 [ qw(텟Ṱ::ḡ 텟Ṱ::Ḏ 텟Ṱ::ᐊ 텟Ṱ::ḅ 텟Ṱ::ȼ) ] 119), '... got the right DFS merge order for 텟Ṱ::ḡ'); 120 121ok(eq_array( 122 mro::get_linear_isa('텟Ṱ::Ḣ'), 123 [ qw(텟Ṱ::Ḣ 텟Ṱ::ḡ 텟Ṱ::Ḏ 텟Ṱ::ᐊ 텟Ṱ::ḅ 텟Ṱ::ȼ) ] 124), '... got the right DFS merge order for 텟Ṱ::Ḣ'); 125 126ok(eq_array( 127 mro::get_linear_isa('텟Ṱ::ᶦ'), 128 [ qw(텟Ṱ::ᶦ 텟Ṱ::Ḣ 텟Ṱ::ḡ 텟Ṱ::Ḏ 텟Ṱ::ᐊ 텟Ṱ::ḅ 텟Ṱ::ȼ 텟Ṱ::Ḟ 텟Ṱ::Ӭ) ] 129), '... got the right DFS merge order for 텟Ṱ::ᶦ'); 130 131ok(eq_array( 132 mro::get_linear_isa('텟Ṱ::J'), 133 [ qw(텟Ṱ::J 텟Ṱ::Ḟ 텟Ṱ::Ӭ 텟Ṱ::Ḏ 텟Ṱ::ᐊ 텟Ṱ::ḅ 텟Ṱ::ȼ) ] 134), '... got the right DFS merge order for 텟Ṱ::J'); 135 136ok(eq_array( 137 mro::get_linear_isa('텟Ṱ::Ḵ'), 138 [ qw(텟Ṱ::Ḵ 텟Ṱ::J 텟Ṱ::Ḟ 텟Ṱ::Ӭ 텟Ṱ::Ḏ 텟Ṱ::ᐊ 텟Ṱ::ḅ 텟Ṱ::ȼ 텟Ṱ::ᶦ 텟Ṱ::Ḣ 텟Ṱ::ḡ) ] 139), '... got the right DFS merge order for 텟Ṱ::Ḵ'); 140