Algorithm-SkipList

 view release on metacpan or  search on metacpan

t/20-heavy.t  view on Meta::CPAN

#-*- mode: perl;-*-

package main;

use strict;
use warnings;

# use Pod::Coverage package => 'Algorithm::SkipList';

# These tests are redundant, but they are useful for "heavy" testing
# to find rare errors (since this is a non-deterministic algorithm)
# and for some informal benchmark comparisons.

# For "heavy" testing, change size to a larger value (100 or 1,000 or 10,000).

use constant SIZE => 20;

use Test::More tests => 6+(53*SIZE);

use Test::Warn;

use_ok("Algorithm::SkipList");

ok($Algorithm::SkipList::VERSION >= 1.02);

my @Keys = ();
my $Cnt  = SIZE;

my $Stuff = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";

sub random_stuff {
  my $len ||= 8;
  my $thing = "";
  for(1..$len) {
    $thing .= substr($Stuff, int(rand(length($Stuff))),1);
  }
  return $thing;
}

my %Hash  = ();
my %Bogus = ();
my $List  = new Algorithm::SkipList;

{
  no warnings;
  ok(!defined $List->first_key);
}

foreach (1..SIZE) {
  my $k;
  do {
    $k = random_stuff();
  } while (exists $Bogus{ $k });

  my $v = random_stuff();

  $Hash{ $k } = $v;

  my $a; # alternate value
  do {
    $a = random_stuff();
  } while ($a eq $v);

  my $x;
  do {
    $x = random_stuff();
  } while (exists $Hash{ $v });

  $Bogus{ $x } = $a;

  ok( $List->list->key_cmp($k) == -1 );
  warnings_are {
    ok( !defined $List->list->key );
  } {carped => "this method should never be run"}, "header accessor warning";

  warnings_are {
    ok( !defined $List->list->value );
  } {carped => "this method should never be run"}, "header accessor warning";

  warnings_are {
    $List->list->value($a);
  } {carped => "this method should never be run"}, "header accessor warning";

  warnings_are {
    ok( !defined $List->list->value );
  } {carped => "this method should never be run"}, "header accessor warning";

#   ok( $Algorithm::SkipList::NULL->key_cmp($k) == 1 );
#   ok( !defined $Algorithm::SkipList::NULL->key );
#   ok( !defined $Algorithm::SkipList::NULL->value );
#   $Algorithm::SkipList::NULL->value($a);
#   ok( !defined $Algorithm::SkipList::NULL->value );
#   ok( $Algorithm::SkipList::NULL->level == 0 );
#   ok( !defined $Algorithm::SkipList::NULL->header );



( run in 0.709 second using v1.01-cache-2.11-cpan-140bd7fdf52 )