File Coverage: t/02_stats.t

# File Coverage

File: | t/02_stats.t
Coverage: | 100.0%

line | stmt | bran | cond | sub | time | code
--- | --- | --- | --- | --- | --- | ---
1 | 1 1 1 |  |  | 1 | 16669 3 43 | use strict;
2 | 1 1 1 |  |  | 1 | 6 2 31 | use warnings;
3 |
4 | 1 1 1 |  |  | 1 | 412 19502 9 | use Test::More;
5 | 1 1 1 |  |  | 1 | 610 7442 193 | use Test::Deep;
6 |
7 | 1 1 1 |  |  | 1 | 236 3 2296 | use App::plackbench::Stats;
8 |
9 | 1 |  |  |  | 101069 | subtest 'new' => \&test_new;
10 | 1 |  |  |  | 490 | subtest 'insert' => \&test_insert;
11 | 1 |  |  |  | 471 | subtest 'count' => \&test_count;
12 | 1 |  |  |  | 465 | subtest 'mean' => \&test_mean;
13 | 1 |  |  |  | 461 | subtest 'median' => \&test_median;
14 | 1 |  |  |  | 466 | subtest 'min' => \&test_min;
15 | 1 |  |  |  | 462 | subtest 'max' => \&test_max;
16 | 1 |  |  |  | 458 | subtest 'standard deviation' => \&test_standard_deviation;
17 | 1 |  |  |  | 462 | subtest 'percentile' => \&test_percentile;
18 |
19 | 1 |  |  |  | 492 | done_testing();
20 |
21 |  |  |  |  |  | sub test_new {
22 | 1 |  |  | 1 | 538 | my $stats = App::plackbench::Stats->new( 2, 1 );
23 | 1 |  |  |  | 9 | ok( $stats->isa('App::plackbench::Stats'),
24 |  |  |  |  |  | 'new() should return an instance of App::plackbench::Stats' );
25 | 1 |  |  |  | 292 | cmp_deeply(
26 |  |  |  |  |  | $stats,
27 |  |  |  |  |  | noclass( [ 1, 2 ] ),
28 |  |  |  |  |  | 'arguments should be copied, sorted and blessed'
29 |  |  |  |  |  | );
30 | 1 |  |  |  | 7228 | return;
31 |  |  |  |  |  | }
32 |
33 |  |  |  |  |  | sub test_insert {
34 | 1 |  |  | 1 | 489 | my $stats = App::plackbench::Stats->new(10);
35 |
36 | 1 |  |  |  | 4 | $stats->insert(9);
37 | 1 |  |  |  | 4 | cmp_deeply($stats, noclass([9, 10]), 'should insert the new number in the list');
38 |
39 | 1 |  |  |  | 1020 | $stats->insert(12);
40 | 1 |  |  |  | 5 | cmp_deeply($stats, noclass([9, 10, 12]), 'should insert the new number in the list in the right order');
41 |
42 | 1 |  |  |  | 973 | $stats->insert(11);
43 | 1 |  |  |  | 5 | cmp_deeply($stats, noclass([9, 10, 11, 12]), 'should insert the new number in the list in the right order');
44 |
45 | 1 |  |  |  | 1000 | return;
46 |  |  |  |  |  | }
47 |
48 |  |  |  |  |  | sub test_count {
49 | 1 |  |  | 1 | 438 | my $stats = App::plackbench::Stats->new( 1, 2, 3, 4, 5 );
50 | 1 |  |  |  | 4 | is( $stats->count(), 5,
51 |  |  |  |  |  | 'count() should return the number of items in the object' );
52 |
53 | 1 |  |  |  | 273 | $stats = App::plackbench::Stats->new();
54 | 1 |  |  |  | 4 | is( $stats->count(), 0, 'count() should be 0 for empty lists' );
55 |
56 | 1 |  |  |  | 266 | return;
57 |  |  |  |  |  | }
58 |
59 |  |  |  |  |  | sub test_mean {
60 | 1 |  |  | 1 | 431 | my $stats = App::plackbench::Stats->new( 1, 2, 3, 4, 5 );
61 | 1 |  |  |  | 5 | is( $stats->mean(), 3, 'mean() should return the average' );
62 |
63 | 1 |  |  |  | 267 | $stats = App::plackbench::Stats->new();
64 | 1 |  |  |  | 4 | is( $stats->mean(), undef, 'mean() should return undef for an empty list' );
65 |
66 | 1 |  |  |  | 297 | return;
67 |  |  |  |  |  | }
68 |
69 |  |  |  |  |  | sub test_min {
70 | 1 |  |  | 1 | 424 | my $stats = App::plackbench::Stats->new( 5, 3, 0, 1, 4 );
71 | 1 |  |  |  | 4 | is( $stats->min(), 0, 'min() should return the smallest number' );
72 |
73 | 1 |  |  |  | 271 | $stats = App::plackbench::Stats->new();
74 | 1 |  |  |  | 5 | is( $stats->min(), undef, 'min() should return undef for an empty list' );
75 | 1 |  |  |  | 266 | return;
76 |  |  |  |  |  | }
77 |
78 |  |  |  |  |  | sub test_max {
79 | 1 |  |  | 1 | 432 | my $stats = App::plackbench::Stats->new( 3, 0, 5, 1, 4 );
80 | 1 |  |  |  | 4 | is( $stats->max(), 5, 'max() should return the largest number' );
81 |
82 | 1 |  |  |  | 269 | $stats = App::plackbench::Stats->new();
83 | 1 |  |  |  | 5 | is( $stats->max(), undef, 'max() should return undef for an empty list' );
84 |
85 | 1 |  |  |  | 262 | return;
86 |  |  |  |  |  | }
87 |
88 |  |  |  |  |  | sub test_median {
89 | 1 |  |  | 1 | 423 | my $stats = App::plackbench::Stats->new( 3, 0, 5, 1, 4 );
90 | 1 |  |  |  | 5 | is( $stats->median(), 3, 'median() should return the median' );
91 |
92 | 1 |  |  |  | 269 | $stats = App::plackbench::Stats->new( 0, 1, 3, 4 );
93 | 1 |  |  |  | 5 | is( $stats->median(), 2, 'median() should return the average between the two medians for an odd number of items' );
94 |
95 | 1 |  |  |  | 271 | $stats = App::plackbench::Stats->new();
96 | 1 |  |  |  | 5 | is( $stats->median(), undef, 'median() should return undef for an empty list' );
97 |
98 | 1 |  |  |  | 267 | return;
99 |  |  |  |  |  | }
100 |
101 |  |  |  |  |  | sub test_standard_deviation {
102 | 1 |  |  | 1 | 421 | my $stats = App::plackbench::Stats->new(2, 4, 4, 4, 5, 5, 7, 9);
103 | 1 |  |  |  | 5 | is( $stats->standard_deviation(), 2, 'standard_deviation() should return the standard_deviation' );
104 |
105 | 1 |  |  |  | 271 | $stats = App::plackbench::Stats->new();
106 | 1 |  |  |  | 5 | is( $stats->standard_deviation(), 0, 'standard_deviation() should return 0 for an empty list' );
107 |
108 | 1 |  |  |  | 264 | return;
109 |  |  |  |  |  | }
110 |
111 |  |  |  |  |  | sub test_percentile {
112 | 1 |  |  | 1 | 423 | my $stats = App::plackbench::Stats->new( 9, 8, 7, 6, 5, 4, 3, 2, 1 );
113 | 1 |  |  |  | 4 | is( $stats->percentile(100),
114 |  |  |  |  |  | $stats->max(), '100th percentile should return the largest number' );
115 | 1 |  |  |  | 268 | is( $stats->percentile(50),
116 |  |  |  |  |  | $stats->median(), '50th percentile should return median' );
117 | 1 |  |  |  | 265 | is( $stats->percentile(0),
118 |  |  |  |  |  | $stats->min(), '0th percentile should return the smallest number' );
119 |
120 | 1 |  |  |  | 266 | $stats = App::plackbench::Stats->new();
121 | 1 |  |  |  | 4 | is( $stats->percentile(50), undef, 'percentile() should return undef for an empty list' );
122 |
123 | 1 |  |  |  | 264 | return;
124 |  |  |  |  |  | }
125 |
126 | 1 |  |  |  | 100 | 1;