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   109 use Object::Simple -base;
  21         39  
  21         194  
3              
4             use overload
5             '+' => sub {
6 118     118   493 my $x1 = shift;
7 118         2759 my $r = $x1->r;
8              
9 118         763 return Rstats::Func::add($r, Rstats::Func::_fix_pos($r, $x1, @_));
10             },
11             '-' => sub {
12 30     30   197 my $x1 = shift;
13 30         705 my $r = $x1->r;
14              
15 30         200 return Rstats::Func::subtract($r, Rstats::Func::_fix_pos($r, $x1, @_));
16             },
17             '*' => sub {
18 138     138   357 my $x1 = shift;
19 138         3428 my $r = $x1->r;
20              
21 138         919 return Rstats::Func::multiply($r, Rstats::Func::_fix_pos($r, $x1, @_));
22             },
23             '/' => sub {
24 25     25   164 my $x1 = shift;
25 25         612 my $r = $x1->r;
26              
27 25         164 Rstats::Func::divide($r, Rstats::Func::_fix_pos($r, $x1, @_));
28             },
29             '%' => sub {
30 14     14   158 my $x1 = shift;
31 14         348 my $r = $x1->r;
32              
33 14         95 return Rstats::Func::remainder($r, Rstats::Func::_fix_pos($r, $x1, @_));
34             },
35             '**' => sub {
36 15     15   152 my $x1 = shift;
37 15         364 my $r = $x1->r;
38              
39 15         103 return Rstats::Func::pow($r, Rstats::Func::_fix_pos($r, $x1, @_));
40             },
41             '<' => sub {
42 23     23   162 my $x1 = shift;
43 23         535 my $r = $x1->r;
44              
45 23         149 return Rstats::Func::less_than($r, Rstats::Func::_fix_pos($r, $x1, @_));
46             },
47             '<=' => sub {
48 5     5   89 my $x1 = shift;
49 5         133 my $r = $x1->r;
50              
51 5         35 return Rstats::Func::less_than_or_equal($r, Rstats::Func::_fix_pos($r, $x1, @_));
52             },
53             '>' => sub {
54 391     391   648 my $x1 = shift;
55 391         8657 my $r = $x1->r;
56              
57 391         2507 return Rstats::Func::more_than($r, Rstats::Func::_fix_pos($r, $x1, @_));
58             },
59             '>=' => sub {
60 5     5   88 my $x1 = shift;
61 5         127 my $r = $x1->r;
62              
63 5         36 return Rstats::Func::more_than_or_equal($r, Rstats::Func::_fix_pos($r, $x1, @_));
64             },
65             '==' => sub {
66 362     362   588 my $x1 = shift;
67 362         8059 my $r = $x1->r;
68              
69 362         2177 return Rstats::Func::equal($r, Rstats::Func::_fix_pos($r, $x1, @_));
70             },
71             '!=' => sub {
72 5     5   84 my $x1 = shift;
73 5         129 my $r = $x1->r;
74              
75 5         36 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         10 return Rstats::Func::and($r, Rstats::Func::_fix_pos($r, $x1, @_));
82             },
83             '|' => sub {
84 1     1   14 my $x1 = shift;
85 1         27 my $r = $x1->r;
86              
87 1         8 return Rstats::Func::or($r, Rstats::Func::_fix_pos($r, $x1, @_));
88             },
89             'x' => sub {
90 4     4   81 my $x1 = shift;
91 4         104 my $r = $x1->r;
92              
93 4         32 return Rstats::Func::inner_product($r, Rstats::Func::_fix_pos($r, $x1, @_));
94             },
95             bool => sub {
96 32978     32978   51764 my $x1 = shift;
97 32978         723428 my $r = $x1->r;
98            
99 32978         201712 return Rstats::Func::bool($r, $x1, @_);
100             },
101             'neg' => sub {
102 51     51   162 my $x1 = shift;
103 51         1232 my $r = $x1->r;
104            
105 51         1055 return Rstats::Func::negate($r, $x1, @_);
106             },
107             '""' => sub {
108 35     35   770 my $x1 = shift;
109 35         889 my $r = $x1->r;
110            
111 35         263 return Rstats::Func::to_string($r, $x1, @_);
112             },
113 21     21   19943 fallback => 1;
  21         44  
  21         910  
114              
115 21     21   5122 use Rstats::Func;
  21         39  
  21         5635  
116              
117             has 'r';
118             has list => sub { [] };
119             has 'vector';
120              
121             sub AUTOLOAD {
122 127275     127275   184231 my $self = shift;
123            
124 127275         584232 my ($package, $method) = split /::(\w+)$/, our $AUTOLOAD;
125 127275 50 33     881179 Carp::croak "Undefined subroutine &${package}::$method called"
126             unless Scalar::Util::blessed $self && $self->isa(__PACKAGE__);
127              
128 127275         2739146 my $r = $self->r;
129              
130             # Call helper with current controller
131 127275 50 33     922469 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       300591 if (ref $helper eq 'CODE') {
136 127267         1090469 return $helper->($r, $self, @_);
137             }
138             #Proxy
139             else {
140 8         25 $helper->{args} = [$self];
141 8         38 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;