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
  FFT function test template. Arguments are: function suffix (q7/q15/q31/f32)
10
  function configuration suffix (same as function suffix), inverse-transform flag,
11
  input and output type (both q7_t/q15_t/q31_t/float32_t)
12
*/
13
#define RFFT_DEFINE_TEST(suffix, config_suffix,                         \
14
                         ifft_flag, input_type, output_type)            \
15
    JTEST_DEFINE_TEST(arm_rfft_##suffix##_##config_suffix##_test,       \
16
                      arm_rfft_##suffix)                                \
17
    {                                                                   \
18
        CONCAT(arm_rfft_instance_, suffix) rfft_inst_fut = {0};         \
19
        CONCAT(arm_rfft_instance_, suffix) rfft_inst_ref = {0};         \
20
                                                                        \
21
        /* Go through all arm_rfft lengths */                           \
22
        TEMPLATE_DO_ARR_DESC(                                           \
23
            fftlen_idx, uint16_t, fftlen, transform_rfft_fftlens        \
24
            ,                                                           \
25
                                                                        \
26
            /* Initialize the RFFT and CFFT Instances */                \
27
            arm_rfft_init_##suffix(                                     \
28
                &rfft_inst_fut,                                         \
29
                (uint32_t) fftlen, ifft_flag, 1U);                      \
30
                                                                        \
31
            arm_rfft_init_##suffix(                                     \
32
                &rfft_inst_ref,                                         \
33
                (uint32_t) fftlen, ifft_flag, 1U);                      \
34
                                                                        \
35
            if (ifft_flag)                                               \
36
            {                                                           \
37
               TRANSFORM_PREPARE_INVERSE_INPUTS(                        \
38
                   transform_fft_##suffix##_inputs,                     \
39
                   fftlen, input_type,                                  \
40
                   fftlen *                                             \
41
                   sizeof(input_type));                                 \
42
            }                                                           \
43
            else                                                        \
44
            {                                                           \
45
               TRANSFORM_COPY_INPUTS(                                   \
46
                   transform_fft_##suffix##_inputs,                     \
47
                   fftlen *                                             \
48
                   sizeof(input_type));                                 \
49
            }                                                           \
50
                                                                        \
51
            /* Display parameter values */                              \
52
            JTEST_DUMP_STRF("Block Size: %d\n"                          \
53
                            "Inverse-transform flag: %d\n",             \
54
                         (int)fftlen,                                   \
55
                         (int)ifft_flag);                               \
56
                                                                        \
57
            /* Display cycle count and run test */                      \
58
            JTEST_COUNT_CYCLES(                                         \
59
                arm_rfft_##suffix(                                      \
60
                    &rfft_inst_fut,                                     \
61
                    (void *) transform_fft_input_fut,                   \
62
                    (void *) transform_fft_output_fut));                \
63
                                                                        \
64
            ref_rfft_##suffix(                                          \
65
                &rfft_inst_ref,                                         \
66
                (void *) transform_fft_input_ref,                       \
67
                (void *) transform_fft_output_ref);                     \
68
                                                                        \
69
            /* Test correctness */                                      \
70
            TRANSFORM_SNR_COMPARE_INTERFACE(                            \
71
                fftlen,                                                 \
72
                output_type));                                          \
73
                                                                        \
74
            return JTEST_TEST_PASSED;                                   \
75
    }
76
 
77
RFFT_DEFINE_TEST(q31, forward, 0U, TYPE_FROM_ABBREV(q31), TYPE_FROM_ABBREV(q31));
78
RFFT_DEFINE_TEST(q15, forward, 0U, TYPE_FROM_ABBREV(q15), TYPE_FROM_ABBREV(q15));
79
//RFFT_DEFINE_TEST(f32, inverse, 1U, TYPE_FROM_ABBREV(f32), TYPE_FROM_ABBREV(f32));
80
RFFT_DEFINE_TEST(q31, inverse, 1U, TYPE_FROM_ABBREV(q31), TYPE_FROM_ABBREV(q31));
81
RFFT_DEFINE_TEST(q15, inverse, 1U, TYPE_FROM_ABBREV(q15), TYPE_FROM_ABBREV(q15));
82
 
83
/*--------------------------------------------------------------------------------*/
84
/* Collect all tests in a group */
85
/*--------------------------------------------------------------------------------*/
86
 
87
JTEST_DEFINE_GROUP(rfft_tests)
88
{
89
    JTEST_TEST_CALL(arm_rfft_q31_forward_test);
90
    JTEST_TEST_CALL(arm_rfft_q15_forward_test);
91
    //JTEST_TEST_CALL(arm_rfft_f32_inverse_test);
92
    JTEST_TEST_CALL(arm_rfft_q31_inverse_test);
93
    JTEST_TEST_CALL(arm_rfft_q15_inverse_test);
94
}