exercism-perl5

Repository for my Perl 5 Exercism exercises
git clone git://git.samirparikh.com/exercism-perl5
Log | Files | Refs | README

palindrome.t (2366B) - raw


      1 #!/usr/bin/env perl
      2 use strict;
      3 use warnings;
      4 
      5 use Test2::Bundle::More;
      6 use FindBin qw($Bin);
      7 use lib $Bin, "$Bin/local/lib/perl5";
      8 
      9 my $module = 'Palindrome';
     10 
     11 plan 15;
     12 
     13 ok -e "$Bin/$module.pm", "Missing $module.pm"
     14   or BAIL_OUT "You need to create file: $module.pm";
     15 
     16 eval "use $module";
     17 ok !$@, "Cannot load $module"
     18   or BAIL_OUT
     19   "Cannot load $module. Does it compile? Does it end with 1;?";
     20 
     21 can_ok $module, "new"
     22   or BAIL_OUT "Missing package $module or missing sub new()";
     23 can_ok $module, "largest"
     24   or BAIL_OUT "Missing package $module or missing sub largest()";
     25 can_ok $module, "smallest"
     26   or BAIL_OUT "Missing package $module or missing sub smallest()";
     27 
     28 my $palindrome;
     29 my ( $largest, $smallest );
     30 
     31 $palindrome = $module->new( { max_factor => 9 } );
     32 $largest    = $palindrome->largest;
     33 is $largest->{value}, 9,
     34   "largest palindrome value from single digit factors";
     35 is_deeply(
     36   $largest->{factors},
     37   [ [ 1, 9 ], [ 3, 3 ] ],
     38   "largest single digit palindrome factors"
     39 ) or diag explain $largest->{factors};
     40 
     41 $palindrome = $module->new( { max_factor => 99, min_factor => 10 } );
     42 $largest    = $palindrome->largest;
     43 is $largest->{value}, 9009,
     44   "largest palindrome value from double digit factors";
     45 is_deeply(
     46   [ sort @{ $largest->{factors} } ],
     47   [ [ 91, 99 ] ],
     48   "largest double digit palindrome factors"
     49 ) or diag explain $largest->{factors};
     50 
     51 $palindrome
     52   = $module->new( { max_factor => 999, min_factor => 100 } );
     53 $largest = $palindrome->largest;
     54 is $largest->{value}, 906609,
     55   "largest palindrome value from triple digit factors";
     56 is_deeply(
     57   $largest->{factors},
     58   [ [ 913, 993 ] ],
     59   "largest triple digit palindrome factors"
     60 ) or diag explain $largest->{factors};
     61 
     62 $palindrome = $module->new( { max_factor => 99, min_factor => 10 } );
     63 $smallest   = $palindrome->smallest;
     64 is $smallest->{value}, 121,
     65   "smallest palindrome value from double digit factors";
     66 is_deeply(
     67   $smallest->{factors},
     68   [ [ 11, 11 ] ],
     69   "smallest double digit palindrome factors"
     70 ) or diag explain $smallest->{factors};
     71 
     72 $palindrome
     73   = $module->new( { max_factor => 999, min_factor => 100 } );
     74 $smallest = $palindrome->smallest;
     75 is $smallest->{value}, 10201,
     76   "smallest palindrome value from triple digit factors";
     77 is_deeply(
     78   $smallest->{factors},
     79   [ [ 101, 101 ] ],
     80   "smallest triple digit palindrome factors"
     81 ) or diag explain $smallest->{factors};