Refactor inclusion of system.i to one place
[Math-GSL.git] / t / VectorComplex.t
blob6e081a27b978552a92cbc9410b6c559cbc7af681
1 package Math::GSL::VectorComplex::Test;
2 use base q{Test::Class};
3 use Test::More tests => 26;
4 use Math::GSL::Test          qw/:all/;
5 use Math::GSL                qw/:all/;
6 use Math::GSL::VectorComplex qw/:all/;
7 use Math::GSL::Complex       qw/:all/;
8 use Math::GSL::Errno         qw/:all/;
9 use Math::GSL::Const         qw/:all/;
10 use Test::Exception;
11 use Data::Dumper;
12 use Math::Complex;
13 use strict;
15 BEGIN{ gsl_set_error_handler_off(); }
17 sub make_fixture : Test(setup) {
18     my $self = shift;
19     my $z = Math::Complex->make(0,3);
20     $self->{vector} = Math::GSL::VectorComplex->new([ $z, $z ** 2, 3 ] );
23 sub teardown : Test(teardown) {
24     unlink 'vector' if -f 'vectorcomplex';
27 sub GSL_VECTOR_COMPLEX_ALLOC : Tests(1) {
28     my $vec = gsl_vector_complex_alloc(5);
29     isa_ok($vec, 'Math::GSL::VectorComplex');
32 sub GSL_VECTOR_COMPLEX_CALLOC : Tests(1) {
33     my $vec = gsl_vector_complex_calloc(5);
34     isa_ok($vec, 'Math::GSL::VectorComplex');
37 sub GSL_VECTOR_COMPLEX_NEW : Tests(12) {
38     my $u = Math::GSL::VectorComplex->new(10);
39     isa_ok($u, 'Math::GSL::VectorComplex');
40     ok( $u->length ==  10, 'length');
41     isa_ok($u->raw, 'Math::GSL::VectorComplex::gsl_vector_complex');
43     my $z = Math::Complex->make(0,2);
44     my $v = Math::GSL::VectorComplex->new([ $z, $z ** 2 ] );
45     isa_ok($v, 'Math::GSL::VectorComplex');
47     my @elements = $v->as_list;
48     map { isa_ok( $_, 'Math::Complex') } @elements;
49     ok_similar( [ map { Re($_) } @elements ], [ 0, -4 ] );
50     ok_similar( [ map { Im($_) } @elements ], [ 2, 0  ] );
52     my $e0 = gsl_vector_complex_get($v->raw,0);
53     ok_similar( gsl_complex_abs($e0), 2, 'first element: new gets abs correct');
54     ok_similar( gsl_complex_arg($e0), $M_PI/2, 'first element: new gets arg correct');
56     my $e1 = gsl_vector_complex_get($v->raw,1);
57     ok_similar( gsl_complex_abs($e1), 4, '2nd element: new get abs correct');
58     ok_similar( gsl_complex_arg($e1), $M_PI, '2nd element: new get arg correct');
61 sub GSL_VECTOR_COMPLEX_REVERSE : Tests(5) {
62     my $self = shift;
63     my $vector = $self->{vector};
64     ok_status( gsl_vector_complex_reverse($vector->raw), $GSL_SUCCESS,  'vector_complex_reverse' );
65     my @elements = $vector->as_list;
66     ok_similar( [ map { Re($_) } @elements ], [ 3, -9, 0 ], 'real parts of vector get reversed');
67     ok_similar( [ map { Im($_) } @elements ], [ 0,  0, 3 ], 'imag parts of vector get reversed');
69     my @reversed = $vector->reverse->as_list;
71     ok_similar( [ map { Re($_) } @reversed ], [ 0, -9, 3 ], 'real parts of vector get reversed');
72     ok_similar( [ map { Im($_) } @reversed ], [ 3,  0, 0 ], 'imag parts of vector get reversed');
76 sub GSL_VECTOR_COMPLEX_SWAP : Tests(6) {
77     my $self   = shift;
78     my $y = Math::Complex->make(1,1);
79     my $z = Math::Complex->make(0,3);
80     my $v = $self->{vector};
81     my $w = Math::GSL::VectorComplex->new([ $y , 1 , 3 ]);
83     ok_status( gsl_vector_complex_swap( $v->raw, $w->raw ) );
84     ok_similar ( [ map { Re $_ } $v->as_list     ],
85                  [ map { Re $_ } $y ,     1 ,  3 ] );
86     ok_similar ( [ map { Im $_ } $w->as_list     ],
87                  [ map { Im $_ } $z , $z ** 2, 3 ] );
89     isa_ok( $v->swap( $w ), 'Math::GSL::VectorComplex' );
91     ok_similar ( [ map { Re $_ } $w->as_list     ],
92                  [ map { Re $_ } $y ,     1 ,  3 ] );
93     ok_similar ( [ map { Im $_ } $v->as_list     ],
94                  [ map { Im $_ } $z , $z ** 2, 3 ] );
98 sub GSL_VECTOR_COMPLEX_SET_GET : Tests {
99     my $vec = gsl_vector_complex_calloc(5);
100     my $complex = gsl_complex_rect(2,1);
101     gsl_vector_complex_set($vec, 0, $complex);
102     my $result = gsl_complex_rect(5,5);
103     $result = gsl_vector_complex_get($vec, 0);
104     isa_ok($result, 'Math::GSL::VectorComplex::gsl_complex');
105     local $TODO = "don't know why the complex returned gsl_vector_complex_get is not usable";
108 Test::Class->runtests;