#include "jtest.h"  
 | 
#include "ref.h"  
 | 
#include "arr_desc.h"  
 | 
#include "transform_templates.h"  
 | 
#include "transform_test_data.h"  
 | 
#include "type_abbrev.h"  
 | 
  
 | 
/*--------------------------------------------------------------------------------*/  
 | 
/* Macros and Defines */  
 | 
/*--------------------------------------------------------------------------------*/  
 | 
  
 | 
#define CFFT_FN_NAME(fn_specifier, type_suffix) \  
 | 
    arm_cfft_##fn_specifier##_##type_suffix     \  
 | 
  
 | 
#define CFFT_TEST_NAME(fn_specifier, type_suffix, config_suffix)        \  
 | 
    arm_cfft_##fn_specifier##_##type_suffix##_##config_suffix##_test    \  
 | 
  
 | 
/*--------------------------------------------------------------------------------*/  
 | 
/* Function Aliases */  
 | 
/*--------------------------------------------------------------------------------*/  
 | 
  
 | 
/* These aliases allow expansions in the CFFT_FAMILY_DEFINE_TEST() template to  
 | 
   make sense */  
 | 
#define arm_cfft_mag_init_f32 arm_cfft_radix4_init_f32  
 | 
#define arm_cfft_mag_init_q31 arm_cfft_radix4_init_q31  
 | 
#define arm_cfft_mag_init_q15 arm_cfft_radix4_init_q15  
 | 
#define arm_cfft_mag_instance_f32 arm_cfft_radix4_instance_f32  
 | 
#define arm_cfft_mag_instance_q31 arm_cfft_radix4_instance_q31  
 | 
#define arm_cfft_mag_instance_q15 arm_cfft_radix4_instance_q15  
 | 
#define transform_mag_fftlens transform_radix4_fftlens  
 | 
  
 | 
/*--------------------------------------------------------------------------------*/  
 | 
/* Test Definition */  
 | 
/*--------------------------------------------------------------------------------*/  
 | 
  
 | 
/**  
 | 
 *  Defines a test for the family of CFFT transforms.  
 | 
 *  
 | 
 *  The family of CFFT transforms includes:  
 | 
 *  
 | 
 *  - arm_cfft_radix4_xxx  
 | 
 *  - arm_cfft_radix2_xxx  
 | 
 *  - arm_cfft_mag_xxx  
 | 
 *  
 | 
 *  Where xxx can be f32, q31, or q15.  
 | 
 *  
 | 
 *  @param fn_specifier Allowed values: radix4, radix2, mag.  
 | 
 *  @param type_suffix  Allowed values: f32, q31, q15.  
 | 
 *  
 | 
 *  @param config_suffix Used to differentiate test names based configuration  
 | 
 *  (in this case whether the ifft_flag is set or not.)  
 | 
  
 | 
 *  @param comparison_interface Macro name used to compare reference and fut  
 | 
 *  outputs.  
 | 
 *  
 | 
 *  @param output_tpe The type of variable contained in the output  
 | 
 *  (e.g. float32_t, uint32_t, etc).  
 | 
 *  
 | 
 *  @param ifft_flag Determines whether the arm_cfft_instance_xxx is configured  
 | 
 *  for an inverse FFT.  
 | 
 */  
 | 
#define CFFT_FAMILY_DEFINE_TEST(fn_specifier,                               \  
 | 
                                type_suffix,                                \  
 | 
                                config_suffix, /* Delineate between test configs*/ \  
 | 
                                comparison_interface,                       \  
 | 
                                output_type,                                \  
 | 
                                ifft_flag)                                  \  
 | 
    JTEST_DEFINE_TEST(CFFT_TEST_NAME(fn_specifier, type_suffix,             \  
 | 
                                     config_suffix),                        \  
 | 
                      CFFT_FN_NAME(fn_specifier, type_suffix))              \  
 | 
    {                                                                       \  
 | 
        arm_cfft_##fn_specifier##_instance_##type_suffix cfft_inst_fut;     \  
 | 
        arm_cfft_##fn_specifier##_instance_##type_suffix cfft_inst_ref;     \  
 | 
                                                                            \  
 | 
        TEMPLATE_DO_ARR_DESC(                                               \  
 | 
            fftlen_idx, uint16_t, fftlen, transform_##fn_specifier##_fftlens \  
 | 
            ,                                                               \  
 | 
                                                                            \  
 | 
            /* Initialize the cfft instance */                              \  
 | 
            arm_cfft_##fn_specifier##_init_##type_suffix(                   \  
 | 
                &cfft_inst_fut, fftlen, ifft_flag, (uint8_t)1);             \  
 | 
            arm_cfft_##fn_specifier##_init_##type_suffix(                   \  
 | 
                &cfft_inst_ref, fftlen, ifft_flag, (uint8_t)1);             \  
 | 
                                                                            \  
 | 
            TRANSFORM_PREPARE_INPLACE_INPUTS(                               \  
 | 
                transform_fft_##type_suffix##_inputs,                       \  
 | 
                fftlen *                                                    \  
 | 
                sizeof(TYPE_FROM_ABBREV(type_suffix)) *                     \  
 | 
                2 /*complex_inputs*/);                                      \  
 | 
                                                                            \  
 | 
            /* 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_cfft_##fn_specifier##_##type_suffix(                    \  
 | 
                    &cfft_inst_fut,                                         \  
 | 
                    (void*) transform_fft_inplace_input_fut));              \  
 | 
                                                                            \  
 | 
            ref_cfft_##fn_specifier##_##type_suffix(                        \  
 | 
                &cfft_inst_ref,                                             \  
 | 
                (void *) transform_fft_inplace_input_ref);                  \  
 | 
                                                                            \  
 | 
            /* Test correctness */                                          \  
 | 
            comparison_interface(                                           \  
 | 
                fftlen,                                                     \  
 | 
                output_type));                                              \  
 | 
                                                                            \  
 | 
        return JTEST_TEST_PASSED;                                           \  
 | 
    }  
 | 
  
 | 
