File Coverage

blib/lib/RPerl/Algorithm/Sort/Bubble.pm
Criterion Covered Total %
statement 98 102 96.0
branch 4 10 40.0
condition 1 3 33.3
subroutine 36 36 100.0
pod 0 1 0.0
total 139 152 91.4


line stmt bran cond sub pod time code
1             # [[[ HEADER ]]]
2             package RPerl::Algorithm::Sort::Bubble;
3 2     2   9997 use strict;
  2     2   7  
  2     2   70  
  2         32727  
  2         5  
  2         53  
  2         45526  
  2         7  
  2         88  
4 2     2   12 use warnings;
  2     2   4  
  2     2   66  
  2         11  
  2         5  
  2         74  
  2         15  
  2         9  
  2         92  
5 2     2   11 use RPerl::AfterSubclass;
  2     2   5  
  2     2   363  
  2         11  
  2         4  
  2         319  
  2         12  
  2         7  
  2         466  
6             our $VERSION = 0.010_000;
7              
8             # [[[ OO INHERITANCE ]]]
9 2     2   15 use parent qw(RPerl::Algorithm::Sort);
  2         5  
  2         23  
10 2     2   84 use RPerl::Algorithm::Sort;
  2         5  
  2         57  
11              
12 2     2   20 # [[[ CRITICS ]]]
  2     2   6  
  2         61  
  2         21  
  2         8  
  2         78  
13 2     2   14 ## no critic qw(ProhibitUselessNoCritic ProhibitMagicNumbers RequireCheckedSyscalls) # USER DEFAULT 1: allow numeric values & print operator
  2     2   5  
  2         926  
  2         16  
  2         7  
  2         1184  
14             ## no critic qw(RequireInterpolationOfMetachars) # USER DEFAULT 2: allow single-quoted control characters & sigils
15             ## no critic qw(ProhibitConstantPragma ProhibitMagicNumbers) # USER DEFAULT 3: allow constants
16              
17             # [[[ CONSTANTS ]]]
18 2     2   10 use constant TIME_BEST => my string $TYPED_TIME_BEST = 'O($n)';
  2         4  
  2         106  
19 2     2   11 use constant TIME_AVERAGE => my string $TYPED_TIME_AVERAGE = 'O($n ** 2)';
  2     14   5  
  2         89  
  14         8067  
20 2     2   10 use constant TIME_WORST => my string $TYPED_TIME_WORST = 'O($n ** 2)';
  2         5  
  2         92  
21 2     2   12 use constant SPACE_WORST => my string $TYPED_SPACE_WORST = 'O(1)';
  2     17   3  
  2         1629  
  17         15485  
