File: Rstat.t

package info (click to toggle)
libmath-gsl-perl 0.45-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 192,156 kB
  • sloc: ansic: 895,524; perl: 24,682; makefile: 12
file content (113 lines) | stat: -rw-r--r-- 3,564 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
package Math::GSL::Rstat::Test;
use base q{Test::Class};
use Test::Most;
use Math::GSL           qw/:all/;
use Math::GSL::Test     qw/:all/;
use Math::GSL::Errno    qw/:all/;
use Data::Dumper;
use strict;
use warnings;

BEGIN {
    gsl_set_error_handler_off();

    my $version = gsl_version();
    my ($major, $minor, $tiny) = split /\./, $version;
    if ($major >= 2) {
        eval "use Math::GSL::Rstat qw/:all/";
        die $@ if @$;
    } else {
        plan skip_all => "Rstat doesn't exist in GSL < 2.0";
        exit(0);
    }
}

sub make_fixture : Test(setup) {
    my $self = shift;
    my $version = gsl_version();
    my ($major, $minor, $tiny) = split /\./, $version;
    $self->{major} = $major;
    $self->{minor} = $minor;
    $self->{rstat}    = Math::GSL::Rstat::gsl_rstat_alloc();
    $self->{quantile} = Math::GSL::Rstat::gsl_rstat_quantile_alloc(0.5);
}

sub teardown : Test(teardown) {
    my $self = shift;
}

sub get_data { [17.2, 18.1, 16.5, 18.3, 12.6] }

sub get_expected_median {
    my ( $self ) = @_;

    my $expected_median = 16.500000;
    if ($self->{major} >= 3 || ($self->{major} >=2 and $self->{minor} >=7)) {
        $expected_median = 17.2;
    }
    return $expected_median;
}

sub GSL_RSTAT_QUANTILE : Tests {
    my $self  = shift;
    my $rstat = $self->{quantile};
    isa_ok($rstat, "Math::GSL::Rstat");
    my $data = get_data();
    map {
        my $status = gsl_rstat_quantile_add( $_, $rstat);
        ok_status($status);
    } @$data;
    my $q = gsl_rstat_quantile_get($rstat);
    my $expected_median = $self->get_expected_median();
    ok_similar($q, $expected_median,"gsl_rstat_quantile_get=$q");
}

sub GSL_RSTAT : Tests {
    my $self  = shift;
    my $rstat = $self->{rstat};
    isa_ok($rstat, "Math::GSL::Rstat");

    my $data = get_data();
    map {
        my $status = gsl_rstat_add( $_, $rstat);
        ok($status == $GSL_SUCCESS, "gsl_rstat_quantile_add");
    } @$data;

    my $mean     = gsl_rstat_mean($rstat);
    my $variance = gsl_rstat_variance($rstat);
    my $largest  = gsl_rstat_max($rstat);
    my $smallest = gsl_rstat_min($rstat);
    my $sd       = gsl_rstat_sd($rstat);
    my $sd_mean  = gsl_rstat_sd_mean($rstat);
    my $median   = gsl_rstat_median($rstat);
    my $skew     = gsl_rstat_skew($rstat);
    my $kurtosis = gsl_rstat_kurtosis($rstat);
    my $n        = gsl_rstat_n($rstat);
    my $eps      = 1e-3;

    if ($self->{major} >=3 || ($self->{major} >=2 and $self->{minor} >=2)) {
        my $rms = gsl_rstat_rms($rstat);
        ok_similar( $rms, 16.669433,"The root mean squared is 16.66", $eps);
    }
    my $expected_median = $self->get_expected_median();
    ok_similar( 16.54, $mean, "The sample mean is 16.54", $eps);
    ok_similar( 5.373, $variance, "The estimated variance is 5.373", $eps);
    ok_similar( 18.30, $largest, "The largest value is 18.3", $eps);
    ok_similar( 12.60, $smallest, "The smallest value is 12.6", $eps);
    ok_similar( $sd, 2.317973, "The standard deviation is 2.31", $eps);
    ok_similar( $sd_mean, 1.036629,"The sd_mean is 1.03", $eps);
    ok_similar( $median, $expected_median, "The median is $expected_median", $eps);
    ok_similar( $skew, -0.829058, "The skew is -0.83", $eps);
    ok_similar( $kurtosis,-1.221703,"The kurtosis is -1.22", $eps);
    ok($n == 5, "n=5");

    my $status = gsl_rstat_reset($rstat);
    ok($status == $GSL_SUCCESS, "gsl_rstat_reset");
    $n = gsl_rstat_n($rstat);
    ok($n == 0, "n=0");

    gsl_rstat_free($rstat);
    ok(1,"gsl_rstat_free seemed to work");
}

Test::Class->runtests;