exercism-perl5

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

secret-handshake.t (2352B) - 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 SecretHandshake qw<handshake>;
     10 
     11 my @test_cases = do { local $/; @{ JSON->decode(<DATA>) }; };
     12 
     13 imported_ok qw<handshake> or bail_out;
     14 
     15 for my $case (@test_cases) {
     16   is( handshake( $case->{input}{number} ),
     17     $case->{expected}, $case->{description}, );
     18 }
     19 
     20 done_testing;
     21 
     22 __DATA__
     23 [
     24   {
     25     "description": "wink for 1",
     26     "expected": [
     27       "wink"
     28     ],
     29     "input": {
     30       "number": 1
     31     },
     32     "property": "commands"
     33   },
     34   {
     35     "description": "double blink for 10",
     36     "expected": [
     37       "double blink"
     38     ],
     39     "input": {
     40       "number": 2
     41     },
     42     "property": "commands"
     43   },
     44   {
     45     "description": "close your eyes for 100",
     46     "expected": [
     47       "close your eyes"
     48     ],
     49     "input": {
     50       "number": 4
     51     },
     52     "property": "commands"
     53   },
     54   {
     55     "description": "jump for 1000",
     56     "expected": [
     57       "jump"
     58     ],
     59     "input": {
     60       "number": 8
     61     },
     62     "property": "commands"
     63   },
     64   {
     65     "description": "combine two actions",
     66     "expected": [
     67       "wink",
     68       "double blink"
     69     ],
     70     "input": {
     71       "number": 3
     72     },
     73     "property": "commands"
     74   },
     75   {
     76     "description": "reverse two actions",
     77     "expected": [
     78       "double blink",
     79       "wink"
     80     ],
     81     "input": {
     82       "number": 19
     83     },
     84     "property": "commands"
     85   },
     86   {
     87     "description": "reversing one action gives the same action",
     88     "expected": [
     89       "jump"
     90     ],
     91     "input": {
     92       "number": 24
     93     },
     94     "property": "commands"
     95   },
     96   {
     97     "description": "reversing no actions still gives no actions",
     98     "expected": [],
     99     "input": {
    100       "number": 16
    101     },
    102     "property": "commands"
    103   },
    104   {
    105     "description": "all possible actions",
    106     "expected": [
    107       "wink",
    108       "double blink",
    109       "close your eyes",
    110       "jump"
    111     ],
    112     "input": {
    113       "number": 15
    114     },
    115     "property": "commands"
    116   },
    117   {
    118     "description": "reverse all possible actions",
    119     "expected": [
    120       "jump",
    121       "close your eyes",
    122       "double blink",
    123       "wink"
    124     ],
    125     "input": {
    126       "number": 31
    127     },
    128     "property": "commands"
    129   },
    130   {
    131     "description": "do nothing for zero",
    132     "expected": [],
    133     "input": {
    134       "number": 0
    135     },
    136     "property": "commands"
    137   }
    138 ]