22              
23 1     1   29300 # [[[ OO PROPERTIES ]]]
24             our hashref $properties = {
25 1     1   2415 integer_data => my integer_arrayref $TYPED_integer_data = undef,
26             number_data => my number_arrayref $TYPED_number_data = undef
27 6     6   5810 };
28              
29 6     6   7245 # [[[ SUBROUTINES & OO METHODS ]]]
30              
31             our void::method $integer_sort = sub {
32             ( my RPerl::Algorithm::Sort::Bubble $self ) = @ARG;
33             $self->{integer_data} = RPerl::Algorithm::Sort::Bubble::integer_bubblesort( $self->{integer_data} );
34 2     2 0 3438 };
35 2 50 33     19  
36 0         0 our void::method $number_sort = sub {
37             ( my RPerl::Algorithm::Sort::Bubble $self ) = @ARG;
38             $self->{number_data} = RPerl::Algorithm::Sort::Bubble::number_bubblesort( $self->{number_data} );
39             };
40 0 0       0  
41 0         0 our integer_arrayref $integer_bubblesort = sub {
42             ( my integer_arrayref $integer_data ) = @ARG;
43             ::integer_arrayref_CHECKTRACE( $integer_data, '$integer_data', 'integer_bubblesort()' );
44             my integer $is_sorted = 0;
45             my integer $integer_data_length = scalar @{$integer_data}; # CONSTANT
46 2         8 my integer $integer_data_i;
47             my integer $integer_data_i_plus_1;
48             # my integer $swap;
49 2 50       10 while ( not $is_sorted ) {
50             $is_sorted = 1;
51             for my integer $i ( 0 .. ( $integer_data_length - 2 ) ) {
52             $integer_data_i = $integer_data->[$i];
53 2         14 $integer_data_i_plus_1 = $integer_data->[ ( $i + 1 ) ];
54             if ( $integer_data_i > $integer_data_i_plus_1 ) {
55             $is_sorted = 0;
56             # $swap = $integer_data_i;
57             $integer_data->[$i] = $integer_data_i_plus_1;
58             # $integer_data->[ ( $i + 1 ) ] = $swap;
59             $integer_data->[ ( $i + 1 ) ] = $integer_data_i;
60             }
61             }
62             }
63 2         21 return $integer_data;
64 2         10 };
65              
66             our number_arrayref $number_bubblesort = sub {
67             ( my number_arrayref $number_data ) = @ARG;
68 2 50   2   14 ::number_arrayref_CHECKTRACE( $number_data, '$number_data', 'number_bubblesort()' );
  2     2   5  
  2     2   70  
  2     2   14  
  2     2   12  
  2     2   7  
  2         28  
  2         17  
  2         7  
  2         78  
  2         16  
  2         16  
  2         9  
  2         28  
  2         142  
69 2 50       27 my integer $is_sorted = 0;
  0            
70             my integer $number_data_length = scalar @{$number_data}; # CONSTANT
71             my number $number_data_i;
72             my number $number_data_i_plus_1;
73             # my number $swap;
74             while ( not $is_sorted ) {
75             $is_sorted = 1;
76 2     2   15 for my integer $i ( 0 .. ( $number_data_length - 2 ) ) {
  2     2   4  
  2         123  
  2         21  
  2         11  
  2         164  
77             $number_data_i = $number_data->[$i];
78             $number_data_i_plus_1 = $number_data->[ ( $i + 1 ) ];
79             if ( $number_data_i > $number_data_i_plus_1 ) {
80             $is_sorted = 0;
81 2     2   12 # $swap = $number_data_i;
  2     2   4  
  2         61  
  2         18  
  2         10  
  2         77  
82             $number_data->[$i] = $number_data_i_plus_1;
83             # $number_data->[ ( $i + 1 ) ] = $swap;
84             $number_data->[ ( $i + 1 ) ] = $number_data_i;
85             }
86             }
87             }
88             return $number_data;
89             };
90              
91             # [ INHERITANCE TESTING ]
92              
93             our void::method $inherited__Bubble = sub {
94             ( my RPerl::Algorithm::Sort::Bubble $self, my string $person ) = @ARG;
95             RPerl::diag( 'in PERLOPS_PERLTYPES Bubble->inherited__Bubble(), have ::class($self) = ' . ::class($self) . ' and $person = ' . $person . ', FRIED' . "\n" );
96             };
97              
98             # NEED UPGRADE, CORRELATION #rp023: Inline::CPP support for multiple inheritance
99             #our void::method $inherited__Bubble_bar_set = sub {
100             # ( my RPerl::Algorithm::Sort::Bubble $self, my string $bar_new ) = @ARG;
101             # RPerl::diag( 'in PERLOPS_PERLTYPES Bubble->inherited__Bubble_bar_set(), have ::class($self) = ' . ::class($self) . ' and $bar_new = ' . $bar_new . ', FRIED' . "\n" );
102             # $self->{bar} = $bar_new;
103             #};
104              
105             our string::method $inherited__Bubble_foo_get = sub {
106             ( my RPerl::Algorithm::Sort::Bubble $self ) = @ARG;
107             RPerl::diag( 'in PERLOPS_PERLTYPES Bubble->inherited__Bubble_foo_get(), have ::class($self) = ' . ::class($self) . ', FRIED' . "\n" );
108             return $self->{foo};
109             };
110              
111             our void::method $inherited__Bubble_foo_set = sub {
112             ( my RPerl::Algorithm::Sort::Bubble $self, my string $foo_new ) = @ARG;
113             RPerl::diag( 'in PERLOPS_PERLTYPES Bubble->inherited__Bubble_foo_set(), have ::class($self) = ' . ::class($self) . ' and $foo_new = ' . $foo_new . ', FRIED' . "\n" );
114             $self->{foo} = $foo_new;
115             };
116              
117             our void::method $inherited = sub {
118             ( my RPerl::Algorithm::Sort::Bubble $self, my string $person ) = @ARG;
119             RPerl::diag( 'in PERLOPS_PERLTYPES Bubble->inherited(), have ::class($self) = ' . ::class($self) . ' and $person = ' . $person . ', ILLOGICAL' . "\n" );
120             };
121              
122             our string $uninherited__Bubble = sub {
123             ( my string $person ) = @ARG;
124             RPerl::diag( 'in PERLOPS_PERLTYPES Bubble::uninherited__Bubble(), received $person = ' . $person . ', MITOCHONDRIAL' . "\n" );
125             return 'Bubble::uninherited__Bubble() RULES! PERLOPS_PERLTYPES';
126             };
127              
128             # DEV NOTE, CORRELATION #rp004: inheritance testing, manually enable uninherited() in exactly one of Algorithm.*, Inefficient.*, Sort.*, or Bubble.*
129             our string $uninherited = sub {
130             ( my string $person ) = @ARG;
131             RPerl::diag( 'in PERLOPS_PERLTYPES Bubble::uninherited(), received $person = ' . $person . ', TETRAHEDRON' . "\n" );
132             return 'Bubble::uninherited() ROCKS! PERLOPS_PERLTYPES';
133             };
134              
135             # [ TYPE TESTING ]
136              
137             our string $integer_bubblesort__typetest0 = sub {
138             ( my integer_arrayref $lucky_integers ) = @ARG;
139             ::integer_arrayref_CHECKTRACE( $lucky_integers, '$lucky_integers', 'integer_bubblesort__typetest0()' );
140             return ( ::integer_arrayref_to_string( RPerl::Algorithm::Sort::Bubble::integer_bubblesort($lucky_integers) ) . 'PERLOPS_PERLTYPES' );
141             };
142              
143             our string $number_bubblesort__typetest0 = sub {
144             ( my number_arrayref $lucky_numbers ) = @ARG;
145             ::number_arrayref_CHECKTRACE( $lucky_numbers, '$lucky_numbers', 'number_bubblesort__typetest0()' );
146             return ( ::number_arrayref_to_string( RPerl::Algorithm::Sort::Bubble::number_bubblesort($lucky_numbers) ) . 'PERLOPS_PERLTYPES' );
147             };
148              
149             1; # end of class