File Coverage

blib/lib/ArrayData/Test/Spec/Basic.pm
Criterion Covered Total %
statement 27 31 87.1
branch 8 14 57.1
condition n/a
subroutine 10 11 90.9
pod 0 7 0.0
total 45 63 71.4


line stmt bran cond sub pod time code
1             package ArrayData::Test::Spec::Basic;
2              
3 1     1   75056 use strict;
  1         12  
  1         28  
4 1     1   6 use warnings;
  1         2  
  1         24  
5              
6 1     1   449 use Role::Tiny::With;
  1         5345  
  1         344  
7              
8             with 'ArrayDataRole::Spec::Basic';
9              
10             our $AUTHORITY = 'cpan:PERLANCAR'; # AUTHORITY
11             our $DATE = '2021-12-01'; # DATE
12             our $DIST = 'ArrayData'; # DIST
13             our $VERSION = '0.2.5'; # VERSION
14              
15             my $elems = [
16             1,
17             2,
18             undef,
19             4,
20             ];
21              
22             sub new {
23 1     1 0 142 my $class = shift;
24 1         6 bless {pos=>0}, $class;
25             }
26              
27             sub _elems {
28 0     0   0 my $self = shift;
29 0         0 $elems;
30             }
31              
32             sub get_next_item {
33 19     19 0 86 my $self = shift;
34 19 100       68 die "StopIteration" unless $self->{pos} < @$elems;
35 18         48 $elems->[ $self->{pos}++ ];
36             }
37              
38             sub has_next_item {
39 17     17 0 1073 my $self = shift;
40 17         42 $self->{pos} < @$elems;
41             }
42              
43             sub get_iterator_pos {
44 1     1 0 4 my $self = shift;
45 1         5 $self->{pos};
46             }
47              
48             sub reset_iterator {
49 5     5 0 7173 my $self = shift;
50 5         11 $self->{pos} = 0;
51             }
52              
53             sub get_item_at_pos {
54 2     2 0 2420 my ($self, $pos) = @_;
55 2 50       7 if ($pos < 0) {
56 0 0       0 die "Out of range" unless -$pos <= @$elems;
57             } else {
58 2 100       15 die "Out of range" unless $pos < @$elems;
59             }
60 1         4 $elems->[ $pos ];
61             }
62              
63             sub has_item_at_pos {
64 2     2 0 6 my ($self, $pos) = @_;
65 2 50       6 if ($pos < 0) {
66 0 0       0 return -$pos <= @$elems ? 1:0;
67             } else {
68 2 100       10 return $pos < @$elems ? 1:0;
69             }
70             }
71              
72             1;
73              
74             # ABSTRACT: A test array data
75              
76             __END__