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

use strict;
use warnings;

use_ok('Math::TotalBuilder');

my %coins = (
  half    =>    50,
  quarter =>    25,
  dime    =>    10,
  nickel  =>     5,
  penny   =>     1
);

ok(build(\%coins, 982),   "can build a simple total");
ok(! build(\%coins, 0),   "no units in a zero sum");

ok(
  eq_hash( { build(\%coins, 10000, sub { nothing => 1 }) }, { nothing => 1 }),
  "the cheating builder: 1 nothing"
);

my $contrived = [
	sub { nonsense => 2, _remainder => 2 },
	sub { fooferal => 1, _remainder => 3 },
	sub { fakeunit => 9, _remainder => 1 },
	sub { tuppence => 6, _remainder => 8 }
];

ok(
  eq_hash(
		{ build(\%coins, 10, $contrived) },
		{ fakeunit => 9, _remainder => 1 }
	),
  "contrived coderef list"
);

eval { build(\%coins, 10, \%coins) };
ok($@, "third arg to build must be code or array ref");