AVLTree

 view release on metacpan or  search on metacpan

t/01-numbers.t  view on Meta::CPAN

#!perl -T
use 5.008;
use strict;
use warnings;
use Test::More;

plan tests => 28;

use AVLTree;

# test AVL tree with numbers

sub cmp_f {
  my ($i1, $i2) = @_;

  return $i1<$i2?-1:($i1>$i2)?1:0;
}

my $tree = AVLTree->new(\&cmp_f);
isa_ok($tree, "AVLTree");
is($tree->size(), 0, "Empty tree upon construction");

map { ok($tree->insert($_), "Insert item") } qw/10 20 30 40 50 25/;
is($tree->size(), 6, "Tree size after insertion");

ok(!$tree->find(), "No query");
ok(!$tree->find(undef), "Undefined query");

my $query = 30;
my $result = $tree->find($query);
ok($result, "Item found");

ok(!$tree->find(18), "Item not found");

ok(!$tree->remove(1), "Non existent item not removed");
is($tree->size(), 6, "Tree size preserved after unsuccessful removal");
ok($tree->remove(20), "Existing item removed");
ok(!$tree->find(20), "Item removed not found");
is($tree->size(), 5, "Tree size preserved after unsuccessful removal");

# test traversal
my $item = $tree->first;
is($item, 10, 'First item');
my @ids = qw/25 30 40 50/;
while ($item = $tree->next()) {
  is($item, shift @ids, 'Next item');
}

$item = $tree->last;
is($item, 50, 'Last item');
@ids = qw/40 30 25 10/;
while ($item = $tree->prev) {
  is($item, shift @ids, 'Prev item');
}

diag( "Testing AVLTree $AVLTree::VERSION, Perl $], $^X" );



( run in 2.453 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )