| File: | t/02_stats.t |
| Coverage: | 100.0% |
| line | stmt | bran | cond | sub | time | code |
|---|---|---|---|---|---|---|
| 1 | 1 1 1 | 16669 3 43 | use strict; | |||
| 2 | 1 1 1 | 6 2 31 | use warnings; | |||
| 3 | ||||||
| 4 | 1 1 1 | 412 19502 9 | use Test::More; | |||
| 5 | 1 1 1 | 610 7442 193 | use Test::Deep; | |||
| 6 | ||||||
| 7 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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; | |||