File Coverage

blib/lib/Game/Cribbage/Deck/Card.pm
Criterion Covered Total %
statement 29 29 100.0
branch 2 2 100.0
condition 7 9 77.7
subroutine 11 11 100.0
pod 5 6 83.3
total 54 57 94.7


line stmt bran cond sub pod time code
1             package Game::Cribbage::Deck::Card;
2              
3 15     15   80836 use strict;
  15         21  
  15         536  
4 15     15   54 use warnings;
  15         24  
  15         630  
5              
6 15     15   506 use Object::Proto::Sugar;
  15         12009  
  15         87  
7              
8             our (%card_to_value_map, %card_run_to_value_map, %card_suit_to_symbol);
9             BEGIN {
10             %card_to_value_map = (
11             A => 1,
12 15     15   12694 (map {$_ => 10} qw/J Q K/),
  45         169  
13             );
14 15         51 %card_run_to_value_map = (
15             A => 1,
16             J => 11,
17             Q => 12,
18             K => 13
19             );
20 15         744 %card_suit_to_symbol = (
21             H => '♥️',
22             S => '♠️',
23             D => '♦️',
24             C => '♣️'
25             );
26             }
27              
28             has [qw/id used/] => (
29             is => 'rw',
30 5600     5600   944115 default => sub { 0 }
31             );
32              
33             has [qw/suit symbol/] => (
34             is => 'ro'
35             );
36              
37             sub value {
38 888     888 1 972 my ($self) = @_;
39 888   66     2585 return $card_to_value_map{$self->symbol} || $self->symbol;
40             }
41              
42             sub run_value {
43 268     268 1 317 my ($self) = @_;
44 268   66     811 return $card_run_to_value_map{$self->symbol} || $self->symbol;
45             }
46              
47             sub suit_symbol {
48 4     4 1 9 my ($self) = @_;
49 4         27 return $card_suit_to_symbol{$self->suit};
50             }
51              
52             sub ui_stringify {
53 2     2 1 4 my ($self) = @_;
54 2         22 return sprintf "%s %s", $card_suit_to_symbol{$self->suit}, $self->symbol;
55             }
56              
57             sub stringify {
58 613     613 0 692 my ($self) = @_;
59 613         1476 return sprintf "%s%s", $self->symbol, $card_suit_to_symbol{$self->suit};
60             }
61              
62             sub match {
63 41     41 1 57 my ($self, $card) = @_;
64 41         84 my $sym = $card->symbol;
65 41 100 100     409 if ($self->suit eq $card->suit && $self->symbol =~ m/^($sym)$/) {
66 13         60 return 1;
67             }
68 28         75 return 0;
69             }
70              
71             1;
72              
73             __END__