File Coverage

blib/lib/Schedule/Easing/MD5.pm
Criterion Covered Total %
statement 58 62 93.5
branch 23 28 82.1
condition 4 7 57.1
subroutine 9 9 100.0
pod 0 3 0.0
total 94 109 86.2


line stmt bran cond sub pod time code
1             package Schedule::Easing::MD5;
2              
3 2     2   4142 use strict;
  2         4  
  2         97  
4 2     2   10 use warnings;
  2         4  
  2         97  
5 2     2   437 use parent qw/Schedule::Easing::Ease/;
  2         215  
  2         12  
6 2     2   171 use Digest::MD5 qw/md5/;
  2         4  
  2         1531  
7              
8             our $VERSION='0.1.4';
9              
10             sub _default_keys {
11 14     14   67 my ($self)=@_;
12             return (
13 14         52 $self->SUPER::_default_keys(),
14             );
15             }
16             sub _default {
17 14     14   37 my ($self)=@_;
18             return (
19 14         80 $self->SUPER::_default(),
20             );
21             }
22              
23             sub new {
24 14     14 0 287612 my ($ref,%opt)=@_;
25 14   66     75 my $class=ref($ref)||$ref;
26             my %self=(
27             type =>'md5',
28             $class->_default(),
29             (ref($ref)?%$ref:()),
30 14 100       51 map {$_=>$opt{$_}} grep {defined($opt{$_})} $class->_default_keys()
  63         214  
  126         286  
31             );
32 14         107 return bless(\%self,$class)->validate()->init();
33             }
34              
35             # validate = SUPER::validate
36             # init = SUPER::init
37              
38             sub includes {
39 96824     96824 0 295822 my ($self,$ts,%D)=@_;
40 96824         209749 my $p=$$self{_shaper}->($ts,@$self{qw/tsA tsB begin final/},@{$$self{shapeopt}});
  96824         247738  
41 96824 100       210348 if($p<=0) { return 0 }
  12023         33604  
42 84801 100       164265 if($p>=1) { return 1 }
  12013         33380  
43 72788         108720 my $digest='';
44 72788         174040 foreach my $k (sort grep {/^digest/} keys %D) { $digest.=$D{$k} }
  288687         631076  
  144753         258378  
45 72788 100       162100 if(!$digest) { $digest=$D{message} }
  3         6  
46 72788 100       137986 if(!$digest) { return 1 }
  1         3  
47 72787   50     316734 my $y=unpack('L',substr(md5($digest//''),0,4));
48 72787 100       226552 if(($y%$$self{tsrange})<$p*$$self{tsrange}) { return 1 }
  36395         111460  
49 36392         104932 return 0;
50             }
51              
52             sub schedule {
53 4468     4468 0 305970 my ($self,%D)=@_;
54 4468         8099 my $digest='';
55 4468         11298 foreach my $k (sort grep {/^digest/} keys %D) { $digest.=$D{$k} }
  16468         39081  
  8468         17626  
56 4468 50       11646 if(!$digest) { $digest=$D{message} }
  0         0  
57 4468 50       9432 if(!$digest) { return $$self{tsA} }
  0         0  
58 4468   50     26832 my $y=(unpack('L',substr(md5($digest//''),0,4))%$$self{tsrange})/$$self{tsrange};
59 4468 100       13593 if($$self{begin}<$$self{final}) {
    50          
60 2468 100       6264 if($y<$$self{begin}) { return 0 }
  100         435  
61 2368 100       6002 if($y>$$self{final}) { return }
  21         155  
62             }
63             elsif($$self{begin}>$$self{final}) {
64 2000 50       4306 if($y>$$self{begin}) { return 0 }
  0         0  
65 2000 50       4306 if($y<$$self{final}) { return }
  0         0  
66             }
67 4347         9844 return $$self{_unshaper}->($y,@$self{qw/tsA tsB begin final/},@{$$self{shapeopt}});
  4347         14362  
68             }
69              
70             1;