The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
# Before `make install' is performed this script should be runnable with
# `make test'. After `make install' it should work as `perl test.pl'

###################################################################################################
use strict;

use File::Compare;

use Test::More tests => 15;
use Test::Exception;

use Shatterproof;

my $SD;
my $mean;
my $expected_SD;
my $expected_mean;

my $delta = 1;

my @test_array;
my %test_hash;

dies_ok(sub{Shatterproof::standard_deviation_and_mean(\@test_array,1)}, 'standard_deviation_and_mean-1');
dies_ok(sub{Shatterproof::standard_deviation_and_mean(\@test_array,0)}, 'standard_deviation_and_mean-2');
dies_ok(sub{Shatterproof::standard_deviation_and_mean(\%test_hash,0)}, 'standard_deviation_and_mean-3');
dies_ok(sub{Shatterproof::standard_deviation_and_mean(\%test_hash,1)}, 'standard_deviation_and_mean-4');
dies_ok(sub{Shatterproof::standard_deviation_and_mean(\%test_hash,9)}, 'standard_deviation_and_mean-5');

@test_array = (13,23,12,44,55);
$expected_SD = 17.2116239791601;
$expected_mean = 29.4;

($SD,$mean) = Shatterproof::standard_deviation_and_mean(\@test_array,1);
ok(abs($SD - $expected_SD) < $delta, 'standard_deviation_and_mean-6');
ok(abs($mean - $expected_mean) < $delta, 'standard_deviation_and_mean-7');
dies_ok(sub{Shatterproof::standard_deviation_and_mean(\@test_array,0)}, 'standard_deviation_and_mean-8');

$test_hash{'key1'} = 13;
$test_hash{'key2'} = 23;
$test_hash{'key3'} = 12;
$test_hash{'key4'} = 44;
$test_hash{'key5'} = 55;

($SD,$mean) = Shatterproof::standard_deviation_and_mean(\%test_hash,0);
ok(abs($SD - $expected_SD) < $delta, 'standard_deviation_and_mean-9');
ok(abs($mean - $expected_mean) < $delta, 'standard_deviation_and_mean-10');
dies_ok(sub{Shatterproof::standard_deviation_and_mean(\%test_hash,1)}, 'standard_deviation_and_mean-11');

@test_array = (15,58,69,50,47,73);
$expected_SD = 18.9912260443255;
$expected_mean = 52;

($SD,$mean) = Shatterproof::standard_deviation_and_mean(\@test_array,1);
ok(abs($SD - $expected_SD) < $delta, 'standard_deviation_and_mean-12');
ok(abs($mean - $expected_mean) < $delta, 'standard_deviation_and_mean-13');

$test_hash{'key1'} = 15;
$test_hash{'key2'} = 58;
$test_hash{'key3'} = 69;
$test_hash{'key4'} = 50;
$test_hash{'key5'} = 47;
$test_hash{'key6'} = 73;

($SD,$mean) = Shatterproof::standard_deviation_and_mean(\%test_hash,0);
ok(abs($SD - $expected_SD) < $delta, 'standard_deviation_and_mean-14');
ok(abs($mean - $expected_mean) < $delta, 'standard_deviation_and_mean-15');