Acme-Dice
view release on metacpan or search on metacpan
lib/Acme/Dice.pm view on Meta::CPAN
push( @rolls, $roll );
$roll_total += $roll;
}
return wantarray ? @rolls : $roll_total;
}
sub roll_craps {
my $raw_args = @_ == 1 ? shift : {@_};
croak "param present but undefined: bias"
if exists( $raw_args->{bias} ) && !defined( $raw_args->{bias} );
my $bias = delete( $raw_args->{bias} ) || 0;
croak "Illegal value for 'bias': $bias" if $bias < 0 || $bias > 100;
croak 'RTFM! Unknown params: ' . join( ', ', keys( %{$raw_args} ) )
if keys( %{$raw_args} );
# hey, this is Acme, remember? you were TOLD not to look inside!
return ( wantarray ? ( 3, 4 ) : 7 ) if rand(100) < 5;
lib/Acme/Dice.pm view on Meta::CPAN
return wantarray ? @rolls : $rolls[0] + $rolls[1];
}
sub _validate_params {
my $raw_args = @_ == 1 ? shift : {@_};
my $args = {};
my @errors;
# put put defaults in place for missing params
# and detect incoming undefined params
for ( keys( %{$defaults} ) ) {
$raw_args->{$_} = $defaults->{$_} if !exists( $raw_args->{$_} );
push( @errors, "param present but undefined: $_" )
unless defined $raw_args->{$_};
$args->{$_} = delete( $raw_args->{$_} );
push( @errors, "$_ must be a non-negative integer: $args->{$_}" )
if defined( $args->{$_} ) && $args->{$_} !~ m/^\d+$/;
}
push( @errors,
'RTFM! Unknown params: ' . join( ', ', keys( %{$raw_args} ) ) )
if keys( %{$raw_args} );
croak join( "\n", @errors ) if @errors;
t/10_roll_dice.t view on Meta::CPAN
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;
t/20_roll_craps.t view on Meta::CPAN
subtest 'basic parameter tests' => sub {
plan tests => 8;
my @rolls = roll_craps();
ok( @rolls == 2, 'default roll has two die' );
ok( $rolls[0] >= 1 && $rolls[0] <= 6, 'default consistent with a d6' );
ok( $rolls[1] >= 1 && $rolls[1] <= 6, 'default consistent with a d6' );
# check if unknown parameters are caught
for (qw(dice sides favor foo)) {
my $roll = eval { roll_craps( $_ => undef ); };
ok( !defined($roll), "dies with unknown param: $_" );
}
# and be sure an undefined param throws an error
my $roll_u = eval { roll_craps( bias => undef ); };
ok( !defined($roll_u), 'dies with undefined bias parameter' );
};
subtest 'bias parameter values' => sub {
plan tests => 2;
for ( -1, 101 ) {
my $roll = eval { roll_craps( bias => $_ ); };
ok( !defined($roll), "dies with bad bias param: $_" );
}
};
( run in 1.568 second using v1.01-cache-2.11-cpan-d80b1682f3f )