#!/usr/bin/perl
use Heap::Fibonacci;
use Heap::Fibonacci::Fast;
use Heap::Binary;
use Heap::Binomial;
use Heap::Elem::Num(NumElem);
use Heap::Simple::XS;
use Benchmark qw/cmpthese/;
sub COUNT() { 100 }
cmpthese(-3, {
xs_fib => sub {
my $z = Heap::Fibonacci::Fast->new();
$z->key_insert(int(rand() * 10000), $_) for (1..COUNT);
$z->extract_top() for (1..COUNT);
undef $z;
},
perl_fib => sub {
my $z = Heap::Fibonacci->new();
$z->add(NumElem(int(rand() * 10000))) for (1..COUNT);
$z->extract_top() for (1..COUNT);
undef $z;
},
perl_bino => sub {
my $z = Heap::Binomial->new();
$z->add(NumElem(int(rand() * 10000))) for (1..COUNT);
$z->extract_top() for (1..COUNT);
undef $z;
},
perl_bin => sub {
my $z = Heap::Binary->new();
$z->add(NumElem(int(rand() * 10000))) for (1..COUNT);
$z->extract_top() for (1..COUNT);
undef $z;
},
xs_simple => sub {
my $z = new Heap::Simple::XS(elements => "Any");
$z->key_insert(int(rand() * 10000), $_) for (1..COUNT);
$z->extract_top() for (1..COUNT);
undef $z;
},
});