Subversion Repositories testOled

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 mjames 1
#include "arm_math.h"
2
#include "matrix_test_data.h"
3
#include "type_abbrev.h"
4
 
5
/*--------------------------------------------------------------------------------*/
6
/* Input/Output Buffers */
7
/*--------------------------------------------------------------------------------*/
8
 
9
MATRIX_TEST_BIGGEST_INPUT_TYPE matrix_output_fut_data[2*MATRIX_TEST_MAX_ELTS] = {0};
10
MATRIX_TEST_BIGGEST_INPUT_TYPE matrix_output_ref_data[2*MATRIX_TEST_MAX_ELTS] = {0};
11
MATRIX_TEST_BIGGEST_INPUT_TYPE matrix_output_scratch[MATRIX_TEST_MAX_ELTS] = {0};
12
 
13
MATRIX_TEST_BIGGEST_INPUT_TYPE matrix_output_f32_fut[MATRIX_TEST_MAX_ELTS];
14
MATRIX_TEST_BIGGEST_INPUT_TYPE matrix_output_f32_ref[MATRIX_TEST_MAX_ELTS];
15
 
16
arm_matrix_instance_f32 matrix_output_fut = {
17
    0,
18
    0,
19
    (float32_t *) &matrix_output_fut_data
20
};
21
 
22
arm_matrix_instance_f32 matrix_output_ref = {
23
    0,
24
    0,
25
    (float32_t *) &matrix_output_ref_data
26
};
27
 
28
arm_matrix_instance_f64 matrix_output_fut64 = {
29
    0,
30
    0,
31
    (float64_t *) &matrix_output_fut_data
32
};
33
 
34
arm_matrix_instance_f64 matrix_output_ref64 = {
35
    0,
36
    0,
37
    (float64_t *) &matrix_output_ref_data
38
};
39
 
40
/*--------------------------------------------------------------------------------*/
41
/* Data Buckets */
42
/*--------------------------------------------------------------------------------*/
43
 
44
/**
45
 *  Pool of random data to base matrix inputs from.
46
 */
47
float32_t matrix_f32_100_rand[100] = {
48
    -45.0345569674258,  -11.0261163038747, -14.6841428777929,
49
    0.0345569674258,    -11.0261163038747, -14.6841428777929,
50
    -20.3679194392227,  27.5712678608402,  -12.1390617339732,
51
    -19.8753669720509,  42.3379642103244,  -23.7788252219155,
52
    -23.7517765301667,  40.2716109915281,  -25.8308714086167,
53
    32.1194040197959,   24.4692807074156,  -1.32083675968276,
54
    31.1580458282477,   -2.90766514824093, -6.97926086704160,
55
    10.2843089382083,   30.1014622769739,  44.4787189721646,
56
    -9.60878544118853,  -48.4596562348445, -31.1044984967456,
57
    -6.41414114190809,  3.28255887994549,  -26.9511839788442,
58
    -31.5183679875864,  21.1215780433683,  -47.0779722437854,
59
    -0.913590753192006, -40.3545474831611, -45.6976198342192,
60
    18.6775433365315,   -5.32162505701938, -14.9272896423117,
61
    34.4308792695389,   40.4880968679893,  -27.8253265982760,
62
    42.8854139478045,   -1.07473615999811, -36.8026707393665,
63
    -33.1009970537296,  -31.6488844262730, -19.3650527983443,
64
    43.9001561999887,   -30.5235710432951, 47.9748378356085,
65
    -38.2582349144194,  23.0330862855453,  -16.2280590178623,
66
    44.2050590775485,   14.9115474956452,  -13.1515403509664,
67
    0.850865538112700,  37.5942811492984,  -27.4078219027601,
68
    -6.11300268738968,  -20.3324126781673, -1.13910261964209,
69
    40.0053846417662,   45.6134540229802,  23.1722385658670,
70
    12.5618560729690,   1.07715641721097,  5.01563428984222,
71
    -32.9291952852141,  -38.8880776559401, -18.1221698074118,
72
    7.85250610234389,   -13.0753218879785, 7.52085950784656,
73
    14.7745963136307,   28.0227435151377,  31.7627708322262,
74
    12.2475086001227,   -27.2335702183447, -24.1935304087933,
75
    -7.58332402861928,  -26.2716420228479, -38.8797244706213,
76
    -44.0220457052844,  -4.90762935690551, -41.8874231134215,
77
    29.4831416883453,   8.70447045314168,  -6.43013158961009,
78
    -9.12801538874479,  0.785828466111815, -4.11511718200689,
79
    28.0252068321138,   -26.5220086627594, 4.70088922863450,
80
    42.9385970968730,   14.4318130193692,  -29.2257707266972,
81
    46.3088539286913
82
};
83
 
