Subversion Repositories FuelGauge

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 mjames 1
#include "jtest.h"
2
#include "ref.h"
3
#include "arr_desc.h"
4
#include "transform_templates.h"
5
#include "transform_test_data.h"
6
#include "type_abbrev.h"
7
 
8
/*--------------------------------------------------------------------------------*/
9
/* Macros and Defines */
10
/*--------------------------------------------------------------------------------*/
11
 
12
#define CFFT_FN_NAME(fn_specifier, type_suffix) \
13
    arm_cfft_##fn_specifier##_##type_suffix     \
14
 
15
#define CFFT_TEST_NAME(fn_specifier, type_suffix, config_suffix)        \
16
    arm_cfft_##fn_specifier##_##type_suffix##_##config_suffix##_test    \
17
 
18
/*--------------------------------------------------------------------------------*/
19
/* Function Aliases */
20
/*--------------------------------------------------------------------------------*/
21
 
22
/* These aliases allow expansions in the CFFT_FAMILY_DEFINE_TEST() template to
23
   make sense */
24
#define arm_cfft_mag_init_f32 arm_cfft_radix4_init_f32
25
#define arm_cfft_mag_init_q31 arm_cfft_radix4_init_q31
26
#define arm_cfft_mag_init_q15 arm_cfft_radix4_init_q15
27
#define arm_cfft_mag_instance_f32 arm_cfft_radix4_instance_f32
28
#define arm_cfft_mag_instance_q31 arm_cfft_radix4_instance_q31
29
#define arm_cfft_mag_instance_q15 arm_cfft_radix4_instance_q15
30
#define transform_mag_fftlens transform_radix4_fftlens
31
 
32
/*--------------------------------------------------------------------------------*/
33
/* Test Definition */
34
/*--------------------------------------------------------------------------------*/
35
 
36
/**
37
 *  Defines a test for the family of CFFT transforms.
38
 *
39
 *  The family of CFFT transforms includes:
40
 *
41
 *  - arm_cfft_radix4_xxx
42
 *  - arm_cfft_radix2_xxx
43
 *  - arm_cfft_mag_xxx
44
 *
45
 *  Where xxx can be f32, q31, or q15.
46
 *
47
 *  @param fn_specifier Allowed values: radix4, radix2, mag.
48
 *  @param type_suffix  Allowed values: f32, q31, q15.
49
 *
50
 *  @param config_suffix Used to differentiate test names based configuration
51
 *  (in this case whether the ifft_flag is set or not.)
52
 
53
 *  @param comparison_interface Macro name used to compare reference and fut
54
 *  outputs.
55
 *
56
 *  @param output_tpe The type of variable contained in the output
57
 *  (e.g. float32_t, uint32_t, etc).
58
 *
59
 *  @param ifft_flag Determines whether the arm_cfft_instance_xxx is configured
60
 *  for an inverse FFT.
61
 */
62
#define CFFT_FAMILY_DEFINE_TEST(fn_specifier,                               \
63
                                type_suffix,                                \
64
                                config_suffix, /* Delineate between test configs*/ \
65
                                comparison_interface,                       \
66
                                output_type,                                \
67
                                ifft_flag)                                  \
68
    JTEST_DEFINE_TEST(CFFT_TEST_NAME(fn_specifier, type_suffix,             \
69
                                     config_suffix),                        \
70
                      CFFT_FN_NAME(fn_specifier, type_suffix))              \
71
    {                                                                       \
72
        arm_cfft_##fn_specifier##_instance_##type_suffix cfft_inst_fut;     \
73
        arm_cfft_##fn_specifier##_instance_##type_suffix cfft_inst_ref;     \
74
                                                                            \
75
        TEMPLATE_DO_ARR_DESC(                                               \
76
            fftlen_idx, uint16_t, fftlen, transform_##fn_specifier##_fftlens \
77
            ,                                                               \
78
                                                                            \
79
            /* Initialize the cfft instance */                              \
80
            arm_cfft_##fn_specifier##_init_##type_suffix(                   \
81
                &cfft_inst_fut, fftlen, ifft_flag, (uint8_t)1);             \
82
            arm_cfft_##fn_specifier##_init_##type_suffix(                   \
83
                &cfft_inst_ref, fftlen, ifft_flag, (uint8_t)1);             \
84
                                                                            \
85
            TRANSFORM_PREPARE_INPLACE_INPUTS(                               \
86
                transform_fft_##type_suffix##_inputs,                       \
87
                fftlen *                                                    \
88
                sizeof(TYPE_FROM_ABBREV(type_suffix)) *                     \
89
                2 /*complex_inputs*/);                                      \
90
                                                                            \
91
            /* Display parameter values */                                  \
92
            JTEST_DUMP_STRF("Block Size: %d\n"                              \
93
                            "Inverse-transform flag: %d\n",                 \
94
                            (int)fftlen,                                    \
95
                            (int)ifft_flag);                                \
96
                                                                            \
97
            /* Display cycle count and run test */                          \
98
            JTEST_COUNT_CYCLES(                                             \
99
                arm_cfft_##fn_specifier##_##type_suffix(                    \
100
                    &cfft_inst_fut,                                         \
101
                    (void*) transform_fft_inplace_input_fut));              \
