Update META.yml
[Math-GSL.git] / lib / Math / GSL / Complex / Test.pm
blob02d2770a0cb9e3f3ce3ac50b9447cfcc4e037601
1 package Math::GSL::Complex::Test;
2 use Math::GSL::Test qw/:all/;
3 use base q{Test::Class};
4 use Test::More;
5 use Math::GSL::Complex qw/:all/;
6 use Math::GSL::Const qw/:all/;
7 use Math::GSL qw/:all/;
8 use Data::Dumper;
9 use strict;
11 sub make_fixture : Test(setup) {
12 my $self = shift;
13 $self->{gsl_complex} = Math::GSL::Complex::gsl_complex->new;
16 sub teardown : Test(teardown) {
19 sub GSL_COMPLEX_NEW : Test {
20 my $self = shift;
21 my $x = $self->{gsl_complex};
22 isa_ok( $x, 'Math::GSL::Complex' );
25 sub GSL_COMPLEX_RECT : Tests {
26 my $x = gsl_complex_rect(5,3);
27 ok_similar( [ gsl_parts($x) ], [ 5, 3 ], 'gsl_complex_rect' );
30 sub GSL_COMPLEX_POLAR : Tests {
31 my $x = gsl_complex_polar(1.0,0.1);
32 my ($r,$theta) = ( gsl_complex_abs($x), gsl_complex_arg($x) );
34 print "x=$r * e^(i $theta)*I\n" if $ENV{DEBUG};
35 ok( is_similar($r,1.0), 'gsl_complex_polar r, res=' .($r-1.) . "\n");
36 ok( is_similar($theta,0.1), 'gsl_complex_polar theta, res=' .($theta-0.1) . "\n");
39 sub GSL_COMPLEX_ABS : Tests {
40 my $x = gsl_complex_rect(5,3);
41 my $abs = gsl_complex_abs($x);
42 ok ( is_similar($abs, sqrt(34)), 'gsl_complex_abs');
45 sub GSL_COMPLEX_ABS2 : Tests {
46 my $x = gsl_complex_rect(5,3);
47 my $abs = gsl_complex_abs2($x);
48 ok( is_similar($abs, 34), 'gsl_complex_abs2' );
51 sub GSL_COMPLEX_LOGABS : Tests {
52 my $x = gsl_complex_rect(5,3);
54 my $abs = gsl_complex_logabs($x);
55 ok ( is_similar($abs, log(sqrt(34)) ), 'gsl_complex_logabs' );
58 sub GSL_COMPLEX_LOG : Tests {
59 my $x = gsl_complex_rect($M_E,0);
60 $x = gsl_complex_log($x);
61 ok_similar([ gsl_parts($x) ] ,
62 [ 1.0 , 0.0 ],
63 'gsl_complex_log'
66 sub GSL_COMPLEX_LOG10 : Tests {
67 my $x = gsl_complex_rect(10,0);
68 $x = gsl_complex_log10($x);
69 ok_similar([ gsl_parts($x) ] ,
70 [ 1.0 , 0.0 ],
71 'gsl_complex_log10'
75 sub GSL_COMPLEX_LOG_B : Tests {
76 my $z = gsl_complex_rect(5.0,0);
77 my $base = gsl_complex_rect(5.0,0);
78 $z = gsl_complex_log_b($z, $base);
79 ok_similar([ gsl_parts($z) ] ,
80 [ 1.0 , 0.0 ],
81 'gsl_complex_log_b'
85 sub GSL_COMPLEX_EXP : Tests {
86 my $z = gsl_complex_rect(2, 5);
87 $z = gsl_complex_exp($z);
88 ok_similar( [ gsl_parts($z) ],
89 [ $M_E**2*cos(5), $M_E**2*sin(5) ]
93 sub GSL_COMPLEX_EXP_EULERS_IDENTITY : Tests { # e^(i pi) + 1 = 0
94 my $z = gsl_complex_rect(0, $M_PI);
95 $z = gsl_complex_exp($z);
96 $z = gsl_complex_add_real($z, 1);
97 ok_similar( [ gsl_parts($z) ],
98 [ 0.0, 0.0 ]
102 sub GSL_COMPLEX_ADD : Tests {
103 my $x = gsl_complex_rect(5,3);
104 my $y = gsl_complex_rect(1,2);
106 my $z = gsl_complex_add($x, $y);
107 ok_similar( [ gsl_parts($z) ], [ 6, 5 ], 'gsl_complex_add' );
110 sub GSL_COMPLEX_SUB : Tests {
111 my $x = gsl_complex_rect(5,3);
112 my $y = gsl_complex_rect(1,2);
114 my $z = gsl_complex_sub($x, $y);
115 ok_similar( [ gsl_parts($z) ], [ 4, 1 ], 'gsl_complex_sub' );
118 sub GSL_COMPLEX_MUL : Tests {
119 my $x = gsl_complex_rect(5,3);
120 my $y = gsl_complex_rect(1,2);
122 my $z = gsl_complex_mul($x, $y);
123 ok_similar( [ gsl_parts($z) ], [ -1, 13 ], 'gsl_complex_mul' );
126 sub GSL_COMPLEX_DIV : Tests {
127 my $x = gsl_complex_rect(4,5);
128 my $y = gsl_complex_rect(2,1);
130 my $z = gsl_complex_div($x, $y);
131 ok_similar( [ gsl_parts($z) ], [ 13/5, 6/5 ], 'gsl_complex_div' );
133 sub GSL_COMPLEX_EQ : Tests {
134 my $x = gsl_complex_rect(4,5);
135 my $y = gsl_complex_rect(2,1);
136 ok(! gsl_complex_eq($x,$y), 'gsl_complex_eq' );
137 $y = gsl_complex_rect(4,5);
138 ok( gsl_complex_eq($x,$y), 'gsl_complex_eq' );
140 sub GSL_COMPLEX_ADD_REAL : Tests {
141 my $x = gsl_complex_rect(5,3);
143 my $z = gsl_complex_add_real($x, 1);
144 ok( gsl_real($z) == 6, 'gsl_complex_add_real');
147 sub GSL_COMPLEX_SUB_REAL : Tests {
148 my $x = gsl_complex_rect(5,3);
150 my $z = gsl_complex_sub_real($x, 1);
151 ok( gsl_real($z) == 4, 'gsl_complex_sub_real');
154 sub GSL_COMPLEX_MUL_REAL : Tests {
155 my $x = gsl_complex_rect(5,3);
157 my $z = gsl_complex_mul_real($x, 2);
158 ok( gsl_real($z) == 10, 'gsl_complex_mul_real');
161 sub GSL_COMPLEX_DIV_REAL : Tests {
162 my $x = gsl_complex_rect(6,3);
164 my $z = gsl_complex_div_real($x, 2);
165 ok( gsl_real($z) == 3, 'gsl_complex_div_real');
168 sub GSL_COMPLEX_ADD_IMAG : Tests {
169 my $x = gsl_complex_rect(6,3);
171 my $z = gsl_complex_add_imag($x, 2);
172 ok( gsl_imag($z) == 5, 'gsl_complex_add_imag');
175 sub GSL_COMPLEX_SUB_IMAG : Tests {
176 my $x = gsl_complex_rect(6,3);
178 my $z = gsl_complex_sub_imag($x, 2);
179 ok( gsl_imag($z) == 1, 'gsl_complex_sub_imag');
182 sub GSL_COMPLEX_MUL_IMAG : Tests {
183 my $x = gsl_complex_rect(6,3);
185 my $z = gsl_complex_mul_imag($x, 2);
186 ok_similar( [ gsl_parts($z) ], [ -6, 12 ], 'gsl_complex_mul_imag' );
189 sub GSL_COMPLEX_DIV_IMAG : Tests {
190 my $x = gsl_complex_rect(6,4);
192 my $z = gsl_complex_div_imag($x, 2);
193 ok_similar( [ gsl_parts($z) ], [ 2, -3 ], 'gsl_complex_div_imag' );
196 sub GSL_COMPLEX_CONJUGATE : Tests {
197 my $x = gsl_complex_rect(6,4);
199 my $z = gsl_complex_conjugate($x);
200 ok_similar( [ gsl_parts($z) ], [6, -4], 'gsl_complex_conjugate');
204 sub GSL_COMPLEX_NEGATIVE : Tests {
205 my $x = gsl_complex_rect(6,4);
207 my $z = gsl_complex_negative($x);
208 ok_similar( [ gsl_parts($z) ], [-6, -4], 'gsl_complex_negative');
211 sub GSL_COMPLEX_SQRT : Tests {
212 my $x = gsl_complex_rect(-7,24);
214 my $z = gsl_complex_sqrt($x);
215 ok_similar( [ gsl_parts($z) ], [ 3 , 4 ] ,'gsl_complex_sqrt' );
218 sub GSL_COMPLEX_SQRT_REAL : Tests {
219 my $x = gsl_complex_rect(9,4);
221 my $z = gsl_complex_sqrt_real(-4);
222 ok( gsl_imag($z) == 2, 'gsl_complex_sqrt_real');
225 sub GSL_COMPLEX_POW : Tests {
226 my $x = gsl_complex_rect(0,1);
227 my $y = gsl_complex_rect(2,0);
228 my $z = gsl_complex_pow($x, $y);
230 ok_similar( [ gsl_parts($z) ], [-1, 0 ], 'gsl_complex_pow' );
232 $x = gsl_complex_rect(3,4);
233 $z = gsl_complex_pow($x, $y);
235 ok_similar( [gsl_parts($z) ], [ 3**2 - 4**2, 2*3*4 ], 'gsl_complex_pow' );
238 sub GSL_COMPLEX_SET_REAL : Tests {
239 my $x = gsl_complex_rect(3,4);
240 gsl_set_real($x, 5);
241 ok_similar( [ gsl_parts($x) ], [ 5, 4 ], 'gsl_complex_set_real');
244 sub GSL_COMPLEX_SET_IMAG : Tests {
245 my $x = gsl_complex_rect(3,4);
246 gsl_set_imag($x, 5);
247 ok_similar( [ gsl_parts($x) ], [ 3, 5 ], 'gsl_complex_set_imag');
250 sub GSL_COMPLEX_SET_COMPLEX : Tests {
251 my $x = gsl_complex_rect(3,4);
252 gsl_set_complex($x, 5, 3);
253 ok_similar( [ gsl_parts($x) ], [ 5, 3 ], 'gsl_complex_set_complex');
256 sub GSL_COMPLEX_SIN : Tests {
257 my $x = gsl_complex_rect(3,2);
258 my $z = gsl_complex_sin($x);
260 ok_similar( [ gsl_parts($z) ],
261 [ 0.53092108624852, -3.59056458998578 ],
262 'gsl_complex_sin'
266 sub GSL_COMPLEX_ARCSIN : Tests {
267 my $x = gsl_complex_rect(1,0);
268 my $z = gsl_complex_arcsin($x);
270 ok_similar( [ gsl_parts($z) ],
271 [ $M_PI/2, 0.0 ],
272 'gsl_complex_arcsin'
275 sub GSL_COMPLEX_SINH : Tests {
276 my $x = gsl_complex_rect(0,0);
277 my $z = gsl_complex_sinh($x);
279 ok_similar( [ gsl_parts($z) ],
280 [ 0.0, 0.0 ],
281 'gsl_complex_sinh'
285 sub GSL_COMPLEX_ARCSINH : Tests {
286 my $x = gsl_complex_rect(0,0);
287 my $z = gsl_complex_arcsinh($x);
289 ok_similar( [ gsl_parts($z) ],
290 [ 0.0, 0.0 ],
291 'gsl_complex_arcsinh'
294 sub GSL_COMPLEX_COS : Tests {
295 my $x = gsl_complex_rect(3,2);
296 my $z = gsl_complex_cos($x);
297 ok_similar( [ gsl_parts($z) ],
298 [ -3.72454550491532, -0.511822569987385],
299 'gsl_complex_cos'
303 sub GSL_COMPLEX_ARCCOS : Tests {
304 my $x = gsl_complex_rect(0,0);
305 my $z = gsl_complex_arccos($x);
306 ok_similar( [ gsl_parts($z)],
307 [ $M_PI/2, 0.0 ],
308 'gsl_complex_arccos'
311 sub GSL_COMPLEX_COSH : Tests {
312 my $x = gsl_complex_rect(0,0);
313 my $z = gsl_complex_cosh($x);
314 ok_similar( [ gsl_parts($z) ],
315 [ 1, 0.0 ],
316 'gsl_complex_cosh'
320 sub GSL_COMPLEX_ARCCOSH : Tests {
321 my $x = gsl_complex_rect(1,0);
322 my $z = gsl_complex_arccosh($x);
323 ok_similar( [ gsl_parts($z) ],
324 [ 0.0, 0.0 ],
325 'gsl_complex_arccosh'
329 sub GSL_COMPLEX_TAN : Tests {
330 my $x = gsl_complex_rect(3,2);
331 my $z = gsl_complex_tan($x);
332 ok_similar( [ gsl_parts($z) ],
333 [ -0.0098843750383225, 0.965385879022133 ],
334 'gsl_complex_tan'
338 sub GSL_COMPLEX_ARCTAN : Tests {
339 my $x = gsl_complex_rect(1,0);
340 my $z = gsl_complex_arctan($x);
341 ok_similar( [ gsl_parts($z) ],
342 [ $M_PI/4 , 0.0 ],
343 'gsl_complex_arctan'
347 sub GSL_COMPLEX_TANH : Tests {
348 my $x = gsl_complex_rect(0,0);
349 my $z = gsl_complex_tan($x);
350 ok_similar( [ gsl_parts($z) ],
351 [ 0.0, 0.0 ],
352 'gsl_complex_tanh'
356 sub GSL_COMPLEX_ARCTANH : Tests {
357 my $x = gsl_complex_rect(0,0);
358 my $z = gsl_complex_arctan($x);
359 ok_similar( [ gsl_parts($z) ],
360 [ 0.0, 0.0 ],
361 'gsl_complex_arctanh'
364 sub GSL_COMPLEX_SEC : Tests {
365 my $x = gsl_complex_rect(3,2);
366 my $z = gsl_complex_sec($x);
367 ok_similar( [ gsl_parts($z) ],
368 [ -0.263512975158389, 0.0362116365587685 ],
369 'gsl_complex_sec'
373 sub GSL_COMPLEX_ARCSEC : Tests {
374 my $x = gsl_complex_rect(0,0);
375 my $z = gsl_complex_arcsec($x);
376 ok_similar( [ gsl_parts($z) ],
377 [ $M_PI/2, 0.0 ],
378 'gsl_complex_arcsec'
381 sub GSL_COMPLEX_SECH : Tests {
382 my $x = gsl_complex_rect(1,0);
383 my $z = gsl_complex_sech($x);
384 ok_similar( [ gsl_parts($z) ],
385 [ 2/(exp(1)+exp(-1)), 0.0 ],
386 'gsl_complex_sech'
390 sub GSL_COMPLEX_ARCSECH : Tests {
391 my $x = gsl_complex_rect(2/(exp(1)+exp(-1)),0);
392 my $z = gsl_complex_arcsech($x);
393 ok_similar( [ gsl_parts($z) ],
394 [ 1.0 , 0.0 ],
395 'gsl_complex_arcsech'
399 sub GSL_COMPLEX_CSC : Tests {
400 my $x = gsl_complex_rect(3,2);
401 my $z = gsl_complex_csc($x);
402 ok_similar( [ gsl_parts($z) ],
403 [ 0.0403005788568915, 0.27254866146294],
404 'gsl_complex_csc'
408 sub GSL_COMPLEX_ARCCSC : Tests {
409 my $x = gsl_complex_rect(0,0);
410 my $z = gsl_complex_arccsc($x);
411 ok_similar( [ gsl_parts($z)],
412 [ 0.0, 0.0 ],
413 'gsl_complex_arccsc'
417 sub GSL_COMPLEX_CSCH : Tests {
418 my $x = gsl_complex_rect(0,1);
419 my $z = gsl_complex_csch($x);
420 ok_similar( [ gsl_parts($z) ],
421 [ 0.0 , -1/sin(1)],
422 'gsl_complex_csch'
426 sub GSL_COMPLEX_ARCCSCH : Tests {
427 my $x = gsl_complex_rect(0,0);
428 my $z = gsl_complex_arccsch($x);
429 ok_similar( [ gsl_parts($z) ],
430 [ 0.0 , 0.0 ],
431 'gsl_complex_arccsch'
435 sub GSL_COMPLEX_COT : Tests {
436 my $x = gsl_complex_rect(3,2);
437 my $z = gsl_complex_cot($x);
438 ok_similar( [ gsl_parts($z) ],
439 [ -0.0106047834703371, -1.035746637765],
440 'gsl_complex_cot'
444 sub GSL_COMPLEX_ARCCOT : Tests {
445 my $x = gsl_complex_rect(1,0);
446 my $z = gsl_complex_arccot($x);
447 ok_similar( [ gsl_parts($z) ],
448 [ $M_PI/4 , 0.0 ],
449 'gsl_complex_arccot'
453 sub GSL_COMPLEX_COTH : Tests {
454 my $x = gsl_complex_rect(0,1);
455 my $z = gsl_complex_coth($x);
456 ok_similar( [ gsl_parts($z) ],
457 [ 0.0, -cos(1)/sin(1) ],
458 'gsl_complex_coth'
462 sub GSL_COMPLEX_ARCCOTH : Tests {
463 my $x = gsl_complex_rect(0,0);
464 my $z = gsl_complex_arccoth($x);
465 ok_similar( [ gsl_parts($z) ],
466 [ 0.0, 0.0 ],
467 'gsl_complex_arccoth'