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 tests => 6;
use Statistics::Benford;

{
    my $stats = Statistics::Benford->new;
    my %freq = map {$_ => 99} (1 .. 9);

    my $diff = sprintf "%.3f", 0 + $stats->diff(%freq);
    cmp_ok($diff, '==', 0.537, 'scalar diff: 10, 0, 1');

    my @e = qw(-0.190 -0.065 -0.014 0.014 0.032 0.044 0.053 0.060 0.065);
    my %e = map { $_ => $e[ $_ -1 ] } (1 .. 9);

    my %d = $stats->diff(%freq);
    while (my ($k, $v) = each %d) {
        $d{$k} = sprintf "%.3f", $v;
    }

    is_deeply(\%d, \%e ,'list diff: 10, 0, 1');
}

{
    my $stats = Statistics::Benford->new(10, 1, 1);
    my %freq = map {$_ => 99} (0 .. 9);

    my $diff = sprintf "%.3f", 0 + $stats->diff(%freq);
    cmp_ok($diff, '==', 0.094, 'scalar diff: 10, 1, 1');

    my @e = qw(
        -0.020 -0.014 -0.009 -0.004 -0.000 0.003 0.007 0.010 0.012 0.015
   );
    my %e = map { $_ => $e[ $_ ] } (0 .. 9);

    my %d = $stats->diff(%freq);
    while (my ($k, $v) = each %d) {
        $d{$k} = sprintf "%.3f", $v;
    }

    is_deeply(\%d, \%e ,'list diff: 10, 1, 1');
}

{
    my $stats = Statistics::Benford->new(10, 0, 2);
    my %freq = map {$_ => 99} (10 .. 99);

    my $diff = sprintf "%.3f", 0 + $stats->diff(%freq);
    cmp_ok($diff, '==', 0.538, 'scalar diff: 10, 0, 2');

    my @e = qw(
        -0.030 -0.027 -0.024 -0.021 -0.019 -0.017 -0.015 -0.014 -0.012 -0.011
        -0.010 -0.009 -0.008 -0.007 -0.007 -0.006 -0.005 -0.005 -0.004 -0.004
        -0.003 -0.003 -0.002 -0.002 -0.001 -0.001 -0.001 -0.000 -0.000 0.000
        0.000 0.001 0.001 0.001 0.001 0.002 0.002 0.002 0.002 0.002 0.003
        0.003 0.003 0.003 0.003 0.003 0.003 0.004 0.004 0.004 0.004 0.004
        0.004 0.004 0.004 0.004 0.005 0.005 0.005 0.005 0.005 0.005 0.005
        0.005 0.005 0.005 0.005 0.006 0.006 0.006 0.006 0.006 0.006 0.006
        0.006 0.006 0.006 0.006 0.006 0.006 0.006 0.006 0.006 0.006 0.007
        0.007 0.007 0.007 0.007 0.007
   );
    my %e = map { $_ => $e[ $_ - 10 ] } (10 .. 99);

    my %d = $stats->diff(%freq);
    while (my ($k, $v) = each %d) {
        $d{$k} = sprintf "%.3f", $v;
    }

    is_deeply(\%d, \%e ,'list diff: 10, 0, 2');
}