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   153516 use strict;
  4         9  
  4         163  
4 4     4   32 use warnings;
  4         16  
  4         279  
5              
6 4     4   2157 use Class::Utils qw(set_params);
  4         42456  
  4         104  
7 4     4   338 use Error::Pure qw(err);
  4         7  
  4         1366  
8              
9             our $VERSION = 0.09;
10              
11             # Constructor.
12             sub new {
13 5     5 1 750200 my ($class, @params) = @_;
14              
15             # Create object.
16 5         19 my $self = bless {}, $class;
17              
18             # Precision.
19 5         23 $self->{'precision'} = 100;
20              
21             # Set.
22 5         15 $self->{'set'} = [];
23              
24             # Process parameters.
25 5         26 set_params($self, @params);
26              
27             # Check set.
28 3         41 my $full = 0;
29 3         8 foreach my $set_ar (@{$self->{'set'}}) {
  3         18  
30 4         13 $full += $set_ar->[0];
31             }
32 3 100       14 if ($full != 1) {
33 1         4 err 'Bad set sum. Must be 1.';
34             }
35              
36             # Create set.
37 2         7 $self->{'_set'} = [];
38 2         5 foreach my $set_ar (@{$self->{'set'}}) {
  2         8  
39 4         81 push @{$self->{'_set'}}, ($set_ar->[1])
40 4         7 x ($self->{'precision'} * $set_ar->[0]);
41             }
42              
43 2         12 return $self;
44             }
45              
46             # Get random result.
47             sub get {
48 1     1 1 6 my $self = shift;
49 1         2 my $index = int(rand(@{$self->{'_set'}}));
  1         53  
50 1         7 return $self->{'_set'}->[$index];
51             }
52              
53             1;
54              
55             __END__