File Coverage

blib/lib/Random/Set.pm
Criterion Covered Total %
statement 33 33 100.0
branch 2 2 100.0
condition n/a
subroutine 6 6 100.0
pod 2 2 100.0
total 43 43 100.0


line stmt bran cond sub pod time code
1             package Random::Set;
2              
3 4     4   86300 use strict;
  4         36  
  4         113  
4 4     4   19 use warnings;
  4         7  
  4         110  
5              
6 4     4   2091 use Class::Utils qw(set_params);
  4         43284  
  4         78  
7 4     4   296 use Error::Pure qw(err);
  4         7  
  4         1155  
8              
9             our $VERSION = 0.08;
10              
11             # Constructor.
12             sub new {
13 5     5 1 5429 my ($class, @params) = @_;
14              
15             # Create object.
16 5         14 my $self = bless {}, $class;
17              
18             # Precision.
19 5         18 $self->{'precision'} = 100;
20              
21             # Set.
22 5         11 $self->{'set'} = [];
23              
24             # Process parameters.
25 5         21 set_params($self, @params);
26              
27             # Check set.
28 3         37 my $full = 0;
29 3         7 foreach my $set_ar (@{$self->{'set'}}) {
  3         11  
30 4         11 $full += $set_ar->[0];
31             }
32 3 100       12 if ($full != 1) {
33 1         4 err 'Bad set sum. Must be 1.';
34             }
35              
36             # Create set.
37 2         5 $self->{'_set'} = [];
38 2         4 foreach my $set_ar (@{$self->{'set'}}) {
  2         7  
39 4         38 push @{$self->{'_set'}}, ($set_ar->[1])
40 4         9 x ($self->{'precision'} * $set_ar->[0]);
41             }
42              
43 2         10 return $self;
44             }
45              
46             # Get random result.
47             sub get {
48 1     1 1 5 my $self = shift;
49 1         2 my $index = int(rand(@{$self->{'_set'}}));
  1         39  
50 1         6 return $self->{'_set'}->[$index];
51             }
52              
53             1;
54              
55             __END__