Mercurial > hg > qm-dsp
comparison tests/TestFFT.cpp @ 129:6ec45e85ed81 kissfft
Drop in kissfft to replace the "old" fft, and add tests for newly-supported sizes
author | Chris Cannam |
---|---|
date | Tue, 15 Oct 2013 11:38:18 +0100 |
parents | 4920d100b290 |
children | 8d2d04f2fb51 |
comparison
equal
deleted
inserted
replaced
128:5023f521732c | 129:6ec45e85ed81 |
---|---|
4 | 4 |
5 #define BOOST_TEST_DYN_LINK | 5 #define BOOST_TEST_DYN_LINK |
6 #define BOOST_TEST_MAIN | 6 #define BOOST_TEST_MAIN |
7 | 7 |
8 #include <boost/test/unit_test.hpp> | 8 #include <boost/test/unit_test.hpp> |
9 | |
10 #include <stdexcept> | |
9 | 11 |
10 BOOST_AUTO_TEST_SUITE(TestFFT) | 12 BOOST_AUTO_TEST_SUITE(TestFFT) |
11 | 13 |
12 #define COMPARE_CONST(a, n) \ | 14 #define COMPARE_CONST(a, n) \ |
13 for (int cmp_i = 0; cmp_i < (int)(sizeof(a)/sizeof(a[0])); ++cmp_i) { \ | 15 for (int cmp_i = 0; cmp_i < (int)(sizeof(a)/sizeof(a[0])); ++cmp_i) { \ |
314 im[3] = 999; | 316 im[3] = 999; |
315 FFTReal(4).inverse(re, im, back); | 317 FFTReal(4).inverse(re, im, back); |
316 COMPARE_ARRAY(back, in); | 318 COMPARE_ARRAY(back, in); |
317 } | 319 } |
318 | 320 |
321 BOOST_AUTO_TEST_CASE(sizes) | |
322 { | |
323 // Complex supports any size. A single test with an odd size | |
324 // will do here, without getting too much into our expectations | |
325 // about supported butterflies etc | |
326 | |
327 double in[] = { 1, 1, 1 }; | |
328 double re[] = { 999, 999, 999 }; | |
329 double im[] = { 999, 999, 999 }; | |
330 FFT(3).process(false, in, 0, re, im); | |
331 BOOST_CHECK_EQUAL(re[0], 3.0); | |
332 BOOST_CHECK_EQUAL(re[1], 0.0); | |
333 BOOST_CHECK_EQUAL(re[2], 0.0); | |
334 COMPARE_CONST(im, 0.0); | |
335 double back[3]; | |
336 double backim[3]; | |
337 FFT(3).process(true, re, im, back, backim); | |
338 COMPARE_ARRAY(back, in); | |
339 COMPARE_CONST(backim, 0.0); | |
340 } | |
341 | |
342 BOOST_AUTO_TEST_CASE(r_sizes) | |
343 { | |
344 // Real supports any even size, but not odd ones | |
345 | |
346 BOOST_CHECK_THROW(FFTReal r(3), std::invalid_argument); | |
347 | |
348 double in[] = { 1, 1, 1, 1, 1, 1 }; | |
349 double re[] = { 999, 999, 999, 999, 999, 999 }; | |
350 double im[] = { 999, 999, 999, 999, 999, 999 }; | |
351 FFTReal(6).forward(in, re, im); | |
352 BOOST_CHECK_EQUAL(re[0], 6.0); | |
353 BOOST_CHECK_EQUAL(re[1], 0.0); | |
354 BOOST_CHECK_EQUAL(re[2], 0.0); | |
355 BOOST_CHECK_EQUAL(re[3], 0.0); | |
356 BOOST_CHECK_EQUAL(re[4], 0.0); | |
357 BOOST_CHECK_EQUAL(re[5], 0.0); | |
358 COMPARE_CONST(im, 0.0); | |
359 double back[6]; | |
360 FFTReal(6).inverse(re, im, back); | |
361 COMPARE_ARRAY(back, in); | |
362 } | |
363 | |
319 BOOST_AUTO_TEST_SUITE_END() | 364 BOOST_AUTO_TEST_SUITE_END() |
320 | 365 |