1 #include "StatsTestsF64.h"
2 #include <stdio.h>
3 #include "Error.h"
4 #include "Test.h"
5 
6 
7 #define SNR_THRESHOLD 300
8 /*
9 
10 Reference patterns are generated with
11 a double precision computation.
12 
13 */
14 #define REL_ERROR (4.0e-15)
15 
test_max_f64()16     void StatsTestsF64::test_max_f64()
17     {
18         const float64_t *inp  = inputA.ptr();
19 
20         float64_t result;
21         uint32_t  indexval;
22 
23         float64_t *refp  = ref.ptr();
24         int16_t  *refind = maxIndexes.ptr();
25 
26         float64_t *outp  = output.ptr();
27         int16_t  *ind    = index.ptr();
28 
29         arm_max_f64(inp,
30               inputA.nbSamples(),
31               &result,
32               &indexval);
33 
34         outp[0] = result;
35         ind[0] = indexval;
36 
37         ASSERT_EQ(result,refp[this->refOffset]);
38         ASSERT_EQ((int16_t)indexval,refind[this->refOffset]);
39 
40     }
41 
test_absmax_f64()42     void StatsTestsF64::test_absmax_f64()
43     {
44         const float64_t *inp  = inputA.ptr();
45 
46         float64_t result;
47         uint32_t  indexval;
48 
49         float64_t *refp  = ref.ptr();
50         int16_t  *refind = maxIndexes.ptr();
51 
52         float64_t *outp  = output.ptr();
53         int16_t  *ind    = index.ptr();
54 
55         arm_absmax_f64(inp,
56               inputA.nbSamples(),
57               &result,
58               &indexval);
59 
60         outp[0] = result;
61         ind[0] = indexval;
62 
63         ASSERT_EQ(result,refp[this->refOffset]);
64         ASSERT_EQ((int16_t)indexval,refind[this->refOffset]);
65 
66     }
67 
test_max_no_idx_f64()68     void StatsTestsF64::test_max_no_idx_f64()
69     {
70         const float64_t *inp  = inputA.ptr();
71 
72         float64_t result;
73 
74         float64_t *refp  = ref.ptr();
75 
76         float64_t *outp  = output.ptr();
77 
78         arm_max_no_idx_f64(inp,
79               inputA.nbSamples(),
80               &result);
81 
82         outp[0] = result;
83 
84         ASSERT_EQ(result,refp[this->refOffset]);
85 
86     }
87 
test_absmax_no_idx_f64()88     void StatsTestsF64::test_absmax_no_idx_f64()
89     {
90         const float64_t *inp  = inputA.ptr();
91 
92         float64_t result;
93 
94         float64_t *refp  = ref.ptr();
95 
96         float64_t *outp  = output.ptr();
97 
98         arm_absmax_no_idx_f64(inp,
99               inputA.nbSamples(),
100               &result);
101 
102         outp[0] = result;
103 
104         ASSERT_EQ(result,refp[this->refOffset]);
105 
106     }
107 
test_min_no_idx_f64()108     void StatsTestsF64::test_min_no_idx_f64()
109     {
110         const float64_t *inp  = inputA.ptr();
111 
112         float64_t result;
113 
114         float64_t *refp  = ref.ptr();
115 
116         float64_t *outp  = output.ptr();
117 
118         arm_min_no_idx_f64(inp,
119               inputA.nbSamples(),
120               &result);
121 
122         outp[0] = result;
123 
124         ASSERT_EQ(result,refp[this->refOffset]);
125 
126     }
127 
test_absmin_no_idx_f64()128     void StatsTestsF64::test_absmin_no_idx_f64()
129     {
130         const float64_t *inp  = inputA.ptr();
131 
132         float64_t result;
133 
134         float64_t *refp  = ref.ptr();
135 
136         float64_t *outp  = output.ptr();
137 
138         arm_absmin_no_idx_f64(inp,
139               inputA.nbSamples(),
140               &result);
141 
142         outp[0] = result;
143 
144         ASSERT_EQ(result,refp[this->refOffset]);
145 
146     }
147 
test_min_f64()148     void StatsTestsF64::test_min_f64()
149     {
150         const float64_t *inp  = inputA.ptr();
151 
152         float64_t result;
153         uint32_t  indexval;
154 
155         float64_t *refp  = ref.ptr();
156         int16_t  *refind = minIndexes.ptr();
157 
158         float64_t *outp  = output.ptr();
159         int16_t  *ind    = index.ptr();
160 
161         arm_min_f64(inp,
162               inputA.nbSamples(),
163               &result,
164               &indexval);
165 
166         outp[0] = result;
167         ind[0] = indexval;
168 
169         ASSERT_EQ(result,refp[this->refOffset]);
170         ASSERT_EQ((int16_t)indexval,refind[this->refOffset]);
171 
172     }
173 
test_absmin_f64()174     void StatsTestsF64::test_absmin_f64()
175     {
176         const float64_t *inp  = inputA.ptr();
177 
178         float64_t result;
179         uint32_t  indexval;
180 
181         float64_t *refp  = ref.ptr();
182         int16_t  *refind = minIndexes.ptr();
183 
184         float64_t *outp  = output.ptr();
185         int16_t  *ind    = index.ptr();
186 
187         arm_absmin_f64(inp,
188               inputA.nbSamples(),
189               &result,
190               &indexval);
191 
192         outp[0] = result;
193         ind[0] = indexval;
194 
195         ASSERT_EQ(result,refp[this->refOffset]);
196         ASSERT_EQ((int16_t)indexval,refind[this->refOffset]);
197 
198     }
199 
test_mean_f64()200     void StatsTestsF64::test_mean_f64()
201     {
202         const float64_t *inp  = inputA.ptr();
203 
204         float64_t result;
205 
206         float64_t *refp  = ref.ptr();
207 
208         float64_t *outp  = output.ptr();
209 
210         arm_mean_f64(inp,
211               inputA.nbSamples(),
212               &result);
213 
214         outp[0] = result;
215 
216         ASSERT_SNR(result,refp[this->refOffset],(float64_t)SNR_THRESHOLD);
217 
218         ASSERT_REL_ERROR(result,refp[this->refOffset],REL_ERROR);
219 
220     }
221 
test_power_f64()222     void StatsTestsF64::test_power_f64()
223     {
224         const float64_t *inp  = inputA.ptr();
225 
226         float64_t result;
227 
228         float64_t *refp  = ref.ptr();
229 
230         float64_t *outp  = output.ptr();
231 
232         arm_power_f64(inp,
233               inputA.nbSamples(),
234               &result);
235 
236         outp[0] = result;
237 
238         ASSERT_SNR(result,refp[this->refOffset],(float64_t)SNR_THRESHOLD);
239 
240         ASSERT_REL_ERROR(result,refp[this->refOffset],REL_ERROR);
241 
242     }
243 
244 /*
245     void StatsTestsF64::test_rms_f64()
246     {
247         const float64_t *inp  = inputA.ptr();
248 
249         float64_t result;
250 
251         float64_t *refp  = ref.ptr();
252 
253         float64_t *outp  = output.ptr();
254 
255         arm_rms_f64(inp,
256               inputA.nbSamples(),
257               &result);
258 
259         outp[0] = result;
260 
261         ASSERT_SNR(result,refp[this->refOffset],(float64_t)SNR_THRESHOLD);
262 
263         ASSERT_REL_ERROR(result,refp[this->refOffset],REL_ERROR);
264 
265     }
266 */
test_std_f64()267     void StatsTestsF64::test_std_f64()
268     {
269         const float64_t *inp  = inputA.ptr();
270 
271         float64_t result;
272 
273         float64_t *refp  = ref.ptr();
274 
275         float64_t *outp  = output.ptr();
276 
277         arm_std_f64(inp,
278               inputA.nbSamples(),
279               &result);
280 
281         outp[0] = result;
282 
283         ASSERT_SNR(result,refp[this->refOffset],(float64_t)SNR_THRESHOLD);
284 
285         ASSERT_REL_ERROR(result,refp[this->refOffset],REL_ERROR);
286 
287     }
288 
test_var_f64()289     void StatsTestsF64::test_var_f64()
290     {
291         const float64_t *inp  = inputA.ptr();
292 
293         float64_t result;
294 
295         float64_t *refp  = ref.ptr();
296 
297         float64_t *outp  = output.ptr();
298 
299         arm_var_f64(inp,
300               inputA.nbSamples(),
301               &result);
302 
303         outp[0] = result;
304 
305         ASSERT_SNR(result,refp[this->refOffset],(float64_t)SNR_THRESHOLD);
306 
307         ASSERT_REL_ERROR(result,refp[this->refOffset],REL_ERROR);
308 
309     }
310 
311 
test_std_stability_f64()312     void StatsTestsF64::test_std_stability_f64()
313     {
314       /*
315 
316       With the textbook algorithm, those values will produce a negative
317       value for the variance.
318 
319       The CMSIS-DSP variance algorithm is the two pass one so will work
320       with those values.
321 
322       So, it should be possible to compute the square root for the standard
323       deviation.
324 
325       */
326       float64_t in[4]={4.0f, 7.0f, 13.0f, 16.0f};
327       float64_t result;
328       int i;
329 
330       /*
331 
332       Add bigger offset so that average is much bigger than standard deviation.
333 
334       */
335       for(i=0 ; i < 4; i++)
336       {
337         in[i] += 3.0e4f;
338       }
339 
340       arm_std_f64(in,4,&result);
341 
342       /*
343 
344       If variance is giving a negative value, the square root
345       should return zero.
346 
347       We check it is not happening here.
348 
349 
350       */
351 
352       ASSERT_TRUE(fabs(5.47723f - result) < 1.0e-4f);
353 
354     }
355 
test_entropy_f64()356     void StatsTestsF64::test_entropy_f64()
357     {
358       const float64_t *inp  = inputA.ptr();
359       const int16_t *dimsp  = dims.ptr();
360 
361       float64_t *outp         = output.ptr();
362 
363       for(int i=0;i < this->nbPatterns; i++)
364       {
365          *outp = arm_entropy_f64(inp,dimsp[i+1]);
366          outp++;
367          inp += dimsp[i+1];
368       }
369 
370       ASSERT_SNR(ref,output,(float64_t)SNR_THRESHOLD);
371 
372       ASSERT_REL_ERROR(ref,output,REL_ERROR);
373 
374     }
375 /*
376     void StatsTestsF64::test_logsumexp_f64()
377     {
378       const float64_t *inp  = inputA.ptr();
379       const int16_t *dimsp  = dims.ptr();
380 
381       float64_t *outp         = output.ptr();
382 
383       for(int i=0;i < this->nbPatterns; i++)
384       {
385          *outp = arm_logsumexp_f64(inp,dimsp[i+1]);
386          outp++;
387          inp += dimsp[i+1];
388       }
389 
390       ASSERT_SNR(ref,output,(float64_t)SNR_THRESHOLD);
391 
392       ASSERT_REL_ERROR(ref,output,REL_ERROR);
393     }
394 
395 */
test_kullback_leibler_f64()396     void StatsTestsF64::test_kullback_leibler_f64()
397     {
398       const float64_t *inpA  = inputA.ptr();
399       const float64_t *inpB  = inputB.ptr();
400       const int16_t *dimsp  = dims.ptr();
401 
402       float64_t *outp         = output.ptr();
403 
404       for(int i=0;i < this->nbPatterns; i++)
405       {
406          *outp = arm_kullback_leibler_f64(inpA,inpB,dimsp[i+1]);
407          outp++;
408          inpA += dimsp[i+1];
409          inpB += dimsp[i+1];
410       }
411 
412       ASSERT_SNR(ref,output,(float64_t)SNR_THRESHOLD);
413 
414       ASSERT_REL_ERROR(ref,output,REL_ERROR);
415     }
416 
417 /*
418     void StatsTestsF64::test_logsumexp_dot_prod_f64()
419     {
420       const float64_t *inpA  = inputA.ptr();
421       const float64_t *inpB  = inputB.ptr();
422       const int16_t *dimsp  = dims.ptr();
423 
424       float64_t *outp         = output.ptr();
425       float64_t *tmpp         = tmp.ptr();
426 
427       for(int i=0;i < this->nbPatterns; i++)
428       {
429          *outp = arm_logsumexp_dot_prod_f64(inpA,inpB,dimsp[i+1],tmpp);
430          outp++;
431          inpA += dimsp[i+1];
432          inpB += dimsp[i+1];
433       }
434 
435       ASSERT_SNR(ref,output,(float64_t)SNR_THRESHOLD);
436 
437       ASSERT_REL_ERROR(ref,output,REL_ERROR);
438     }
439 
440 */
441 
test_mse_f64()442     void StatsTestsF64::test_mse_f64()
443     {
444         const float64_t *inpA  = inputA.ptr();
445         const float64_t *inpB  = inputB.ptr();
446 
447         float64_t result;
448 
449         float64_t *refp  = ref.ptr();
450 
451         float64_t *outp  = output.ptr();
452 
453         arm_mse_f64(inpA,inpB,
454               inputA.nbSamples(),
455               &result);
456 
457         outp[0] = result;
458 
459         ASSERT_SNR(result,refp[this->refOffset],(float64_t)SNR_THRESHOLD);
460 
461         ASSERT_REL_ERROR(result,refp[this->refOffset],(float64_t)REL_ERROR);
462 
463     }
464 
test_accumulate_f64()465     void StatsTestsF64::test_accumulate_f64()
466     {
467       const float64_t *inp  = inputA.ptr();
468       const int16_t *dimsp  = dims.ptr();
469 
470       float64_t *outp         = output.ptr();
471 
472       for(int i=0;i < this->nbPatterns; i++)
473       {
474          arm_accumulate_f64(inp,dimsp[i+1],outp);
475          outp++;
476       }
477 
478       ASSERT_SNR(ref,output,(float64_t)SNR_THRESHOLD);
479 
480       ASSERT_REL_ERROR(ref,output,REL_ERROR);
481 
482     }
483 
setUp(Testing::testID_t id,std::vector<Testing::param_t> & paramsArgs,Client::PatternMgr * mgr)484     void StatsTestsF64::setUp(Testing::testID_t id,std::vector<Testing::param_t>& paramsArgs,Client::PatternMgr *mgr)
485     {
486         (void)paramsArgs;
487         switch(id)
488         {
489             case StatsTestsF64::TEST_MAX_F64_1:
490             {
491                inputA.reload(StatsTestsF64::INPUT1_F64_ID,mgr,2);
492 
493                maxIndexes.reload(StatsTestsF64::MAXINDEXES_S16_ID,mgr);
494                ref.reload(StatsTestsF64::MAXVALS_F64_ID,mgr);
495 
496                output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
497                index.create(1,StatsTestsF64::OUT_S16_ID,mgr);
498 
499                refOffset = 0;
500             }
501             break;
502 
503             case StatsTestsF64::TEST_MAX_F64_2:
504             {
505                inputA.reload(StatsTestsF64::INPUT1_F64_ID,mgr,4);
506 
507                maxIndexes.reload(StatsTestsF64::MAXINDEXES_S16_ID,mgr);
508                ref.reload(StatsTestsF64::MAXVALS_F64_ID,mgr);
509 
510                output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
511                index.create(1,StatsTestsF64::OUT_S16_ID,mgr);
512 
513                refOffset = 1;
514             }
515             break;
516 
517             case StatsTestsF64::TEST_MAX_F64_3:
518             {
519                inputA.reload(StatsTestsF64::INPUT1_F64_ID,mgr,5);
520 
521                maxIndexes.reload(StatsTestsF64::MAXINDEXES_S16_ID,mgr);
522                ref.reload(StatsTestsF64::MAXVALS_F64_ID,mgr);
523 
524                output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
525                index.create(1,StatsTestsF64::OUT_S16_ID,mgr);
526 
527                refOffset = 2;
528             }
529             break;
530 
531             case StatsTestsF64::TEST_MEAN_F64_4:
532             {
533                inputA.reload(StatsTestsF64::INPUT2_F64_ID,mgr,2);
534 
535                ref.reload(StatsTestsF64::MEANVALS_F64_ID,mgr);
536 
537                output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
538 
539                refOffset = 0;
540             }
541             break;
542 
543             case StatsTestsF64::TEST_MEAN_F64_5:
544             {
545                inputA.reload(StatsTestsF64::INPUT2_F64_ID,mgr,4);
546 
547                ref.reload(StatsTestsF64::MEANVALS_F64_ID,mgr);
548 
549                output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
550 
551                refOffset = 1;
552             }
553             break;
554 
555             case StatsTestsF64::TEST_MEAN_F64_6:
556             {
557                inputA.reload(StatsTestsF64::INPUT2_F64_ID,mgr,5);
558 
559                ref.reload(StatsTestsF64::MEANVALS_F64_ID,mgr);
560 
561                output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
562 
563                refOffset = 2;
564             }
565             break;
566 
567             case StatsTestsF64::TEST_MIN_F64_7:
568             {
569                inputA.reload(StatsTestsF64::INPUT1_F64_ID,mgr,2);
570 
571                minIndexes.reload(StatsTestsF64::MININDEXES_S16_ID,mgr);
572                ref.reload(StatsTestsF64::MINVALS_F64_ID,mgr);
573 
574                output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
575                index.create(1,StatsTestsF64::OUT_S16_ID,mgr);
576 
577                refOffset = 0;
578             }
579             break;
580 
581             case StatsTestsF64::TEST_MIN_F64_8:
582             {
583                inputA.reload(StatsTestsF64::INPUT1_F64_ID,mgr,4);
584 
585                minIndexes.reload(StatsTestsF64::MININDEXES_S16_ID,mgr);
586                ref.reload(StatsTestsF64::MINVALS_F64_ID,mgr);
587 
588                output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
589                index.create(1,StatsTestsF64::OUT_S16_ID,mgr);
590 
591                refOffset = 1;
592             }
593             break;
594 
595             case StatsTestsF64::TEST_MIN_F64_9:
596             {
597                inputA.reload(StatsTestsF64::INPUT1_F64_ID,mgr,5);
598 
599                minIndexes.reload(StatsTestsF64::MININDEXES_S16_ID,mgr);
600                ref.reload(StatsTestsF64::MINVALS_F64_ID,mgr);
601 
602                output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
603                index.create(1,StatsTestsF64::OUT_S16_ID,mgr);
604 
605                refOffset = 2;
606             }
607             break;
608 
609             case StatsTestsF64::TEST_POWER_F64_10:
610             {
611                inputA.reload(StatsTestsF64::INPUT1_F64_ID,mgr,2);
612 
613                ref.reload(StatsTestsF64::POWERVALS_F64_ID,mgr);
614 
615                output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
616 
617                refOffset = 0;
618             }
619             break;
620 
621             case StatsTestsF64::TEST_POWER_F64_11:
622             {
623                inputA.reload(StatsTestsF64::INPUT1_F64_ID,mgr,4);
624 
625                ref.reload(StatsTestsF64::POWERVALS_F64_ID,mgr);
626 
627                output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
628 
629                refOffset = 1;
630             }
631             break;
632 
633             case StatsTestsF64::TEST_POWER_F64_12:
634             {
635                inputA.reload(StatsTestsF64::INPUT1_F64_ID,mgr,5);
636 
637                ref.reload(StatsTestsF64::POWERVALS_F64_ID,mgr);
638 
639                output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
640 
641                refOffset = 2;
642             }
643             break;
644 
645             case StatsTestsF64::TEST_RMS_F64_13:
646             {
647                inputA.reload(StatsTestsF64::INPUT1_F64_ID,mgr,2);
648 
649                ref.reload(StatsTestsF64::RMSVALS_F64_ID,mgr);
650 
651                output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
652 
653                refOffset = 0;
654             }
655             break;
656 
657             case StatsTestsF64::TEST_RMS_F64_14:
658             {
659                inputA.reload(StatsTestsF64::INPUT1_F64_ID,mgr,4);
660 
661                ref.reload(StatsTestsF64::RMSVALS_F64_ID,mgr);
662 
663                output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
664 
665                refOffset = 1;
666             }
667             break;
668 
669             case StatsTestsF64::TEST_RMS_F64_15:
670             {
671                inputA.reload(StatsTestsF64::INPUT1_F64_ID,mgr,5);
672 
673                ref.reload(StatsTestsF64::RMSVALS_F64_ID,mgr);
674 
675                output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
676 
677                refOffset = 2;
678             }
679             break;
680 
681             case StatsTestsF64::TEST_STD_F64_16:
682             {
683                inputA.reload(StatsTestsF64::INPUT1_F64_ID,mgr,2);
684 
685                ref.reload(StatsTestsF64::STDVALS_F64_ID,mgr);
686 
687                output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
688 
689                refOffset = 0;
690             }
691             break;
692 
693             case StatsTestsF64::TEST_STD_F64_17:
694             {
695                inputA.reload(StatsTestsF64::INPUT1_F64_ID,mgr,4);
696 
697                ref.reload(StatsTestsF64::STDVALS_F64_ID,mgr);
698 
699                output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
700 
701                refOffset = 1;
702             }
703             break;
704 
705             case StatsTestsF64::TEST_STD_F64_18:
706             {
707                inputA.reload(StatsTestsF64::INPUT1_F64_ID,mgr,5);
708 
709                ref.reload(StatsTestsF64::STDVALS_F64_ID,mgr);
710 
711                output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
712 
713                refOffset = 2;
714             }
715             break;
716 
717             case StatsTestsF64::TEST_VAR_F64_19:
718             {
719                inputA.reload(StatsTestsF64::INPUT1_F64_ID,mgr,2);
720 
721                ref.reload(StatsTestsF64::VARVALS_F64_ID,mgr);
722 
723                output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
724 
725                refOffset = 0;
726             }
727             break;
728 
729             case StatsTestsF64::TEST_VAR_F64_20:
730             {
731                inputA.reload(StatsTestsF64::INPUT1_F64_ID,mgr,4);
732 
733                ref.reload(StatsTestsF64::VARVALS_F64_ID,mgr);
734 
735                output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
736 
737                refOffset = 1;
738             }
739             break;
740 
741             case StatsTestsF64::TEST_VAR_F64_21:
742             {
743                inputA.reload(StatsTestsF64::INPUT1_F64_ID,mgr,5);
744 
745                ref.reload(StatsTestsF64::VARVALS_F64_ID,mgr);
746 
747                output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
748 
749                refOffset = 2;
750             }
751             break;
752 
753             case StatsTestsF64::TEST_ENTROPY_F64_22:
754             {
755                inputA.reload(StatsTestsF64::INPUT22_F64_ID,mgr);
756                dims.reload(StatsTestsF64::DIM22_S16_ID,mgr);
757                ref.reload(StatsTestsF64::REF22_ENTROPY_F64_ID,mgr);
758                output.create(ref.nbSamples(),StatsTestsF64::OUT_F64_ID,mgr);
759 
760                const int16_t *dimsp  = dims.ptr();
761                this->nbPatterns=dimsp[0];
762             }
763             break;
764 
765             case StatsTestsF64::TEST_LOGSUMEXP_F64_23:
766             {
767                inputA.reload(StatsTestsF64::INPUT23_F64_ID,mgr);
768                dims.reload(StatsTestsF64::DIM23_S16_ID,mgr);
769                ref.reload(StatsTestsF64::REF23_LOGSUMEXP_F64_ID,mgr);
770                output.create(ref.nbSamples(),StatsTestsF64::OUT_F64_ID,mgr);
771 
772                const int16_t *dimsp  = dims.ptr();
773                this->nbPatterns=dimsp[0];
774             }
775             break;
776 
777             case StatsTestsF64::TEST_KULLBACK_LEIBLER_F64_24:
778             {
779                inputA.reload(StatsTestsF64::INPUTA24_F64_ID,mgr);
780                inputB.reload(StatsTestsF64::INPUTB24_F64_ID,mgr);
781                dims.reload(StatsTestsF64::DIM24_S16_ID,mgr);
782                ref.reload(StatsTestsF64::REF24_KL_F64_ID,mgr);
783                output.create(ref.nbSamples(),StatsTestsF64::OUT_F64_ID,mgr);
784 
785                const int16_t *dimsp  = dims.ptr();
786                this->nbPatterns=dimsp[0];
787             }
788             break;
789 
790             case StatsTestsF64::TEST_LOGSUMEXP_DOT_PROD_F64_25:
791             {
792                inputA.reload(StatsTestsF64::INPUTA25_F64_ID,mgr);
793                inputB.reload(StatsTestsF64::INPUTB25_F64_ID,mgr);
794                dims.reload(StatsTestsF64::DIM25_S16_ID,mgr);
795                ref.reload(StatsTestsF64::REF25_LOGSUMEXP_DOT_F64_ID,mgr);
796                output.create(ref.nbSamples(),StatsTestsF64::OUT_F64_ID,mgr);
797 
798                const int16_t *dimsp  = dims.ptr();
799                this->nbPatterns=dimsp[0];
800 
801                /* 12 is max vecDim as defined in Python script generating the data */
802                tmp.create(12,StatsTestsF64::TMP_F64_ID,mgr);
803             }
804             break;
805 
806             case StatsTestsF64::TEST_MAX_NO_IDX_F64_26:
807             {
808                inputA.reload(StatsTestsF64::INPUT1_F64_ID,mgr,2);
809 
810                ref.reload(StatsTestsF64::MAXVALS_F64_ID,mgr);
811 
812                output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
813 
814                refOffset = 0;
815             }
816             break;
817 
818             case StatsTestsF64::TEST_MAX_NO_IDX_F64_27:
819             {
820                inputA.reload(StatsTestsF64::INPUT1_F64_ID,mgr,4);
821 
822                ref.reload(StatsTestsF64::MAXVALS_F64_ID,mgr);
823 
824                output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
825 
826                refOffset = 1;
827             }
828             break;
829 
830             case StatsTestsF64::TEST_MAX_NO_IDX_F64_28:
831             {
832                inputA.reload(StatsTestsF64::INPUT1_F64_ID,mgr,5);
833 
834                ref.reload(StatsTestsF64::MAXVALS_F64_ID,mgr);
835 
836                output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
837 
838                refOffset = 2;
839             }
840             break;
841 
842             case TEST_MEAN_F64_29:
843                inputA.reload(StatsTestsF64::INPUT2_F64_ID,mgr,100);
844 
845                ref.reload(StatsTestsF64::MEANVALS_F64_ID,mgr);
846 
847                output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
848 
849                refOffset = 3;
850             break;
851 
852             case TEST_RMS_F64_30:
853                inputA.reload(StatsTestsF64::INPUT1_F64_ID,mgr,100);
854 
855                ref.reload(StatsTestsF64::RMSVALS_F64_ID,mgr);
856 
857                output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
858 
859                refOffset = 3;
860             break;
861 
862             case TEST_STD_F64_31:
863                inputA.reload(StatsTestsF64::INPUT1_F64_ID,mgr,100);
864 
865                ref.reload(StatsTestsF64::STDVALS_F64_ID,mgr);
866 
867                output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
868 
869                refOffset = 3;
870             break;
871 
872             case TEST_VAR_F64_32:
873                inputA.reload(StatsTestsF64::INPUT1_F64_ID,mgr,100);
874 
875                ref.reload(StatsTestsF64::VARVALS_F64_ID,mgr);
876 
877                output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
878 
879                refOffset = 3;
880             break;
881 
882             case StatsTestsF64::TEST_ABSMAX_F64_34:
883             {
884                inputA.reload(StatsTestsF64::INPUTNEW1_F64_ID,mgr,2);
885 
886                maxIndexes.reload(StatsTestsF64::ABSMAXINDEXES_S16_ID,mgr);
887                ref.reload(StatsTestsF64::ABSMAXVALS_F64_ID,mgr);
888 
889                output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
890                index.create(1,StatsTestsF64::OUT_S16_ID,mgr);
891 
892                refOffset = 0;
893             }
894             break;
895 
896             case StatsTestsF64::TEST_ABSMAX_F64_35:
897             {
898                inputA.reload(StatsTestsF64::INPUTNEW1_F64_ID,mgr,4);
899 
900                maxIndexes.reload(StatsTestsF64::ABSMAXINDEXES_S16_ID,mgr);
901                ref.reload(StatsTestsF64::ABSMAXVALS_F64_ID,mgr);
902 
903                output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
904                index.create(1,StatsTestsF64::OUT_S16_ID,mgr);
905 
906                refOffset = 1;
907             }
908             break;
909 
910             case StatsTestsF64::TEST_ABSMAX_F64_36:
911             {
912                inputA.reload(StatsTestsF64::INPUTNEW1_F64_ID,mgr,5);
913 
914                maxIndexes.reload(StatsTestsF64::ABSMAXINDEXES_S16_ID,mgr);
915                ref.reload(StatsTestsF64::ABSMAXVALS_F64_ID,mgr);
916 
917                output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
918                index.create(1,StatsTestsF64::OUT_S16_ID,mgr);
919 
920                refOffset = 2;
921             }
922             break;
923 
924             case StatsTestsF64::TEST_ABSMIN_F64_37:
925             {
926                inputA.reload(StatsTestsF64::INPUTNEW1_F64_ID,mgr,2);
927 
928                minIndexes.reload(StatsTestsF64::ABSMININDEXES_S16_ID,mgr);
929                ref.reload(StatsTestsF64::ABSMINVALS_F64_ID,mgr);
930 
931                output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
932                index.create(1,StatsTestsF64::OUT_S16_ID,mgr);
933 
934                refOffset = 0;
935             }
936             break;
937 
938             case StatsTestsF64::TEST_ABSMIN_F64_38:
939             {
940                inputA.reload(StatsTestsF64::INPUTNEW1_F64_ID,mgr,4);
941 
942                minIndexes.reload(StatsTestsF64::ABSMININDEXES_S16_ID,mgr);
943                ref.reload(StatsTestsF64::ABSMINVALS_F64_ID,mgr);
944 
945                output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
946                index.create(1,StatsTestsF64::OUT_S16_ID,mgr);
947 
948                refOffset = 1;
949             }
950             break;
951 
952             case StatsTestsF64::TEST_ABSMIN_F64_39:
953             {
954                inputA.reload(StatsTestsF64::INPUTNEW1_F64_ID,mgr,5);
955 
956                minIndexes.reload(StatsTestsF64::ABSMININDEXES_S16_ID,mgr);
957                ref.reload(StatsTestsF64::ABSMINVALS_F64_ID,mgr);
958 
959                output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
960                index.create(1,StatsTestsF64::OUT_S16_ID,mgr);
961 
962                refOffset = 2;
963             }
964             break;
965 
966             case StatsTestsF64::TEST_MIN_NO_IDX_F64_40:
967             {
968                inputA.reload(StatsTestsF64::INPUT1_F64_ID,mgr,2);
969 
970                ref.reload(StatsTestsF64::MINVALS_F64_ID,mgr);
971 
972                output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
973 
974                refOffset = 0;
975             }
976             break;
977 
978             case StatsTestsF64::TEST_MIN_NO_IDX_F64_41:
979             {
980                inputA.reload(StatsTestsF64::INPUT1_F64_ID,mgr,4);
981 
982                ref.reload(StatsTestsF64::MINVALS_F64_ID,mgr);
983 
984                output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
985 
986                refOffset = 1;
987             }
988             break;
989 
990             case StatsTestsF64::TEST_MIN_NO_IDX_F64_42:
991             {
992                inputA.reload(StatsTestsF64::INPUT1_F64_ID,mgr,5);
993 
994                ref.reload(StatsTestsF64::MINVALS_F64_ID,mgr);
995 
996                output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
997 
998                refOffset = 2;
999             }
1000             break;
1001 
1002 
1003             case StatsTestsF64::TEST_ABSMAX_NO_IDX_F64_43:
1004             {
1005                inputA.reload(StatsTestsF64::INPUTNEW1_F64_ID,mgr,2);
1006 
1007                ref.reload(StatsTestsF64::ABSMAXVALS_F64_ID,mgr);
1008 
1009                output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
1010 
1011                refOffset = 0;
1012             }
1013             break;
1014 
1015             case StatsTestsF64::TEST_ABSMAX_NO_IDX_F64_44:
1016             {
1017                inputA.reload(StatsTestsF64::INPUTNEW1_F64_ID,mgr,4);
1018 
1019                ref.reload(StatsTestsF64::ABSMAXVALS_F64_ID,mgr);
1020 
1021                output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
1022 
1023                refOffset = 1;
1024             }
1025             break;
1026 
1027             case StatsTestsF64::TEST_ABSMAX_NO_IDX_F64_45:
1028             {
1029                inputA.reload(StatsTestsF64::INPUTNEW1_F64_ID,mgr,5);
1030 
1031                ref.reload(StatsTestsF64::ABSMAXVALS_F64_ID,mgr);
1032 
1033                output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
1034 
1035                refOffset = 2;
1036             }
1037             break;
1038 
1039             case StatsTestsF64::TEST_ABSMIN_NO_IDX_F64_46:
1040             {
1041                inputA.reload(StatsTestsF64::INPUTNEW1_F64_ID,mgr,2);
1042 
1043                ref.reload(StatsTestsF64::ABSMINVALS_F64_ID,mgr);
1044 
1045                output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
1046 
1047                refOffset = 0;
1048             }
1049             break;
1050 
1051             case StatsTestsF64::TEST_ABSMIN_NO_IDX_F64_47:
1052             {
1053                inputA.reload(StatsTestsF64::INPUTNEW1_F64_ID,mgr,4);
1054 
1055                ref.reload(StatsTestsF64::ABSMINVALS_F64_ID,mgr);
1056 
1057                output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
1058 
1059                refOffset = 1;
1060             }
1061             break;
1062 
1063             case StatsTestsF64::TEST_ABSMIN_NO_IDX_F64_48:
1064             {
1065                inputA.reload(StatsTestsF64::INPUTNEW1_F64_ID,mgr,5);
1066 
1067                ref.reload(StatsTestsF64::ABSMINVALS_F64_ID,mgr);
1068 
1069                output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
1070 
1071                refOffset = 2;
1072             }
1073             break;
1074 
1075             case StatsTestsF64::TEST_MSE_F64_49:
1076             {
1077                inputA.reload(StatsTestsF64::INPUTNEW1_F64_ID,mgr,2);
1078                inputB.reload(StatsTestsF64::INPUTNEW2_F64_ID,mgr,2);
1079 
1080                ref.reload(StatsTestsF64::MSE_F64_ID,mgr);
1081 
1082                output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
1083 
1084                refOffset = 0;
1085             }
1086             break;
1087 
1088             case StatsTestsF64::TEST_MSE_F64_50:
1089             {
1090                inputA.reload(StatsTestsF64::INPUTNEW1_F64_ID,mgr,4);
1091                inputB.reload(StatsTestsF64::INPUTNEW2_F64_ID,mgr,4);
1092 
1093                ref.reload(StatsTestsF64::MSE_F64_ID,mgr);
1094 
1095                output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
1096 
1097                refOffset = 1;
1098             }
1099             break;
1100 
1101             case StatsTestsF64::TEST_MSE_F64_51:
1102             {
1103                inputA.reload(StatsTestsF64::INPUTNEW1_F64_ID,mgr,5);
1104                inputB.reload(StatsTestsF64::INPUTNEW2_F64_ID,mgr,5);
1105 
1106                ref.reload(StatsTestsF64::MSE_F64_ID,mgr);
1107 
1108                output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
1109 
1110                refOffset = 2;
1111             }
1112             break;
1113 
1114             case StatsTestsF64::TEST_MSE_F64_52:
1115             {
1116                inputA.reload(StatsTestsF64::INPUTNEW1_F64_ID,mgr,100);
1117                inputB.reload(StatsTestsF64::INPUTNEW2_F64_ID,mgr,100);
1118 
1119                ref.reload(StatsTestsF64::MSE_F64_ID,mgr);
1120 
1121                output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
1122 
1123                refOffset = 3;
1124             }
1125             break;
1126 
1127             case StatsTestsF64::TEST_ACCUMULATE_F64_53:
1128             {
1129                inputA.reload(StatsTestsF64::INPUT_ACCUMULATE_F64_ID,mgr);
1130                ref.reload(StatsTestsF64::REF_ACCUMULATE_F64_ID,mgr);
1131                dims.reload(StatsTestsF64::INPUT_ACCUMULATE_CONFIG_S16_ID,mgr);
1132                output.create(ref.nbSamples(),StatsTestsF64::OUT_F64_ID,mgr);
1133 
1134                const int16_t *dimsp  = dims.ptr();
1135                this->nbPatterns=dimsp[0];
1136 
1137 
1138             }
1139             break;
1140 
1141 
1142         }
1143 
1144     }
1145 
tearDown(Testing::testID_t id,Client::PatternMgr * mgr)1146     void StatsTestsF64::tearDown(Testing::testID_t id,Client::PatternMgr *mgr)
1147     {
1148       (void)id;
1149       switch(id)
1150       {
1151             case StatsTestsF64::TEST_MAX_F64_1:
1152             case StatsTestsF64::TEST_MAX_F64_2:
1153             case StatsTestsF64::TEST_MAX_F64_3:
1154             case StatsTestsF64::TEST_MIN_F64_7:
1155             case StatsTestsF64::TEST_MIN_F64_8:
1156             case StatsTestsF64::TEST_MIN_F64_9:
1157               index.dump(mgr);
1158               output.dump(mgr);
1159             break;
1160 
1161             default:
1162               output.dump(mgr);
1163       }
1164     }
1165