Refactor inclusion of system.i to one place
[Math-GSL.git] / t / FFT.t
blob7d2d765fe6a6f176e7b3ba4c63d8fc587f9db4c6
1 package Math::GSL::FFT::Test;
2 use base q{Test::Class};
3 use Test::More tests => 16;
4 use Math::GSL::Test  qw/:all/;
5 use Math::GSL::FFT   qw/:all/;
6 use Math::GSL        qw/:all/;
7 use Math::GSL::Errno qw/:all/;
8 use Data::Dumper;
9 use strict;
11 BEGIN { gsl_set_error_handler_off() }
13 sub make_fixture : Test(setup) {
16 sub teardown : Test(teardown) {
17     unlink 'fft' if -f 'fft';
19 sub FFT_REAL_RADIX2_TRANSFORM : Tests 
21     my $input    = [ (0) x 5, (1) x 22, (0) x 5 ];
22     my $expected = [ 22, -8.44205264582682, -4.64465605976076, -0.643126602526688, 1.70710678118655, 1.8349201998544,
23             0.572726230154202, -0.676964287646119, -1, -0.455944707054924, 0.255700894591988, 0.524240654352147,
24             0.292893218813453, -0.059180002187481, -0.183771064985432, -0.0818926089645147, 0, -0.831469612302545,
25             -0.923879532511287, -0.195090322016128, 0.707106781186547, 0.98078528040323, 0.38268343236509,
26             -0.555570233019602, -1, -0.555570233019602, 0.38268343236509, 0.980785280403231, 0.707106781186547,
27             -0.195090322016128, -0.923879532511287, -0.831469612302545
28             ];
29     my ($status, $output ) = gsl_fft_real_radix2_transform ($input, 1, 32);
30     ok_status($status);
32     local $TODO = q{ not working again };
33     ok_similar( $output, $expected );
36 sub FFT_COMPLEX_RADIX2_FORWARD : Tests 
38     my $data = [ (1) x 10, (0) x 236, (1) x 10 ];
39     my ($status, $fft) = gsl_fft_complex_radix2_forward ($data, 1, 128);
40     ok_status($status);
41     local $TODO = 'fft of complex_packed_array does not work';
42     # we should propably use the gsl_fft_real_unpack function here to create a suitable complex_packed_array
43     ok( defined $fft );
45 sub FFT_VARS : Tests {
46     cmp_ok( $gsl_fft_forward, '==', -1, 'gsl_fft_forward' );
47     cmp_ok( $gsl_fft_backward, '==', +1, 'gsl_fft_backward' );
50 sub WAVETABLE_ALLOC_FREE: Tests {
51     my $wavetable = gsl_fft_complex_wavetable_alloc(42);
52     isa_ok($wavetable, 'Math::GSL::FFT' );
53     gsl_fft_complex_wavetable_free($wavetable);
54     ok(!$@, 'gsl_fft_complex_wavetable_free');
56     $wavetable = gsl_fft_halfcomplex_wavetable_alloc(42);
57     isa_ok($wavetable, 'Math::GSL::FFT' );
58     gsl_fft_halfcomplex_wavetable_free($wavetable);
59     ok(!$@, 'gsl_fft_halfcomplex_wavetable_free');
61     $wavetable = gsl_fft_real_wavetable_alloc(42);
62     isa_ok($wavetable, 'Math::GSL::FFT' );
63     gsl_fft_real_wavetable_free($wavetable);
64     ok(!$@, 'gsl_fft_real_wavetable_free');
68 sub WORKSPACE_ALLOC_FREE: Tests {
69     my $workspace = gsl_fft_complex_workspace_alloc(42);
70     isa_ok($workspace, 'Math::GSL::FFT' );
71     gsl_fft_complex_workspace_free($workspace);
72     ok(!$@, 'gsl_fft_complex_workspace_free');
74     # there are no gsl_fft_halfcomplex_workspace_* functions
76     $workspace = gsl_fft_real_workspace_alloc(42);
77     isa_ok($workspace, 'Math::GSL::FFT' );
78     gsl_fft_real_workspace_free($workspace);
79     ok(!$@, 'gsl_fft_real_workspace_free');
81 Test::Class->runtests;