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};