1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
|
use Test::More tests => 27;
use strict;
use warnings;
use_ok( 'Tree::RB::Node' );
diag( "Testing Tree::RB::Node $Tree::RB::Node::VERSION" );
foreach my $m (qw[
new
key
val
color
parent
left
right
min
max
successor
predecessor
])
{
can_ok('Tree::RB::Node', $m);
}
my $node = Tree::RB::Node->new('England' => 'London');
# [England: London]
isa_ok( $node, 'Tree::RB::Node' );
is($node->key, 'England', 'key retrieved after new');
is($node->val, 'London', 'value retrieved after new');
$node->key('France');
# [France: London]
is($node->key, 'France', 'key retrieved after set');
$node->val('Paris');
# [France: Paris]
is($node->val, 'Paris', 'value retrieved after set');
$node->color(1);
is($node->color, 1, 'color retrieved after set');
my $left_node = Tree::RB::Node->new('England' => 'London');
$left_node->parent($node);
$node->left($left_node);
# [France: Paris]
# /
# [England: London]
is($node->left, $left_node, 'left retrieved after set');
my $right_node = Tree::RB::Node->new('Hungary' => 'Budapest');
$right_node->parent($node);
$node->right($right_node);
# [France: Paris]
# / \
# [England: London] [Hungary: Budapest]
is($node->right, $right_node, 'right retrieved after set');
my $parent_node = Tree::RB::Node->new('Ireland' => 'Dublin');
$parent_node->left($node);
$node->parent($parent_node);
# [Ireland: Dublin]
# /
# [France: Paris]
# / \
# [England: London] [Hungary: Budapest]
is($node->parent, $parent_node, 'parent retrieved after set');
is($parent_node->min->key, 'England', 'min');
is($node->max->key, 'Hungary', 'max');
is($right_node->successor->key, 'Ireland', 'successor');
is($parent_node->predecessor->key, 'Hungary', 'predecessor');
my $egypt = Tree::RB::Node->new('Egypt' => 'Cairo');
$egypt->parent($left_node);
$left_node->right($egypt);
# [Ireland: Dublin]
# /
# [France: Paris]
# / \
# [England: London] [Hungary: Budapest]
# \
# [Egypt: Cairo]
is($parent_node->leaf->key, 'Egypt', 'leaf');
$parent_node->strip;
is($parent_node->leaf->key, 'Ireland', 'strip');
|