84
float64_t matrix_f64_100_rand[100] = {
85
    -45.0345569674258,  -11.0261163038747, -14.6841428777929,
86
    0.0345569674258,    -11.0261163038747, -14.6841428777929,
87
    -20.3679194392227,  27.5712678608402,  -12.1390617339732,
88
    -19.8753669720509,  42.3379642103244,  -23.7788252219155,
89
    -23.7517765301667,  40.2716109915281,  -25.8308714086167,
90
    32.1194040197959,   24.4692807074156,  -1.32083675968276,
91
    31.1580458282477,   -2.90766514824093, -6.97926086704160,
92
    10.2843089382083,   30.1014622769739,  44.4787189721646,
93
    -9.60878544118853,  -48.4596562348445, -31.1044984967456,
94
    -6.41414114190809,  3.28255887994549,  -26.9511839788442,
95
    -31.5183679875864,  21.1215780433683,  -47.0779722437854,
96
    -0.913590753192006, -40.3545474831611, -45.6976198342192,
97
    18.6775433365315,   -5.32162505701938, -14.9272896423117,
98
    34.4308792695389,   40.4880968679893,  -27.8253265982760,
99
    42.8854139478045,   -1.07473615999811, -36.8026707393665,
100
    -33.1009970537296,  -31.6488844262730, -19.3650527983443,
101
    43.9001561999887,   -30.5235710432951, 47.9748378356085,
102
    -38.2582349144194,  23.0330862855453,  -16.2280590178623,
103
    44.2050590775485,   14.9115474956452,  -13.1515403509664,
104
    0.850865538112700,  37.5942811492984,  -27.4078219027601,
105
    -6.11300268738968,  -20.3324126781673, -1.13910261964209,
106
    40.0053846417662,   45.6134540229802,  23.1722385658670,
107
    12.5618560729690,   1.07715641721097,  5.01563428984222,
108
    -32.9291952852141,  -38.8880776559401, -18.1221698074118,
109
    7.85250610234389,   -13.0753218879785, 7.52085950784656,
110
    14.7745963136307,   28.0227435151377,  31.7627708322262,
111
    12.2475086001227,   -27.2335702183447, -24.1935304087933,
112
    -7.58332402861928,  -26.2716420228479, -38.8797244706213,
113
    -44.0220457052844,  -4.90762935690551, -41.8874231134215,
114
    29.4831416883453,   8.70447045314168,  -6.43013158961009,
115
    -9.12801538874479,  0.785828466111815, -4.11511718200689,
116
    28.0252068321138,   -26.5220086627594, 4.70088922863450,
117
    42.9385970968730,   14.4318130193692,  -29.2257707266972,
118
    46.3088539286913
119
};
120
 
121
MATRIX_TEST_BIGGEST_INPUT_TYPE matrix_zeros[MATRIX_TEST_MAX_ELTS] = {0};
122
 
