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;

# A suite of tests to ensure that the binning behavior works as expected.

use PDL::Graphics::Prima;
use PDL;

# Test edge cases for linear and logarithmic scaling. Note that I don't
# need to worry about sending the dataset object because these routines
# don't rely on the dataset object.

for (-1, 0, 1) {
	# One of the bins will have all of them
	my ($xs, $ys) = bt::Linear(normalize => 0)->(ones(20) * $_);
	is(sum($ys == 20), 1, "For 20 identical entries of $_ with linear binning, we have one nonzero bin")
		or diag("ys were $ys");
	ok($xs->at(0) < $xs->at(-1), "For 20 identical entries of $_ and linear binning, x-bins are properly ordered")
		or diag("xs were $xs");
}
for (0.5, 1, 2) {
	my ($xs, $ys) = bt::Log(normalize => 0)->(ones(20) * $_);
	is(sum($ys == 20), 1, "For 20 identical entries of $_ with log binning, we have one nonzero bin")
		or diag("ys were $ys");
	ok($xs->at(0) < $xs->at(-1), "For 20 identical entries of $_ with log binning, x-bins are properly ordered")
		or diag("xs were $xs");
}

done_testing();