Acme-AXP-Utils
view release on metacpan or search on metacpan
lib/Acme/AXP/Utils.pm view on Meta::CPAN
=head1 EXPORT
=head1 SUBROUTINES/METHODS
=head2 sum
Add a bunch of numbers. Definitely don't multiply them.
=cut
sub sum {
my $tot = 0;
$tot += $_ foreach ( @_ );
return $tot;
}
=head1 AUTHOR
Alex P, C<< <axp-pause at mailinator.com> >>
=head1 BUGS
is( Acme::AXP::Utils::sum( 1, 2, 3 ), 6, 'Sum positive integers' );
is( Acme::AXP::Utils::sum( -1, 4, -7 ), -4, 'Sum positive and negative integers' );
is( Acme::AXP::Utils::sum( 0.3, 5, -1.6 ), 3.7, 'Sum decimals' );
is( Acme::AXP::Utils::sum( '6', '7' ), 13, 'Numbers as strings' );
is( Acme::AXP::Utils::sum( 1 ), 1, 'Single item list' );
is( Acme::AXP::Utils::sum(), 0, 'Zero item list' );
is( no_warnings( \&Acme::AXP::Utils::sum, '3', '6ix', 'one' ), 9, 'Ignore characters' );
warning_like { Acme::AXP::Utils::sum( 'y' ) } qr/^Argument "y" isn't numeric in addition/, "Non-numeric warning";
sub no_warnings {
my $f = shift;
local $SIG{__WARN__} = sub {};
return $f->( @_ );
}
xt/boilerplate.t view on Meta::CPAN
#!perl -T
use 5.006;
use strict;
use warnings;
use Test::More;
plan tests => 3;
sub not_in_file_ok {
my ($filename, %regex) = @_;
open( my $fh, '<', $filename )
or die "couldn't open $filename for reading: $!";
my %violated;
while (my $line = <$fh>) {
while (my ($desc, $regex) = each %regex) {
if ($line =~ $regex) {
push @{$violated{$desc}||=[]}, $.;
xt/boilerplate.t view on Meta::CPAN
}
if (%violated) {
fail("$filename contains boilerplate text");
diag "$_ appears on lines @{$violated{$_}}" for keys %violated;
} else {
pass("$filename contains no boilerplate text");
}
}
sub module_boilerplate_ok {
my ($module) = @_;
not_in_file_ok($module =>
'the great new $MODULENAME' => qr/ - The great new /,
'boilerplate description' => qr/Quick summary of what the module/,
'stub function definition' => qr/function[12]/,
);
}
TODO: {
local $TODO = "Need to replace the boilerplate text";
( run in 0.239 second using v1.01-cache-2.11-cpan-4d50c553e7e )