File Coverage

inc/Test/Deep/Cache/Simple.pm
Criterion Covered Total %
statement 34 41 82.9
branch 2 4 50.0
condition 1 3 33.3
subroutine 9 10 90.0
pod 0 5 0.0
total 46 63 73.0


line stmt bran cond sub pod time code
1 13     13   69 #line 1
  13         24  
  13         400  
2 13     13   65 use strict;
  13         25  
  13         482  
3             use warnings;
4              
5 13     13   63 package Test::Deep::Cache::Simple;
  13         23  
  13         768  
6             use Carp qw( confess );
7 13     13   69  
  13         132  
  13         3042  
8             use Scalar::Util qw( refaddr );
9              
10             BEGIN
11 13 50   13   63 {
12             if (grep /^weaken$/, @Scalar::Util::EXPORT_FAIL)
13             {
14             # we're running on a version of perl that has no weak refs, so we
15 0         0 # just install a no-op sub for weaken instead of importing it
  0         0  
16             *weaken = sub {};
17             }
18             else
19 13         5125 {
20             Scalar::Util->import('weaken');
21             }
22             }
23              
24             sub new
25 284     284 0 399 {
26             my $pkg = shift;
27 284         734  
28             my $self = bless {}, $pkg;
29 284         1165  
30             return $self;
31             }
32              
33             sub add
34 426     426 0 526 {
35             my $self = shift;
36 426         619  
37             my ($d1, $d2) = @_;
38 426         460 {
  426         1432  
39             local $SIG{__DIE__};
40              
41             # cannot weaken read only refs, no harm if we can't as they never
42 426         557 # disappear
  426         1002  
43 426         458 eval{weaken($d1)};
  426         2077  
44             eval{weaken($d2)};
45             }
46 426         1186  
47             $self->{fn_get_key(@_)} = [$d1, $d2];
48             }
49              
50             sub cmp
51 852     852 0 1493 {
52             my $self = shift;
53 852         1458  
54 852         1755 my $key = fn_get_key(@_);
55             my $pair = $self->{$key};
56              
57 852 50 33     2702 # are both weakened refs still valid, if not delete this entry
58             if (ref($pair->[0]) and ref($pair->[1]))
59 0         0 {
60             return 1;
61             }
62             else
63 852         1138 {
64 852         4883 delete $self->{$key};
65             return 0;
66             }
67             }
68              
69             sub absorb
70 0     0 0 0 {
71             my $self = shift;
72 0         0  
73             my $other = shift;
74 0         0  
  0         0  
75             @{$self}{keys %$other} = values %$other;
76             }
77              
78             sub fn_get_key
79 1278     1278 0 1989 {
  2556         14388  
80             return join(",", sort (map {refaddr($_)} @_));
81             }
82             1;