Benchmark-MCE

 view release on metacpan or  search on metacpan

lib/Benchmark/MCE.pm  view on Meta::CPAN

    return $avg, $str;
}

sub _min_max_avg {
    my $arr = shift;
    return (0, 0, 0) unless @$arr;
    return min(@$arr), max(@$arr), sum(@$arr)/scalar(@$arr);
}

sub _avg_stdev {
    my $arr = shift;
    return (0, 0) unless @$arr;
    my $sum = sum(@$arr);
    my $avg = $sum/scalar(@$arr);
    my @sq;
    push @sq, ($avg - $_)**2 for (@$arr);
    my $dev = _min_max_avg(\@sq);
    return $avg, sqrt($dev);
}

# $single = single tail of dist curve outlier, 1 for over (right), -1 for under (left)
sub _drop_outliers {
    my $arr    = shift;
    my $single = shift;
    my ($avg, $stdev) = _avg_stdev($arr);
    my @newarr;
    foreach (@$arr) {
        if ($single) {
            push @newarr, $_ unless $single*($_ - $avg) > 2*$stdev;
        } else {
            push @newarr, $_ unless abs($avg - $_) > 2*$stdev;
        }
    }
    return @newarr;
}

sub _pad {
    my $str = shift;
    my $len = shift || 20;
    return $str." "x($len-length($str));
}

sub _printf {
    printf @_ unless $QUIET;
}

sub _print {
    print @_ unless $QUIET;
}

sub _get_time {
    return $MONO_CLOCK
        ? Time::HiRes::clock_gettime(CLOCK_MONOTONIC)
        : Time::HiRes::time();
}

sub _package_ver {
    my $pkg = __PACKAGE__;
    my $ver = $VERSION;

    my $caller = caller(0);
    for (my $i = 0; $i < 5; $i++) {
        my $caller = caller($i) or last;
        if ($caller eq 'Benchmark::DKbench') {
            $pkg = $caller;
            $ver = eval {$caller->VERSION} || '';
            last;
        }
    }

    return "$pkg v$ver";
}

1;



( run in 1.835 second using v1.01-cache-2.11-cpan-75ffa21a3d4 )