#-*- mode: perl;-*-
package main;
use strict;
use Test::More tests => 253;
use Algorithm::SkipList 0.70;
ok( Algorithm::SkipList::MIN_LEVEL == 2 );
ok( Algorithm::SkipList::MAX_LEVEL == 32 );
my $List;
undef $List;
eval {
$List = new Algorithm::SkipList( max_level => 33 );
};
ok( !defined $List );
undef $List;
eval {
$List = new Algorithm::SkipList( max_level => 1 );
};
ok( !defined $List );
undef $List;
eval {
$List = new Algorithm::SkipList( max_level => 0 );
};
ok( !defined $List );
undef $List;
eval {
$List = new Algorithm::SkipList( max_level => -1 );
};
ok( !defined $List );
for my $level (2..32) {
undef $List;
eval {
$List = new Algorithm::SkipList( max_level => $level );
};
ok( defined $List );
ok( $List->max_level == $level );
my $size = ($level < 10) ? (1<<$level) : (1<<10);
for (1..$size) { $List->insert($_); }
ok( $List->max_level == $level );
ok( $List->level == $List->list->level, "test level() method" );
# This doesn't prove there's no error (since it's
# non-deterministic), but it's worth checking anyway.
ok( $List->list->level <= $level );
$List->max_level( $List->list->level );
ok( $List->list->level == $List->max_level );
eval { $List->max_level( $List->list->level-1); };
ok( $List->list->level == $List->max_level );
if ($level > 2) {
eval { $List->max_level($level-1); };
ok(
($List->list->level == $level) ?
$List->max_level != ($level-1) :
$List->max_level == ($level-1)
);
}
}