1 package Math::GSL::VectorComplex::Test;
2 use base q{Test::Class};
3 use Test::More tests => 23;
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/;
15 BEGIN{ gsl_set_error_handler_off(); }
17 sub make_fixture : Test(setup) {
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_NEW : Tests(12) {
28 my $u = Math::GSL::VectorComplex->new(10);
29 isa_ok($u, 'Math::GSL::VectorComplex');
30 ok( $u->length == 10, 'length');
31 isa_ok($u->raw, 'Math::GSL::VectorComplex::gsl_vector_complex');
33 my $z = Math::Complex->make(0,2);
34 my $v = Math::GSL::VectorComplex->new([ $z, $z ** 2 ] );
35 isa_ok($v, 'Math::GSL::VectorComplex');
37 my @elements = $v->as_list;
38 map { isa_ok( $_, 'Math::Complex') } @elements;
39 ok_similar( [ map { Re($_) } @elements ], [ 0, -4 ] );
40 ok_similar( [ map { Im($_) } @elements ], [ 2, 0 ] );
42 my $e0 = gsl_vector_complex_get($v->raw,0);
43 ok_similar( gsl_complex_abs($e0), 2, 'first element: new gets abs correct');
44 ok_similar( gsl_complex_arg($e0), $M_PI/2, 'first element: new gets arg correct');
46 my $e1 = gsl_vector_complex_get($v->raw,1);
47 ok_similar( gsl_complex_abs($e1), 4, '2nd element: new get abs correct');
48 ok_similar( gsl_complex_arg($e1), $M_PI, '2nd element: new get arg correct');
51 sub GSL_VECTOR_COMPLEX_REVERSE : Tests(5) {
53 my $vector = $self->{vector};
54 ok_status( gsl_vector_complex_reverse($vector->raw), $GSL_SUCCESS, 'vector_complex_reverse' );
55 my @elements = $vector->as_list;
56 ok_similar( [ map { Re($_) } @elements ], [ 3, -9, 0 ], 'real parts of vector get reversed');
57 ok_similar( [ map { Im($_) } @elements ], [ 0, 0, 3 ], 'imag parts of vector get reversed');
59 my @reversed = $vector->reverse->as_list;
61 ok_similar( [ map { Re($_) } @reversed ], [ 0, -9, 3 ], 'real parts of vector get reversed');
62 ok_similar( [ map { Im($_) } @reversed ], [ 3, 0, 0 ], 'imag parts of vector get reversed');
66 sub GSL_VECTOR_COMPLEX_SWAP : Tests(6) {
68 my $y = Math::Complex->make(1,1);
69 my $z = Math::Complex->make(0,3);
70 my $v = $self->{vector};
71 my $w = Math::GSL::VectorComplex->new([ $y , 1 , 3 ]);
73 ok_status( gsl_vector_complex_swap( $v->raw, $w->raw ) );
74 ok_similar ( [ map { Re $_ } $v->as_list ],
75 [ map { Re $_ } $y , 1 , 3 ] );
76 ok_similar ( [ map { Im $_ } $w->as_list ],
77 [ map { Im $_ } $z , $z ** 2, 3 ] );
79 isa_ok( $v->swap( $w ), 'Math::GSL::VectorComplex' );
81 ok_similar ( [ map { Re $_ } $w->as_list ],
82 [ map { Re $_ } $y , 1 , 3 ] );
83 ok_similar ( [ map { Im $_ } $v->as_list ],
84 [ map { Im $_ } $z , $z ** 2, 3 ] );
88 Test::Class->runtests;