Mercurial > hg > qm-dsp
diff 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 |
line wrap: on
line diff
--- a/tests/TestFFT.cpp Tue Oct 15 09:39:58 2013 +0100 +++ b/tests/TestFFT.cpp Tue Oct 15 11:38:18 2013 +0100 @@ -7,6 +7,8 @@ #include <boost/test/unit_test.hpp> +#include <stdexcept> + BOOST_AUTO_TEST_SUITE(TestFFT) #define COMPARE_CONST(a, n) \ @@ -316,5 +318,48 @@ COMPARE_ARRAY(back, in); } +BOOST_AUTO_TEST_CASE(sizes) +{ + // Complex supports any size. A single test with an odd size + // will do here, without getting too much into our expectations + // about supported butterflies etc + + double in[] = { 1, 1, 1 }; + double re[] = { 999, 999, 999 }; + double im[] = { 999, 999, 999 }; + FFT(3).process(false, in, 0, re, im); + BOOST_CHECK_EQUAL(re[0], 3.0); + BOOST_CHECK_EQUAL(re[1], 0.0); + BOOST_CHECK_EQUAL(re[2], 0.0); + COMPARE_CONST(im, 0.0); + double back[3]; + double backim[3]; + FFT(3).process(true, re, im, back, backim); + COMPARE_ARRAY(back, in); + COMPARE_CONST(backim, 0.0); +} + +BOOST_AUTO_TEST_CASE(r_sizes) +{ + // Real supports any even size, but not odd ones + + BOOST_CHECK_THROW(FFTReal r(3), std::invalid_argument); + + double in[] = { 1, 1, 1, 1, 1, 1 }; + double re[] = { 999, 999, 999, 999, 999, 999 }; + double im[] = { 999, 999, 999, 999, 999, 999 }; + FFTReal(6).forward(in, re, im); + BOOST_CHECK_EQUAL(re[0], 6.0); + BOOST_CHECK_EQUAL(re[1], 0.0); + BOOST_CHECK_EQUAL(re[2], 0.0); + BOOST_CHECK_EQUAL(re[3], 0.0); + BOOST_CHECK_EQUAL(re[4], 0.0); + BOOST_CHECK_EQUAL(re[5], 0.0); + COMPARE_CONST(im, 0.0); + double back[6]; + FFTReal(6).inverse(re, im, back); + COMPARE_ARRAY(back, in); +} + BOOST_AUTO_TEST_SUITE_END()