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