1 #include "ComplexTestsF64.h"
2 #include <stdio.h>
3 #include "Error.h"
4 
5 #define SNR_THRESHOLD 310
6 
7 #define REL_ERROR (3.0e-15)
8 
9 /*
10     void ComplexTestsF64::test_cmplx_conj_f64()
11     {
12         const float64_t *inp1=input1.ptr();
13         float64_t *outp=output.ptr();
14 
15 
16         arm_cmplx_conj_f64(inp1,outp,input1.nbSamples() >> 1 );
17 
18         ASSERT_EMPTY_TAIL(output);
19 
20         ASSERT_SNR(output,ref,(float64_t)SNR_THRESHOLD);
21 
22         ASSERT_REL_ERROR(output,ref,REL_ERROR);
23 
24 
25     }
26 
27 
28     void ComplexTestsF64::test_cmplx_dot_prod_f64()
29     {
30         float64_t re,im;
31 
32         const float64_t *inp1=input1.ptr();
33         const float64_t *inp2=input2.ptr();
34         float64_t *outp=output.ptr();
35 
36         arm_cmplx_dot_prod_f64(inp1,inp2,input1.nbSamples() >> 1,&re,&im);
37 
38         outp[0] = re;
39         outp[1] = im;
40 
41         ASSERT_SNR(output,ref,(float64_t)SNR_THRESHOLD);
42 
43         ASSERT_REL_ERROR(output,ref,REL_ERROR);
44 
45         ASSERT_EMPTY_TAIL(output);
46     }
47 */
test_cmplx_mag_f64()48     void ComplexTestsF64::test_cmplx_mag_f64()
49     {
50         const float64_t *inp1=input1.ptr();
51         float64_t *outp=output.ptr();
52 
53         arm_cmplx_mag_f64(inp1,outp,input1.nbSamples() >> 1 );
54 
55         ASSERT_EMPTY_TAIL(output);
56 
57         ASSERT_SNR(output,ref,(float64_t)SNR_THRESHOLD);
58 
59         ASSERT_REL_ERROR(output,ref,REL_ERROR);
60     }
61 
test_cmplx_mag_squared_f64()62     void ComplexTestsF64::test_cmplx_mag_squared_f64()
63     {
64         const float64_t *inp1=input1.ptr();
65         float64_t *outp=output.ptr();
66 
67         arm_cmplx_mag_squared_f64(inp1,outp,input1.nbSamples() >> 1 );
68 
69         ASSERT_EMPTY_TAIL(output);
70 
71 
72         ASSERT_SNR(output,ref,(float64_t)SNR_THRESHOLD);
73 
74         ASSERT_REL_ERROR(output,ref,REL_ERROR);
75     }
76 
test_cmplx_mult_cmplx_f64()77     void ComplexTestsF64::test_cmplx_mult_cmplx_f64()
78     {
79         const float64_t *inp1=input1.ptr();
80         const float64_t *inp2=input2.ptr();
81         float64_t *outp=output.ptr();
82 
83         arm_cmplx_mult_cmplx_f64(inp1,inp2,outp,input1.nbSamples() >> 1 );
84 
85         ASSERT_EMPTY_TAIL(output);
86 
87 
88         ASSERT_SNR(output,ref,(float64_t)SNR_THRESHOLD);
89 
90         ASSERT_REL_ERROR(output,ref,REL_ERROR);
91     }
92 
93 /*
94     void ComplexTestsF64::test_cmplx_mult_real_f64()
95     {
96         const float64_t *inp1=input1.ptr();
97         const float64_t *inp2=input2.ptr();
98         float64_t *outp=output.ptr();
99 
100         arm_cmplx_mult_real_f64(inp1,inp2,outp,input1.nbSamples() >> 1 );
101 
102         ASSERT_EMPTY_TAIL(output);
103 
104 
105         ASSERT_SNR(output,ref,(float64_t)SNR_THRESHOLD);
106 
107         ASSERT_REL_ERROR(output,ref,REL_ERROR);
108     }
109  */
setUp(Testing::testID_t id,std::vector<Testing::param_t> & params,Client::PatternMgr * mgr)110     void ComplexTestsF64::setUp(Testing::testID_t id,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr)
111     {
112 
113        Testing::nbSamples_t nb=MAX_NB_SAMPLES;
114        (void)params;
115 
116 
117        switch(id)
118        {
119         case ComplexTestsF64::TEST_CMPLX_CONJ_F64_1:
120           nb = 2;
121           ref.reload(ComplexTestsF64::REF_CONJ_F64_ID,mgr,nb << 1);
122           input1.reload(ComplexTestsF64::INPUT1_F64_ID,mgr,nb << 1);
123 
124           output.create(ref.nbSamples(),ComplexTestsF64::OUT_SAMPLES_F64_ID,mgr);
125           break;
126         case ComplexTestsF64::TEST_CMPLX_CONJ_F64_2:
127           nb = 4;
128           ref.reload(ComplexTestsF64::REF_CONJ_F64_ID,mgr,nb << 1);
129           input1.reload(ComplexTestsF64::INPUT1_F64_ID,mgr,nb << 1);
130 
131           output.create(ref.nbSamples(),ComplexTestsF64::OUT_SAMPLES_F64_ID,mgr);
132           break;
133         case ComplexTestsF64::TEST_CMPLX_CONJ_F64_3:
134           nb = 5;
135           ref.reload(ComplexTestsF64::REF_CONJ_F64_ID,mgr,nb << 1);
136           input1.reload(ComplexTestsF64::INPUT1_F64_ID,mgr,nb << 1);
137 
138           output.create(ref.nbSamples(),ComplexTestsF64::OUT_SAMPLES_F64_ID,mgr);
139           break;
140         case ComplexTestsF64::TEST_CMPLX_DOT_PROD_F64_4:
141           nb = 2;
142           ref.reload(ComplexTestsF64::REF_DOT_PROD_3_F64_ID,mgr);
143           input1.reload(ComplexTestsF64::INPUT1_F64_ID,mgr,nb << 1);
144           input2.reload(ComplexTestsF64::INPUT2_F64_ID,mgr,nb << 1);
145 
146           output.create(ref.nbSamples(),ComplexTestsF64::OUT_SAMPLES_F64_ID,mgr);
147           break;
148 
149         case ComplexTestsF64::TEST_CMPLX_DOT_PROD_F64_5:
150           nb = 4;
151           ref.reload(ComplexTestsF64::REF_DOT_PROD_4N_F64_ID,mgr);
152           input1.reload(ComplexTestsF64::INPUT1_F64_ID,mgr,nb << 1);
153           input2.reload(ComplexTestsF64::INPUT2_F64_ID,mgr,nb << 1);
154 
155           output.create(ref.nbSamples(),ComplexTestsF64::OUT_SAMPLES_F64_ID,mgr);
156           break;
157 
158         case ComplexTestsF64::TEST_CMPLX_DOT_PROD_F64_6:
159           nb = 5;
160           ref.reload(ComplexTestsF64::REF_DOT_PROD_4N1_F64_ID,mgr);
161           input1.reload(ComplexTestsF64::INPUT1_F64_ID,mgr,nb << 1);
162           input2.reload(ComplexTestsF64::INPUT2_F64_ID,mgr,nb << 1);
163 
164           output.create(ref.nbSamples(),ComplexTestsF64::OUT_SAMPLES_F64_ID,mgr);
165           break;
166         case ComplexTestsF64::TEST_CMPLX_MAG_F64_7:
167           nb = 2;
168           ref.reload(ComplexTestsF64::REF_MAG_F64_ID,mgr,nb);
169           input1.reload(ComplexTestsF64::INPUT1_F64_ID,mgr,nb << 1);
170 
171           output.create(ref.nbSamples(),ComplexTestsF64::OUT_SAMPLES_F64_ID,mgr);
172           break;
173         case ComplexTestsF64::TEST_CMPLX_MAG_F64_8:
174           nb = 4;
175           ref.reload(ComplexTestsF64::REF_MAG_F64_ID,mgr,nb);
176           input1.reload(ComplexTestsF64::INPUT1_F64_ID,mgr,nb << 1);
177 
178           output.create(ref.nbSamples(),ComplexTestsF64::OUT_SAMPLES_F64_ID,mgr);
179           break;
180         case ComplexTestsF64::TEST_CMPLX_MAG_F64_9:
181           nb = 5;
182           ref.reload(ComplexTestsF64::REF_MAG_F64_ID,mgr,nb);
183           input1.reload(ComplexTestsF64::INPUT1_F64_ID,mgr,nb << 1);
184 
185           output.create(ref.nbSamples(),ComplexTestsF64::OUT_SAMPLES_F64_ID,mgr);
186           break;
187         case ComplexTestsF64::TEST_CMPLX_MAG_SQUARED_F64_10:
188           nb = 2;
189           ref.reload(ComplexTestsF64::REF_MAG_SQUARED_F64_ID,mgr,nb);
190           input1.reload(ComplexTestsF64::INPUT1_F64_ID,mgr,nb << 1);
191 
192           output.create(ref.nbSamples(),ComplexTestsF64::OUT_SAMPLES_F64_ID,mgr);
193           break;
194         case ComplexTestsF64::TEST_CMPLX_MAG_SQUARED_F64_11:
195           nb = 4;
196           ref.reload(ComplexTestsF64::REF_MAG_SQUARED_F64_ID,mgr,nb);
197           input1.reload(ComplexTestsF64::INPUT1_F64_ID,mgr,nb << 1);
198 
199           output.create(ref.nbSamples(),ComplexTestsF64::OUT_SAMPLES_F64_ID,mgr);
200           break;
201         case ComplexTestsF64::TEST_CMPLX_MAG_SQUARED_F64_12:
202           nb = 5;
203           ref.reload(ComplexTestsF64::REF_MAG_SQUARED_F64_ID,mgr,nb);
204           input1.reload(ComplexTestsF64::INPUT1_F64_ID,mgr,nb << 1);
205 
206           output.create(ref.nbSamples(),ComplexTestsF64::OUT_SAMPLES_F64_ID,mgr);
207           break;
208         case ComplexTestsF64::TEST_CMPLX_MULT_CMPLX_F64_13:
209           nb = 2;
210           ref.reload(ComplexTestsF64::REF_CMPLX_MULT_CMPLX_F64_ID,mgr,nb << 1);
211           input1.reload(ComplexTestsF64::INPUT1_F64_ID,mgr,nb << 1);
212           input2.reload(ComplexTestsF64::INPUT2_F64_ID,mgr,nb << 1);
213 
214           output.create(ref.nbSamples(),ComplexTestsF64::OUT_SAMPLES_F64_ID,mgr);
215           break;
216         case ComplexTestsF64::TEST_CMPLX_MULT_CMPLX_F64_14:
217           nb = 4;
218           ref.reload(ComplexTestsF64::REF_CMPLX_MULT_CMPLX_F64_ID,mgr,nb << 1);
219           input1.reload(ComplexTestsF64::INPUT1_F64_ID,mgr,nb << 1);
220           input2.reload(ComplexTestsF64::INPUT2_F64_ID,mgr,nb << 1);
221 
222           output.create(ref.nbSamples(),ComplexTestsF64::OUT_SAMPLES_F64_ID,mgr);
223           break;
224         case ComplexTestsF64::TEST_CMPLX_MULT_CMPLX_F64_15:
225           nb = 5;
226           ref.reload(ComplexTestsF64::REF_CMPLX_MULT_CMPLX_F64_ID,mgr,nb << 1);
227           input1.reload(ComplexTestsF64::INPUT1_F64_ID,mgr,nb << 1);
228           input2.reload(ComplexTestsF64::INPUT2_F64_ID,mgr,nb << 1);
229 
230           output.create(ref.nbSamples(),ComplexTestsF64::OUT_SAMPLES_F64_ID,mgr);
231           break;
232         case ComplexTestsF64::TEST_CMPLX_MULT_REAL_F64_16:
233           nb = 2;
234           ref.reload(ComplexTestsF64::REF_CMPLX_MULT_REAL_F64_ID,mgr,nb << 1);
235           input1.reload(ComplexTestsF64::INPUT1_F64_ID,mgr,nb << 1);
236           input2.reload(ComplexTestsF64::INPUT3_F64_ID,mgr,nb);
237 
238           output.create(ref.nbSamples(),ComplexTestsF64::OUT_SAMPLES_F64_ID,mgr);
239           break;
240         case ComplexTestsF64::TEST_CMPLX_MULT_REAL_F64_17:
241           nb = 4;
242           ref.reload(ComplexTestsF64::REF_CMPLX_MULT_REAL_F64_ID,mgr,nb << 1);
243           input1.reload(ComplexTestsF64::INPUT1_F64_ID,mgr,nb << 1);
244           input2.reload(ComplexTestsF64::INPUT3_F64_ID,mgr,nb);
245 
246           output.create(ref.nbSamples(),ComplexTestsF64::OUT_SAMPLES_F64_ID,mgr);
247           break;
248         case ComplexTestsF64::TEST_CMPLX_MULT_REAL_F64_18:
249           nb = 5;
250           ref.reload(ComplexTestsF64::REF_CMPLX_MULT_REAL_F64_ID,mgr,nb << 1);
251           input1.reload(ComplexTestsF64::INPUT1_F64_ID,mgr,nb << 1);
252           input2.reload(ComplexTestsF64::INPUT3_F64_ID,mgr,nb);
253 
254           output.create(ref.nbSamples(),ComplexTestsF64::OUT_SAMPLES_F64_ID,mgr);
255           break;
256 
257         case ComplexTestsF64::TEST_CMPLX_CONJ_F64_19:
258           ref.reload(ComplexTestsF64::REF_CONJ_F64_ID,mgr,nb << 1);
259           input1.reload(ComplexTestsF64::INPUT1_F64_ID,mgr,nb << 1);
260 
261           output.create(ref.nbSamples(),ComplexTestsF64::OUT_SAMPLES_F64_ID,mgr);
262         break;
263 
264         case ComplexTestsF64::TEST_CMPLX_DOT_PROD_F64_20:
265           ref.reload(ComplexTestsF64::REF_DOT_PROD_LONG_F64_ID,mgr);
266           input1.reload(ComplexTestsF64::INPUT1_F64_ID,mgr,nb << 1);
267           input2.reload(ComplexTestsF64::INPUT2_F64_ID,mgr,nb << 1);
268 
269           output.create(ref.nbSamples(),ComplexTestsF64::OUT_SAMPLES_F64_ID,mgr);
270         break;
271 
272         case ComplexTestsF64::TEST_CMPLX_MAG_F64_21:
273           ref.reload(ComplexTestsF64::REF_MAG_F64_ID,mgr,nb);
274           input1.reload(ComplexTestsF64::INPUT1_F64_ID,mgr,nb << 1);
275 
276           output.create(ref.nbSamples(),ComplexTestsF64::OUT_SAMPLES_F64_ID,mgr);
277         break;
278 
279         case ComplexTestsF64::TEST_CMPLX_MAG_SQUARED_F64_22:
280           ref.reload(ComplexTestsF64::REF_MAG_SQUARED_F64_ID,mgr,nb);
281           input1.reload(ComplexTestsF64::INPUT1_F64_ID,mgr,nb << 1);
282 
283           output.create(ref.nbSamples(),ComplexTestsF64::OUT_SAMPLES_F64_ID,mgr);
284         break;
285 
286         case ComplexTestsF64::TEST_CMPLX_MULT_CMPLX_F64_23:
287           ref.reload(ComplexTestsF64::REF_CMPLX_MULT_CMPLX_F64_ID,mgr,nb << 1);
288           input1.reload(ComplexTestsF64::INPUT1_F64_ID,mgr,nb << 1);
289           input2.reload(ComplexTestsF64::INPUT2_F64_ID,mgr,nb << 1);
290 
291           output.create(ref.nbSamples(),ComplexTestsF64::OUT_SAMPLES_F64_ID,mgr);
292         break;
293 
294         case ComplexTestsF64::TEST_CMPLX_MULT_REAL_F64_24:
295           ref.reload(ComplexTestsF64::REF_CMPLX_MULT_REAL_F64_ID,mgr,nb << 1);
296           input1.reload(ComplexTestsF64::INPUT1_F64_ID,mgr,nb << 1);
297           input2.reload(ComplexTestsF64::INPUT3_F64_ID,mgr,nb);
298 
299           output.create(ref.nbSamples(),ComplexTestsF64::OUT_SAMPLES_F64_ID,mgr);
300         break;
301 
302        }
303 
304     }
305 
tearDown(Testing::testID_t id,Client::PatternMgr * mgr)306     void ComplexTestsF64::tearDown(Testing::testID_t id,Client::PatternMgr *mgr)
307     {
308         (void)id;
309         output.dump(mgr);
310     }
311