Acme-Dice
view release on metacpan or search on metacpan
t/10_roll_dice.t view on Meta::CPAN
# -*- perl -*-
# t/10_roll_dice.t - check operation of the roll_dice function
use Test::More tests => 7;
BEGIN { use_ok( 'Acme::Dice', qw(roll_dice) ); }
subtest 'basic parameter tests' => sub {
plan tests => 7;
# default roll should return a single d6
my @rolls = roll_dice();
ok( @rolls == 1, 'default roll has one die' );
ok( $rolls[0] >= 1 && $rolls[0] <= 6, 'default consistent with a d6' );
# check if undefined parameters are caught
for (qw(dice sides favor bias)) {
my $roll = eval { roll_dice( $_ => undef ); };
ok( !defined($roll), "dies with undefined param: $_" );
}
# and be sure unknown params throw an error
my $roll_u = eval { roll_dice( foo => 'bar' ); };
ok( !defined($roll_u), 'dies with unknown parameter' );
};
subtest 'dice parameter values' => sub {
plan tests => 15;
for ( 1, 2, 3, 5, 100 ) {
my $roll = roll_dice( dice => $_, sides => 1 );
ok( $roll == $_, "good dice param: $_" );
my @rolls = roll_dice( dice => $_ );
ok( @rolls == $_, "$_ elements returned in list context" );
}
for ( -1, -0.5, 0, 1.5, 101 ) {
my $roll = eval { roll_dice( dice => $_ ); };
ok( !defined($roll), "dies with bad dice param: $_" );
}
};
subtest 'sides parameter values' => sub {
plan tests => 12;
for ( 1, 2, 4, 6, 8, 10, 12, 100 ) {
my $roll = roll_dice( sides => $_ );
ok( defined($roll), "good sides param: $_" );
}
for ( -1, -0.5, 0, 0.5 ) {
my $roll = eval { roll_dice( sides => $_ ); };
ok( !defined($roll), "dies with bad sides param: $_" );
}
};
subtest 'favor parameter values' => sub {
plan tests => 15;
for ( -1, -0.5, 1.5 ) {
my $roll = eval { roll_dice( favor => $_ ); };
ok( !defined($roll), "dies with bad favor param: $_" );
}
for my $sides ( 1 .. 12 ) {
my $favor = $sides + 1;
my $roll = eval { roll_dice( sides => $sides, favor => $favor ); };
ok( !defined($roll), "dies with bad favor: $favor sides => $sides" );
}
};
subtest 'bias parameter values' => sub {
plan tests => 4;
( run in 3.138 seconds using v1.01-cache-2.11-cpan-0bb4e1dffa6 )