File Coverage

blib/lib/Statistics/Basic/Mean.pm
Criterion Covered Total %
statement 38 38 100.0
branch 9 12 75.0
condition n/a
subroutine 7 7 100.0
pod 1 1 100.0
total 55 58 94.8


line stmt bran cond sub pod time code
1              
2             package Statistics::Basic::Mean;
3              
4 33     33   158 use strict;
  33         48  
  33         1309  
5 33     33   153 use warnings;
  33         40  
  33         900  
6 33     33   137 use Carp;
  33         42  
  33         2239  
7              
8 33     33   208 use base 'Statistics::Basic::_OneVectorBase';
  33         44  
  33         13961  
9              
10             sub new {
11 115     115 1 1396 my $class = shift;
12              
13 115 50       298 warn "[new $class]\n" if $Statistics::Basic::DEBUG >= 2;
14              
15 115         311 my $this = bless {}, $class;
16 115 50       146 my $vector = eval { Statistics::Basic::Vector->new(@_) } or croak $@;
  115         520  
17 115 100       348 my $c = $vector->_get_computer("mean"); return $c if defined $c;
  115         601  
18              
19 76         1726 $this->{v} = $vector;
20              
21 76         271 $vector->_set_computer( mean => $this );
22              
23 76         396 return $this;
24             }
25              
26             sub _recalc {
27 107     107   170 my $this = shift;
28 107         118 my $sum = 0;
29 107         140 my $v = $this->{v};
30 107         282 my $cardinality = $v->query_size;
31              
32 107         207 delete $this->{recalc_needed};
33 107         143 delete $this->{_value};
34              
35 107 100       251 return unless $cardinality > 0;
36 106 100       271 return unless $v->query_filled; # only applicable in certain circumstances
37              
38 33     33   215 { no warnings 'uninitialized'; ## no critic
  33         56  
  33         4333  
  104         120  
39 104         247 $sum += $_ for $v->query;
40             }
41              
42 104         5238 $this->{_value} = ($sum / $cardinality);
43              
44 104 50       2184 warn "[recalc " . ref($this) . "] ($sum/$cardinality) = $this->{_value}\n" if $Statistics::Basic::DEBUG;
45              
46 104         220 return;
47             }
48              
49             1;