} if (1) { my $test = sub { my($n, $p_rm, $p_div); $n = $_[0]; $p_rm = !!primep_rm($n); $p_div = !!primep_div($n); $p_rm == $p_div or die "error: primality tests don't match: $n"; }; my($n, $r, $l); warn "begin serial tests"; for $n (2 .. 100000) { &$test($n); } warn "begin random tests"; for $l (3 .. 9) { for $r (1 .. 10000) { $n = 2 + int(rand(10**$l)); &$test($n); } } warn "all ok"; } use Benchmark ":all"; if (1) { warn "start benchmarks"; for my $len (3 .. 9) { my($r_rm, $r_div); my $ntries = $len < 8 ? 50_000 : 20_000; $ntries /= 5; my @tries = map { 10**($len - 1) + 1 + 2 * int(rand((10**$len - 10**($len - 1))/2)); } 0 .. $ntries; warn "benchmarking $len digit odd numbers, $ntries in total"; cmpthese(1, { "primep_rm", sub { my $r; $r += primep_rm($_) ? 1 : 0 for @tries; $r_rm = $r; }, "primep_div", sub { my $r; $r += primep_div($_) ? 1 : 0 for @tries; $r_div = $r; }, }); $r_rm == $r_div or die "error: primality tests don't agree in total"; } } __END__