File Coverage

lib/Spreadsheet/Engine/Function/HLOOKUP.pm
Criterion Covered Total %
statement 31 31 100.0
branch 8 10 80.0
condition n/a
subroutine 11 11 100.0
pod 2 2 100.0
total 52 54 96.3


line stmt bran cond sub pod time code
1             package Spreadsheet::Engine::Function::HLOOKUP;
2              
3 28     28   156 use strict;
  28         63  
  28         965  
4 28     28   154 use warnings;
  28         62  
  28         723  
5              
6 28     28   143 use base 'Spreadsheet::Engine::Function::MATCH';
  28         65  
  28         10881  
7 28     28   190 use Spreadsheet::Engine::Sheet 'cr_to_coord';
  28         59  
  28         23660  
8              
9 70     70 1 218 sub argument_count { -3 => 4 }
10 70     70 1 338 sub signature { '*', 'r', '>=1', 'n' }
11              
12 120     120   348 sub _offset_op { (shift->_ops)[2] }
13 70     70   204 sub _sorted_op { (shift->_ops)[3] }
14              
15             sub _gotit {
16 50     50   82 my ($self, $cr) = @_;
17 50         66 my ($c, $r) = @{$cr};
  50         100  
18 50         157 my ($rangesheetdata, $rangecol1num, $nrangecols, $rangerow1num, $nrangerows)
19             = $self->_range_data;
20 50         152 my $offset = $self->_offset_op->value;
21 50 100       2244 my $coord = cr_to_coord(
    100          
22             $rangecol1num + $c + ($self->fname eq 'VLOOKUP' ? $offset - 1 : 0),
23             $rangerow1num + $r + ($self->fname eq 'HLOOKUP' ? $offset - 1 : 0)
24             );
25              
26 50         1106 return Spreadsheet::Engine::Value->new(
27             type => $rangesheetdata->{valuetypes}->{$coord},
28             value => $rangesheetdata->{datavalues}->{$coord},
29             );
30             }
31              
32             sub _crincs {
33 42     42   77 my $self = shift;
34 42         140 my ($rangesheetdata, $rangecol1num, $nrangecols, $rangerow1num, $nrangerows)
35             = $self->_range_data;
36 42         136 my $of = $self->_offset_op;
37 42 50       1028 die Spreadsheet::Engine::Error->ref if $of->value > $nrangerows;
38 42         381 return (0, 0, 1, 0);
39             }
40              
41             sub _sorted {
42 70     70   121 my $self = shift;
43 70 100       200 my $op = $self->_sorted_op or return 1;
44 51 50       1326 return $op->value ? 1 : 0;
45             }
46              
47             1;
48              
49             __END__