/**  
 | 
 *  Bulk wrapper for all tests instantiated using #CFFT_FAMILY_DEFINE_TEST().  
 | 
 *  
 | 
 *  This macro allows several test definitions to share the same config_suffix  
 | 
 *  and ifft_flag settings.  
 | 
 */  
 | 
#define CFFT_FAMILY_DEFINE_ALL_TESTS(config_suffix, ifft_flag)      \  
 | 
    /* Radix2 tests*/                                               \  
 | 
    CFFT_FAMILY_DEFINE_TEST(radix2, q31, config_suffix,             \  
 | 
                            TRANSFORM_SNR_COMPARE_CMPLX_INTERFACE,  \  
 | 
                            TYPE_FROM_ABBREV(q31),                  \  
 | 
                            ifft_flag);                             \  
 | 
    CFFT_FAMILY_DEFINE_TEST(radix2, q15, config_suffix,             \  
 | 
                            TRANSFORM_SNR_COMPARE_CMPLX_INTERFACE,  \  
 | 
                            TYPE_FROM_ABBREV(q15),                  \  
 | 
                            ifft_flag);                             \  
 | 
    /* Radix4 tests*/                                               \  
 | 
    CFFT_FAMILY_DEFINE_TEST(radix4, q31, config_suffix,             \  
 | 
                            TRANSFORM_SNR_COMPARE_CMPLX_INTERFACE,  \  
 | 
                            TYPE_FROM_ABBREV(q31),                  \  
 | 
                            ifft_flag);                             \  
 | 
    CFFT_FAMILY_DEFINE_TEST(radix4, q15, config_suffix,             \  
 | 
                            TRANSFORM_SNR_COMPARE_CMPLX_INTERFACE,  \  
 | 
                            TYPE_FROM_ABBREV(q15),                  \  
 | 
                            ifft_flag)  
 | 
    /* /\* Mag tests*\/                                                  \ */  
 | 
    /* CFFT_FAMILY_DEFINE_TEST(mag, f32, config_suffix,                \ */  
 | 
    /*                         TRANSFORM_SNR_COMPARE_INTERFACE,        \ */  
 | 
    /*                         TYPE_FROM_ABBREV(f32),                  \ */  
 | 
    /*                         ifft_flag);                             \ */  
 | 
    /* CFFT_FAMILY_DEFINE_TEST(mag, q31, config_suffix,                \ */  
 | 
    /*                         TRANSFORM_SNR_COMPARE_INTERFACE,        \ */  
 | 
    /*                         TYPE_FROM_ABBREV(q31),                  \ */  
 | 
    /*                         ifft_flag);                             \ */  
 | 
    /* CFFT_FAMILY_DEFINE_TEST(mag, q15, config_suffix,                \ */  
 | 
    /*                         TRANSFORM_SNR_COMPARE_INTERFACE,        \ */  
 | 
    /*                         TYPE_FROM_ABBREV(q15),                  \ */  
 | 
    /*                         ifft_flag) */  
 | 
  
 | 
CFFT_FAMILY_DEFINE_ALL_TESTS(forward, 0U);  
 | 
CFFT_FAMILY_DEFINE_ALL_TESTS(inverse, 1U);  
 | 
  
 | 
/*--------------------------------------------------------------------------------*/  
 | 
/* Collect all tests in a group */  
 | 
/*--------------------------------------------------------------------------------*/  
 | 
  
 | 
JTEST_DEFINE_GROUP(cfft_family_tests)  
 | 
{  
 | 
    /* Forward FFT tests */  
 | 
    JTEST_TEST_CALL(arm_cfft_radix2_q31_forward_test);  
 | 
    JTEST_TEST_CALL(arm_cfft_radix2_q15_forward_test);  
 | 
    JTEST_TEST_CALL(arm_cfft_radix4_q31_forward_test);  
 | 
    JTEST_TEST_CALL(arm_cfft_radix4_q15_forward_test);  
 | 
  
 | 
    /* Inverse FFT Tests */  
 | 
    JTEST_TEST_CALL(arm_cfft_radix2_q31_inverse_test);  
 | 
    JTEST_TEST_CALL(arm_cfft_radix2_q15_inverse_test);  
 | 
    JTEST_TEST_CALL(arm_cfft_radix4_q31_inverse_test);  
 | 
    JTEST_TEST_CALL(arm_cfft_radix4_q15_inverse_test);  
 | 
  
 | 
    /* Magnitude tests removed from the DSP Library. Keeping them here in case  
 | 
       minds are changed. */  
 | 
    /* JTEST_TEST_CALL(arm_cfft_mag_f32_forward_test); */  
 | 
    /* JTEST_TEST_CALL(arm_cfft_mag_q31_forward_test); */  
 | 
    /* JTEST_TEST_CALL(arm_cfft_mag_q15_forward_test); */  
 | 
    /* JTEST_TEST_CALL(arm_cfft_mag_f32_inverse_test); */  
 | 
    /* JTEST_TEST_CALL(arm_cfft_mag_q31_inverse_test); */  
 | 
    /* JTEST_TEST_CALL(arm_cfft_mag_q15_inverse_test); */  
 | 
}  
 |