blob: 1b4ece2c03a125e4a2c862e711a6c5636225db5b [file] [log] [blame]
#include "jtest.h"
#include "ref.h"
#include "arr_desc.h"
#include "transform_templates.h"
#include "transform_test_data.h"
#include "type_abbrev.h"
/*
FFT fast function test template. Arguments are: function configuration suffix
(q7/q15/q31/f32) and inverse-transform flag
*/
#define RFFT_FAST_DEFINE_TEST(config_suffix, ifft_flag) \
JTEST_DEFINE_TEST(arm_rfft_fast_f32_##config_suffix##_test, \
arm_fft_f32) \
{ \
arm_rfft_fast_instance_f32 rfft_inst_fut = {{0}, 0, 0}; \
arm_rfft_fast_instance_f32 rfft_inst_ref = {{0}, 0, 0}; \
\
/* Go through all FFT lengths */ \
TEMPLATE_DO_ARR_DESC( \
fftlen_idx, uint16_t, fftlen, transform_rfft_fast_fftlens \
, \
\
/* Initialize the RFFT and CFFT Instances */ \
arm_rfft_fast_init_f32( \
&rfft_inst_fut, fftlen); \
\
arm_rfft_fast_init_f32( \
&rfft_inst_ref, fftlen); \
\
TRANSFORM_COPY_INPUTS( \
transform_fft_f32_inputs, \
fftlen * \
sizeof(float32_t)); \
\
/* Display parameter values */ \
JTEST_DUMP_STRF("Block Size: %d\n" \
"Inverse-transform flag: %d\n", \
(int)fftlen, \
(int)ifft_flag); \
\
/* Display cycle count and run test */ \
JTEST_COUNT_CYCLES( \
arm_rfft_fast_f32( \
&rfft_inst_fut, \
(void *) transform_fft_input_fut, \
(void *) transform_fft_output_fut, \
ifft_flag)); \
\
ref_rfft_fast_f32( \
&rfft_inst_ref, \
(void *) transform_fft_input_ref, \
(void *) transform_fft_output_ref, \
ifft_flag); \
\
/* Test correctness */ \
TRANSFORM_SNR_COMPARE_INTERFACE( \
fftlen, \
float32_t)); \
\
return JTEST_TEST_PASSED; \
}
RFFT_FAST_DEFINE_TEST(forward, 0U);
RFFT_FAST_DEFINE_TEST(inverse, 1U);
/*--------------------------------------------------------------------------------*/
/* Collect all tests in a group */
/*--------------------------------------------------------------------------------*/
JTEST_DEFINE_GROUP(rfft_fast_tests)
{
JTEST_TEST_CALL(arm_rfft_fast_f32_forward_test);
JTEST_TEST_CALL(arm_rfft_fast_f32_inverse_test);
}