Refactor inclusion of system.i to one place
[Math-GSL.git] / t / Complex.t
blobb417f23f904bca4ff2a23b7d23d6eae0c6188399
1 package Math::GSL::Complex::Test;
2 use base q{Test::Class};
3 use Test::More tests => 59;
4 use Math::GSL::Complex qw/:all/;
5 use Math::GSL::Test    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'
64     );
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'
72     );
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'
82     );
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)  ]
90     );
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      ]
99     );
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'
263     );
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'
273     );
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'
282     );
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'
292     );
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'
300     );
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'
309     );
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'
317     );
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'
326     );
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'
335     );
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'
344     );
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'
353     );
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'
362     );
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'
370     );
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'
379     );
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'
387     );
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'
396     );
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'
405     );
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'
414     );
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'
423     );
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'
432     );
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'
441     );
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'
450     );
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'
459     );
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'
468     );
471 Test::Class->runtests;