1 package Math
::GSL
::Sort
::Test
;
2 use Math
::GSL
::Test qw
/:all/;
3 use base
q{Test::Class};
5 use Math
::GSL
::Permutation qw
/:all/;
6 use Math
::GSL
::Sort qw
/:all/;
7 use Math
::GSL
::Vector qw
/:all/;
8 use Math
::GSL qw
/:all/;
9 use Math
::GSL
::Errno qw
/:all/;
13 BEGIN { gsl_set_error_handler_off
(); }
15 sub make_fixture
: Test
(setup
) {
17 $self->{data
} = [ 2**15, 1, 42.7, -17, 6900, 3e-10 , 4242, 0e0
];
20 sub teardown
: Test
(teardown
) {
23 sub GSL_SORT_VECTOR
: Tests
{
24 my $vec = Math
::GSL
::Vector
->new([6,4,2,3,1,5]);
25 gsl_sort_vector
($vec->raw);
26 ok_similar
( [ $vec->as_list ], [ 1 .. 6 ] );
29 sub GSL_SORT_VECTOR_LARGEST
: Tests
{
30 my $vec = Math
::GSL
::Vector
->new([reverse 0..50]);
31 my $largest10 = [1..10];
32 # $largest10 should not have to be passed in
33 my ($status, $stuff) = gsl_sort_vector_largest
($largest10, 10, $vec->raw);
35 ok_similar
( $stuff, [ reverse (41 .. 50) ] );
38 sub GSL_SORT_VECTOR_SMALLEST
: Tests
{
39 my $vec = Math
::GSL
::Vector
->new([reverse 0..50]);
40 my $smallest10 = [1..10];
41 # $smallest10 should not have to be passed in
42 my ($status, $stuff) = gsl_sort_vector_smallest
($smallest10, 10, $vec->raw);
44 ok_similar
( $stuff, [ 0 .. 9 ] );
47 sub GSL_SORT_VECTOR_INDEX
: Tests
{
48 my $vec = Math
::GSL
::Vector
->new([4,2,3,1,5]);
49 my $p = Math
::GSL
::Permutation
->new(5);
50 ok_status
(gsl_sort_vector_index
($p->raw, $vec->raw));
51 # indices in ascending order
52 ok_similar
( [ $p->as_list ], [ 3, 1, 2, 0 , 4] );
55 sub GSL_SORT_VECTOR_SMALLEST_INDEX
: Tests
{
57 my $p = [ 1 .. $#{$self->{data}} ];
58 my $vector = Math
::GSL
::Vector
->new([4,2,3,1,5]);
59 my ($status, $stuff) = gsl_sort_vector_smallest_index
($p, 3, $vector->raw);
61 ok_similar
( $stuff , [ 3, 1, 2] );
64 sub GSL_SORT_VECTOR_LARGEST_INDEX
: Tests
{
66 my $p = [ 1 .. $#{$self->{data}} ];
67 my $vector = Math
::GSL
::Vector
->new([4,2,3,1,5]);
68 my ($status, $stuff) = gsl_sort_vector_largest_index
($p, 3, $vector->raw);
70 ok_similar
( $stuff , [ 4,0,2] );
73 sub GSL_SORT
: Tests
{
75 my $sorted = gsl_sort
($self->{data
}, 1, $#{$self->{data}} + 1 );
76 ok_similar
( $sorted , [ -17, 0e0
, 3e-10, 1, 42.7, 4242, 6900, 2**15 ], 'gsl_sort' );
79 sub GSL_SORT_SMALLEST
: Tests
{
82 my ($status, $sorted) = gsl_sort_smallest
($out, 3, $self->{data
}, 1, $#{$self->{data}}+1 );
84 ok_similar
( $sorted , [ -17, 0e0
, 3e-10 ], 'gsl_sort_smallest' );
87 sub GSL_SORT_LARGEST
: Tests
{
90 my ($status, $sorted) = gsl_sort_largest
($out, 3, $self->{data
}, 1, $#{$self->{data}}+1 );
92 ok_similar
( $sorted , [ 2**15, 6900, 4242 ], 'gsl_sort_largest' );
95 sub GSL_SORT_INDEX
: Tests
{
97 my $p = [ 1 .. $#{$self->{data}} ];
98 my $sorted = gsl_sort_index
($p, $self->{data
}, 1, $#{$self->{data}}+1 );
99 ok_similar
( $sorted, [ 3, 7, 5, 1, 2, 6, 4, 0 ] );
102 sub GSL_SORT_SMALLEST_INDEX
: Tests
{
104 my $p = [ 1 .. $#{$self->{data}} ];
105 my $sorted = gsl_sort_smallest_index
($p, 3, $self->{data
}, 1, $#{$self->{data}}+1 );
106 ok_similar
( $sorted, [ 3, 7, 5 ] );
109 sub GSL_SORT_LARGEST_INDEX
: Tests
{
111 my $p = [ 1 .. $#{$self->{data}} ];
112 my $sorted = gsl_sort_largest_index
($p, 3, $self->{data
}, 1, $#{$self->{data}}+1 );
113 ok_similar
( $sorted, [ 0,4,6 ] );