The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use Test::More tests => 13;
use List::Vectorize;
use constant {EPS => 1e-6};
use strict;

BEGIN {
	use_ok("Statistics::Multtest", qw(:all));
}

my $p1 = [0.0455565,
          0.5281055,
		  0.8924190,
		  0.5514350,
		  0.4566147,
		  0.9568333,
		  0.4533342,
		  0.6775706,
		  0.5726334,
		  0.1029247];

my $compare;
$compare = mapply( bonferroni($p1), [0.455565, 1, 1, 1, 1, 1, 1, 1, 1, 1],
                   sub { (abs($_[0] - $_[1]) < EPS) + 0 } );
is_deeply($compare, rep(1, 10));

$compare = mapply( holm($p1), [0.455565, 1, 1, 1, 1, 1, 1, 1, 1, 0.9263221],
                   sub { (abs($_[0] - $_[1]) < EPS) + 0 } );
is_deeply($compare, rep(1, 10));

$compare = mapply( hommel($p1), [0.455565, 0.9568333, 0.9568333, 0.9568333, 0.9568333, 0.9568333, 0.9568333, 0.9568333, 0.9568333, 0.8589501],
                   sub { (abs($_[0] - $_[1]) < EPS) + 0 } );
is_deeply($compare, rep(1, 10));

$compare = mapply( hochberg($p1), [0.455565, 0.9568333, 0.9568333, 0.9568333, 0.9568333, 0.9568333, 0.9568333, 0.9568333, 0.9568333, 0.9263221],
                   sub { (abs($_[0] - $_[1]) < EPS) + 0 } );
is_deeply($compare, rep(1, 10));

$compare = mapply( BH($p1), [0.455565, 0.8180477, 0.9568333, 0.8180477, 0.8180477, 0.9568333, 0.8180477, 0.8469633, 0.8180477, 0.5146234],
                   sub { (abs($_[0] - $_[1]) < EPS) + 0 } );
is_deeply($compare, rep(1, 10));

$compare = mapply( BY($p1), [1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
                   sub { (abs($_[0] - $_[1]) < EPS) + 0 } );
is_deeply($compare, rep(1, 10));

my $p2 = {x1 => 0.07675929,
          x2 => 0.15053771,
          x3 => 0.37055800,
		  x4 => 0.17876729,
          x5 => 0.81925688,
		  x6 => 0.01817646,
		  x7 => 0.34618198,
		  x8 => 0.74689182,
		  x9 => 0.06483379,
		  x10 => 0.47162777};

my $adjp;
$adjp = bonferroni($p2);
$compare = mapply( [$adjp->{x1}, $adjp->{x2}, $adjp->{x3}, $adjp->{x4}, $adjp->{x5}, $adjp->{x6}, $adjp->{x7}, $adjp->{x8}, $adjp->{x9}, $adjp->{x10}],
                   [0.7675929, 1.0000000, 1.0000000, 1.0000000, 1.0000000, 0.1817646, 1.0000000, 1.0000000, 0.6483379, 1.0000000],
                   sub { (abs($_[0] - $_[1]) < EPS) + 0 } );
is_deeply($compare, rep(1, 10));

$adjp = holm($p2);
$compare = mapply( [$adjp->{x1}, $adjp->{x2}, $adjp->{x3}, $adjp->{x4}, $adjp->{x5}, $adjp->{x6}, $adjp->{x7}, $adjp->{x8}, $adjp->{x9}, $adjp->{x10}],
                   [0.6140743, 1.0000000, 1.0000000, 1.0000000, 1.0000000, 0.1817646, 1.0000000, 1.0000000, 0.5835041, 1.0000000],
                   sub { (abs($_[0] - $_[1]) < EPS) + 0 } );
is_deeply($compare, rep(1, 10));

$adjp = hommel($p2);
$compare = mapply( [$adjp->{x1}, $adjp->{x2}, $adjp->{x3}, $adjp->{x4}, $adjp->{x5}, $adjp->{x6}, $adjp->{x7}, $adjp->{x8}, $adjp->{x9}, $adjp->{x10}],
                   [0.5373151, 0.7526886, 0.8192569, 0.7860463, 0.8192569, 0.1817646, 0.8192569, 0.8192569, 0.4767128, 0.8192569],
                   sub { (abs($_[0] - $_[1]) < EPS) + 0 } );
is_deeply($compare, rep(1, 10));

$adjp = hochberg($p2);
$compare = mapply( [$adjp->{x1}, $adjp->{x2}, $adjp->{x3}, $adjp->{x4}, $adjp->{x5}, $adjp->{x6}, $adjp->{x7}, $adjp->{x8}, $adjp->{x9}, $adjp->{x10}],
                   [0.6140743, 0.8192569, 0.8192569, 0.8192569, 0.8192569, 0.1817646, 0.8192569, 0.8192569, 0.5835041, 0.8192569],
                   sub { (abs($_[0] - $_[1]) < EPS) + 0 } );
is_deeply($compare, rep(1, 10));

$adjp = BH($p2);
$compare = mapply( [$adjp->{x1}, $adjp->{x2}, $adjp->{x3}, $adjp->{x4}, $adjp->{x5}, $adjp->{x6}, $adjp->{x7}, $adjp->{x8}, $adjp->{x9}, $adjp->{x10}],
                   [0.2558643, 0.3575346, 0.5293686, 0.3575346, 0.8192569, 0.1817646, 0.5293686, 0.8192569, 0.2558643, 0.5895347],
                   sub { (abs($_[0] - $_[1]) < EPS) + 0 } );
is_deeply($compare, rep(1, 10));

$adjp = BY($p2);
$compare = mapply( [$adjp->{x1}, $adjp->{x2}, $adjp->{x3}, $adjp->{x4}, $adjp->{x5}, $adjp->{x6}, $adjp->{x7}, $adjp->{x8}, $adjp->{x9}, $adjp->{x10}],
                   [0.7494184, 1.0000000, 1.0000000, 1.0000000, 1.0000000, 0.5323826, 1.0000000, 1.0000000, 0.7494184, 1.0000000],
                   sub { (abs($_[0] - $_[1]) < EPS) + 0 } );
is_deeply($compare, rep(1, 10));