1 #include "ComplexTestsF16.h"
2 #include <stdio.h>
3 #include "Error.h"
4 
5 #define SNR_THRESHOLD 39
6 
7 #define REL_ERROR (6.0e-2)
8 
test_cmplx_conj_f16()9     void ComplexTestsF16::test_cmplx_conj_f16()
10     {
11         const float16_t *inp1=input1.ptr();
12         float16_t *outp=output.ptr();
13 
14 
15         arm_cmplx_conj_f16(inp1,outp,input1.nbSamples() >> 1 );
16 
17         ASSERT_EMPTY_TAIL(output);
18 
19         ASSERT_SNR(output,ref,(float16_t)SNR_THRESHOLD);
20 
21         ASSERT_REL_ERROR(output,ref,REL_ERROR);
22 
23 
24     }
25 
26 
test_cmplx_dot_prod_f16()27     void ComplexTestsF16::test_cmplx_dot_prod_f16()
28     {
29         float16_t re,im;
30 
31         const float16_t *inp1=input1.ptr();
32         const float16_t *inp2=input2.ptr();
33         float16_t *outp=output.ptr();
34 
35         arm_cmplx_dot_prod_f16(inp1,inp2,input1.nbSamples() >> 1,&re,&im);
36 
37         outp[0] = re;
38         outp[1] = im;
39 
40         ASSERT_SNR(output,ref,(float16_t)SNR_THRESHOLD);
41 
42         ASSERT_REL_ERROR(output,ref,REL_ERROR);
43 
44         ASSERT_EMPTY_TAIL(output);
45     }
46 
test_cmplx_mag_f16()47     void ComplexTestsF16::test_cmplx_mag_f16()
48     {
49         const float16_t *inp1=input1.ptr();
50         float16_t *outp=output.ptr();
51 
52         arm_cmplx_mag_f16(inp1,outp,input1.nbSamples() >> 1 );
53 
54         ASSERT_EMPTY_TAIL(output);
55 
56         ASSERT_SNR(output,ref,(float16_t)SNR_THRESHOLD);
57 
58         ASSERT_REL_ERROR(output,ref,REL_ERROR);
59     }
60 
test_cmplx_mag_squared_f16()61     void ComplexTestsF16::test_cmplx_mag_squared_f16()
62     {
63         const float16_t *inp1=input1.ptr();
64         float16_t *outp=output.ptr();
65 
66         arm_cmplx_mag_squared_f16(inp1,outp,input1.nbSamples() >> 1 );
67 
68         ASSERT_EMPTY_TAIL(output);
69 
70 
71         ASSERT_SNR(output,ref,(float16_t)SNR_THRESHOLD);
72 
73         ASSERT_REL_ERROR(output,ref,REL_ERROR);
74     }
75 
test_cmplx_mult_cmplx_f16()76     void ComplexTestsF16::test_cmplx_mult_cmplx_f16()
77     {
78         const float16_t *inp1=input1.ptr();
79         const float16_t *inp2=input2.ptr();
80         float16_t *outp=output.ptr();
81 
82         arm_cmplx_mult_cmplx_f16(inp1,inp2,outp,input1.nbSamples() >> 1 );
83 
84         ASSERT_EMPTY_TAIL(output);
85 
86 
87         ASSERT_SNR(output,ref,(float16_t)SNR_THRESHOLD);
88 
89         ASSERT_REL_ERROR(output,ref,REL_ERROR);
90     }
91 
test_cmplx_mult_real_f16()92     void ComplexTestsF16::test_cmplx_mult_real_f16()
93     {
94         const float16_t *inp1=input1.ptr();
95         const float16_t *inp2=input2.ptr();
96         float16_t *outp=output.ptr();
97 
98         arm_cmplx_mult_real_f16(inp1,inp2,outp,input1.nbSamples() >> 1 );
99 
100         ASSERT_EMPTY_TAIL(output);
101 
102 
103         ASSERT_SNR(output,ref,(float16_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 ComplexTestsF16::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 ComplexTestsF16::TEST_CMPLX_CONJ_F16_1:
118           nb = 7;
119           ref.reload(ComplexTestsF16::REF_CONJ_F16_ID,mgr,nb << 1);
120           input1.reload(ComplexTestsF16::INPUT1_F16_ID,mgr,nb << 1);
121 
122           output.create(ref.nbSamples(),ComplexTestsF16::OUT_SAMPLES_F16_ID,mgr);
123           break;
124         case ComplexTestsF16::TEST_CMPLX_CONJ_F16_2:
125           nb = 16;
126           ref.reload(ComplexTestsF16::REF_CONJ_F16_ID,mgr,nb << 1);
127           input1.reload(ComplexTestsF16::INPUT1_F16_ID,mgr,nb << 1);
128 
129           output.create(ref.nbSamples(),ComplexTestsF16::OUT_SAMPLES_F16_ID,mgr);
130           break;
131         case ComplexTestsF16::TEST_CMPLX_CONJ_F16_3:
132           nb = 23;
133           ref.reload(ComplexTestsF16::REF_CONJ_F16_ID,mgr,nb << 1);
134           input1.reload(ComplexTestsF16::INPUT1_F16_ID,mgr,nb << 1);
135 
136           output.create(ref.nbSamples(),ComplexTestsF16::OUT_SAMPLES_F16_ID,mgr);
137           break;
138         case ComplexTestsF16::TEST_CMPLX_DOT_PROD_F16_4:
139           nb = 7;
140           ref.reload(ComplexTestsF16::REF_DOT_PROD_3_F16_ID,mgr);
141           input1.reload(ComplexTestsF16::INPUT1_F16_ID,mgr,nb << 1);
142           input2.reload(ComplexTestsF16::INPUT2_F16_ID,mgr,nb << 1);
143 
144           output.create(ref.nbSamples(),ComplexTestsF16::OUT_SAMPLES_F16_ID,mgr);
145           break;
146 
147         case ComplexTestsF16::TEST_CMPLX_DOT_PROD_F16_5:
148           nb = 16;
149           ref.reload(ComplexTestsF16::REF_DOT_PROD_4N_F16_ID,mgr);
150           input1.reload(ComplexTestsF16::INPUT1_F16_ID,mgr,nb << 1);
151           input2.reload(ComplexTestsF16::INPUT2_F16_ID,mgr,nb << 1);
152 
153           output.create(ref.nbSamples(),ComplexTestsF16::OUT_SAMPLES_F16_ID,mgr);
154           break;
155 
156         case ComplexTestsF16::TEST_CMPLX_DOT_PROD_F16_6:
157           nb = 23;
158           ref.reload(ComplexTestsF16::REF_DOT_PROD_4N1_F16_ID,mgr);
159           input1.reload(ComplexTestsF16::INPUT1_F16_ID,mgr,nb << 1);
160           input2.reload(ComplexTestsF16::INPUT2_F16_ID,mgr,nb << 1);
161 
162           output.create(ref.nbSamples(),ComplexTestsF16::OUT_SAMPLES_F16_ID,mgr);
163           break;
164         case ComplexTestsF16::TEST_CMPLX_MAG_F16_7:
165           nb = 7;
166           ref.reload(ComplexTestsF16::REF_MAG_F16_ID,mgr,nb);
167           input1.reload(ComplexTestsF16::INPUT1_F16_ID,mgr,nb << 1);
168 
169           output.create(ref.nbSamples(),ComplexTestsF16::OUT_SAMPLES_F16_ID,mgr);
170           break;
171         case ComplexTestsF16::TEST_CMPLX_MAG_F16_8:
172           nb = 16;
173           ref.reload(ComplexTestsF16::REF_MAG_F16_ID,mgr,nb);
174           input1.reload(ComplexTestsF16::INPUT1_F16_ID,mgr,nb << 1);
175 
176           output.create(ref.nbSamples(),ComplexTestsF16::OUT_SAMPLES_F16_ID,mgr);
177           break;
178         case ComplexTestsF16::TEST_CMPLX_MAG_F16_9:
179           nb = 23;
180           ref.reload(ComplexTestsF16::REF_MAG_F16_ID,mgr,nb);
181           input1.reload(ComplexTestsF16::INPUT1_F16_ID,mgr,nb << 1);
182 
183           output.create(ref.nbSamples(),ComplexTestsF16::OUT_SAMPLES_F16_ID,mgr);
184           break;
185         case ComplexTestsF16::TEST_CMPLX_MAG_SQUARED_F16_10:
186           nb = 7;
187           ref.reload(ComplexTestsF16::REF_MAG_SQUARED_F16_ID,mgr,nb);
188           input1.reload(ComplexTestsF16::INPUT1_F16_ID,mgr,nb << 1);
189 
190           output.create(ref.nbSamples(),ComplexTestsF16::OUT_SAMPLES_F16_ID,mgr);
191           break;
192         case ComplexTestsF16::TEST_CMPLX_MAG_SQUARED_F16_11:
193           nb = 16;
194           ref.reload(ComplexTestsF16::REF_MAG_SQUARED_F16_ID,mgr,nb);
195           input1.reload(ComplexTestsF16::INPUT1_F16_ID,mgr,nb << 1);
196 
197           output.create(ref.nbSamples(),ComplexTestsF16::OUT_SAMPLES_F16_ID,mgr);
198           break;
199         case ComplexTestsF16::TEST_CMPLX_MAG_SQUARED_F16_12:
200           nb = 23;
201           ref.reload(ComplexTestsF16::REF_MAG_SQUARED_F16_ID,mgr,nb);
202           input1.reload(ComplexTestsF16::INPUT1_F16_ID,mgr,nb << 1);
203 
204           output.create(ref.nbSamples(),ComplexTestsF16::OUT_SAMPLES_F16_ID,mgr);
205           break;
206         case ComplexTestsF16::TEST_CMPLX_MULT_CMPLX_F16_13:
207           nb = 7;
208           ref.reload(ComplexTestsF16::REF_CMPLX_MULT_CMPLX_F16_ID,mgr,nb << 1);
209           input1.reload(ComplexTestsF16::INPUT1_F16_ID,mgr,nb << 1);
210           input2.reload(ComplexTestsF16::INPUT2_F16_ID,mgr,nb << 1);
211 
212           output.create(ref.nbSamples(),ComplexTestsF16::OUT_SAMPLES_F16_ID,mgr);
213           break;
214         case ComplexTestsF16::TEST_CMPLX_MULT_CMPLX_F16_14:
215           nb = 16;
216           ref.reload(ComplexTestsF16::REF_CMPLX_MULT_CMPLX_F16_ID,mgr,nb << 1);
217           input1.reload(ComplexTestsF16::INPUT1_F16_ID,mgr,nb << 1);
218           input2.reload(ComplexTestsF16::INPUT2_F16_ID,mgr,nb << 1);
219 
220           output.create(ref.nbSamples(),ComplexTestsF16::OUT_SAMPLES_F16_ID,mgr);
221           break;
222         case ComplexTestsF16::TEST_CMPLX_MULT_CMPLX_F16_15:
223           nb = 23;
224           ref.reload(ComplexTestsF16::REF_CMPLX_MULT_CMPLX_F16_ID,mgr,nb << 1);
225           input1.reload(ComplexTestsF16::INPUT1_F16_ID,mgr,nb << 1);
226           input2.reload(ComplexTestsF16::INPUT2_F16_ID,mgr,nb << 1);
227 
228           output.create(ref.nbSamples(),ComplexTestsF16::OUT_SAMPLES_F16_ID,mgr);
229           break;
230         case ComplexTestsF16::TEST_CMPLX_MULT_REAL_F16_16:
231           nb = 7;
232           ref.reload(ComplexTestsF16::REF_CMPLX_MULT_REAL_F16_ID,mgr,nb << 1);
233           input1.reload(ComplexTestsF16::INPUT1_F16_ID,mgr,nb << 1);
234           input2.reload(ComplexTestsF16::INPUT3_F16_ID,mgr,nb);
235 
236           output.create(ref.nbSamples(),ComplexTestsF16::OUT_SAMPLES_F16_ID,mgr);
237           break;
238         case ComplexTestsF16::TEST_CMPLX_MULT_REAL_F16_17:
239           nb = 16;
240           ref.reload(ComplexTestsF16::REF_CMPLX_MULT_REAL_F16_ID,mgr,nb << 1);
241           input1.reload(ComplexTestsF16::INPUT1_F16_ID,mgr,nb << 1);
242           input2.reload(ComplexTestsF16::INPUT3_F16_ID,mgr,nb);
243 
244           output.create(ref.nbSamples(),ComplexTestsF16::OUT_SAMPLES_F16_ID,mgr);
245           break;
246         case ComplexTestsF16::TEST_CMPLX_MULT_REAL_F16_18:
247           nb = 23;
248           ref.reload(ComplexTestsF16::REF_CMPLX_MULT_REAL_F16_ID,mgr,nb << 1);
249           input1.reload(ComplexTestsF16::INPUT1_F16_ID,mgr,nb << 1);
250           input2.reload(ComplexTestsF16::INPUT3_F16_ID,mgr,nb);
251 
252           output.create(ref.nbSamples(),ComplexTestsF16::OUT_SAMPLES_F16_ID,mgr);
253           break;
254 
255         case ComplexTestsF16::TEST_CMPLX_CONJ_F16_19:
256           ref.reload(ComplexTestsF16::REF_CONJ_F16_ID,mgr,nb << 1);
257           input1.reload(ComplexTestsF16::INPUT1_F16_ID,mgr,nb << 1);
258 
259           output.create(ref.nbSamples(),ComplexTestsF16::OUT_SAMPLES_F16_ID,mgr);
260         break;
261 
262         case ComplexTestsF16::TEST_CMPLX_DOT_PROD_F16_20:
263           ref.reload(ComplexTestsF16::REF_DOT_PROD_LONG_F16_ID,mgr);
264           input1.reload(ComplexTestsF16::INPUT1_F16_ID,mgr,nb << 1);
265           input2.reload(ComplexTestsF16::INPUT2_F16_ID,mgr,nb << 1);
266 
267           output.create(ref.nbSamples(),ComplexTestsF16::OUT_SAMPLES_F16_ID,mgr);
268         break;
269 
270         case ComplexTestsF16::TEST_CMPLX_MAG_F16_21:
271           ref.reload(ComplexTestsF16::REF_MAG_F16_ID,mgr,nb);
272           input1.reload(ComplexTestsF16::INPUT1_F16_ID,mgr,nb << 1);
273 
274           output.create(ref.nbSamples(),ComplexTestsF16::OUT_SAMPLES_F16_ID,mgr);
275         break;
276 
277         case ComplexTestsF16::TEST_CMPLX_MAG_SQUARED_F16_22:
278           ref.reload(ComplexTestsF16::REF_MAG_SQUARED_F16_ID,mgr,nb);
279           input1.reload(ComplexTestsF16::INPUT1_F16_ID,mgr,nb << 1);
280 
281           output.create(ref.nbSamples(),ComplexTestsF16::OUT_SAMPLES_F16_ID,mgr);
282         break;
283 
284         case ComplexTestsF16::TEST_CMPLX_MULT_CMPLX_F16_23:
285           ref.reload(ComplexTestsF16::REF_CMPLX_MULT_CMPLX_F16_ID,mgr,nb << 1);
286           input1.reload(ComplexTestsF16::INPUT1_F16_ID,mgr,nb << 1);
287           input2.reload(ComplexTestsF16::INPUT2_F16_ID,mgr,nb << 1);
288 
289           output.create(ref.nbSamples(),ComplexTestsF16::OUT_SAMPLES_F16_ID,mgr);
290         break;
291 
292         case ComplexTestsF16::TEST_CMPLX_MULT_REAL_F16_24:
293           ref.reload(ComplexTestsF16::REF_CMPLX_MULT_REAL_F16_ID,mgr,nb << 1);
294           input1.reload(ComplexTestsF16::INPUT1_F16_ID,mgr,nb << 1);
295           input2.reload(ComplexTestsF16::INPUT3_F16_ID,mgr,nb);
296 
297           output.create(ref.nbSamples(),ComplexTestsF16::OUT_SAMPLES_F16_ID,mgr);
298         break;
299 
300        }
301 
302     }
303 
tearDown(Testing::testID_t id,Client::PatternMgr * mgr)304     void ComplexTestsF16::tearDown(Testing::testID_t id,Client::PatternMgr *mgr)
305     {
306         (void)id;
307         output.dump(mgr);
308     }
309