Algorithm-SkipList
view release on metacpan or search on metacpan
t/02-merge_append.t view on Meta::CPAN
my ($k1,$v1) = $g->greatest;
my ($k2,$v2) = $f->greatest;
ok($k1 == $k2);
ok($v1 == $v2);
}
my $z = $f->copy;
ok($z->size == $f->size);
# if ($z->size != $f->size) {
# $z->_debug;
# $f->_debug;
# $g->_debug;
# die;
# }
foreach my $i (-2..10) {
ok($f->find($i) == (($i%2)?$i:-$i) ), if ($i);
ok($z->find($i) == (($i%2)?$i:-$i) ), if ($i);
}
$z->clear;
ok($z->size == 0);
$z->append( $f->copy );
ok($z->size == $f->size);
foreach my $i (-2..10) {
ok($z->find($i) == (($i%2)?$i:-$i) ), if ($i);
}
{
my @keys = $g->keys;
ok(scalar @keys == $g->size);
foreach my $i (1..10) {
ok($i == $keys[$i-1]); }
ok(scalar $g->first_key == shift @keys);
while (@keys) { ok($g->next_key == shift @keys); }
my @vals = $g->values;
ok(scalar @vals == $g->size);
foreach my $i (1..10) {
ok($g->find($i) == $vals[$i-1]); }
}
{
my $g = new Algorithm::SkipList( node_class => 'NumericNode' );
foreach (20..29) {
$g->insert( $_, 1+$g->size );
}
my $count = $g->size;
foreach my $key (20..29) {
ok( defined $g->find($key), "verify key in g" );
my $h = $g->copy( $key );
ok( defined $h, "verify h is defined" );
ok( $h->size == $count, "verify size of h" );
ok( ($h->least)[0] == $key );
ok( ($h->least)[1] == $g->find($key) );
if ($key <= 28) {
my $h = $g->copy( $key, undef, 28 );
ok( defined $h, "verify h is defined" );
ok( $h->size == ($count-1), "verify size of h" );
ok( ($h->least)[0] == $key );
ok( ($h->least)[1] == $g->find($key) );
}
$count--;
}
my $h = $g->copy(19);
ok(! defined $h);
$h = $g->copy(30);
ok(! defined $h);
}
{
foreach my $i (20..29) {
my $g = new Algorithm::SkipList( node_class => 'NumericNode' );
foreach (20..29) {
$g->insert( $_, 1+$g->size );
}
my $size = $g->size;
my $h = $g->truncate($i);
ok(defined $h);
ok($size == ($h->size + $g->size));
my $gn = $g->_greatest_node;
my $hn = $h->_first_node;
ok( $hn->key_cmp($i) == 0 ), if ($h->size);
unless ($gn->isa("Algorithm::SkipList::Header")) {
ok( $hn->key_cmp($gn->key) == 1 ), if ($gn->key);
}
unless ($hn->isa("Algorithm::SkipList::Header")) {
ok( $gn->key_cmp($hn->key) == -1 ), if ($hn->key);
}
}
}
( run in 0.502 second using v1.01-cache-2.11-cpan-13bb782fe5a )