102
                                                                            \
103
            ref_cfft_##fn_specifier##_##type_suffix(                        \
104
                &cfft_inst_ref,                                             \
105
                (void *) transform_fft_inplace_input_ref);                  \
106
                                                                            \
107
            /* Test correctness */                                          \
108
            comparison_interface(                                           \
109
                fftlen,                                                     \
110
                output_type));                                              \
111
                                                                            \
112
        return JTEST_TEST_PASSED;                                           \
113
    }
114
 
115
/**
116
 *  Bulk wrapper for all tests instantiated using #CFFT_FAMILY_DEFINE_TEST().
117
 *
118
 *  This macro allows several test definitions to share the same config_suffix
119
 *  and ifft_flag settings.
120
 */
121
#define CFFT_FAMILY_DEFINE_ALL_TESTS(config_suffix, ifft_flag)      \
122
    /* Radix2 tests*/                                               \
123
    CFFT_FAMILY_DEFINE_TEST(radix2, q31, config_suffix,             \
124
                            TRANSFORM_SNR_COMPARE_CMPLX_INTERFACE,  \
125
                            TYPE_FROM_ABBREV(q31),                  \
126
                            ifft_flag);                             \
127
    CFFT_FAMILY_DEFINE_TEST(radix2, q15, config_suffix,             \
128
                            TRANSFORM_SNR_COMPARE_CMPLX_INTERFACE,  \
129
                            TYPE_FROM_ABBREV(q15),                  \
130
                            ifft_flag);                             \
131
    /* Radix4 tests*/                                               \
132
    CFFT_FAMILY_DEFINE_TEST(radix4, q31, config_suffix,             \
133
                            TRANSFORM_SNR_COMPARE_CMPLX_INTERFACE,  \
134
                            TYPE_FROM_ABBREV(q31),                  \
135
                            ifft_flag);                             \
136
    CFFT_FAMILY_DEFINE_TEST(radix4, q15, config_suffix,             \
137
                            TRANSFORM_SNR_COMPARE_CMPLX_INTERFACE,  \
138
                            TYPE_FROM_ABBREV(q15),                  \
139
                            ifft_flag)
140
    /* /\* Mag tests*\/                                                  \ */
141
    /* CFFT_FAMILY_DEFINE_TEST(mag, f32, config_suffix,                \ */
142
    /*                         TRANSFORM_SNR_COMPARE_INTERFACE,        \ */
143
    /*                         TYPE_FROM_ABBREV(f32),                  \ */
144
    /*                         ifft_flag);                             \ */
145
    /* CFFT_FAMILY_DEFINE_TEST(mag, q31, config_suffix,                \ */
146
    /*                         TRANSFORM_SNR_COMPARE_INTERFACE,        \ */
147
    /*                         TYPE_FROM_ABBREV(q31),                  \ */
148
    /*                         ifft_flag);                             \ */
149
    /* CFFT_FAMILY_DEFINE_TEST(mag, q15, config_suffix,                \ */
150
    /*                         TRANSFORM_SNR_COMPARE_INTERFACE,        \ */
151
    /*                         TYPE_FROM_ABBREV(q15),                  \ */
152
    /*                         ifft_flag) */
153
 
154
CFFT_FAMILY_DEFINE_ALL_TESTS(forward, 0U);
155
CFFT_FAMILY_DEFINE_ALL_TESTS(inverse, 1U);
156
 
157
/*--------------------------------------------------------------------------------*/
158
/* Collect all tests in a group */
159
/*--------------------------------------------------------------------------------*/
160
 
161
JTEST_DEFINE_GROUP(cfft_family_tests)
162
{
163
    /* Forward FFT tests */
164
    JTEST_TEST_CALL(arm_cfft_radix2_q31_forward_test);
165
    JTEST_TEST_CALL(arm_cfft_radix2_q15_forward_test);
166
    JTEST_TEST_CALL(arm_cfft_radix4_q31_forward_test);
167
    JTEST_TEST_CALL(arm_cfft_radix4_q15_forward_test);
168
 
169
    /* Inverse FFT Tests */
170
    JTEST_TEST_CALL(arm_cfft_radix2_q31_inverse_test);
171
    JTEST_TEST_CALL(arm_cfft_radix2_q15_inverse_test);
172
    JTEST_TEST_CALL(arm_cfft_radix4_q31_inverse_test);
173
    JTEST_TEST_CALL(arm_cfft_radix4_q15_inverse_test);
174
 
175
    /* Magnitude tests removed from the DSP Library. Keeping them here in case
176
       minds are changed. */
177
    /* JTEST_TEST_CALL(arm_cfft_mag_f32_forward_test); */
178
    /* JTEST_TEST_CALL(arm_cfft_mag_q31_forward_test); */
179
    /* JTEST_TEST_CALL(arm_cfft_mag_q15_forward_test); */
180
    /* JTEST_TEST_CALL(arm_cfft_mag_f32_inverse_test); */
181
    /* JTEST_TEST_CALL(arm_cfft_mag_q31_inverse_test); */
182
    /* JTEST_TEST_CALL(arm_cfft_mag_q15_inverse_test); */
183
}