use strict; use warnings; use Math::Histogram; use Test::More; use File::Spec; BEGIN { push @INC, -d "t" ? File::Spec->catdir(qw(t lib)) : "lib"; } use Math::Histogram::Test; my $bins = [1.1, 1.35, 1.6, 1.85, 2.1]; my @ax = (Math::Histogram::Axis->new(4, 1.1, 2.1), Math::Histogram::Axis->new($bins)); is(scalar(@ax), 2); isa_ok($ax[0], 'Math::Histogram::Axis'); isa_ok($ax[1], 'Math::Histogram::Axis'); my @desc = qw(fixbin varbin); foreach my $ax (@ax) { my $desc = shift @desc; is($ax->nbins, 4, "$desc: nbins"); my @bad_methods = qw(binsize lower_boundary upper_boundary bin_center); foreach my $dying_method (@bad_methods) { foreach my $ibin (0, 5) { my $res = eval {$ax->$dying_method($ibin); 1}; ok(!$res && $@ =~ /\boutside axis bin range\b/); } } is_approx($ax->min, 1.1, "$desc: min"); is_approx($ax->max, 2.1, "$desc: max"); is_approx($ax->width, $ax->max - $ax->min, "$desc: width"); foreach my $ibin (0..3) { my $lower = $bins->[$ibin]; my $upper = $bins->[$ibin+1]; my $center = 0.5*($upper+$lower); my $binsize = $upper-$lower; is_approx($ax->binsize($ibin+1), $binsize, "$desc, $ibin: binsize"); is_approx($ax->lower_boundary($ibin+1), $lower, "$desc, $ibin: lower bin boundary"); is_approx($ax->upper_boundary($ibin+1), $upper, "$desc, $ibin: upper bin boundary"); is_approx($ax->bin_center($ibin+1), $center, "$desc, $ibin: bin center"); is($ax->find_bin($lower), $ibin+1, "$desc, $ibin: found lower bin boundary"); is($ax->find_bin($center), $ibin+1, "$desc, $ibin: found bin center"); is($ax->find_bin($upper), $ibin+2, "$desc, $ibin: found upper bin boundary"); } } done_testing();