1 package Math
::GSL
::Complex
::Test
;
2 use base
q{Test::Class};
4 use Math
::GSL
::Complex qw
/:all/;
5 use Math
::GSL qw
/is_similar/;
9 sub make_fixture
: Test
(setup
) {
11 $self->{gsl_complex
} = Math
::GSL
::Complex
::gsl_complex
->new;
14 sub teardown
: Test
(teardown
) {
17 sub GSL_COMPLEX_NEW
: Test
{
19 my $x = $self->{gsl_complex
};
20 isa_ok
( $x, 'Math::GSL::Complex' );
23 sub GSL_COMPLEX_RECT
: Tests
{
24 my $x = gsl_complex_rect
(5,3);
25 is_deeply
( [ gsl_parts
($x) ], [ 5, 3 ], 'gs_complex_rect' );
28 sub GSL_COMPLEX_POLAR
: Tests
{
29 my $x = gsl_complex_polar
(1.0,0.1);
30 my ($r,$theta) = ( gsl_complex_abs
($x), gsl_complex_arg
($x) );
32 print "x=$r * e^(i $theta)*I\n" if $ENV{DEBUG
};
33 ok
( is_similar
($r,1.0), 'gsl_complex_polar r, res=' .($r-1.) . "\n");
34 ok
( is_similar
($theta,0.1), 'gsl_complex_polar theta, res=' .($theta-0.1) . "\n");
37 sub GSL_COMPLEX_ABS
: Tests
{
38 my $x = gsl_complex_rect
(5,3);
39 my $abs = gsl_complex_abs
($x);
40 ok
( is_similar
($abs, sqrt(34)), 'gsl_complex_abs');
43 sub GSL_COMPLEX_ABS2
: Tests
{
44 my $x = gsl_complex_rect
(5,3);
45 my $abs = gsl_complex_abs2
($x);
46 ok
( is_similar
($abs, 34), 'gsl_complex_abs2' );
49 sub GSL_COMPLEX_LOGABS
: Tests
{
50 my $x = gsl_complex_rect
(5,3);
52 my $abs = gsl_complex_logabs
($x);
53 ok
( is_similar
($abs, log(sqrt(34)) ), 'gsl_complex_logabs' );
56 sub GSL_COMPLEX_ADD
: Tests
{
57 my $x = gsl_complex_rect
(5,3);
58 my $y = gsl_complex_rect
(1,2);
60 my $z = gsl_complex_add
($x, $y);
61 is_deeply
( [ gsl_parts
($z) ], [ 6, 5 ] );
64 sub GSL_COMPLEX_SUB
: Tests
{
65 my $x = gsl_complex_rect
(5,3);
66 my $y = gsl_complex_rect
(1,2);
68 my $z = gsl_complex_sub
($x, $y);
69 is_deeply
( [ gsl_parts
($z) ], [ 4, 1 ] );
72 sub GSL_COMPLEX_MUL
: Tests
{
73 my $x = gsl_complex_rect
(5,3);
74 my $y = gsl_complex_rect
(1,2);
76 my $z = gsl_complex_mul
($x, $y);
77 is_deeply
( [ gsl_parts
($z) ], [ -1, 13 ] );
80 sub GSL_COMPLEX_DIV
: Tests
{
81 my $x = gsl_complex_rect
(4,5);
82 my $y = gsl_complex_rect
(2,1);
84 my $z = gsl_complex_div
($x, $y);
85 is_deeply
( [ gsl_parts
($z) ], [ 13/5, 6/5 ] );
87 sub GSL_COMPLEX_EQ
: Tests
{
88 my $x = gsl_complex_rect
(4,5);
89 my $y = gsl_complex_rect
(2,1);
90 ok
(! gsl_complex_eq
($x,$y), 'gsl_complex_eq' );
91 $y = gsl_complex_rect
(4,5);
92 ok
( gsl_complex_eq
($x,$y), 'gsl_complex_eq' );
94 sub GSL_COMPLEX_ADD_REAL
: Tests
{
95 my $x = gsl_complex_rect
(5,3);
97 my $z = gsl_complex_add_real
($x, 1);
98 ok
( gsl_real
($z) == 6, 'gsl_complex_add_real');
101 sub GSL_COMPLEX_SUB_REAL
: Tests
{
102 my $x = gsl_complex_rect
(5,3);
104 my $z = gsl_complex_sub_real
($x, 1);
105 ok
( gsl_real
($z) == 4, 'gsl_complex_sub_real');
108 sub GSL_COMPLEX_MUL_REAL
: Tests
{
109 my $x = gsl_complex_rect
(5,3);
111 my $z = gsl_complex_mul_real
($x, 2);
112 ok
( gsl_real
($z) == 10, 'gsl_complex_mul_real');
115 sub GSL_COMPLEX_DIV_REAL
: Tests
{
116 my $x = gsl_complex_rect
(6,3);
118 my $z = gsl_complex_div_real
($x, 2);
119 ok
( gsl_real
($z) == 3, 'gsl_complex_div_real');
122 sub GSL_COMPLEX_ADD_IMAG
: Tests
{
123 my $x = gsl_complex_rect
(6,3);
125 my $z = gsl_complex_add_imag
($x, 2);
126 ok
( gsl_imag
($z) == 5, 'gsl_complex_add_imag');
129 sub GSL_COMPLEX_SUB_IMAG
: Tests
{
130 my $x = gsl_complex_rect
(6,3);
132 my $z = gsl_complex_sub_imag
($x, 2);
133 ok
( gsl_imag
($z) == 1, 'gsl_complex_sub_imag');
136 sub GSL_COMPLEX_MUL_IMAG
: Tests
{
137 my $x = gsl_complex_rect
(6,3);
139 my $z = gsl_complex_mul_imag
($x, 2);
140 is_deeply
( [ gsl_parts
($z) ], [ -6, 12 ] );
143 sub GSL_COMPLEX_DIV_IMAG
: Tests
{
144 my $x = gsl_complex_rect
(6,4);
146 my $z = gsl_complex_div_imag
($x, 2);
147 is_deeply
( [ gsl_parts
($z) ], [ 2, -3 ] );
150 sub GSL_COMPLEX_CONJUGATE
: Tests
{
151 my $x = gsl_complex_rect
(6,4);
153 my $z = gsl_complex_conjugate
($x);
154 ok
( gsl_real
($z) == 6, 'gsl_complex_conjugate');
155 ok
( gsl_imag
($z) == -4, 'ggsl_complex_conjugat');
159 sub GSL_COMPLEX_NEGATIVE
: Tests
{
160 my $x = gsl_complex_rect
(6,4);
162 my $z = gsl_complex_negative
($x);
163 ok
( gsl_real
($z) == -6, 'gsl_complex_negative');
164 ok
( gsl_imag
($z) == -4, 'gsl_complex_negative');
167 sub GSL_COMPLEX_SQRT
: Tests
{
168 my $x = gsl_complex_rect
(-7,24);
170 my $z = gsl_complex_sqrt
($x);
171 ok
( is_similar
( [ gsl_parts
($z) ],
177 sub GSL_COMPLEX_SQRT_REAL
: Tests
{
178 my $x = gsl_complex_rect
(9,4);
180 my $z = gsl_complex_sqrt_real
(-4);
181 ok
( gsl_imag
($z) == 2, 'gsl_complex_sqrt_real');
184 sub GSL_COMPLEX_POW
: Tests
{
185 my $x = gsl_complex_rect
(0,1);
186 my $y = gsl_complex_rect
(2,0);
187 my $z = gsl_complex_pow
($x, $y);
189 my ($real, $imag) = gsl_parts
($z);
190 ok
( is_similar
($real, -1), 'gsl_complex_pow' );
191 ok
( is_similar
($imag, 0), 'gsl_complex_pow' );
193 $x = gsl_complex_rect
(3,4);
194 $z = gsl_complex_pow
($x, $y);
196 ok
( is_similar
(gsl_real
($z), 3**2 - 4**2), 'gsl_complex_pow');
197 ok
( is_similar
(gsl_imag
($z), 2*3*4), 'gsl_complex_pow');
200 sub GSL_COMPLEX_SET_REAL
: Tests
{
201 my $x = gsl_complex_rect
(3,4);
203 ok
( is_similar
(gsl_real
($x), 5), 'gsl_complex_set_real');
204 ok
( is_similar
(gsl_imag
($x), 4), 'gsl_complex_set_real');
207 sub GSL_COMPLEX_SET_IMAG
: Tests
{
208 my $x = gsl_complex_rect
(3,4);
210 ok
( is_similar
(gsl_imag
($x), 5), 'gsl_complex_set_imag');
211 ok
( is_similar
(gsl_real
($x), 3), 'gsl_complex_set_imag');
214 sub GSL_COMPLEX_SET_COMPLEX
: Tests
{
215 my $x = gsl_complex_rect
(3,4);
216 gsl_set_complex
($x, 5, 3);
217 ok
( is_similar
(gsl_imag
($x), 3), 'gsl_complex_set_complex');
218 ok
( is_similar
(gsl_real
($x), 5), 'gsl_complex_set_complex');
221 sub GSL_COMPLEX_SIN
: Tests
{
222 my $x = gsl_complex_rect
(3,2);
223 my $z = gsl_complex_sin
($x);
224 ok
( is_similar
(gsl_real
($z), 0.53092108624852), 'gsl_complex_sin');
225 ok
( is_similar
(gsl_imag
($z), -3.59056458998578), 'gsl_complex_sin');
228 sub GSL_COMPLEX_COS
: Tests
{
229 my $x = gsl_complex_rect
(3,2);
230 my $z = gsl_complex_cos
($x);
231 ok
( is_similar
(gsl_real
($z), -3.72454550491532), 'gsl_complex_cos');
232 ok
( is_similar
(gsl_imag
($z), -0.511822569987385), 'gsl_complex_cos');
235 sub GSL_COMPLEX_TAN
: Tests
{
236 my $x = gsl_complex_rect
(3,2);
237 my $z = gsl_complex_tan
($x);
238 ok
( is_similar
(gsl_real
($z), -0.0098843750383225), 'gsl_complex_tan');
239 ok
( is_similar
(gsl_imag
($z), 0.965385879022133), 'gsl_complex_tan');
242 sub GSL_COMPLEX_SEC
: Tests
{
243 my $x = gsl_complex_rect
(3,2);
244 my $z = gsl_complex_sec
($x);
245 ok
( is_similar
(gsl_real
($z), -0.263512975158389), 'gsl_complex_sec');
246 ok
( is_similar
(gsl_imag
($z), 0.0362116365587685), 'gsl_complex_sec');
249 sub GSL_COMPLEX_CSC
: Tests
{
250 my $x = gsl_complex_rect
(3,2);
251 my $z = gsl_complex_csc
($x);
252 ok
( is_similar
(gsl_real
($z), 0.0403005788568915), 'gsl_complex_csc');
253 ok
( is_similar
(gsl_imag
($z), 0.27254866146294), 'gsl_complex_csc');
256 sub GSL_COMPLEX_COT
: Tests
{
257 my $x = gsl_complex_rect
(3,2);
258 my $z = gsl_complex_cot
($x);
259 ok
( is_similar
(gsl_real
($z), -0.0106047834703371), 'gsl_complex_cot');
260 ok
( is_similar
(gsl_imag
($z), -1.035746637765), 'gsl_complex_cot');