$| = 1; print "1..3000\n";
no warnings;
use Array::Heap;
srand 0;
my @x = (1..10, map rand, 1..100);
my $err;
my @test = (
sub { push_heap_cmp { $a <=> $b } @x, rand },
sub { push_heap @x, rand },
sub { push_heap_cmp { $a <=> $b } @x, 1 + rand, 3 + rand},
sub { push_heap @x, 1 + rand, 3 + rand},
sub { pop_heap_cmp { $a <=> $b } @x },
sub { pop_heap @x },
sub { splice_heap_cmp { $a <=> $b } @x, int rand @x },
sub { splice_heap @x, int rand @x },
);
sub chk {
for (1 .. $#x) {
if (!($x[$_] > $x[($_ - 1) >> 1])) {
$err = "\$x[$_] ($x[$_]) !> \$x[$_ >> 1] ($x[($_ - 1) >> 1])";
make_heap @x;
}
}
}
make_heap @x;
chk;
for (1..3000) {
undef $err;
my $t = int rand @test;
$test[$t]->();
chk;
print defined $err ? "not " : "", "ok $_ # $t,$err\n";
}