1 #include "arm_vec_math.h"
2 
3 #include "MISCQ7.h"
4 #include <stdio.h>
5 #include "Error.h"
6 #include "Test.h"
7 
8 #define SNR_THRESHOLD 15
9 /*
10 
11 Reference patterns are generated with
12 a double precision computation.
13 
14 */
15 #define ABS_ERROR_Q7 ((q7_t)5)
16 #define ABS_ERROR_FAST_Q7 ((q7_t)5)
17 
test_correlate_q7()18     void MISCQ7::test_correlate_q7()
19     {
20         const q7_t *inpA=inputA.ptr();
21         const q7_t *inpB=inputB.ptr();
22         q7_t *outp=output.ptr();
23 
24         arm_correlate_q7(inpA, inputA.nbSamples(),
25           inpB, inputB.nbSamples(),
26           outp);
27 
28         ASSERT_SNR(ref,output,(q7_t)SNR_THRESHOLD);
29         ASSERT_NEAR_EQ(ref,output,ABS_ERROR_Q7);
30 
31     }
32 
test_conv_q7()33     void MISCQ7::test_conv_q7()
34     {
35         const q7_t *inpA=inputA.ptr();
36         const q7_t *inpB=inputB.ptr();
37         q7_t *outp=output.ptr();
38 
39         arm_conv_q7(inpA, inputA.nbSamples(),
40           inpB, inputB.nbSamples(),
41           outp);
42 
43         ASSERT_EMPTY_TAIL(output);
44         ASSERT_SNR(ref,output,(q7_t)SNR_THRESHOLD);
45         ASSERT_NEAR_EQ(ref,output,ABS_ERROR_Q7);
46 
47     }
48 
49     // This value must be coherent with the Python script
50     // generating the test patterns
51     #define NBPOINTS 4
52 
test_conv_partial_q7()53     void MISCQ7::test_conv_partial_q7()
54     {
55         const q7_t *inpA=inputA.ptr();
56         const q7_t *inpB=inputB.ptr();
57         q7_t *outp=output.ptr();
58         q7_t *tmpp=tmp.ptr();
59 
60 
61         arm_status status=arm_conv_partial_q7(inpA, inputA.nbSamples(),
62           inpB, inputB.nbSamples(),
63           outp,
64           this->first,
65           NBPOINTS);
66 
67 
68 
69         memcpy((void*)tmpp,(void*)&outp[this->first],NBPOINTS*sizeof(q7_t));
70         ASSERT_TRUE(status==ARM_MATH_SUCCESS);
71         ASSERT_SNR(ref,tmp,(q7_t)SNR_THRESHOLD);
72         ASSERT_NEAR_EQ(ref,tmp,ABS_ERROR_Q7);
73 
74     }
75 
test_conv_partial_opt_q7()76     void MISCQ7::test_conv_partial_opt_q7()
77     {
78         const q7_t *inpA=inputA.ptr();
79         const q7_t *inpB=inputB.ptr();
80         q7_t *outp=output.ptr();
81         q7_t *tmpp=tmp.ptr();
82 
83         q15_t *scratchAp=scratchA.ptr();
84         q15_t *scratchBp=scratchB.ptr();
85 
86 
87         arm_status status=arm_conv_partial_opt_q7(inpA, inputA.nbSamples(),
88           inpB, inputB.nbSamples(),
89           outp,
90           this->first,
91           NBPOINTS,
92           scratchAp,
93           scratchBp
94           );
95 
96 
97 
98         memcpy((void*)tmpp,(void*)&outp[this->first],NBPOINTS*sizeof(q7_t));
99         ASSERT_TRUE(status==ARM_MATH_SUCCESS);
100         ASSERT_SNR(ref,tmp,(q7_t)SNR_THRESHOLD);
101         ASSERT_NEAR_EQ(ref,tmp,ABS_ERROR_FAST_Q7);
102 
103     }
104 
105 
106 
setUp(Testing::testID_t id,std::vector<Testing::param_t> & paramsArgs,Client::PatternMgr * mgr)107     void MISCQ7::setUp(Testing::testID_t id,std::vector<Testing::param_t>& paramsArgs,Client::PatternMgr *mgr)
108     {
109         (void)paramsArgs;
110         switch(id)
111         {
112 
113 
114             case MISCQ7::TEST_CORRELATE_Q7_1:
115             {
116                        this->nba = 30;
117                        this->nbb = 31;
118                        ref.reload(MISCQ7::REF1_Q7_ID,mgr);
119             }
120             break;
121 
122             case MISCQ7::TEST_CORRELATE_Q7_2:
123             {
124                        this->nba = 30;
125                        this->nbb = 32;
126                        ref.reload(MISCQ7::REF2_Q7_ID,mgr);
127             }
128             break;
129 
130             case MISCQ7::TEST_CORRELATE_Q7_3:
131             {
132                        this->nba = 30;
133                        this->nbb = 33;
134                        ref.reload(MISCQ7::REF3_Q7_ID,mgr);
135             }
136             break;
137 
138             case MISCQ7::TEST_CORRELATE_Q7_4:
139             {
140                        this->nba = 30;
141                        this->nbb = 34;
142                        ref.reload(MISCQ7::REF4_Q7_ID,mgr);
143             }
144             break;
145 
146             case MISCQ7::TEST_CORRELATE_Q7_5:
147             {
148                        this->nba = 30;
149                        this->nbb = 49;
150                        ref.reload(MISCQ7::REF5_Q7_ID,mgr);
151             }
152             break;
153 
154             case MISCQ7::TEST_CORRELATE_Q7_6:
155             {
156                        this->nba = 31;
157                        this->nbb = 31;
158                        ref.reload(MISCQ7::REF6_Q7_ID,mgr);
159             }
160             break;
161 
162             case MISCQ7::TEST_CORRELATE_Q7_7:
163             {
164                        this->nba = 31;
165                        this->nbb = 32;
166                        ref.reload(MISCQ7::REF7_Q7_ID,mgr);
167             }
168             break;
169 
170             case MISCQ7::TEST_CORRELATE_Q7_8:
171             {
172                        this->nba = 31;
173                        this->nbb = 33;
174                        ref.reload(MISCQ7::REF8_Q7_ID,mgr);
175             }
176             break;
177 
178             case MISCQ7::TEST_CORRELATE_Q7_9:
179             {
180                        this->nba = 31;
181                        this->nbb = 34;
182                        ref.reload(MISCQ7::REF9_Q7_ID,mgr);
183             }
184             break;
185 
186             case MISCQ7::TEST_CORRELATE_Q7_10:
187             {
188                        this->nba = 31;
189                        this->nbb = 49;
190                        ref.reload(MISCQ7::REF10_Q7_ID,mgr);
191             }
192             break;
193 
194             case MISCQ7::TEST_CORRELATE_Q7_11:
195             {
196                        this->nba = 32;
197                        this->nbb = 31;
198                        ref.reload(MISCQ7::REF11_Q7_ID,mgr);
199             }
200             break;
201 
202             case MISCQ7::TEST_CORRELATE_Q7_12:
203             {
204                        this->nba = 32;
205                        this->nbb = 32;
206                        ref.reload(MISCQ7::REF12_Q7_ID,mgr);
207             }
208             break;
209 
210             case MISCQ7::TEST_CORRELATE_Q7_13:
211             {
212                        this->nba = 32;
213                        this->nbb = 33;
214                        ref.reload(MISCQ7::REF13_Q7_ID,mgr);
215             }
216             break;
217 
218             case MISCQ7::TEST_CORRELATE_Q7_14:
219             {
220                        this->nba = 32;
221                        this->nbb = 34;
222                        ref.reload(MISCQ7::REF14_Q7_ID,mgr);
223             }
224             break;
225 
226             case MISCQ7::TEST_CORRELATE_Q7_15:
227             {
228                        this->nba = 32;
229                        this->nbb = 49;
230                        ref.reload(MISCQ7::REF15_Q7_ID,mgr);
231             }
232             break;
233 
234             case MISCQ7::TEST_CORRELATE_Q7_16:
235             {
236                        this->nba = 33;
237                        this->nbb = 31;
238                        ref.reload(MISCQ7::REF16_Q7_ID,mgr);
239             }
240             break;
241 
242             case MISCQ7::TEST_CORRELATE_Q7_17:
243             {
244                        this->nba = 33;
245                        this->nbb = 32;
246                        ref.reload(MISCQ7::REF17_Q7_ID,mgr);
247             }
248             break;
249 
250             case MISCQ7::TEST_CORRELATE_Q7_18:
251             {
252                        this->nba = 33;
253                        this->nbb = 33;
254                        ref.reload(MISCQ7::REF18_Q7_ID,mgr);
255             }
256             break;
257 
258             case MISCQ7::TEST_CORRELATE_Q7_19:
259             {
260                        this->nba = 33;
261                        this->nbb = 34;
262                        ref.reload(MISCQ7::REF19_Q7_ID,mgr);
263             }
264             break;
265 
266             case MISCQ7::TEST_CORRELATE_Q7_20:
267             {
268                        this->nba = 33;
269                        this->nbb = 49;
270                        ref.reload(MISCQ7::REF20_Q7_ID,mgr);
271             }
272             break;
273 
274             case MISCQ7::TEST_CORRELATE_Q7_21:
275             {
276                        this->nba = 48;
277                        this->nbb = 31;
278                        ref.reload(MISCQ7::REF21_Q7_ID,mgr);
279             }
280             break;
281 
282             case MISCQ7::TEST_CORRELATE_Q7_22:
283             {
284                        this->nba = 48;
285                        this->nbb = 32;
286                        ref.reload(MISCQ7::REF22_Q7_ID,mgr);
287             }
288             break;
289 
290             case MISCQ7::TEST_CORRELATE_Q7_23:
291             {
292                        this->nba = 48;
293                        this->nbb = 33;
294                        ref.reload(MISCQ7::REF23_Q7_ID,mgr);
295             }
296             break;
297 
298             case MISCQ7::TEST_CORRELATE_Q7_24:
299             {
300                        this->nba = 48;
301                        this->nbb = 34;
302                        ref.reload(MISCQ7::REF24_Q7_ID,mgr);
303             }
304             break;
305 
306             case MISCQ7::TEST_CORRELATE_Q7_25:
307             {
308                        this->nba = 48;
309                        this->nbb = 49;
310                        ref.reload(MISCQ7::REF25_Q7_ID,mgr);
311             }
312             break;
313 
314             case MISCQ7::TEST_CONV_Q7_26:
315             {
316                        this->nba = 30;
317                        this->nbb = 31;
318                        ref.reload(MISCQ7::REF26_Q7_ID,mgr);
319             }
320             break;
321 
322             case MISCQ7::TEST_CONV_Q7_27:
323             {
324                        this->nba = 30;
325                        this->nbb = 32;
326                        ref.reload(MISCQ7::REF27_Q7_ID,mgr);
327             }
328             break;
329 
330             case MISCQ7::TEST_CONV_Q7_28:
331             {
332                        this->nba = 30;
333                        this->nbb = 33;
334                        ref.reload(MISCQ7::REF28_Q7_ID,mgr);
335             }
336             break;
337 
338             case MISCQ7::TEST_CONV_Q7_29:
339             {
340                        this->nba = 30;
341                        this->nbb = 34;
342                        ref.reload(MISCQ7::REF29_Q7_ID,mgr);
343             }
344             break;
345 
346             case MISCQ7::TEST_CONV_Q7_30:
347             {
348                        this->nba = 30;
349                        this->nbb = 49;
350                        ref.reload(MISCQ7::REF30_Q7_ID,mgr);
351             }
352             break;
353 
354             case MISCQ7::TEST_CONV_Q7_31:
355             {
356                        this->nba = 31;
357                        this->nbb = 31;
358                        ref.reload(MISCQ7::REF31_Q7_ID,mgr);
359             }
360             break;
361 
362             case MISCQ7::TEST_CONV_Q7_32:
363             {
364                        this->nba = 31;
365                        this->nbb = 32;
366                        ref.reload(MISCQ7::REF32_Q7_ID,mgr);
367             }
368             break;
369 
370             case MISCQ7::TEST_CONV_Q7_33:
371             {
372                        this->nba = 31;
373                        this->nbb = 33;
374                        ref.reload(MISCQ7::REF33_Q7_ID,mgr);
375             }
376             break;
377 
378             case MISCQ7::TEST_CONV_Q7_34:
379             {
380                        this->nba = 31;
381                        this->nbb = 34;
382                        ref.reload(MISCQ7::REF34_Q7_ID,mgr);
383             }
384             break;
385 
386             case MISCQ7::TEST_CONV_Q7_35:
387             {
388                        this->nba = 31;
389                        this->nbb = 49;
390                        ref.reload(MISCQ7::REF35_Q7_ID,mgr);
391             }
392             break;
393 
394             case MISCQ7::TEST_CONV_Q7_36:
395             {
396                        this->nba = 32;
397                        this->nbb = 31;
398                        ref.reload(MISCQ7::REF36_Q7_ID,mgr);
399             }
400             break;
401 
402             case MISCQ7::TEST_CONV_Q7_37:
403             {
404                        this->nba = 32;
405                        this->nbb = 32;
406                        ref.reload(MISCQ7::REF37_Q7_ID,mgr);
407             }
408             break;
409 
410             case MISCQ7::TEST_CONV_Q7_38:
411             {
412                        this->nba = 32;
413                        this->nbb = 33;
414                        ref.reload(MISCQ7::REF38_Q7_ID,mgr);
415             }
416             break;
417 
418             case MISCQ7::TEST_CONV_Q7_39:
419             {
420                        this->nba = 32;
421                        this->nbb = 34;
422                        ref.reload(MISCQ7::REF39_Q7_ID,mgr);
423             }
424             break;
425 
426             case MISCQ7::TEST_CONV_Q7_40:
427             {
428                        this->nba = 32;
429                        this->nbb = 49;
430                        ref.reload(MISCQ7::REF40_Q7_ID,mgr);
431             }
432             break;
433 
434             case MISCQ7::TEST_CONV_Q7_41:
435             {
436                        this->nba = 33;
437                        this->nbb = 31;
438                        ref.reload(MISCQ7::REF41_Q7_ID,mgr);
439             }
440             break;
441 
442             case MISCQ7::TEST_CONV_Q7_42:
443             {
444                        this->nba = 33;
445                        this->nbb = 32;
446                        ref.reload(MISCQ7::REF42_Q7_ID,mgr);
447             }
448             break;
449 
450             case MISCQ7::TEST_CONV_Q7_43:
451             {
452                        this->nba = 33;
453                        this->nbb = 33;
454                        ref.reload(MISCQ7::REF43_Q7_ID,mgr);
455             }
456             break;
457 
458             case MISCQ7::TEST_CONV_Q7_44:
459             {
460                        this->nba = 33;
461                        this->nbb = 34;
462                        ref.reload(MISCQ7::REF44_Q7_ID,mgr);
463             }
464             break;
465 
466             case MISCQ7::TEST_CONV_Q7_45:
467             {
468                        this->nba = 33;
469                        this->nbb = 49;
470                        ref.reload(MISCQ7::REF45_Q7_ID,mgr);
471             }
472             break;
473 
474             case MISCQ7::TEST_CONV_Q7_46:
475             {
476                        this->nba = 48;
477                        this->nbb = 31;
478                        ref.reload(MISCQ7::REF46_Q7_ID,mgr);
479             }
480             break;
481 
482             case MISCQ7::TEST_CONV_Q7_47:
483             {
484                        this->nba = 48;
485                        this->nbb = 32;
486                        ref.reload(MISCQ7::REF47_Q7_ID,mgr);
487             }
488             break;
489 
490             case MISCQ7::TEST_CONV_Q7_48:
491             {
492                        this->nba = 48;
493                        this->nbb = 33;
494                        ref.reload(MISCQ7::REF48_Q7_ID,mgr);
495             }
496             break;
497 
498             case MISCQ7::TEST_CONV_Q7_49:
499             {
500                        this->nba = 48;
501                        this->nbb = 34;
502                        ref.reload(MISCQ7::REF49_Q7_ID,mgr);
503             }
504             break;
505 
506             case MISCQ7::TEST_CONV_Q7_50:
507             {
508                        this->nba = 48;
509                        this->nbb = 49;
510                        ref.reload(MISCQ7::REF50_Q7_ID,mgr);
511             }
512             break;
513 
514             case MISCQ7::TEST_CONV_PARTIAL_Q7_51:
515             case MISCQ7::TEST_CONV_PARTIAL_OPT_Q7_54:
516             {
517               this->first=3;
518               this->nba = 6;
519               this->nbb = 8;
520               ref.reload(MISCQ7::REF54_Q7_ID,mgr);
521               tmp.create(ref.nbSamples(),MISCQ7::TMP_Q7_ID,mgr);
522 
523               // Oversized and not used except in opt case
524               scratchA.create(24,MISCQ7::SCRATCH1_Q15_ID,mgr);
525               scratchB.create(24,MISCQ7::SCRATCH2_Q15_ID,mgr);
526             }
527             break;
528 
529             case MISCQ7::TEST_CONV_PARTIAL_Q7_52:
530             case MISCQ7::TEST_CONV_PARTIAL_OPT_Q7_55:
531             {
532               this->first=9;
533               this->nba = 6;
534               this->nbb = 8;
535               ref.reload(MISCQ7::REF55_Q7_ID,mgr);
536               tmp.create(ref.nbSamples(),MISCQ7::TMP_Q7_ID,mgr);
537 
538               // Oversized and not used except in opt case
539               scratchA.create(24,MISCQ7::SCRATCH1_Q15_ID,mgr);
540               scratchB.create(24,MISCQ7::SCRATCH2_Q15_ID,mgr);
541 
542             }
543             break;
544 
545             case MISCQ7::TEST_CONV_PARTIAL_Q7_53:
546             case MISCQ7::TEST_CONV_PARTIAL_OPT_Q7_56:
547             {
548               this->first=7;
549               this->nba = 6;
550               this->nbb = 8;
551               ref.reload(MISCQ7::REF56_Q7_ID,mgr);
552               tmp.create(ref.nbSamples(),MISCQ7::TMP_Q7_ID,mgr);
553 
554               // Oversized and not used except in opt case
555               scratchA.create(24,MISCQ7::SCRATCH1_Q15_ID,mgr);
556               scratchB.create(24,MISCQ7::SCRATCH2_Q15_ID,mgr);
557 
558             }
559             break;
560 
561 
562         }
563 
564        if (id >= MISCQ7::TEST_CONV_PARTIAL_Q7_51)
565        {
566           inputA.reload(MISCQ7::INPUTA2_Q7_ID,mgr,nba);
567           inputB.reload(MISCQ7::INPUTB2_Q7_ID,mgr,nbb);
568        }
569        else
570        {
571           inputA.reload(MISCQ7::INPUTA_Q7_ID,mgr,nba);
572           inputB.reload(MISCQ7::INPUTB_Q7_ID,mgr,nbb);
573        }
574 
575        output.create(ref.nbSamples(),MISCQ7::OUT_Q7_ID,mgr);
576 
577     }
578 
tearDown(Testing::testID_t id,Client::PatternMgr * mgr)579     void MISCQ7::tearDown(Testing::testID_t id,Client::PatternMgr *mgr)
580     {
581       (void)id;
582       output.dump(mgr);
583 
584     }
585