The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
use strict;
use warnings;
use Test::More tests => 8;
use constant EPS => 1e-2;

BEGIN { use_ok('Statistics::Zed') };

my $zed = Statistics::Zed->new(ccorr => 1, tails => 2,);

my %ref = (
	z_value => 1.625,
	p_value => 0.10416,
);

my %res = ();

# supports given params, unreferenced:
eval { ($res{'z_value'}, $res{'p_value'}) = $zed->score(
	observed => 12,
    expected => 5,
    variance => 16,
);};
ok(!$@, $@);

foreach (qw/z_value p_value/) {
    ok(defined $res{$_} );
    ok(equal($res{$_}, $ref{$_}), "$_  $res{$_} != $ref{$_}");
}

# supports unnamed arg to z2p:
$res{'p_value'} = $zed->z2p($ref{'z_value'});
ok(equal($res{'p_value'}, $ref{'p_value'}), "p_value  $res{'p_value'} != $ref{'p_value'}");

# supports named arg to z2p:
$res{'p_value'} = $zed->z2p(value => $ref{'z_value'});
ok(equal($res{'p_value'}, $ref{'p_value'}), "p_value  $res{'p_value'} != $ref{'p_value'}");

sub equal {
    return 0 if ! defined $_[0] || ! defined $_[1];
    return 1 if $_[0] + EPS > $_[1] and $_[0] - EPS < $_[1];
    return 0;
}
1;