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 |