File Coverage

blib/lib/Array/RealSpan.pm
Criterion Covered Total %
statement 33 33 100.0
branch 6 8 75.0
condition 4 9 44.4
subroutine 7 7 100.0
pod 3 3 100.0
total 53 60 88.3


line stmt bran cond sub pod time code
1             package Array::RealSpan;
2             our $AUTHORITY = 'cpan:GENE';
3              
4             # ABSTRACT: Map real number ranges to labels or objects
5              
6             our $VERSION = '0.0101';
7              
8 1     1   1010 use strict;
  1         2  
  1         33  
9 1     1   5 use warnings;
  1         2  
  1         37  
10 1     1   5 use Carp qw(croak);
  1         2  
  1         70  
11              
12 1     1   2250 use Moo;
  1         14880  
  1         5  
13              
14              
15             has _ranges => (
16             is => 'rw',
17             default => sub { [] },
18             );
19              
20              
21             sub set_range {
22 3     3 1 426 my ( $self, $start, $end, $label ) = @_;
23              
24 3 50 33     30 croak('set_range() should be called with 3 values.')
      33        
25             unless defined $start && defined $end && defined $label;
26 3 50       8 croak("set_range() called with bad indices: $start, $end")
27             if $end <= $start;
28              
29 3         4 push @{ $self->_ranges }, [ $start, $end, $label ];
  3         27  
30             }
31              
32              
33             sub get_range {
34 2     2 1 4 my ( $self, $label ) = @_;
35 2         3 my $get_range;
36 2         2 for my $range ( @{ $self->_ranges } ) {
  2         8  
37 4 100       12 if ( $label eq $range->[2] ) {
38 2         5 $get_range = [ $range->[0], $range->[1] ];
39 2         4 last;
40             }
41             }
42 2         11 return $get_range;
43             }
44              
45              
46             sub lookup {
47 4     4 1 251 my ( $self, $number ) = @_;
48 4         6 my $lookup;
49 4         5 for my $range ( @{ $self->_ranges } ) {
  4         14  
50 7 100 66     36 if ( $number >= $range->[0] && $number < $range->[1] ) {
51 3         4 $lookup = $range->[2];
52 3         7 last;
53             }
54             }
55 4         21 return $lookup;
56             }
57              
58             1;
59              
60             __END__