File Coverage

blib/lib/Rstats/Object.pm
Criterion Covered Total %
statement 72 72 100.0
branch 4 6 66.6
condition 2 6 33.3
subroutine 22 23 95.6
pod n/a
total 100 107 93.4


line stmt bran cond sub pod time code
1             package Rstats::Object;
2 21     21   111 use Object::Simple -base;
  21         43  
  21         228  
3              
4             use overload
5             '+' => sub {
6 118     118   522 my $x1 = shift;
7 118         2898 my $r = $x1->r;
8              
9 118         833 return Rstats::Func::add($r, Rstats::Func::_fix_pos($r, $x1, @_));
10             },
11             '-' => sub {
12 30     30   195 my $x1 = shift;
13 30         773 my $r = $x1->r;
14              
15 30         217 return Rstats::Func::subtract($r, Rstats::Func::_fix_pos($r, $x1, @_));
16             },
17             '*' => sub {
18 138     138   373 my $x1 = shift;
19 138         3476 my $r = $x1->r;
20              
21 138         1101 return Rstats::Func::multiply($r, Rstats::Func::_fix_pos($r, $x1, @_));
22             },
23             '/' => sub {
24 25     25   184 my $x1 = shift;
25 25         640 my $r = $x1->r;
26              
27 25         180 Rstats::Func::divide($r, Rstats::Func::_fix_pos($r, $x1, @_));
28             },
29             '%' => sub {
30 14     14   179 my $x1 = shift;
31 14         401 my $r = $x1->r;
32              
33 14         108 return Rstats::Func::remainder($r, Rstats::Func::_fix_pos($r, $x1, @_));
34             },
35             '**' => sub {
36 15     15   153 my $x1 = shift;
37 15         366 my $r = $x1->r;
38              
39 15         107 return Rstats::Func::pow($r, Rstats::Func::_fix_pos($r, $x1, @_));
40             },
41             '<' => sub {
42 23     23   166 my $x1 = shift;
43 23         542 my $r = $x1->r;
44              
45 23         161 return Rstats::Func::less_than($r, Rstats::Func::_fix_pos($r, $x1, @_));
46             },
47             '<=' => sub {
48 5     5   92 my $x1 = shift;
49 5         145 my $r = $x1->r;
50              
51 5         38 return Rstats::Func::less_than_or_equal($r, Rstats::Func::_fix_pos($r, $x1, @_));
52             },
53             '>' => sub {
54 391     391   716 my $x1 = shift;
55 391         8682 my $r = $x1->r;
56              
57 391         2472 return Rstats::Func::more_than($r, Rstats::Func::_fix_pos($r, $x1, @_));
58             },
59             '>=' => sub {
60 5     5   90 my $x1 = shift;
61 5         133 my $r = $x1->r;
62              
63 5         37 return Rstats::Func::more_than_or_equal($r, Rstats::Func::_fix_pos($r, $x1, @_));
64             },
65             '==' => sub {
66 362     362   596 my $x1 = shift;
67 362         7984 my $r = $x1->r;
68              
69 362         2333 return Rstats::Func::equal($r, Rstats::Func::_fix_pos($r, $x1, @_));
70             },
71             '!=' => sub {
72 5     5   94 my $x1 = shift;
73 5         136 my $r = $x1->r;
74              
75 5         39 return Rstats::Func::not_equal($r, Rstats::Func::_fix_pos($r, $x1, @_));
76             },
77             '&' => sub {
78 1     1   15 my $x1 = shift;
79 1         27 my $r = $x1->r;
80              
81 1         9 return Rstats::Func::and($r, Rstats::Func::_fix_pos($r, $x1, @_));
82             },
83             '|' => sub {
84 1     1   14 my $x1 = shift;
85 1         26 my $r = $x1->r;
86              
87 1         9 return Rstats::Func::or($r, Rstats::Func::_fix_pos($r, $x1, @_));
88             },
89             'x' => sub {
90 4     4   133 my $x1 = shift;
91 4         105 my $r = $x1->r;
92              
93 4         34 return Rstats::Func::inner_product($r, Rstats::Func::_fix_pos($r, $x1, @_));
94             },
95             bool => sub {
96 32978     32978   52839 my $x1 = shift;
97 32978         729232 my $r = $x1->r;
98            
99 32978         205119 return Rstats::Func::bool($r, $x1, @_);
100             },
101             'neg' => sub {
102 51     51   195 my $x1 = shift;
103 51         1495 my $r = $x1->r;
104            
105 51         1217 return Rstats::Func::negate($r, $x1, @_);
106             },
107             '""' => sub {
108 35     35   757 my $x1 = shift;
109 35         851 my $r = $x1->r;
110            
111 35         265 return Rstats::Func::to_string($r, $x1, @_);
112             },
113 21     21   19935 fallback => 1;
  21         44  
  21         956  
114              
115 21     21   5501 use Rstats::Func;
  21         42  
  21         5813  
116              
117             has 'r';
118             has list => sub { [] };
119             has 'vector';
120              
121             sub AUTOLOAD {
122 127275     127275   179337 my $self = shift;
123            
124 127275         602204 my ($package, $method) = split /::(\w+)$/, our $AUTOLOAD;
125 127275 50 33     903191 Carp::croak "Undefined subroutine &${package}::$method called"
126             unless Scalar::Util::blessed $self && $self->isa(__PACKAGE__);
127              
128 127275         2754976 my $r = $self->r;
129              
130             # Call helper with current controller
131 127275 50 33     942748 Carp::croak qq{Can't locate object method "$method" via package "$package"}
132             unless $r && (my $helper = $r->get_helper($method));
133            
134             # Helper
135 127275 100       300601 if (ref $helper eq 'CODE') {
136 127267         1103234 return $helper->($r, $self, @_);
137             }
138             #Proxy
139             else {
140 8         25 $helper->{args} = [$self];
141 8         40 return $helper;
142             }
143             }
144              
145       0     sub DESTROY {}
146              
147             1;
148              
149             =head1 NAME
150              
151             Rstats::Object - Rstats object
152              
153             1;