1 #include "ComplexTestsF32.h"
2 #include <stdio.h>
3 #include "Error.h"
4 
5 #define SNR_THRESHOLD 120
6 
7 #define REL_ERROR (7.0e-6)
8 
test_cmplx_conj_f32()9     void ComplexTestsF32::test_cmplx_conj_f32()
10     {
11         const float32_t *inp1=input1.ptr();
12         float32_t *outp=output.ptr();
13 
14 
15         arm_cmplx_conj_f32(inp1,outp,input1.nbSamples() >> 1 );
16 
17         ASSERT_EMPTY_TAIL(output);
18 
19         ASSERT_SNR(output,ref,(float32_t)SNR_THRESHOLD);
20 
21         ASSERT_REL_ERROR(output,ref,REL_ERROR);
22 
23 
24     }
25 
26 
test_cmplx_dot_prod_f32()27     void ComplexTestsF32::test_cmplx_dot_prod_f32()
28     {
29         float32_t re,im;
30 
31         const float32_t *inp1=input1.ptr();
32         const float32_t *inp2=input2.ptr();
33         float32_t *outp=output.ptr();
34 
35         arm_cmplx_dot_prod_f32(inp1,inp2,input1.nbSamples() >> 1,&re,&im);
36 
37         outp[0] = re;
38         outp[1] = im;
39 
40         ASSERT_SNR(output,ref,(float32_t)SNR_THRESHOLD);
41 
42         ASSERT_REL_ERROR(output,ref,REL_ERROR);
43 
44         ASSERT_EMPTY_TAIL(output);
45     }
46 
test_cmplx_mag_f32()47     void ComplexTestsF32::test_cmplx_mag_f32()
48     {
49         const float32_t *inp1=input1.ptr();
50         float32_t *outp=output.ptr();
51 
52         arm_cmplx_mag_f32(inp1,outp,input1.nbSamples() >> 1 );
53 
54         ASSERT_EMPTY_TAIL(output);
55 
56         ASSERT_SNR(output,ref,(float32_t)SNR_THRESHOLD);
57 
58         ASSERT_REL_ERROR(output,ref,REL_ERROR);
59     }
60 
test_cmplx_mag_squared_f32()61     void ComplexTestsF32::test_cmplx_mag_squared_f32()
62     {
63         const float32_t *inp1=input1.ptr();
64         float32_t *outp=output.ptr();
65 
66         arm_cmplx_mag_squared_f32(inp1,outp,input1.nbSamples() >> 1 );
67 
68         ASSERT_EMPTY_TAIL(output);
69 
70 
71         ASSERT_SNR(output,ref,(float32_t)SNR_THRESHOLD);
72 
73         ASSERT_REL_ERROR(output,ref,REL_ERROR);
74     }
75 
test_cmplx_mult_cmplx_f32()76     void ComplexTestsF32::test_cmplx_mult_cmplx_f32()
77     {
78         const float32_t *inp1=input1.ptr();
79         const float32_t *inp2=input2.ptr();
80         float32_t *outp=output.ptr();
81 
82         arm_cmplx_mult_cmplx_f32(inp1,inp2,outp,input1.nbSamples() >> 1 );
83 
84         ASSERT_EMPTY_TAIL(output);
85 
86 
87         ASSERT_SNR(output,ref,(float32_t)SNR_THRESHOLD);
88 
89         ASSERT_REL_ERROR(output,ref,REL_ERROR);
90     }
91 
test_cmplx_mult_real_f32()92     void ComplexTestsF32::test_cmplx_mult_real_f32()
93     {
94         const float32_t *inp1=input1.ptr();
95         const float32_t *inp2=input2.ptr();
96         float32_t *outp=output.ptr();
97 
98         arm_cmplx_mult_real_f32(inp1,inp2,outp,input1.nbSamples() >> 1 );
99 
100         ASSERT_EMPTY_TAIL(output);
101 
102 
103         ASSERT_SNR(output,ref,(float32_t)SNR_THRESHOLD);
104 
105         ASSERT_REL_ERROR(output,ref,REL_ERROR);
106     }
107 
setUp(Testing::testID_t id,std::vector<Testing::param_t> & params,Client::PatternMgr * mgr)108     void ComplexTestsF32::setUp(Testing::testID_t id,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr)
109     {
110 
111        Testing::nbSamples_t nb=MAX_NB_SAMPLES;
112        (void)params;
113 
114 
115        switch(id)
116        {
117         case ComplexTestsF32::TEST_CMPLX_CONJ_F32_1:
118           nb = 3;
119           ref.reload(ComplexTestsF32::REF_CONJ_F32_ID,mgr,nb << 1);
120           input1.reload(ComplexTestsF32::INPUT1_F32_ID,mgr,nb << 1);
121 
122           output.create(ref.nbSamples(),ComplexTestsF32::OUT_SAMPLES_F32_ID,mgr);
123           break;
124         case ComplexTestsF32::TEST_CMPLX_CONJ_F32_2:
125           nb = 8;
126           ref.reload(ComplexTestsF32::REF_CONJ_F32_ID,mgr,nb << 1);
127           input1.reload(ComplexTestsF32::INPUT1_F32_ID,mgr,nb << 1);
128 
129           output.create(ref.nbSamples(),ComplexTestsF32::OUT_SAMPLES_F32_ID,mgr);
130           break;
131         case ComplexTestsF32::TEST_CMPLX_CONJ_F32_3:
132           nb = 11;
133           ref.reload(ComplexTestsF32::REF_CONJ_F32_ID,mgr,nb << 1);
134           input1.reload(ComplexTestsF32::INPUT1_F32_ID,mgr,nb << 1);
135 
136           output.create(ref.nbSamples(),ComplexTestsF32::OUT_SAMPLES_F32_ID,mgr);
137           break;
138         case ComplexTestsF32::TEST_CMPLX_DOT_PROD_F32_4:
139           nb = 3;
140           ref.reload(ComplexTestsF32::REF_DOT_PROD_3_F32_ID,mgr);
141           input1.reload(ComplexTestsF32::INPUT1_F32_ID,mgr,nb << 1);
142           input2.reload(ComplexTestsF32::INPUT2_F32_ID,mgr,nb << 1);
143 
144           output.create(ref.nbSamples(),ComplexTestsF32::OUT_SAMPLES_F32_ID,mgr);
145           break;
146 
147         case ComplexTestsF32::TEST_CMPLX_DOT_PROD_F32_5:
148           nb = 8;
149           ref.reload(ComplexTestsF32::REF_DOT_PROD_4N_F32_ID,mgr);
150           input1.reload(ComplexTestsF32::INPUT1_F32_ID,mgr,nb << 1);
151           input2.reload(ComplexTestsF32::INPUT2_F32_ID,mgr,nb << 1);
152 
153           output.create(ref.nbSamples(),ComplexTestsF32::OUT_SAMPLES_F32_ID,mgr);
154           break;
155 
156         case ComplexTestsF32::TEST_CMPLX_DOT_PROD_F32_6:
157           nb = 11;
158           ref.reload(ComplexTestsF32::REF_DOT_PROD_4N1_F32_ID,mgr);
159           input1.reload(ComplexTestsF32::INPUT1_F32_ID,mgr,nb << 1);
160           input2.reload(ComplexTestsF32::INPUT2_F32_ID,mgr,nb << 1);
161 
162           output.create(ref.nbSamples(),ComplexTestsF32::OUT_SAMPLES_F32_ID,mgr);
163           break;
164         case ComplexTestsF32::TEST_CMPLX_MAG_F32_7:
165           nb = 3;
166           ref.reload(ComplexTestsF32::REF_MAG_F32_ID,mgr,nb);
167           input1.reload(ComplexTestsF32::INPUT1_F32_ID,mgr,nb << 1);
168 
169           output.create(ref.nbSamples(),ComplexTestsF32::OUT_SAMPLES_F32_ID,mgr);
170           break;
171         case ComplexTestsF32::TEST_CMPLX_MAG_F32_8:
172           nb = 8;
173           ref.reload(ComplexTestsF32::REF_MAG_F32_ID,mgr,nb);
174           input1.reload(ComplexTestsF32::INPUT1_F32_ID,mgr,nb << 1);
175 
176           output.create(ref.nbSamples(),ComplexTestsF32::OUT_SAMPLES_F32_ID,mgr);
177           break;
178         case ComplexTestsF32::TEST_CMPLX_MAG_F32_9:
179           nb = 11;
180           ref.reload(ComplexTestsF32::REF_MAG_F32_ID,mgr,nb);
181           input1.reload(ComplexTestsF32::INPUT1_F32_ID,mgr,nb << 1);
182 
183           output.create(ref.nbSamples(),ComplexTestsF32::OUT_SAMPLES_F32_ID,mgr);
184           break;
185         case ComplexTestsF32::TEST_CMPLX_MAG_SQUARED_F32_10:
186           nb = 3;
187           ref.reload(ComplexTestsF32::REF_MAG_SQUARED_F32_ID,mgr,nb);
188           input1.reload(ComplexTestsF32::INPUT1_F32_ID,mgr,nb << 1);
189 
190           output.create(ref.nbSamples(),ComplexTestsF32::OUT_SAMPLES_F32_ID,mgr);
191           break;
192         case ComplexTestsF32::TEST_CMPLX_MAG_SQUARED_F32_11:
193           nb = 8;
194           ref.reload(ComplexTestsF32::REF_MAG_SQUARED_F32_ID,mgr,nb);
195           input1.reload(ComplexTestsF32::INPUT1_F32_ID,mgr,nb << 1);
196 
197           output.create(ref.nbSamples(),ComplexTestsF32::OUT_SAMPLES_F32_ID,mgr);
198           break;
199         case ComplexTestsF32::TEST_CMPLX_MAG_SQUARED_F32_12:
200           nb = 11;
201           ref.reload(ComplexTestsF32::REF_MAG_SQUARED_F32_ID,mgr,nb);
202           input1.reload(ComplexTestsF32::INPUT1_F32_ID,mgr,nb << 1);
203 
204           output.create(ref.nbSamples(),ComplexTestsF32::OUT_SAMPLES_F32_ID,mgr);
205           break;
206         case ComplexTestsF32::TEST_CMPLX_MULT_CMPLX_F32_13:
207           nb = 3;
208           ref.reload(ComplexTestsF32::REF_CMPLX_MULT_CMPLX_F32_ID,mgr,nb << 1);
209           input1.reload(ComplexTestsF32::INPUT1_F32_ID,mgr,nb << 1);
210           input2.reload(ComplexTestsF32::INPUT2_F32_ID,mgr,nb << 1);
211 
212           output.create(ref.nbSamples(),ComplexTestsF32::OUT_SAMPLES_F32_ID,mgr);
213           break;
214         case ComplexTestsF32::TEST_CMPLX_MULT_CMPLX_F32_14:
215           nb = 8;
216           ref.reload(ComplexTestsF32::REF_CMPLX_MULT_CMPLX_F32_ID,mgr,nb << 1);
217           input1.reload(ComplexTestsF32::INPUT1_F32_ID,mgr,nb << 1);
218           input2.reload(ComplexTestsF32::INPUT2_F32_ID,mgr,nb << 1);
219 
220           output.create(ref.nbSamples(),ComplexTestsF32::OUT_SAMPLES_F32_ID,mgr);
221           break;
222         case ComplexTestsF32::TEST_CMPLX_MULT_CMPLX_F32_15:
223           nb = 11;
224           ref.reload(ComplexTestsF32::REF_CMPLX_MULT_CMPLX_F32_ID,mgr,nb << 1);
225           input1.reload(ComplexTestsF32::INPUT1_F32_ID,mgr,nb << 1);
226           input2.reload(ComplexTestsF32::INPUT2_F32_ID,mgr,nb << 1);
227 
228           output.create(ref.nbSamples(),ComplexTestsF32::OUT_SAMPLES_F32_ID,mgr);
229           break;
230         case ComplexTestsF32::TEST_CMPLX_MULT_REAL_F32_16:
231           nb = 3;
232           ref.reload(ComplexTestsF32::REF_CMPLX_MULT_REAL_F32_ID,mgr,nb << 1);
233           input1.reload(ComplexTestsF32::INPUT1_F32_ID,mgr,nb << 1);
234           input2.reload(ComplexTestsF32::INPUT3_F32_ID,mgr,nb);
235 
236           output.create(ref.nbSamples(),ComplexTestsF32::OUT_SAMPLES_F32_ID,mgr);
237           break;
238         case ComplexTestsF32::TEST_CMPLX_MULT_REAL_F32_17:
239           nb = 8;
240           ref.reload(ComplexTestsF32::REF_CMPLX_MULT_REAL_F32_ID,mgr,nb << 1);
241           input1.reload(ComplexTestsF32::INPUT1_F32_ID,mgr,nb << 1);
242           input2.reload(ComplexTestsF32::INPUT3_F32_ID,mgr,nb);
243 
244           output.create(ref.nbSamples(),ComplexTestsF32::OUT_SAMPLES_F32_ID,mgr);
245           break;
246         case ComplexTestsF32::TEST_CMPLX_MULT_REAL_F32_18:
247           nb = 11;
248           ref.reload(ComplexTestsF32::REF_CMPLX_MULT_REAL_F32_ID,mgr,nb << 1);
249           input1.reload(ComplexTestsF32::INPUT1_F32_ID,mgr,nb << 1);
250           input2.reload(ComplexTestsF32::INPUT3_F32_ID,mgr,nb);
251 
252           output.create(ref.nbSamples(),ComplexTestsF32::OUT_SAMPLES_F32_ID,mgr);
253           break;
254 
255         case ComplexTestsF32::TEST_CMPLX_CONJ_F32_19:
256           ref.reload(ComplexTestsF32::REF_CONJ_F32_ID,mgr,nb << 1);
257           input1.reload(ComplexTestsF32::INPUT1_F32_ID,mgr,nb << 1);
258 
259           output.create(ref.nbSamples(),ComplexTestsF32::OUT_SAMPLES_F32_ID,mgr);
260         break;
261 
262         case ComplexTestsF32::TEST_CMPLX_DOT_PROD_F32_20:
263           ref.reload(ComplexTestsF32::REF_DOT_PROD_LONG_F32_ID,mgr);
264           input1.reload(ComplexTestsF32::INPUT1_F32_ID,mgr,nb << 1);
265           input2.reload(ComplexTestsF32::INPUT2_F32_ID,mgr,nb << 1);
266 
267           output.create(ref.nbSamples(),ComplexTestsF32::OUT_SAMPLES_F32_ID,mgr);
268         break;
269 
270         case ComplexTestsF32::TEST_CMPLX_MAG_F32_21:
271           ref.reload(ComplexTestsF32::REF_MAG_F32_ID,mgr,nb);
272           input1.reload(ComplexTestsF32::INPUT1_F32_ID,mgr,nb << 1);
273 
274           output.create(ref.nbSamples(),ComplexTestsF32::OUT_SAMPLES_F32_ID,mgr);
275         break;
276 
277         case ComplexTestsF32::TEST_CMPLX_MAG_SQUARED_F32_22:
278           ref.reload(ComplexTestsF32::REF_MAG_SQUARED_F32_ID,mgr,nb);
279           input1.reload(ComplexTestsF32::INPUT1_F32_ID,mgr,nb << 1);
280 
281           output.create(ref.nbSamples(),ComplexTestsF32::OUT_SAMPLES_F32_ID,mgr);
282         break;
283 
284         case ComplexTestsF32::TEST_CMPLX_MULT_CMPLX_F32_23:
285           ref.reload(ComplexTestsF32::REF_CMPLX_MULT_CMPLX_F32_ID,mgr,nb << 1);
286           input1.reload(ComplexTestsF32::INPUT1_F32_ID,mgr,nb << 1);
287           input2.reload(ComplexTestsF32::INPUT2_F32_ID,mgr,nb << 1);
288 
289           output.create(ref.nbSamples(),ComplexTestsF32::OUT_SAMPLES_F32_ID,mgr);
290         break;
291 
292         case ComplexTestsF32::TEST_CMPLX_MULT_REAL_F32_24:
293           ref.reload(ComplexTestsF32::REF_CMPLX_MULT_REAL_F32_ID,mgr,nb << 1);
294           input1.reload(ComplexTestsF32::INPUT1_F32_ID,mgr,nb << 1);
295           input2.reload(ComplexTestsF32::INPUT3_F32_ID,mgr,nb);
296 
297           output.create(ref.nbSamples(),ComplexTestsF32::OUT_SAMPLES_F32_ID,mgr);
298         break;
299 
300        }
301 
302     }
303 
tearDown(Testing::testID_t id,Client::PatternMgr * mgr)304     void ComplexTestsF32::tearDown(Testing::testID_t id,Client::PatternMgr *mgr)
305     {
306         (void)id;
307         output.dump(mgr);
308     }
309