exercism-perl5

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

largest-series-product.t (3777B) - raw


      1 #!/usr/bin/env perl
      2 use Test2::V0;
      3 use JSON::PP;
      4 use constant JSON => JSON::PP->new;
      5 
      6 use FindBin qw<$Bin>;
      7 use lib $Bin, "$Bin/local/lib/perl5";
      8 
      9 use LargestSeriesProduct qw<largest_product>;
     10 
     11 my @test_cases = do { local $/; @{ JSON->decode(<DATA>) }; };
     12 
     13 imported_ok qw<largest_product> or bail_out;
     14 
     15 for my $case (@test_cases) {
     16   if ( !ref $case->{expected} ) {
     17     is( largest_product( $case->{input} ),
     18       $case->{expected}, $case->{description}, );
     19   }
     20   else {
     21     like dies( sub { largest_product( $case->{input} ) } ),
     22       qr/$case->{expected}{error}/, $case->{description};
     23   }
     24 }
     25 
     26 done_testing;
     27 
     28 __DATA__
     29 [
     30   {
     31     "description": "finds the largest product if span equals length",
     32     "expected": 18,
     33     "input": {
     34       "digits": "29",
     35       "span": 2
     36     },
     37     "property": "largestProduct"
     38   },
     39   {
     40     "description": "can find the largest product of 2 with numbers in order",
     41     "expected": 72,
     42     "input": {
     43       "digits": "0123456789",
     44       "span": 2
     45     },
     46     "property": "largestProduct"
     47   },
     48   {
     49     "description": "can find the largest product of 2",
     50     "expected": 48,
     51     "input": {
     52       "digits": "576802143",
     53       "span": 2
     54     },
     55     "property": "largestProduct"
     56   },
     57   {
     58     "description": "can find the largest product of 3 with numbers in order",
     59     "expected": 504,
     60     "input": {
     61       "digits": "0123456789",
     62       "span": 3
     63     },
     64     "property": "largestProduct"
     65   },
     66   {
     67     "description": "can find the largest product of 3",
     68     "expected": 270,
     69     "input": {
     70       "digits": "1027839564",
     71       "span": 3
     72     },
     73     "property": "largestProduct"
     74   },
     75   {
     76     "description": "can find the largest product of 5 with numbers in order",
     77     "expected": 15120,
     78     "input": {
     79       "digits": "0123456789",
     80       "span": 5
     81     },
     82     "property": "largestProduct"
     83   },
     84   {
     85     "description": "can get the largest product of a big number",
     86     "expected": 23520,
     87     "input": {
     88       "digits": "73167176531330624919225119674426574742355349194934",
     89       "span": 6
     90     },
     91     "property": "largestProduct"
     92   },
     93   {
     94     "description": "reports zero if the only digits are zero",
     95     "expected": 0,
     96     "input": {
     97       "digits": "0000",
     98       "span": 2
     99     },
    100     "property": "largestProduct"
    101   },
    102   {
    103     "description": "reports zero if all spans include zero",
    104     "expected": 0,
    105     "input": {
    106       "digits": "99099",
    107       "span": 3
    108     },
    109     "property": "largestProduct"
    110   },
    111   {
    112     "description": "rejects span longer than string length",
    113     "expected": {
    114       "error": "span must be smaller than string length"
    115     },
    116     "input": {
    117       "digits": "123",
    118       "span": 4
    119     },
    120     "property": "largestProduct"
    121   },
    122   {
    123     "description": "reports 1 for empty string and empty product (0 span)",
    124     "expected": 1,
    125     "input": {
    126       "digits": "",
    127       "span": 0
    128     },
    129     "property": "largestProduct"
    130   },
    131   {
    132     "description": "reports 1 for nonempty string and empty product (0 span)",
    133     "expected": 1,
    134     "input": {
    135       "digits": "123",
    136       "span": 0
    137     },
    138     "property": "largestProduct"
    139   },
    140   {
    141     "description": "rejects empty string and nonzero span",
    142     "expected": {
    143       "error": "span must be smaller than string length"
    144     },
    145     "input": {
    146       "digits": "",
    147       "span": 1
    148     },
    149     "property": "largestProduct"
    150   },
    151   {
    152     "description": "rejects invalid character in digits",
    153     "expected": {
    154       "error": "digits input must only contain digits"
    155     },
    156     "input": {
    157       "digits": "1234a5",
    158       "span": 2
    159     },
    160     "property": "largestProduct"
    161   },
    162   {
    163     "description": "rejects negative span",
    164     "expected": {
    165       "error": "span must be greater than zero"
    166     },
    167     "input": {
    168       "digits": "12345",
    169       "span": -1
    170     },
    171     "property": "largestProduct"
    172   }
    173 ]