… | |
… | |
3 | no warnings; |
3 | no warnings; |
4 | use Array::Heap; |
4 | use Array::Heap; |
5 | |
5 | |
6 | srand 0; |
6 | srand 0; |
7 | |
7 | |
8 | my $t; |
|
|
9 | my @x = (1..10, map rand, 1..100); |
8 | my @x = (1..10, map rand, 1..100); |
10 | my $err; |
9 | my $err; |
11 | |
10 | |
12 | my @test = ( |
11 | my @test = ( |
13 | sub { push_heap_cmp { $a <=> $b } @x, rand }, |
12 | sub { push_heap_cmp { $a <=> $b } @x, rand }, |
… | |
… | |
21 | ); |
20 | ); |
22 | |
21 | |
23 | sub chk { |
22 | sub chk { |
24 | for (1 .. $#x) { |
23 | for (1 .. $#x) { |
25 | if (!($x[$_] > $x[($_ - 1) >> 1])) { |
24 | if (!($x[$_] > $x[($_ - 1) >> 1])) { |
26 | $err = "($t) \$x[$_] ($x[$_]) !> \$x[$_ >> 1] ($x[($_ - 1) >> 1])\n"; |
25 | $err = "\$x[$_] ($x[$_]) !> \$x[$_ >> 1] ($x[($_ - 1) >> 1])"; |
27 | make_heap @x; |
26 | make_heap @x; |
28 | } |
27 | } |
29 | } |
28 | } |
30 | } |
29 | } |
31 | |
30 | |
32 | make_heap @x; |
31 | make_heap @x; |
33 | chk; |
32 | chk; |
34 | |
33 | |
35 | for (1..3000) { |
34 | for (1..3000) { |
36 | undef $err; |
35 | undef $err; |
37 | $t = int rand @test; |
36 | my $t = int rand @test; |
38 | $test[$t]->(); |
37 | $test[$t]->(); |
39 | chk; |
38 | chk; |
40 | print defined $err ? "not " : "", "ok $_ # $err\n"; |
39 | print defined $err ? "not " : "", "ok $_ # $t,$err\n"; |
41 | } |
40 | } |