The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!perl -w

use strict;
use Test qw(plan ok);

plan tests => 36;

use PerlBench::Stats qw(calc_stats);

my $res;
$res = calc_stats([]);
ok(!$res);

$res = calc_stats([1]);
ok($res);
ok($res->{avg}, 1);
ok($res->{min}, 1);
ok($res->{med}, 1);
ok($res->{max}, 1);
ok($res->{n}, 1);
ok($res->{stddev}, 0);

$res = calc_stats([1, 1]);
ok($res);
ok($res->{avg}, 1);
ok($res->{min}, 1);
ok($res->{med}, 1);
ok($res->{max}, 1);
ok($res->{n}, 2);
ok($res->{stddev}, 0);

$res = calc_stats([1, 2]);
ok($res);
ok($res->{avg}, 1.5);
ok($res->{min}, 1);
ok($res->{med}, 1.5);
ok($res->{max}, 2);
ok($res->{n}, 2);
ok(is_about($res->{stddev}, 0.5));

$res = calc_stats([5, 6, 8, 9]);
ok($res);
ok($res->{avg}, 7);
ok($res->{min}, 5);
ok($res->{med}, 7);
ok($res->{max}, 9);
ok($res->{n}, 4);
ok(is_about($res->{stddev}, 1.5811));

$res = calc_stats([3, 100, -1]);
ok($res);
ok($res->{avg}, 34);
ok($res->{min}, -1);
ok($res->{med}, 3);
ok($res->{max}, 100);
ok($res->{n}, 3);
ok(is_about($res->{stddev}, 46.6976));

sub is_about {
   my($v, $exp) = @_;
   return abs($v - $exp) < 1e-3;
}