File: QRNG.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 (112 lines) | stat: -rw-r--r-- 3,269 bytes parent folder | download | duplicates (5)
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
package Math::GSL::QRNG::Test;
use base q{Test::Class};
use Test::More tests => 24;
use Math::GSL::QRNG  qw/:all/;
use Math::GSL::Test  qw/:all/;
use Math::GSL::Errno qw/:all/;
use Data::Dumper;
use strict;
BEGIN { gsl_set_error_handler_off() }

sub make_fixture : Test(setup) {
    my $self = shift;
    $self->{sobol} = gsl_qrng_alloc($gsl_qrng_sobol, 2);
}

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

sub GSL_QRNG_ALLOC : Tests {
    my $qrng = gsl_qrng_alloc($gsl_qrng_sobol, 2);
    isa_ok( $qrng, 'Math::GSL::QRNG');
}

sub GSL_QRNG_STATE_SIZE : Tests {
    my $self  = shift;
    my $state = gsl_qrng_state($self->{sobol});
    my $size  = gsl_qrng_size($self->{sobol});

    ok( defined $state, "state is defined");
    cmp_ok($state,'>',0 , 'state is positive and non-zero');

    ok( defined $size, "size is defined");
    cmp_ok($size,'>',0 , 'size is positive and non-zero');
}

sub GSL_QRNG_CLONE : Tests {
    my $self  = shift;
    my $droid = gsl_qrng_clone($self->{sobol});
    isa_ok($droid, 'Math::GSL::QRNG' );
}

sub GSL_QRNG_NAME : Tests {
    my $self = shift;
    my $name = gsl_qrng_name($self->{sobol});
    cmp_ok($name,'eq','sobol', 'gsl_qrng_name == sobol' );
}

sub GSL_QRNG_GET : Tests {
    my $self = shift;

    my ($status, @values) = gsl_qrng_get($self->{sobol});

    is ($status, $GSL_SUCCESS);
    ok_similar( [ 0.5, 0.5 ], \@values, 'gsl_qrng_get returns multiple values' );

    ($status, @values) = gsl_qrng_get($self->{sobol});
    ok_similar( [ 0.75, 0.25 ], \@values, 'gsl_qrng_get returns correct values for sobol' );

    # Let's try with a bigger size generator
    my $tmp = gsl_qrng_alloc($gsl_qrng_sobol, 4);
    ($status, @values) = gsl_qrng_get($tmp);
    is (scalar(@values), 4, 'gsl_qrng_get returns correct number of samples');
}

sub GSL_QRNG_SOBOL : Tests {
    my $sobol = Math::GSL::QRNG::Sobol->new(2);
    isa_ok($sobol, "Math::GSL::QRNG::Sobol");
    isa_ok($sobol->{qrng}, "Math::GSL::QRNG");

    my @state = $sobol->get();
    ok_similar( [0.5, 0.5], \@state, "get returns correct number of samples");

    $sobol->reinit();
    @state = $sobol->get();
    ok_similar( [0.5, 0.5], \@state, "QRNG was reinitted");

    is($sobol->name(), "sobol", "QRNG name acessible");

    my $clone = $sobol->clone();
    isa_ok($clone, "Math::GSL::QRNG::Sobol");

    @state = $clone->get();
    ok_similar( [ 0.75, 0.25 ], \@state, 'clone clones the qrng status' );
}

sub GSL_QRNG_HALTON : Tests {
    my $halton = Math::GSL::QRNG::Halton->new(2);
    isa_ok($halton, "Math::GSL::QRNG::Halton");

    my @state = $halton->get();
    ok_similar( [0.5, 0.333333333], \@state, "get returns correct number of samples");
}

sub GSL_QRNG_REVERSE_HALTON : Tests {
    my $rhalton = Math::GSL::QRNG::ReverseHalton->new(2);
    isa_ok($rhalton, "Math::GSL::QRNG::ReverseHalton");

    my @state = $rhalton->get();
    ok_similar( [0.5, 0.666666666], \@state, "get returns correct number of samples");
}

sub GSL_QRNG_NIEDERREITER2 : Tests {
    my $niederreiter2 = Math::GSL::QRNG::Niederreiter2->new(2);
    isa_ok($niederreiter2, "Math::GSL::QRNG::Niederreiter2");

    my @state = $niederreiter2->get();
    ok_similar( [0, 0], \@state, "get returns correct number of samples");
}

Test::Class->runtests;