| #include "jtest.h" |
| #include "ref.h" |
| #include "arr_desc.h" |
| #include "transform_templates.h" |
| #include "transform_test_data.h" |
| #include "type_abbrev.h" |
| |
| /* |
| FFT function test template. Arguments are: function suffix (q7/q15/q31/f32) |
| function configuration suffix (same as function suffix), inverse-transform flag, |
| input and output type (both q7_t/q15_t/q31_t/float32_t) |
| */ |
| #define RFFT_DEFINE_TEST(suffix, config_suffix, \ |
| ifft_flag, input_type, output_type) \ |
| JTEST_DEFINE_TEST(arm_rfft_##suffix##_##config_suffix##_test, \ |
| arm_rfft_##suffix) \ |
| { \ |
| CONCAT(arm_rfft_instance_, suffix) rfft_inst_fut = {0}; \ |
| CONCAT(arm_rfft_instance_, suffix) rfft_inst_ref = {0}; \ |
| \ |
| /* Go through all arm_rfft lengths */ \ |
| TEMPLATE_DO_ARR_DESC( \ |
| fftlen_idx, uint16_t, fftlen, transform_rfft_fftlens \ |
| , \ |
| \ |
| /* Initialize the RFFT and CFFT Instances */ \ |
| arm_rfft_init_##suffix( \ |
| &rfft_inst_fut, \ |
| (uint32_t) fftlen, ifft_flag, 1U); \ |
| \ |
| arm_rfft_init_##suffix( \ |
| &rfft_inst_ref, \ |
| (uint32_t) fftlen, ifft_flag, 1U); \ |
| \ |
| if (ifft_flag) \ |
| { \ |
| TRANSFORM_PREPARE_INVERSE_INPUTS( \ |
| transform_fft_##suffix##_inputs, \ |
| fftlen, input_type, \ |
| fftlen * \ |
| sizeof(input_type)); \ |
| } \ |
| else \ |
| { \ |
| TRANSFORM_COPY_INPUTS( \ |
| transform_fft_##suffix##_inputs, \ |
| fftlen * \ |
| sizeof(input_type)); \ |
| } \ |
| \ |
| /* 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_##suffix( \ |
| &rfft_inst_fut, \ |
| (void *) transform_fft_input_fut, \ |
| (void *) transform_fft_output_fut)); \ |
| \ |
| ref_rfft_##suffix( \ |
| &rfft_inst_ref, \ |
| (void *) transform_fft_input_ref, \ |
| (void *) transform_fft_output_ref); \ |
| \ |
| /* Test correctness */ \ |
| TRANSFORM_SNR_COMPARE_INTERFACE( \ |
| fftlen, \ |
| output_type)); \ |
| \ |
| return JTEST_TEST_PASSED; \ |
| } |
| |
| RFFT_DEFINE_TEST(q31, forward, 0U, TYPE_FROM_ABBREV(q31), TYPE_FROM_ABBREV(q31)); |
| RFFT_DEFINE_TEST(q15, forward, 0U, TYPE_FROM_ABBREV(q15), TYPE_FROM_ABBREV(q15)); |
| //RFFT_DEFINE_TEST(f32, inverse, 1U, TYPE_FROM_ABBREV(f32), TYPE_FROM_ABBREV(f32)); |
| RFFT_DEFINE_TEST(q31, inverse, 1U, TYPE_FROM_ABBREV(q31), TYPE_FROM_ABBREV(q31)); |
| RFFT_DEFINE_TEST(q15, inverse, 1U, TYPE_FROM_ABBREV(q15), TYPE_FROM_ABBREV(q15)); |
| |
| /*--------------------------------------------------------------------------------*/ |
| /* Collect all tests in a group */ |
| /*--------------------------------------------------------------------------------*/ |
| |
| JTEST_DEFINE_GROUP(rfft_tests) |
| { |
| JTEST_TEST_CALL(arm_rfft_q31_forward_test); |
| JTEST_TEST_CALL(arm_rfft_q15_forward_test); |
| //JTEST_TEST_CALL(arm_rfft_f32_inverse_test); |
| JTEST_TEST_CALL(arm_rfft_q31_inverse_test); |
| JTEST_TEST_CALL(arm_rfft_q15_inverse_test); |
| } |