#include "jtest.h" #include "filtering_test_data.h" #include "arr_desc.h" #include "arm_math.h" /* FUTs */ #include "ref.h" /* Reference Functions */ #include "test_templates.h" #include "filtering_templates.h" #include "type_abbrev.h" #define BIQUAD_DEFINE_TEST(suffix, instance_name, config_suffix, output_type) \ JTEST_DEFINE_TEST(arm_biquad_cascade_##config_suffix##_##suffix##_test, \ arm_biquad_cascade_##config_suffix##_##suffix) \ { \ instance_name biquad_inst_fut = { 0 }; \ instance_name biquad_inst_ref = { 0 }; \ \ TEMPLATE_DO_ARR_DESC( \ blocksize_idx, uint32_t, blockSize, filtering_blocksizes \ , \ TEMPLATE_DO_ARR_DESC( \ numstages_idx, uint16_t, numStages, filtering_numstages \ , \ /* Initialize the BIQUAD Instances */ \ arm_biquad_cascade_##config_suffix##_init_##suffix( \ &biquad_inst_fut, numStages, \ (output_type*)filtering_coeffs_b_##suffix, \ (void *) filtering_pState); \ \ /* Display test parameter values */ \ JTEST_DUMP_STRF("Block Size: %d\n" \ "Number of Stages: %d\n", \ (int)blockSize, \ (int)numStages); \ \ JTEST_COUNT_CYCLES( \ arm_biquad_cascade_##config_suffix##_##suffix( \ &biquad_inst_fut, \ (void *) filtering_##suffix##_inputs, \ (void *) filtering_output_fut, \ blockSize)); \ \ arm_biquad_cascade_##config_suffix##_init_##suffix( \ &biquad_inst_ref, numStages, \ (output_type*)filtering_coeffs_b_##suffix, \ (void *) filtering_pState); \ \ ref_biquad_cascade_##config_suffix##_##suffix( \ &biquad_inst_ref, \ (void *) filtering_##suffix##_inputs, \ (void *) filtering_output_ref, \ blockSize); \ \ FILTERING_SNR_COMPARE_INTERFACE( \ blockSize, \ output_type))); \ \ return JTEST_TEST_PASSED; \ } #define BIQUAD_WITH_POSTSHIFT_DEFINE_TEST(suffix, config_suffix, speed, output_type) \ JTEST_DEFINE_TEST(arm_biquad_cascade_##config_suffix##speed##_##suffix##_test, \ arm_biquad_cascade_##config_suffix##speed##_##suffix) \ { \ arm_biquad_casd_##config_suffix##_inst_##suffix biquad_inst_fut = { 0 }; \ arm_biquad_casd_##config_suffix##_inst_##suffix biquad_inst_ref = { 0 }; \ \ TEMPLATE_DO_ARR_DESC( \ blocksize_idx, uint32_t, blockSize, filtering_blocksizes \ , \ TEMPLATE_DO_ARR_DESC( \ numstages_idx, uint16_t, numStages, filtering_numstages \ , \ TEMPLATE_DO_ARR_DESC( \ postshifts_idx, uint8_t, postShift, filtering_postshifts \ , \ /* Display test parameter values */ \ JTEST_DUMP_STRF("Block Size: %d\n" \ "Number of Stages: %d\n" \ "Post Shift: %d\n", \ (int)blockSize, \ (int)numStages, \ (int)postShift); \ \ /* Initialize the BIQUAD Instances */ \ arm_biquad_cascade_##config_suffix##_init_##suffix( \ &biquad_inst_fut, numStages, \ (output_type*)filtering_coeffs_b_##suffix, \ (void *) filtering_pState, postShift); \ \ JTEST_COUNT_CYCLES( \ arm_biquad_cascade_##config_suffix##speed##_##suffix( \ &biquad_inst_fut, \ (void *) filtering_##suffix##_inputs, \ (void *) filtering_output_fut, \ blockSize)); \ \ arm_biquad_cascade_##config_suffix##_init_##suffix( \ &biquad_inst_ref, numStages, \ (output_type*)filtering_coeffs_b_##suffix, \ (void *) filtering_pState, postShift); \ \ ref_biquad_cascade_##config_suffix##speed##_##suffix( \ &biquad_inst_ref, \ (void *) filtering_##suffix##_inputs, \ (void *) filtering_output_ref, \ blockSize); \ \ FILTERING_SNR_COMPARE_INTERFACE( \ blockSize, \ output_type)))); \ \ return JTEST_TEST_PASSED; \ } JTEST_DEFINE_TEST(arm_biquad_cas_df1_32x64_q31_test, arm_biquad_cas_df1_32x64_q31) { arm_biquad_cas_df1_32x64_ins_q31 biquad_inst_fut = { 0 }; arm_biquad_cas_df1_32x64_ins_q31 biquad_inst_ref = { 0 }; TEMPLATE_DO_ARR_DESC( blocksize_idx, uint32_t, blockSize, filtering_blocksizes , TEMPLATE_DO_ARR_DESC( numstages_idx, uint16_t, numStages, filtering_numstages , TEMPLATE_DO_ARR_DESC( postshifts_idx, uint8_t, postShift, filtering_postshifts , /* Initialize the BIQUAD Instances */ arm_biquad_cas_df1_32x64_init_q31( &biquad_inst_fut, numStages, (q31_t*)filtering_coeffs_b_q31, (void *) filtering_pState, postShift); /* Display test parameter values */ JTEST_DUMP_STRF("Block Size: %d\n" "Number of Stages: %d\n", (int)blockSize, (int)numStages); JTEST_COUNT_CYCLES( arm_biquad_cas_df1_32x64_q31( &biquad_inst_fut, (void *) filtering_q31_inputs, (void *) filtering_output_fut, blockSize)); arm_biquad_cas_df1_32x64_init_q31( &biquad_inst_ref, numStages, (q31_t*)filtering_coeffs_b_q31, (void *) filtering_pState, postShift); ref_biquad_cas_df1_32x64_q31( &biquad_inst_ref, (void *) filtering_q31_inputs, (void *) filtering_output_ref, blockSize); FILTERING_SNR_COMPARE_INTERFACE( blockSize, q31_t)))); return JTEST_TEST_PASSED; } JTEST_DEFINE_TEST(arm_biquad_cascade_df2T_f64_test, arm_biquad_cascade_df2T_f64) { arm_biquad_cascade_df2T_instance_f64 biquad_inst_fut = { 0 }; arm_biquad_cascade_df2T_instance_f64 biquad_inst_ref = { 0 }; TEMPLATE_DO_ARR_DESC( blocksize_idx, uint32_t, blockSize, filtering_blocksizes , TEMPLATE_DO_ARR_DESC( numstages_idx, uint16_t, numStages, filtering_numstages , /* Display test parameter values */ JTEST_DUMP_STRF("Block Size: %d\n" "Number of Stages: %d\n", (int)blockSize, (int)numStages); /* Initialize the BIQUAD Instances */ arm_biquad_cascade_df2T_init_f64( &biquad_inst_fut, numStages, (float64_t*)filtering_coeffs_b_f64, (void *) filtering_pState); JTEST_COUNT_CYCLES( arm_biquad_cascade_df2T_f64( &biquad_inst_fut, (void *) filtering_f64_inputs, (void *) filtering_output_fut, blockSize)); arm_biquad_cascade_df2T_init_f64( &biquad_inst_ref, numStages, (float64_t*)filtering_coeffs_b_f64, (void *) filtering_pState); ref_biquad_cascade_df2T_f64( &biquad_inst_ref, (void *) filtering_f64_inputs, (void *) filtering_output_ref, blockSize); FILTERING_DBL_SNR_COMPARE_INTERFACE( blockSize, float64_t))); return JTEST_TEST_PASSED; } BIQUAD_DEFINE_TEST(f32,arm_biquad_casd_df1_inst_f32, df1,float32_t); BIQUAD_DEFINE_TEST(f32,arm_biquad_cascade_df2T_instance_f32,df2T,float32_t); BIQUAD_DEFINE_TEST(f32,arm_biquad_cascade_stereo_df2T_instance_f32,stereo_df2T,float32_t); BIQUAD_WITH_POSTSHIFT_DEFINE_TEST(q31,df1,,q31_t); BIQUAD_WITH_POSTSHIFT_DEFINE_TEST(q15,df1,,q15_t); BIQUAD_WITH_POSTSHIFT_DEFINE_TEST(q31,df1,_fast,q31_t); BIQUAD_WITH_POSTSHIFT_DEFINE_TEST(q15,df1,_fast,q15_t); /*--------------------------------------------------------------------------------*/ /* Collect all tests in a group. */ /*--------------------------------------------------------------------------------*/ JTEST_DEFINE_GROUP(biquad_tests) { /* To skip a test, comment it out. */ JTEST_TEST_CALL(arm_biquad_cascade_df1_f32_test); JTEST_TEST_CALL(arm_biquad_cascade_df2T_f32_test); JTEST_TEST_CALL(arm_biquad_cascade_stereo_df2T_f32_test); JTEST_TEST_CALL(arm_biquad_cascade_df2T_f64_test); JTEST_TEST_CALL(arm_biquad_cascade_df1_q31_test); JTEST_TEST_CALL(arm_biquad_cascade_df1_q15_test); JTEST_TEST_CALL(arm_biquad_cascade_df1_fast_q31_test); JTEST_TEST_CALL(arm_biquad_cascade_df1_fast_q15_test); JTEST_TEST_CALL(arm_biquad_cas_df1_32x64_q31_test); }