6 use Test::More tests => 25;
9 use Scalar::Util 'isweak';
24 predicate => 'has_parent',
31 predicate => 'has_left',
33 default => sub { BinaryTree->new(parent => $_[0]) },
39 predicate => 'has_right',
41 default => sub { BinaryTree->new(parent => $_[0]) },
44 before 'right', 'left' => sub {
45 my ($self, $tree) = @_;
46 $tree->parent($self) if defined $tree;
50 my $root = BinaryTree->new();
51 isa_ok($root, 'BinaryTree');
53 ok(!$root->has_left, '... no left node yet');
54 ok(!$root->has_right, '... no right node yet');
56 ok(!$root->has_parent, '... no parent for root node');
60 my $left = $root->left;
61 isa_ok($left, 'BinaryTree');
63 is($root->left, $left, '... got the same node (and it is $left)');
64 ok($root->has_left, '... we have a left node now');
66 ok($left->has_parent, '... lefts has a parent');
67 is($left->parent, $root, '... lefts parent is the root');
69 ok(isweak($left->{parent}), '... parent is a weakened ref');
71 ok(!$left->has_left, '... $left no left node yet');
72 ok(!$left->has_right, '... $left no right node yet');
76 my $right = $root->right;
77 isa_ok($right, 'BinaryTree');
79 is($root->right, $right, '... got the same node (and it is $right)');
80 ok($root->has_right, '... we have a right node now');
82 ok($right->has_parent, '... rights has a parent');
83 is($right->parent, $root, '... rights parent is the root');
85 ok(isweak($right->{parent}), '... parent is a weakened ref');
87 my $left_left = $left->left;
88 isa_ok($left_left, 'BinaryTree');
90 ok($left_left->has_parent, '... left does have a parent');
92 is($left_left->parent, $left, '... got a parent node (and it is $left)');
93 ok($left->has_left, '... we have a left node now');
94 is($left->left, $left_left, '... got a left node (and it is $left_left)');
96 ok(isweak($left_left->{parent}), '... parent is a weakened ref');