blob: 2a4a98d222db795ff427354edadc10508175eeaa [file] [log] [blame]
#include "jtest.h"
#include "ref.h"
#include "arr_desc.h"
#include "transform_templates.h"
#include "transform_test_data.h"
#define CFFT_SNR_THRESHOLD 120
/*
CFFT function test template. Arguments are: inverse-transform flag, function
suffix (q7/q15/q31/f32) and the output type (q7_t, q15_t, q31_t, float32_t)
*/
#define CFFT_TEST_BODY(ifft_flag, suffix, output_type) \
do \
{ \
/* Go through all arm_cfft_instances */ \
TEMPLATE_DO_ARR_DESC( \
cfft_inst_idx, const arm_cfft_instance_##suffix *, cfft_inst_ptr, \
transform_cfft_##suffix##_structs \
, \
\
TRANSFORM_PREPARE_INPLACE_INPUTS( \
transform_fft_##suffix##_inputs, \
cfft_inst_ptr->fftLen * \
sizeof(output_type) * \
2 /*complex_inputs*/); \
\
/* Display parameter values */ \
JTEST_DUMP_STRF("Block Size: %d\n" \
"Inverse-transform flag: %d\n", \
(int)cfft_inst_ptr->fftLen, \
(int)ifft_flag); \
\
/* Display cycle count and run test */ \
JTEST_COUNT_CYCLES( \
arm_cfft_##suffix(cfft_inst_ptr, \
(void *) transform_fft_inplace_input_fut, \
ifft_flag, /* IFFT Flag */ \
1)); /* Bitreverse flag */ \
ref_cfft_##suffix(cfft_inst_ptr, \
(void *) transform_fft_inplace_input_ref, \
ifft_flag, /* IFFT Flag */ \
1); /* Bitreverse flag */ \
\
/* Test correctness */ \
TRANSFORM_SNR_COMPARE_CMPLX_INTERFACE( \
cfft_inst_ptr->fftLen, \
output_type)); \
\
return JTEST_TEST_PASSED; \
} while (0)
/*
CFFT function with downshift test template. Arguments are: inverse-transform flag,
function suffix (q7/q15/q31/f32) and the output type (q7_t, q15_t, q31_t, float32_t)
*/
#define CFFT_DOWNSHIFT_INPUT_TEST_BODY(ifft_flag, suffix, output_type) \
do \
{ \
/* Go through all arm_cfft_instances */ \
TEMPLATE_DO_ARR_DESC( \
cfft_inst_idx, const arm_cfft_instance_##suffix *, cfft_inst_ptr, \
transform_cfft_##suffix##_structs \
, \
\
TRANSFORM_PREPARE_INPLACE_INPUTS_DOWNSHIFT( \
transform_fft_##suffix##_inputs, \
cfft_inst_ptr->fftLen * \
sizeof(output_type) * \
2 /*complex_inputs*/, output_type); \
\
/* Display parameter values */ \
JTEST_DUMP_STRF("Block Size: %d\n" \
"Inverse-transform flag: %d\n", \
(int)cfft_inst_ptr->fftLen, \
(int)ifft_flag); \
\
/* Display cycle count and run test */ \
JTEST_COUNT_CYCLES( \
arm_cfft_##suffix(cfft_inst_ptr, \
(void *) transform_fft_inplace_input_fut, \
ifft_flag, /* IFFT Flag */ \
1)); /* Bitreverse flag */ \
ref_cfft_##suffix(cfft_inst_ptr, \
(void *) transform_fft_inplace_input_ref, \
ifft_flag, /* IFFT Flag */ \
1); /* Bitreverse flag */ \
\
/* Test correctness */ \
TRANSFORM_SNR_COMPARE_CMPLX_INTERFACE( \
cfft_inst_ptr->fftLen, \
output_type)); \
\
return JTEST_TEST_PASSED; \
} while (0)
/* Test declarations */
JTEST_DEFINE_TEST(cfft_f32_test, cfft_f32)
{
CFFT_TEST_BODY((uint8_t) 0, f32, float32_t);
}
JTEST_DEFINE_TEST(cfft_f32_ifft_test, cfft_f32)
{
CFFT_TEST_BODY((uint8_t) 1, f32, float32_t);
}
JTEST_DEFINE_TEST(cfft_q31_test, cfft_q31)
{
CFFT_TEST_BODY((uint8_t) 0, q31, q31_t);
}
JTEST_DEFINE_TEST(cfft_q31_ifft_test, cfft_q31)
{
CFFT_TEST_BODY((uint8_t) 1, q31, q31_t);
}
JTEST_DEFINE_TEST(cfft_q15_test, cfft_q15)
{
CFFT_TEST_BODY((uint8_t) 0, q15, q15_t);
}
JTEST_DEFINE_TEST(cfft_q15_ifft_test, cfft_q15)
{
CFFT_TEST_BODY((uint8_t) 1, q15, q15_t);
}
/*--------------------------------------------------------------------------------*/
/* Collect all tests in a group */
/*--------------------------------------------------------------------------------*/
JTEST_DEFINE_GROUP(cfft_tests)
{
JTEST_TEST_CALL(cfft_f32_test);
JTEST_TEST_CALL(cfft_f32_ifft_test);
JTEST_TEST_CALL(cfft_q31_test);
JTEST_TEST_CALL(cfft_q31_ifft_test);
JTEST_TEST_CALL(cfft_q15_test);
JTEST_TEST_CALL(cfft_q15_ifft_test);
}