1 #include "StatsTestsQ7.h"
2 #include <stdio.h>
3 #include "Error.h"
4 #include "Test.h"
5 
6 //#include <cstdio>
7 
8 #define SNR_THRESHOLD 20
9 #define SNR_THRESHOLD_MSE 20
10 
11 /*
12 
13 Reference patterns are generated with
14 a double precision computation.
15 
16 */
17 #define ABS_ERROR_Q7 ((q7_t)20)
18 #define ABS_ERROR_Q31 ((q31_t)(1<<15))
19 
20 #define ABS_ERROR_Q7_MSE ((q7_t)6)
21 
22 
23 
test_max_q7()24     void StatsTestsQ7::test_max_q7()
25     {
26         const q7_t *inp  = inputA.ptr();
27 
28         q7_t result;
29         uint32_t  indexval;
30 
31         q7_t *refp  = ref.ptr();
32         int16_t  *refind = maxIndexes.ptr();
33 
34         q7_t *outp  = output.ptr();
35         int16_t  *ind    = index.ptr();
36 
37         arm_max_q7(inp,
38               inputA.nbSamples(),
39               &result,
40               &indexval);
41 
42         outp[0] = result;
43         ind[0] = indexval;
44 
45         ASSERT_EQ(result,refp[this->refOffset]);
46         ASSERT_EQ((int16_t)indexval,refind[this->refOffset]);
47 
48     }
49 
test_max_no_idx_q7()50     void StatsTestsQ7::test_max_no_idx_q7()
51     {
52         const q7_t *inp  = inputA.ptr();
53 
54         q7_t result;
55 
56         q7_t *refp  = ref.ptr();
57 
58         q7_t *outp  = output.ptr();
59 
60         arm_max_no_idx_q7(inp,
61               inputA.nbSamples(),
62               &result);
63 
64         outp[0] = result;
65 
66         ASSERT_EQ(result,refp[this->refOffset]);
67 
68     }
69 
test_absmax_no_idx_q7()70     void StatsTestsQ7::test_absmax_no_idx_q7()
71     {
72         const q7_t *inp  = inputA.ptr();
73 
74         q7_t result;
75 
76         q7_t *refp  = ref.ptr();
77 
78         q7_t *outp  = output.ptr();
79 
80         arm_absmax_no_idx_q7(inp,
81               inputA.nbSamples(),
82               &result);
83 
84         outp[0] = result;
85 
86         ASSERT_EQ(result,refp[this->refOffset]);
87 
88     }
89 
test_absmax_q7()90     void StatsTestsQ7::test_absmax_q7()
91     {
92         const q7_t *inp  = inputA.ptr();
93 
94         q7_t result;
95         uint32_t  indexval;
96 
97         q7_t *refp  = ref.ptr();
98         int16_t  *refind = maxIndexes.ptr();
99 
100         q7_t *outp  = output.ptr();
101         int16_t  *ind    = index.ptr();
102 
103         arm_absmax_q7(inp,
104               inputA.nbSamples(),
105               &result,
106               &indexval);
107 
108         outp[0] = result;
109         ind[0] = indexval;
110 
111         ASSERT_EQ(result,refp[this->refOffset]);
112         ASSERT_EQ((int16_t)indexval,refind[this->refOffset]);
113 
114     }
115 
116 /*
117 
118 May fail on the index. It depends on the values generated by Python.
119 If the values are too close and thus equal with q7 accuracy
120 then the index computed by Python and by the q7 implementation
121 will be different.
122 
123 Python code must be tuned to change this.
124 
125 */
test_min_q7()126     void StatsTestsQ7::test_min_q7()
127     {
128         const q7_t *inp  = inputA.ptr();
129 
130         q7_t result;
131         uint32_t  indexval;
132 
133         q7_t *refp  = ref.ptr();
134         int16_t  *refind = minIndexes.ptr();
135 
136         q7_t *outp  = output.ptr();
137         int16_t  *ind    = index.ptr();
138 
139         arm_min_q7(inp,
140               inputA.nbSamples(),
141               &result,
142               &indexval);
143 
144         outp[0] = result;
145         ind[0] = indexval;
146 
147         ASSERT_EQ(result,refp[this->refOffset]);
148         ASSERT_EQ((int16_t)indexval,refind[this->refOffset]);
149 
150     }
151 
test_min_no_idx_q7()152     void StatsTestsQ7::test_min_no_idx_q7()
153     {
154         const q7_t *inp  = inputA.ptr();
155 
156         q7_t result;
157 
158         q7_t *refp  = ref.ptr();
159 
160         q7_t *outp  = output.ptr();
161 
162         arm_min_no_idx_q7(inp,
163               inputA.nbSamples(),
164               &result);
165 
166         outp[0] = result;
167 
168         ASSERT_EQ(result,refp[this->refOffset]);
169 
170     }
171 
test_absmin_no_idx_q7()172     void StatsTestsQ7::test_absmin_no_idx_q7()
173     {
174         const q7_t *inp  = inputA.ptr();
175 
176         q7_t result;
177 
178         q7_t *refp  = ref.ptr();
179 
180         q7_t *outp  = output.ptr();
181 
182         arm_absmin_no_idx_q7(inp,
183               inputA.nbSamples(),
184               &result);
185 
186         outp[0] = result;
187 
188         ASSERT_EQ(result,refp[this->refOffset]);
189 
190     }
191 
test_absmin_q7()192     void StatsTestsQ7::test_absmin_q7()
193     {
194         const q7_t *inp  = inputA.ptr();
195 
196         q7_t result;
197         uint32_t  indexval;
198 
199         q7_t *refp  = ref.ptr();
200         int16_t  *refind = minIndexes.ptr();
201 
202         q7_t *outp  = output.ptr();
203         int16_t  *ind    = index.ptr();
204 
205         arm_absmin_q7(inp,
206               inputA.nbSamples(),
207               &result,
208               &indexval);
209 
210         outp[0] = result;
211         ind[0] = indexval;
212 
213         ASSERT_EQ(result,refp[this->refOffset]);
214         ASSERT_EQ((int16_t)indexval,refind[this->refOffset]);
215 
216     }
217 
test_mean_q7()218     void StatsTestsQ7::test_mean_q7()
219     {
220         const q7_t *inp  = inputA.ptr();
221 
222         q7_t result;
223 
224         q7_t *refp  = ref.ptr();
225 
226         q7_t *outp  = output.ptr();
227 
228         arm_mean_q7(inp,
229               inputA.nbSamples(),
230               &result);
231 
232         outp[0] = result;
233 
234         ASSERT_SNR(result,refp[this->refOffset],(float32_t)5);
235 
236         ASSERT_NEAR_EQ(result,refp[this->refOffset],ABS_ERROR_Q7);
237 
238     }
239 
test_power_q7()240     void StatsTestsQ7::test_power_q7()
241     {
242         const q7_t *inp  = inputA.ptr();
243 
244         q31_t result;
245 
246         q31_t *refp  = refPower.ptr();
247 
248         q31_t *outp  = outputPower.ptr();
249 
250         arm_power_q7(inp,
251               inputA.nbSamples(),
252               &result);
253 
254         outp[0] = result;
255 
256         ASSERT_SNR(result,refp[this->refOffset],(float32_t)SNR_THRESHOLD);
257 
258         ASSERT_NEAR_EQ(result,refp[this->refOffset],(q31_t)ABS_ERROR_Q31);
259 
260     }
261 
test_mse_q7()262     void StatsTestsQ7::test_mse_q7()
263     {
264         const q7_t *inpA  = inputA.ptr();
265         const q7_t *inpB  = inputB.ptr();
266 
267         q7_t result;
268 
269         q7_t *refp  = ref.ptr();
270 
271         q7_t *outp  = output.ptr();
272 
273         arm_mse_q7(inpA,inpB,
274               inputA.nbSamples(),
275               &result);
276 
277         outp[0] = result;
278 
279         ASSERT_SNR(result,refp[this->refOffset],(float32_t)SNR_THRESHOLD_MSE);
280 
281         ASSERT_NEAR_EQ(result,refp[this->refOffset],(q7_t)ABS_ERROR_Q7_MSE);
282 
283     }
284 
285 #if 0
286 /*
287 
288 Those functions do not yet exist in CMSIS-DSP.
289 But the tests are kept for when they will be available.
290 
291 */
292     void StatsTestsQ7::test_rms_q7()
293     {
294         const q7_t *inp  = inputA.ptr();
295 
296         q7_t result;
297 
298         q7_t *refp  = ref.ptr();
299 
300         q7_t *outp  = output.ptr();
301 
302         arm_rms_q7(inp,
303               inputA.nbSamples(),
304               &result);
305 
306         outp[0] = result;
307 
308         ASSERT_SNR(result,refp[this->refOffset],(float32_t)SNR_THRESHOLD);
309 
310         ASSERT_NEAR_EQ(result,refp[this->refOffset],ABS_ERROR_Q7);
311 
312     }
313 
314     void StatsTestsQ7::test_std_q7()
315     {
316         const q7_t *inp  = inputA.ptr();
317 
318         q7_t result;
319 
320         q7_t *refp  = ref.ptr();
321 
322         q7_t *outp  = output.ptr();
323 
324         arm_std_q7(inp,
325               inputA.nbSamples(),
326               &result);
327 
328         outp[0] = result;
329 
330         ASSERT_SNR(result,refp[this->refOffset],(float32_t)SNR_THRESHOLD);
331 
332         ASSERT_NEAR_EQ(result,refp[this->refOffset],ABS_ERROR_Q7);
333 
334     }
335 
336     void StatsTestsQ7::test_var_q7()
337     {
338         const q7_t *inp  = inputA.ptr();
339 
340         q7_t result;
341 
342         q7_t *refp  = ref.ptr();
343 
344         q7_t *outp  = output.ptr();
345 
346         arm_var_q7(inp,
347               inputA.nbSamples(),
348               &result);
349 
350         outp[0] = result;
351 
352         ASSERT_SNR(result,refp[this->refOffset],(float32_t)SNR_THRESHOLD);
353 
354         ASSERT_NEAR_EQ(result,refp[this->refOffset],ABS_ERROR_Q7);
355 
356     }
357 
358 #endif
359 
setUp(Testing::testID_t id,std::vector<Testing::param_t> & paramsArgs,Client::PatternMgr * mgr)360     void StatsTestsQ7::setUp(Testing::testID_t id,std::vector<Testing::param_t>& paramsArgs,Client::PatternMgr *mgr)
361     {
362         (void)paramsArgs;
363         switch(id)
364         {
365             case StatsTestsQ7::TEST_MAX_Q7_1:
366             {
367                inputA.reload(StatsTestsQ7::INPUT1_Q7_ID,mgr,15);
368 
369                maxIndexes.reload(StatsTestsQ7::MAXINDEXES_S16_ID,mgr);
370                ref.reload(StatsTestsQ7::MAXVALS_Q7_ID,mgr);
371 
372                output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
373                index.create(1,StatsTestsQ7::OUT_S16_ID,mgr);
374 
375                refOffset = 0;
376             }
377             break;
378 
379             case StatsTestsQ7::TEST_MAX_Q7_2:
380             {
381                inputA.reload(StatsTestsQ7::INPUT1_Q7_ID,mgr,32);
382 
383                maxIndexes.reload(StatsTestsQ7::MAXINDEXES_S16_ID,mgr);
384                ref.reload(StatsTestsQ7::MAXVALS_Q7_ID,mgr);
385 
386                output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
387                index.create(1,StatsTestsQ7::OUT_S16_ID,mgr);
388 
389                refOffset = 1;
390             }
391             break;
392 
393             case StatsTestsQ7::TEST_MAX_Q7_3:
394             {
395                inputA.reload(StatsTestsQ7::INPUT1_Q7_ID,mgr,47);
396 
397                maxIndexes.reload(StatsTestsQ7::MAXINDEXES_S16_ID,mgr);
398                ref.reload(StatsTestsQ7::MAXVALS_Q7_ID,mgr);
399 
400                output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
401                index.create(1,StatsTestsQ7::OUT_S16_ID,mgr);
402 
403                refOffset = 2;
404             }
405             break;
406 
407             /*
408 
409             For MEAN tests, INPUT2 pattern is used.
410             It contains only positive values and prevent the average
411             value from being too close to zero which make the estimation
412             of the errors difficult.
413 
414             */
415             case StatsTestsQ7::TEST_MEAN_Q7_4:
416             {
417                inputA.reload(StatsTestsQ7::INPUT2_Q7_ID,mgr,15);
418 
419                ref.reload(StatsTestsQ7::MEANVALS_Q7_ID,mgr);
420 
421                output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
422 
423                refOffset = 0;
424             }
425             break;
426 
427             case StatsTestsQ7::TEST_MEAN_Q7_5:
428             {
429                inputA.reload(StatsTestsQ7::INPUT2_Q7_ID,mgr,32);
430 
431                ref.reload(StatsTestsQ7::MEANVALS_Q7_ID,mgr);
432 
433                output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
434 
435                refOffset = 1;
436             }
437             break;
438 
439             case StatsTestsQ7::TEST_MEAN_Q7_6:
440             {
441                inputA.reload(StatsTestsQ7::INPUT2_Q7_ID,mgr,47);
442 
443                ref.reload(StatsTestsQ7::MEANVALS_Q7_ID,mgr);
444 
445                output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
446 
447                refOffset = 2;
448             }
449             break;
450 
451             case StatsTestsQ7::TEST_MIN_Q7_7:
452             {
453                inputA.reload(StatsTestsQ7::INPUT1_Q7_ID,mgr,15);
454 
455                minIndexes.reload(StatsTestsQ7::MININDEXES_S16_ID,mgr);
456                ref.reload(StatsTestsQ7::MINVALS_Q7_ID,mgr);
457 
458                output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
459                index.create(1,StatsTestsQ7::OUT_S16_ID,mgr);
460 
461                refOffset = 0;
462             }
463             break;
464 
465             case StatsTestsQ7::TEST_MIN_Q7_8:
466             {
467                inputA.reload(StatsTestsQ7::INPUT1_Q7_ID,mgr,32);
468 
469                minIndexes.reload(StatsTestsQ7::MININDEXES_S16_ID,mgr);
470                ref.reload(StatsTestsQ7::MINVALS_Q7_ID,mgr);
471 
472                output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
473                index.create(1,StatsTestsQ7::OUT_S16_ID,mgr);
474 
475                refOffset = 1;
476             }
477             break;
478 
479             case StatsTestsQ7::TEST_MIN_Q7_9:
480             {
481                inputA.reload(StatsTestsQ7::INPUT1_Q7_ID,mgr,47);
482 
483                minIndexes.reload(StatsTestsQ7::MININDEXES_S16_ID,mgr);
484                ref.reload(StatsTestsQ7::MINVALS_Q7_ID,mgr);
485 
486                output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
487                index.create(1,StatsTestsQ7::OUT_S16_ID,mgr);
488 
489                refOffset = 2;
490             }
491             break;
492 
493             case StatsTestsQ7::TEST_POWER_Q7_10:
494             {
495                inputA.reload(StatsTestsQ7::INPUT1_Q7_ID,mgr,15);
496 
497                refPower.reload(StatsTestsQ7::POWERVALS_Q31_ID,mgr);
498 
499                outputPower.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
500 
501                refOffset = 0;
502             }
503             break;
504 
505             case StatsTestsQ7::TEST_POWER_Q7_11:
506             {
507                inputA.reload(StatsTestsQ7::INPUT1_Q7_ID,mgr,32);
508 
509                refPower.reload(StatsTestsQ7::POWERVALS_Q31_ID,mgr);
510 
511                outputPower.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
512 
513                refOffset = 1;
514             }
515             break;
516 
517             case StatsTestsQ7::TEST_POWER_Q7_12:
518             {
519                inputA.reload(StatsTestsQ7::INPUT1_Q7_ID,mgr,47);
520 
521                refPower.reload(StatsTestsQ7::POWERVALS_Q31_ID,mgr);
522 
523                outputPower.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
524 
525                refOffset = 2;
526             }
527             break;
528 
529 #if 0
530 /*
531 
532 Those functions do not yet exist in CMSIS-DSP.
533 But the tests are kept for when they will be available.
534 
535 */
536             case StatsTestsQ7::TEST_RMS_Q7_13:
537             {
538                inputA.reload(StatsTestsQ7::INPUT1_Q7_ID,mgr,15);
539 
540                ref.reload(StatsTestsQ7::RMSVALS_Q7_ID,mgr);
541 
542                output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
543 
544                refOffset = 0;
545             }
546             break;
547 
548             case StatsTestsQ7::TEST_RMS_Q7_14:
549             {
550                inputA.reload(StatsTestsQ7::INPUT1_Q7_ID,mgr,32);
551 
552                ref.reload(StatsTestsQ7::RMSVALS_Q7_ID,mgr);
553 
554                output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
555 
556                refOffset = 1;
557             }
558             break;
559 
560             case StatsTestsQ7::TEST_RMS_Q7_15:
561             {
562                inputA.reload(StatsTestsQ7::INPUT1_Q7_ID,mgr,47);
563 
564                ref.reload(StatsTestsQ7::RMSVALS_Q7_ID,mgr);
565 
566                output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
567 
568                refOffset = 2;
569             }
570             break;
571 
572             case StatsTestsQ7::TEST_STD_Q7_16:
573             {
574                inputA.reload(StatsTestsQ7::INPUT1_Q7_ID,mgr,15);
575 
576                ref.reload(StatsTestsQ7::STDVALS_Q7_ID,mgr);
577 
578                output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
579 
580                refOffset = 0;
581             }
582             break;
583 
584             case StatsTestsQ7::TEST_STD_Q7_17:
585             {
586                inputA.reload(StatsTestsQ7::INPUT1_Q7_ID,mgr,32);
587 
588                ref.reload(StatsTestsQ7::STDVALS_Q7_ID,mgr);
589 
590                output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
591 
592                refOffset = 1;
593             }
594             break;
595 
596             case StatsTestsQ7::TEST_STD_Q7_18:
597             {
598                inputA.reload(StatsTestsQ7::INPUT1_Q7_ID,mgr,47);
599 
600                ref.reload(StatsTestsQ7::STDVALS_Q7_ID,mgr);
601 
602                output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
603 
604                refOffset = 2;
605             }
606             break;
607 
608             case StatsTestsQ7::TEST_VAR_Q7_19:
609             {
610                inputA.reload(StatsTestsQ7::INPUT1_Q7_ID,mgr,15);
611 
612                ref.reload(StatsTestsQ7::VARVALS_Q7_ID,mgr);
613 
614                output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
615 
616                refOffset = 0;
617             }
618             break;
619 
620             case StatsTestsQ7::TEST_VAR_Q7_20:
621             {
622                inputA.reload(StatsTestsQ7::INPUT1_Q7_ID,mgr,32);
623 
624                ref.reload(StatsTestsQ7::VARVALS_Q7_ID,mgr);
625 
626                output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
627 
628                refOffset = 1;
629             }
630             break;
631 
632             case StatsTestsQ7::TEST_VAR_Q7_21:
633             {
634                inputA.reload(StatsTestsQ7::INPUT1_Q7_ID,mgr,47);
635 
636                ref.reload(StatsTestsQ7::VARVALS_Q7_ID,mgr);
637 
638                output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
639 
640                refOffset = 2;
641             }
642             break;
643 #endif
644 
645             case StatsTestsQ7::TEST_MAX_Q7_13:
646             {
647                inputA.reload(StatsTestsQ7::MAXINDEXMAX_Q7_ID,mgr,280);
648 
649                maxIndexes.reload(StatsTestsQ7::MAXINDEXES_S16_ID,mgr);
650                ref.reload(StatsTestsQ7::MAXVALS_Q7_ID,mgr);
651 
652                output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
653                index.create(1,StatsTestsQ7::OUT_S16_ID,mgr);
654 
655                refOffset = 3;
656             }
657             break;
658 
659             case StatsTestsQ7::TEST_MIN_Q7_14:
660             {
661                inputA.reload(StatsTestsQ7::MININDEXMAX_Q7_ID,mgr,280);
662 
663                minIndexes.reload(StatsTestsQ7::MININDEXES_S16_ID,mgr);
664                ref.reload(StatsTestsQ7::MINVALS_Q7_ID,mgr);
665 
666                output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
667                index.create(1,StatsTestsQ7::OUT_S16_ID,mgr);
668 
669                refOffset = 3;
670             }
671             break;
672 
673             case StatsTestsQ7::TEST_ABSMAX_Q7_15:
674             {
675                inputA.reload(StatsTestsQ7::INPUTNEW1_Q7_ID,mgr,15);
676 
677                maxIndexes.reload(StatsTestsQ7::ABSMAXINDEXES_S16_ID,mgr);
678                ref.reload(StatsTestsQ7::ABSMAXVALS_Q7_ID,mgr);
679 
680                output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
681                index.create(1,StatsTestsQ7::OUT_S16_ID,mgr);
682 
683                refOffset = 0;
684             }
685             break;
686 
687             case StatsTestsQ7::TEST_ABSMAX_Q7_16:
688             {
689                inputA.reload(StatsTestsQ7::INPUTNEW1_Q7_ID,mgr,32);
690 
691                maxIndexes.reload(StatsTestsQ7::ABSMAXINDEXES_S16_ID,mgr);
692                ref.reload(StatsTestsQ7::ABSMAXVALS_Q7_ID,mgr);
693 
694                output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
695                index.create(1,StatsTestsQ7::OUT_S16_ID,mgr);
696 
697                refOffset = 1;
698             }
699             break;
700 
701             case StatsTestsQ7::TEST_ABSMAX_Q7_17:
702             {
703                inputA.reload(StatsTestsQ7::INPUTNEW1_Q7_ID,mgr,47);
704 
705                maxIndexes.reload(StatsTestsQ7::ABSMAXINDEXES_S16_ID,mgr);
706                ref.reload(StatsTestsQ7::ABSMAXVALS_Q7_ID,mgr);
707 
708                output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
709                index.create(1,StatsTestsQ7::OUT_S16_ID,mgr);
710 
711                refOffset = 2;
712             }
713             break;
714 
715             case StatsTestsQ7::TEST_ABSMIN_Q7_18:
716             {
717                inputA.reload(StatsTestsQ7::INPUTNEW1_Q7_ID,mgr,15);
718 
719                minIndexes.reload(StatsTestsQ7::ABSMININDEXES_S16_ID,mgr);
720                ref.reload(StatsTestsQ7::ABSMINVALS_Q7_ID,mgr);
721 
722                output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
723                index.create(1,StatsTestsQ7::OUT_S16_ID,mgr);
724 
725                refOffset = 0;
726             }
727             break;
728 
729             case StatsTestsQ7::TEST_ABSMIN_Q7_19:
730             {
731                inputA.reload(StatsTestsQ7::INPUTNEW1_Q7_ID,mgr,32);
732 
733                minIndexes.reload(StatsTestsQ7::ABSMININDEXES_S16_ID,mgr);
734                ref.reload(StatsTestsQ7::ABSMINVALS_Q7_ID,mgr);
735 
736                output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
737                index.create(1,StatsTestsQ7::OUT_S16_ID,mgr);
738 
739                refOffset = 1;
740             }
741             break;
742 
743             case StatsTestsQ7::TEST_ABSMIN_Q7_20:
744             {
745                inputA.reload(StatsTestsQ7::INPUTNEW1_Q7_ID,mgr,47);
746 
747                minIndexes.reload(StatsTestsQ7::ABSMININDEXES_S16_ID,mgr);
748                ref.reload(StatsTestsQ7::ABSMINVALS_Q7_ID,mgr);
749 
750                output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
751                index.create(1,StatsTestsQ7::OUT_S16_ID,mgr);
752 
753                refOffset = 2;
754             }
755             break;
756 
757             case StatsTestsQ7::TEST_ABSMAX_Q7_21:
758             {
759                inputA.reload(StatsTestsQ7::ABSMAXINDEXMAX_Q7_ID,mgr,280);
760 
761                maxIndexes.reload(StatsTestsQ7::ABSMAXINDEXES_S16_ID,mgr);
762                ref.reload(StatsTestsQ7::ABSMAXVALS_Q7_ID,mgr);
763 
764                output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
765                index.create(1,StatsTestsQ7::OUT_S16_ID,mgr);
766 
767                // Because pattern is containing
768                // another test for saturation but which
769                // is only used for absmax_no_idx
770                refOffset = 4;
771             }
772             break;
773 
774             case StatsTestsQ7::TEST_ABSMIN_Q7_22:
775             {
776                inputA.reload(StatsTestsQ7::ABSMININDEXMAX_Q7_ID,mgr,280);
777 
778                minIndexes.reload(StatsTestsQ7::ABSMININDEXES_S16_ID,mgr);
779                ref.reload(StatsTestsQ7::ABSMINVALS_Q7_ID,mgr);
780 
781                output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
782                index.create(1,StatsTestsQ7::OUT_S16_ID,mgr);
783 
784                refOffset = 3;
785             }
786             break;
787 
788             case StatsTestsQ7::TEST_MAX_NO_IDX_Q7_23:
789             {
790                inputA.reload(StatsTestsQ7::INPUT1_Q7_ID,mgr,15);
791 
792                ref.reload(StatsTestsQ7::MAXVALS_Q7_ID,mgr);
793 
794                output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
795 
796                refOffset = 0;
797             }
798             break;
799 
800             case StatsTestsQ7::TEST_MAX_NO_IDX_Q7_24:
801             {
802                inputA.reload(StatsTestsQ7::INPUT1_Q7_ID,mgr,32);
803 
804                ref.reload(StatsTestsQ7::MAXVALS_Q7_ID,mgr);
805 
806                output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
807 
808                refOffset = 1;
809             }
810             break;
811 
812             case StatsTestsQ7::TEST_MAX_NO_IDX_Q7_25:
813             {
814                inputA.reload(StatsTestsQ7::INPUT1_Q7_ID,mgr,47);
815 
816                ref.reload(StatsTestsQ7::MAXVALS_Q7_ID,mgr);
817 
818                output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
819 
820                refOffset = 2;
821             }
822             break;
823 
824             case StatsTestsQ7::TEST_MIN_NO_IDX_Q7_26:
825             {
826                inputA.reload(StatsTestsQ7::INPUT1_Q7_ID,mgr,15);
827 
828                ref.reload(StatsTestsQ7::MINVALS_Q7_ID,mgr);
829 
830                output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
831 
832                refOffset = 0;
833             }
834             break;
835 
836             case StatsTestsQ7::TEST_MIN_NO_IDX_Q7_27:
837             {
838                inputA.reload(StatsTestsQ7::INPUT1_Q7_ID,mgr,32);
839 
840                ref.reload(StatsTestsQ7::MINVALS_Q7_ID,mgr);
841 
842                output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
843 
844                refOffset = 1;
845             }
846             break;
847 
848             case StatsTestsQ7::TEST_MIN_NO_IDX_Q7_28:
849             {
850                inputA.reload(StatsTestsQ7::INPUT1_Q7_ID,mgr,47);
851 
852                ref.reload(StatsTestsQ7::MINVALS_Q7_ID,mgr);
853 
854                output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
855 
856                refOffset = 2;
857             }
858             break;
859 
860             case StatsTestsQ7::TEST_ABSMAX_NO_IDX_Q7_29:
861             {
862                inputA.reload(StatsTestsQ7::INPUTNEW1_Q7_ID,mgr,15);
863 
864                ref.reload(StatsTestsQ7::ABSMAXVALS_Q7_ID,mgr);
865 
866                output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
867 
868                refOffset = 0;
869             }
870             break;
871 
872             case StatsTestsQ7::TEST_ABSMAX_NO_IDX_Q7_30:
873             {
874                inputA.reload(StatsTestsQ7::INPUTNEW1_Q7_ID,mgr,32);
875 
876                ref.reload(StatsTestsQ7::ABSMAXVALS_Q7_ID,mgr);
877 
878                output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
879 
880                refOffset = 1;
881             }
882             break;
883 
884             case StatsTestsQ7::TEST_ABSMAX_NO_IDX_Q7_31:
885             {
886                inputA.reload(StatsTestsQ7::INPUTNEW1_Q7_ID,mgr,47);
887 
888                ref.reload(StatsTestsQ7::ABSMAXVALS_Q7_ID,mgr);
889 
890                output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
891 
892                refOffset = 2;
893             }
894             break;
895 
896             case StatsTestsQ7::TEST_ABSMIN_NO_IDX_Q7_32:
897             {
898                inputA.reload(StatsTestsQ7::INPUTNEW1_Q7_ID,mgr,15);
899 
900                ref.reload(StatsTestsQ7::ABSMINVALS_Q7_ID,mgr);
901 
902                output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
903 
904                refOffset = 0;
905             }
906             break;
907 
908             case StatsTestsQ7::TEST_ABSMIN_NO_IDX_Q7_33:
909             {
910                inputA.reload(StatsTestsQ7::INPUTNEW1_Q7_ID,mgr,32);
911 
912                ref.reload(StatsTestsQ7::ABSMINVALS_Q7_ID,mgr);
913 
914                output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
915 
916                refOffset = 1;
917             }
918             break;
919 
920             case StatsTestsQ7::TEST_ABSMIN_NO_IDX_Q7_34:
921             {
922                inputA.reload(StatsTestsQ7::INPUTNEW1_Q7_ID,mgr,47);
923 
924                ref.reload(StatsTestsQ7::ABSMINVALS_Q7_ID,mgr);
925 
926                output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
927 
928                refOffset = 2;
929             }
930             break;
931 
932             case StatsTestsQ7::TEST_MSE_Q7_35:
933             {
934                inputA.reload(StatsTestsQ7::INPUTNEW1_Q7_ID,mgr,15);
935                inputB.reload(StatsTestsQ7::INPUTNEW2_Q7_ID,mgr,15);
936 
937                ref.reload(StatsTestsQ7::MSE_Q7_ID,mgr);
938 
939                output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
940 
941                refOffset = 0;
942             }
943             break;
944 
945             case StatsTestsQ7::TEST_MSE_Q7_36:
946             {
947                inputA.reload(StatsTestsQ7::INPUTNEW1_Q7_ID,mgr,32);
948                inputB.reload(StatsTestsQ7::INPUTNEW2_Q7_ID,mgr,32);
949 
950                ref.reload(StatsTestsQ7::MSE_Q7_ID,mgr);
951 
952                output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
953 
954                refOffset = 1;
955             }
956             break;
957 
958             case StatsTestsQ7::TEST_MSE_Q7_37:
959             {
960                inputA.reload(StatsTestsQ7::INPUTNEW1_Q7_ID,mgr,47);
961                inputB.reload(StatsTestsQ7::INPUTNEW2_Q7_ID,mgr,47);
962 
963                ref.reload(StatsTestsQ7::MSE_Q7_ID,mgr);
964 
965                output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
966 
967                refOffset = 2;
968             }
969             break;
970 
971             case StatsTestsQ7::TEST_MSE_Q7_38:
972             {
973                inputA.reload(StatsTestsQ7::INPUTNEW1_Q7_ID,mgr,100);
974                inputB.reload(StatsTestsQ7::INPUTNEW2_Q7_ID,mgr,100);
975 
976                ref.reload(StatsTestsQ7::MSE_Q7_ID,mgr);
977 
978                output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
979 
980                refOffset = 3;
981             }
982             break;
983 
984             case StatsTestsQ7::TEST_ABSMAX_NO_IDX_Q7_39:
985             {
986                inputA.reload(StatsTestsQ7::INPUTNEW1_Q7_ID,mgr);
987 
988                ref.reload(StatsTestsQ7::ABSMAXVALS_Q7_ID,mgr);
989 
990                output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
991 
992                refOffset = 3;
993             }
994             break;
995 
996             case StatsTestsQ7::TEST_ABSMAX_Q7_40:
997             {
998                inputA.reload(StatsTestsQ7::INPUTNEW1_Q7_ID,mgr);
999 
1000                maxIndexes.reload(StatsTestsQ7::ABSMAXINDEXES_S16_ID,mgr);
1001                ref.reload(StatsTestsQ7::ABSMAXVALS_Q7_ID,mgr);
1002 
1003                output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
1004                index.create(1,StatsTestsQ7::OUT_S16_ID,mgr);
1005 
1006                refOffset = 3;
1007             }
1008             break;
1009 
1010 
1011 
1012         }
1013 
1014     }
1015 
tearDown(Testing::testID_t id,Client::PatternMgr * mgr)1016     void StatsTestsQ7::tearDown(Testing::testID_t id,Client::PatternMgr *mgr)
1017     {
1018       (void)id;
1019       switch(id)
1020       {
1021             case StatsTestsQ7::TEST_MAX_Q7_1:
1022             case StatsTestsQ7::TEST_MAX_Q7_2:
1023             case StatsTestsQ7::TEST_MAX_Q7_3:
1024             case StatsTestsQ7::TEST_MIN_Q7_7:
1025             case StatsTestsQ7::TEST_MIN_Q7_8:
1026             case StatsTestsQ7::TEST_MIN_Q7_9:
1027             case StatsTestsQ7::TEST_MAX_Q7_13:
1028             case StatsTestsQ7::TEST_MIN_Q7_14:
1029               index.dump(mgr);
1030               output.dump(mgr);
1031             break;
1032 
1033             case TEST_POWER_Q7_10:
1034             case TEST_POWER_Q7_11:
1035             case TEST_POWER_Q7_12:
1036               outputPower.dump(mgr);
1037             break;
1038 
1039             default:
1040               output.dump(mgr);
1041       }
1042     }
1043