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   79687 use strict;
  15         34  
  15         509  
4 15     15   55 use warnings;
  15         40  
  15         625  
5              
6 15     15   520 use Object::Proto::Sugar;
  15         11556  
  15         81  
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   12612 (map {$_ => 10} qw/J Q K/),
  45         141  
13             );
14 15         40 %card_run_to_value_map = (
15             A => 1,
16             J => 11,
17             Q => 12,
18             K => 13
19             );
20 15         725 %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   933101 default => sub { 0 }
31             );
32              
33             has [qw/suit symbol/] => (
34             is => 'ro'
35             );
36              
37             sub value {
38 888     888 1 936 my ($self) = @_;
39 888   66     2419 return $card_to_value_map{$self->symbol} || $self->symbol;
40             }
41              
42             sub run_value {
43 268     268 1 303 my ($self) = @_;
44 268   66     722 return $card_run_to_value_map{$self->symbol} || $self->symbol;
45             }
46              
47             sub suit_symbol {
48 4     4 1 8 my ($self) = @_;
49 4         17 return $card_suit_to_symbol{$self->suit};
50             }
51              
52             sub ui_stringify {
53 2     2 1 4 my ($self) = @_;
54 2         18 return sprintf "%s %s", $card_suit_to_symbol{$self->suit}, $self->symbol;
55             }
56              
57             sub stringify {
58 613     613 0 767 my ($self) = @_;
59 613         1465 return sprintf "%s%s", $self->symbol, $card_suit_to_symbol{$self->suit};
60             }
61              
62             sub match {
63 41     41 1 54 my ($self, $card) = @_;
64 41         60 my $sym = $card->symbol;
65 41 100 100     322 if ($self->suit eq $card->suit && $self->symbol =~ m/^($sym)$/) {
66 13         56 return 1;
67             }
68 28         52 return 0;
69             }
70              
71             1;
72              
73             __END__