123
const float32_t matrix_f32_scale_values[MATRIX_MAX_COEFFS_LEN] =
124
{
125
        43.0264275639  , -17.0525215570 , -94.8488973910 , -8.1924989580  ,
126
        7.2830326091   , 66.8368719314  , 33.9778190671  , 117.8652289772 ,
127
        -129.6077797465, -14.6420815368 , 18.0239223278  , 1.0000000000   ,
128
        55.0375037651  , 1.8674609862   , 0.00000000000  , -33.5750364909
129
};
130
 
131
const q31_t matrix_q31_scale_values[MATRIX_MAX_COEFFS_LEN] =
132
{
133
    0x0201DC90, 0x211F0D7C, 0x80000000, 0xF573B824,
134
    0xE85ED05B, 0x311DFB52, 0x3529E750, 0x00000000,
135
    0x7FFFFFFF, 0x21FA525A, 0x0971FD45, 0x05547B68,
136
    0x270C6366, 0x06FDD5A6, 0xF7025315, 0xB1155A1E
137
};
138
 
139
const q15_t matrix_q15_scale_values[MATRIX_MAX_COEFFS_LEN] =
140
{
141
    0x0201, 0x211F, 0x8000, 0xF573,
142
    0xE85E, 0x311D, 0x3529, 0x0000,
143
    0x7FFF, 0x21FA, 0x0971, 0x0554,
144
    0x270C, 0x06FD, 0xF702, 0xB115
145
};
146
 
147
const int32_t matrix_shift_values[MATRIX_MAX_SHIFTS_LEN] =
148
{
149
    -16, -7, 0, 7, 16
150
};
151
 
152
/*--------------------------------------------------------------------------------*/
153
/* Matrix Definitions */
154
/*--------------------------------------------------------------------------------*/
155
 
156
/**
157
 *  Define matrices by suffix (f32, q31, q15) for use in test cases.
158
 *
159
 *  The rand1 and rand2 suffixes get their data from the same pool of random
160
 *  data, but their starting points differ by 1 element.
161
 *
162
 *  Makes available:
163
 *  - matrix_`suffix`_1x1_rand1/2
164
 *  - matrix_`suffix`_1x4_rand1/2
165
 *  - matrix_`suffix`_2x4_rand1/2
166
 *  - matrix_`suffix`_4x4_rand1/2
167
 */
168
#define MATRIX_DEFINE_MATRICES(suffix)                              \
169
    arm_matrix_instance_##suffix matrix_##suffix##_1x1_rand1 =      \
170
        {1, 1, (TYPE_FROM_ABBREV(suffix) *) matrix_f32_100_rand };  \
171
    arm_matrix_instance_##suffix matrix_##suffix##_1x1_rand2 =      \
172
        {1, 1, (TYPE_FROM_ABBREV(suffix) *) (matrix_f32_100_rand+1)}; \
173
    arm_matrix_instance_##suffix matrix_##suffix##_1x1_zeros =      \
174
        {1, 1, (TYPE_FROM_ABBREV(suffix) *) matrix_zeros};          \
175
                                                                    \
176
    arm_matrix_instance_##suffix matrix_##suffix##_1x4_rand1 =      \
177
        {1, 4, (TYPE_FROM_ABBREV(suffix) *) matrix_f32_100_rand };  \
178
    arm_matrix_instance_##suffix matrix_##suffix##_1x4_rand2 =      \
179
        {1, 4, (TYPE_FROM_ABBREV(suffix) *) (matrix_f32_100_rand+1)}; \
180
    arm_matrix_instance_##suffix matrix_##suffix##_1x4_zeros =      \
181
        {1, 4, (TYPE_FROM_ABBREV(suffix) *) matrix_zeros};          \
182
                                                                    \
183
    arm_matrix_instance_##suffix matrix_##suffix##_2x4_rand1 =      \
184
        {2, 4, (TYPE_FROM_ABBREV(suffix) *) matrix_f32_100_rand };  \
185
    arm_matrix_instance_##suffix matrix_##suffix##_2x4_rand2 =      \
186
        {2, 4, (TYPE_FROM_ABBREV(suffix) *) (matrix_f32_100_rand+1)}; \
