File Coverage

blib/lib/Data/Gimei/Random.pm
Criterion Covered Total %
statement 20 20 100.0
branch n/a
condition 1 3 33.3
subroutine 7 7 100.0
pod 0 4 0.0
total 28 34 82.3


line stmt bran cond sub pod time code
1             package Data::Gimei::Random;
2              
3             # Pseudo random number generator(PRNG)
4             # Park & Miller comp.lang.c FAQ list Question 13.15
5              
6 6     6   463 use warnings;
  6         12  
  6         196  
7 6     6   57 use v5.22;
  6         16  
8              
9 6         30 use Class::Tiny qw (
10             seed
11 6     6   469 );
  6         2587  
12              
13             sub BUILDARGS {
14             #my $class = shift;
15             #my %args = @_;
16 7     7 0 609 my ( $class, %args ) = @_;
17              
18 7   33     51 $args{'seed'} //= time();
19              
20 7         17 return \%args;
21             }
22              
23             sub set_seed {
24 7     7 0 34 my ( $self, $seed ) = @_;
25 7         132 $self->seed( $seed );
26             }
27              
28             sub next_int {
29 55     55 0 104 my ( $self, $size ) = @_;
30              
31 55         1047 my $rnum = (48_271 * $self->seed) % (2 << 31 -1);
32 55         923 $self->seed( $rnum );
33              
34 55         221 return $rnum % $size;
35             }
36              
37             sub sample {
38 50     50 0 87 my ( $self, $aref ) = @_;
39              
40 50         108 my $index = $self->next_int($#$aref + 1);
41              
42 50         221 return $aref->[$index];
43             }
44             1;