The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;
use Test::More;

use App::LogStats;

test_variance([0], 0);
test_variance([1], 0);
test_variance([0, 1], 0.5);
test_variance([0, 0, 1], qr/^0\.33333/);
test_variance([0, 1, 1], qr/^0\.33333/);
test_variance([0, 1, 2], 1);
test_variance([1, 2, 3], 1);
test_variance([1, 2, 3, 3], qr/^0\.9166/);

done_testing;

sub test_variance {
    my ($list, $expect) = @_;

    my $stats = App::LogStats->new;
    my $r = +{
        0 => +{
            average => App::LogStats::_calc_average($list),
            list    => $list,
        }
    };
    my $result = $stats->_calc_variance(0, $r);

    if (ref($expect) eq 'Regexp') {
        like $result, $expect, "list: @{$r->{0}{list}}";
    }
    else {
        is $result, $expect, "list: @{$r->{0}{list}}";
    }
}