187
    arm_matrix_instance_##suffix matrix_##suffix##_2x4_zeros =      \
188
        {2, 4, (TYPE_FROM_ABBREV(suffix) *) matrix_zeros};          \
189
                                                                    \
190
    arm_matrix_instance_##suffix matrix_##suffix##_4x4_rand1 =      \
191
        {4, 4, (TYPE_FROM_ABBREV(suffix) *) matrix_f32_100_rand };  \
192
    arm_matrix_instance_##suffix matrix_##suffix##_4x4_rand2 =      \
193
        {4, 4, (TYPE_FROM_ABBREV(suffix) *) (matrix_f32_100_rand+1)}; \
194
    arm_matrix_instance_##suffix matrix_##suffix##_4x4_zeros =      \
195
        {4, 4, (TYPE_FROM_ABBREV(suffix) *) matrix_zeros}
196
 
197
MATRIX_DEFINE_MATRICES(f64);
198
MATRIX_DEFINE_MATRICES(f32);
199
MATRIX_DEFINE_MATRICES(q31);
200
MATRIX_DEFINE_MATRICES(q15);
201
 
202
/*--------------------------------------------------------------------------------*/
203
/* Matrix-Input Arrays */
204
/*--------------------------------------------------------------------------------*/
205
 
206
/* Define Input #ARR_DESC_t by suffix.
207
 *
208
 * Taking inputs in parallel from the 'a' and 'b' arrays yields the following
209
 * test cases:
210
 * - 1x1 multiplication by zero
211
 * - 1x1 multiplication between random numbers
212
 * - 1x1 * 1x4 valid dimension interaction
213
 * - 1x1 * 2x4 invalid dimension interaction
214
 * - 2x4 * 4x4 larger valid dimension interaction
215
 * - 4x4 * 4x4 larger valid dimension interaction
216
 */
217
#define MATRIX_DEFINE_INPUTS(suffix)                        \
218
    ARR_DESC_DEFINE(arm_matrix_instance_##suffix *,         \
219
                    matrix_##suffix##_a_inputs,             \
220
                    6,                                      \
221
                    CURLY(                                  \
222
                        &matrix_##suffix##_1x1_rand1,       \
223
                        &matrix_##suffix##_1x1_rand1,       \
224
                        &matrix_##suffix##_1x1_rand1,       \
225
                        &matrix_##suffix##_1x1_rand1,       \
226
                        &matrix_##suffix##_2x4_rand1,       \
227
                        &matrix_##suffix##_4x4_rand1        \
228
                        ));                                 \
229
                                                            \
230
    ARR_DESC_DEFINE(arm_matrix_instance_##suffix *,         \
231
                    matrix_##suffix##_b_inputs,             \
232
                    6,                                      \
233
                    CURLY(                                  \
234
                        &matrix_##suffix##_1x1_zeros,       \
235
                        &matrix_##suffix##_1x1_rand2,       \
236
                        &matrix_##suffix##_1x4_rand2,       \
237
                        &matrix_##suffix##_2x4_rand2,       \
238
                        &matrix_##suffix##_4x4_rand2,       \
239
                        &matrix_##suffix##_4x4_rand2        \
240
                        ));                                 \
241
                                                            \
242
    ARR_DESC_DEFINE(arm_matrix_instance_##suffix *,         \
243
                    matrix_##suffix##_invertible_inputs,    \
244
                    4,                                      \
245
                    CURLY(                                  \
246
                        &matrix_##suffix##_1x1_rand1,       \
247
                        &matrix_##suffix##_1x1_rand2,       \
248
                        &matrix_##suffix##_4x4_rand1,       \
249
                        &matrix_##suffix##_4x4_rand2        \
250
                        ))                                  \
251
 
252
MATRIX_DEFINE_INPUTS(f64);
253
MATRIX_DEFINE_INPUTS(f32);
254
MATRIX_DEFINE_INPUTS(q31);
255
MATRIX_DEFINE_INPUTS(q15);