1 #include "UnaryTestsF16.h"
2 #include <stdio.h>
3 #include "Error.h"
4
5 #define SNR_THRESHOLD 57
6
7 /*
8
9 Reference patterns are generated with
10 a double precision computation.
11
12 */
13 #define REL_ERROR (1.1e-3)
14 #define ABS_ERROR (1.1e-3)
15
16 /*
17
18 Comparisons for QR
19
20 */
21
22 #define SNR_QR_THRESHOLD 20
23 #define REL_QR_ERROR (3.0e-2)
24 #define ABS_QR_ERROR (3.0e-2)
25
26 /*
27
28 Comparisons for inverse
29
30 */
31
32 /* Not very accurate for big matrix.
33 But big matrix needed for checking the vectorized code */
34
35 #define SNR_THRESHOLD_INV 51
36 #define REL_ERROR_INV (3.0e-3)
37 #define ABS_ERROR_INV (2.0e-2)
38
39 #define REL_ERROR_SOLVE (6.0e-2)
40 #define ABS_ERROR_SOLVE (2.0e-2)
41
42 /*
43
44 Comparison for Cholesky
45
46 */
47 #define SNR_THRESHOLD_CHOL 45
48 #define REL_ERROR_CHOL (3.0e-3)
49 #define ABS_ERROR_CHOL (3.0e-2)
50
51 /* Upper bound of maximum matrix dimension used by Python */
52 #define MAXMATRIXDIM 40
53
54 #define LOADDATA2() \
55 const float16_t *inp1=input1.ptr(); \
56 const float16_t *inp2=input2.ptr(); \
57 \
58 float16_t *ap=a.ptr(); \
59 float16_t *bp=b.ptr(); \
60 \
61 float16_t *outp=output.ptr(); \
62 int16_t *dimsp = dims.ptr(); \
63 int nbMatrixes = dims.nbSamples() >> 1;\
64 int rows,columns; \
65 int i;
66
67 #define LOADDATA1() \
68 const float16_t *inp1=input1.ptr(); \
69 \
70 float16_t *ap=a.ptr(); \
71 \
72 float16_t *outp=output.ptr(); \
73 int16_t *dimsp = dims.ptr(); \
74 int nbMatrixes = dims.nbSamples() >> 1;\
75 int rows,columns; \
76 int i;
77
78 #define PREPAREDATA2() \
79 in1.numRows=rows; \
80 in1.numCols=columns; \
81 memcpy((void*)ap,(const void*)inp1,sizeof(float16_t)*rows*columns);\
82 in1.pData = ap; \
83 \
84 in2.numRows=rows; \
85 in2.numCols=columns; \
86 memcpy((void*)bp,(const void*)inp2,sizeof(float16_t)*rows*columns);\
87 in2.pData = bp; \
88 \
89 out.numRows=rows; \
90 out.numCols=columns; \
91 out.pData = outp;
92
93 #define PREPAREDATALT() \
94 in1.numRows=rows; \
95 in1.numCols=rows; \
96 memcpy((void*)ap,(const void*)inp1,sizeof(float16_t)*rows*rows); \
97 in1.pData = ap; \
98 \
99 in2.numRows=rows; \
100 in2.numCols=columns; \
101 memcpy((void*)bp,(const void*)inp2,sizeof(float16_t)*rows*columns);\
102 in2.pData = bp; \
103 \
104 out.numRows=rows; \
105 out.numCols=columns; \
106 out.pData = outp;
107
108 #define PREPAREDATA1(TRANSPOSED) \
109 in1.numRows=rows; \
110 in1.numCols=columns; \
111 memcpy((void*)ap,(const void*)inp1,sizeof(float16_t)*rows*columns);\
112 in1.pData = ap; \
113 \
114 if (TRANSPOSED) \
115 { \
116 out.numRows=columns; \
117 out.numCols=rows; \
118 } \
119 else \
120 { \
121 out.numRows=rows; \
122 out.numCols=columns; \
123 } \
124 out.pData = outp;
125
126 #define PREPAREDATA1C(TRANSPOSED) \
127 in1.numRows=rows; \
128 in1.numCols=columns; \
129 memcpy((void*)ap,(const void*)inp1,2*sizeof(float16_t)*rows*columns);\
130 in1.pData = ap; \
131 \
132 if (TRANSPOSED) \
133 { \
134 out.numRows=columns; \
135 out.numCols=rows; \
136 } \
137 else \
138 { \
139 out.numRows=rows; \
140 out.numCols=columns; \
141 } \
142 out.pData = outp;
143
144 #define LOADVECDATA2() \
145 const float16_t *inp1=input1.ptr(); \
146 const float16_t *inp2=input2.ptr(); \
147 \
148 float16_t *ap=a.ptr(); \
149 float16_t *bp=b.ptr(); \
150 \
151 float16_t *outp=output.ptr(); \
152 int16_t *dimsp = dims.ptr(); \
153 int nbMatrixes = dims.nbSamples() / 2;\
154 int rows,internal; \
155 int i;
156
157 #define PREPAREVECDATA2() \
158 in1.numRows=rows; \
159 in1.numCols=internal; \
160 memcpy((void*)ap,(const void*)inp1,sizeof(float16_t)*rows*internal);\
161 in1.pData = ap; \
162 \
163 memcpy((void*)bp,(const void*)inp2,sizeof(float16_t)*internal);
164
165
checkInnerTailOverflow(float16_t * b)166 static void checkInnerTailOverflow(float16_t *b)
167 {
168 ASSERT_TRUE(b[0] == 0);
169 ASSERT_TRUE(b[1] == 0);
170 ASSERT_TRUE(b[2] == 0);
171 ASSERT_TRUE(b[3] == 0);
172 ASSERT_TRUE(b[4] == 0);
173 ASSERT_TRUE(b[5] == 0);
174 ASSERT_TRUE(b[6] == 0);
175 ASSERT_TRUE(b[7] == 0);
176 }
177
178
test_householder_f16()179 void UnaryTestsF16::test_householder_f16()
180 {
181 int16_t vecDim;
182 const int16_t *dimsp = dims.ptr();
183 const int nbVectors = dims.nbSamples();
184 const float16_t *inp1=input1.ptr();
185
186 float16_t *outp=output.ptr();
187 float16_t *outBetap=outputBeta.ptr();
188
189
190 for(int i=0; i < nbVectors ; i++)
191 {
192 vecDim = *dimsp++;
193
194 float16_t beta = arm_householder_f16(inp1,DEFAULT_HOUSEHOLDER_THRESHOLD_F16,vecDim,outp);
195 *outBetap = beta;
196
197 outp += vecDim;
198 inp1 += vecDim;
199 outBetap++;
200 checkInnerTailOverflow(outp);
201 checkInnerTailOverflow(outBetap);
202
203 }
204
205 ASSERT_EMPTY_TAIL(output);
206 ASSERT_EMPTY_TAIL(outputBeta);
207
208 ASSERT_SNR(output,ref,(float16_t)SNR_THRESHOLD);
209 ASSERT_SNR(outputBeta,refBeta,(float16_t)SNR_THRESHOLD);
210
211 ASSERT_CLOSE_ERROR(output,ref,ABS_ERROR,REL_ERROR);
212 ASSERT_CLOSE_ERROR(outputBeta,refBeta,ABS_ERROR,REL_ERROR);
213
214
215 }
216
test_mat_qr_f16()217 void UnaryTestsF16::test_mat_qr_f16()
218 {
219 int16_t rows, columns, rank;
220 const int16_t *dimsp = dims.ptr();
221 const int nbMatrixes = dims.nbSamples() / 3;
222 const float16_t *inp1=input1.ptr();
223
224 float16_t *outTaup=outputTau.ptr();
225 float16_t *outRp=outputR.ptr();
226 float16_t *outQp=outputQ.ptr();
227 float16_t *pTmpA=a.ptr();
228 float16_t *pTmpB=b.ptr();
229
230 (void) outTaup;
231 (void) outRp;
232
233 for(int i=0; i < nbMatrixes ; i++)
234 {
235 rows = *dimsp++;
236 columns = *dimsp++;
237 rank = *dimsp++;
238 (void)rank;
239
240
241 in1.numRows=rows;
242 in1.numCols=columns;
243 in1.pData = (float16_t*)inp1;
244
245
246 outR.numRows = rows;
247 outR.numCols = columns;
248 outR.pData = (float16_t*)outRp;
249
250 outQ.numRows = rows;
251 outQ.numCols = rows;
252 outQ.pData = (float16_t*)outQp;
253
254 arm_status status=arm_mat_qr_f16(&in1,DEFAULT_HOUSEHOLDER_THRESHOLD_F16,&outR,&outQ,outTaup,pTmpA,pTmpB);
255 ASSERT_TRUE(status==ARM_MATH_SUCCESS);
256
257
258 inp1 += rows * columns;
259 outRp += rows * columns;
260 outQp += rows * rows;
261 outTaup += columns;
262
263 checkInnerTailOverflow(outRp);
264 checkInnerTailOverflow(outQp);
265 checkInnerTailOverflow(outTaup);
266
267
268 }
269
270 ASSERT_EMPTY_TAIL(outputR);
271 ASSERT_EMPTY_TAIL(outputQ);
272 ASSERT_EMPTY_TAIL(outputTau);
273
274 //ASSERT_SNR(refQ,outputQ,(float16_t)SNR_QR_THRESHOLD);
275 //ASSERT_SNR(refR,outputR,(float16_t)SNR_QR_THRESHOLD);
276 //ASSERT_SNR(refTau,outputTau,(float16_t)SNR_QR_THRESHOLD);
277
278 ASSERT_CLOSE_ERROR(refQ,outputQ,ABS_QR_ERROR,REL_QR_ERROR);
279 ASSERT_CLOSE_ERROR(refR,outputR,ABS_QR_ERROR,REL_QR_ERROR);
280 ASSERT_CLOSE_ERROR(refTau,outputTau,ABS_QR_ERROR,REL_QR_ERROR);
281 }
282
test_mat_vec_mult_f16()283 void UnaryTestsF16::test_mat_vec_mult_f16()
284 {
285 LOADVECDATA2();
286
287 for(i=0;i < nbMatrixes ; i ++)
288 {
289 rows = *dimsp++;
290 internal = *dimsp++;
291
292 PREPAREVECDATA2();
293
294 arm_mat_vec_mult_f16(&this->in1, bp, outp);
295
296 outp += rows ;
297
298 }
299
300 ASSERT_EMPTY_TAIL(output);
301
302 ASSERT_SNR(output,ref,(float16_t)SNR_THRESHOLD);
303
304 ASSERT_CLOSE_ERROR(output,ref,ABS_ERROR,REL_ERROR);
305
306 }
307
test_mat_add_f16()308 void UnaryTestsF16::test_mat_add_f16()
309 {
310 LOADDATA2();
311 arm_status status;
312
313 for(i=0;i < nbMatrixes ; i ++)
314 {
315 rows = *dimsp++;
316 columns = *dimsp++;
317
318 PREPAREDATA2();
319
320 status=arm_mat_add_f16(&this->in1,&this->in2,&this->out);
321 ASSERT_TRUE(status==ARM_MATH_SUCCESS);
322
323 outp += (rows * columns);
324
325 }
326
327 ASSERT_EMPTY_TAIL(output);
328
329 ASSERT_SNR(output,ref,(float16_t)SNR_THRESHOLD);
330
331 ASSERT_CLOSE_ERROR(output,ref,ABS_ERROR,REL_ERROR);
332
333 }
334
test_mat_sub_f16()335 void UnaryTestsF16::test_mat_sub_f16()
336 {
337 LOADDATA2();
338 arm_status status;
339
340 for(i=0;i < nbMatrixes ; i ++)
341 {
342 rows = *dimsp++;
343 columns = *dimsp++;
344
345 PREPAREDATA2();
346
347 status=arm_mat_sub_f16(&this->in1,&this->in2,&this->out);
348 ASSERT_TRUE(status==ARM_MATH_SUCCESS);
349
350 outp += (rows * columns);
351
352 }
353
354 ASSERT_EMPTY_TAIL(output);
355
356 ASSERT_SNR(output,ref,(float16_t)SNR_THRESHOLD);
357
358 ASSERT_CLOSE_ERROR(output,ref,ABS_ERROR,REL_ERROR);
359
360 }
361
test_mat_scale_f16()362 void UnaryTestsF16::test_mat_scale_f16()
363 {
364 LOADDATA1();
365 arm_status status;
366
367 for(i=0;i < nbMatrixes ; i ++)
368 {
369 rows = *dimsp++;
370 columns = *dimsp++;
371
372 PREPAREDATA1(false);
373
374 status=arm_mat_scale_f16(&this->in1,0.5f,&this->out);
375 ASSERT_TRUE(status==ARM_MATH_SUCCESS);
376
377 outp += (rows * columns);
378
379 }
380
381 ASSERT_EMPTY_TAIL(output);
382
383 ASSERT_SNR(output,ref,(float16_t)SNR_THRESHOLD);
384
385 ASSERT_CLOSE_ERROR(output,ref,ABS_ERROR,REL_ERROR);
386
387 }
388
test_mat_trans_f16()389 void UnaryTestsF16::test_mat_trans_f16()
390 {
391 LOADDATA1();
392 arm_status status;
393
394 for(i=0;i < nbMatrixes ; i ++)
395 {
396 rows = *dimsp++;
397 columns = *dimsp++;
398
399 PREPAREDATA1(true);
400
401 status=arm_mat_trans_f16(&this->in1,&this->out);
402 ASSERT_TRUE(status==ARM_MATH_SUCCESS);
403
404 outp += (rows * columns);
405
406 }
407
408 ASSERT_EMPTY_TAIL(output);
409
410 ASSERT_SNR(output,ref,(float16_t)SNR_THRESHOLD);
411
412 ASSERT_CLOSE_ERROR(output,ref,ABS_ERROR,REL_ERROR);
413
414 }
415
test_mat_cmplx_trans_f16()416 void UnaryTestsF16::test_mat_cmplx_trans_f16()
417 {
418 LOADDATA1();
419 arm_status status;
420
421 for(i=0;i < nbMatrixes ; i ++)
422 {
423 rows = *dimsp++;
424 columns = *dimsp++;
425
426 PREPAREDATA1C(true);
427
428 status=arm_mat_cmplx_trans_f16(&this->in1,&this->out);
429 ASSERT_TRUE(status==ARM_MATH_SUCCESS);
430
431 outp += 2*(rows * columns);
432
433 }
434
435 ASSERT_EMPTY_TAIL(output);
436
437 ASSERT_SNR(output,ref,(float16_t)SNR_THRESHOLD);
438
439 ASSERT_CLOSE_ERROR(output,ref,ABS_ERROR,REL_ERROR);
440
441 }
442
refInnerTail(float16_t * b)443 static void refInnerTail(float16_t *b)
444 {
445 b[0] = 1.0f;
446 b[1] = -2.0f;
447 b[2] = 3.0f;
448 b[3] = -4.0f;
449 }
450
checkInnerTail(float16_t * b)451 static void checkInnerTail(float16_t *b)
452 {
453 ASSERT_TRUE(b[0] == 1.0f);
454 ASSERT_TRUE(b[1] == -2.0f);
455 ASSERT_TRUE(b[2] == 3.0f);
456 ASSERT_TRUE(b[3] == -4.0f);
457 }
458
test_mat_inverse_f16()459 void UnaryTestsF16::test_mat_inverse_f16()
460 {
461 const float16_t *inp1=input1.ptr();
462
463 float16_t *ap=a.ptr();
464
465 float16_t *outp=output.ptr();
466 int16_t *dimsp = dims.ptr();
467 int nbMatrixes = dims.nbSamples();
468 int rows,columns;
469 int i;
470 arm_status status;
471
472 // Non singular matrixes
473 // Last matrix is singular
474 for(i=0;i < nbMatrixes-1 ; i ++)
475 {
476 rows = *dimsp++;
477 columns = rows;
478
479 PREPAREDATA1(false);
480
481 refInnerTail(outp+(rows * columns));
482
483 status=arm_mat_inverse_f16(&this->in1,&this->out);
484 ASSERT_TRUE(status==ARM_MATH_SUCCESS);
485
486 outp += (rows * columns);
487 inp1 += (rows * columns);
488
489 checkInnerTail(outp);
490
491 }
492 /*** Singular matrix **/
493 rows = *dimsp++;
494 columns = rows;
495
496 PREPAREDATA1(false);
497
498 refInnerTail(outp+(rows * columns));
499
500 status=arm_mat_inverse_f16(&this->in1,&this->out);
501 ASSERT_TRUE(status==ARM_MATH_SINGULAR);
502
503 outp += (rows * columns);
504 inp1 += (rows * columns);
505
506 checkInnerTail(outp);
507 /**********************/
508
509
510 ASSERT_SNR(output,ref,(float16_t)SNR_THRESHOLD_INV);
511
512 ASSERT_CLOSE_ERROR(output,ref,ABS_ERROR_INV,REL_ERROR_INV);
513
514 }
515
test_mat_cholesky_dpo_f16()516 void UnaryTestsF16::test_mat_cholesky_dpo_f16()
517 {
518 float16_t *ap=a.ptr();
519 const float16_t *inp1=input1.ptr();
520
521
522 float16_t *outp=output.ptr();
523 int16_t *dimsp = dims.ptr();
524 int nbMatrixes = dims.nbSamples();
525
526 int rows,columns;
527 int i;
528 arm_status status;
529
530 for(i=0;i < nbMatrixes ; i ++)
531 {
532 rows = *dimsp++;
533 columns = rows;
534
535 PREPAREDATA1(false);
536
537 status=arm_mat_cholesky_f16(&this->in1,&this->out);
538 ASSERT_TRUE(status==ARM_MATH_SUCCESS);
539
540 outp += (rows * columns);
541 inp1 += (rows * columns);
542
543 }
544
545 ASSERT_EMPTY_TAIL(output);
546
547 ASSERT_SNR(output,ref,(float16_t)SNR_THRESHOLD_CHOL);
548
549 ASSERT_CLOSE_ERROR(ref,output,ABS_ERROR_CHOL,REL_ERROR_CHOL);
550 }
551
test_solve_upper_triangular_f16()552 void UnaryTestsF16::test_solve_upper_triangular_f16()
553 {
554 float16_t *ap=a.ptr();
555 const float16_t *inp1=input1.ptr();
556
557 float16_t *bp=b.ptr();
558 const float16_t *inp2=input2.ptr();
559
560
561 float16_t *outp=output.ptr();
562 int16_t *dimsp = dims.ptr();
563 int nbMatrixes = dims.nbSamples() >> 1;
564
565 int rows,columns;
566 int i;
567 arm_status status;
568
569 for(i=0;i < nbMatrixes ; i ++)
570 {
571 rows = *dimsp++;
572 columns = *dimsp++;
573
574 PREPAREDATALT();
575
576 status=arm_mat_solve_upper_triangular_f16(&this->in1,&this->in2,&this->out);
577 ASSERT_TRUE(status==ARM_MATH_SUCCESS);
578
579 outp += (rows * columns);
580 inp1 += (rows * rows);
581 inp2 += (rows * columns);
582
583
584 }
585
586 ASSERT_EMPTY_TAIL(output);
587
588 ASSERT_SNR(output,ref,(float16_t)SNR_THRESHOLD);
589
590 ASSERT_CLOSE_ERROR(ref,output,ABS_ERROR_SOLVE,REL_ERROR_SOLVE);
591 }
592
test_solve_lower_triangular_f16()593 void UnaryTestsF16::test_solve_lower_triangular_f16()
594 {
595 float16_t *ap=a.ptr();
596 const float16_t *inp1=input1.ptr();
597
598 float16_t *bp=b.ptr();
599 const float16_t *inp2=input2.ptr();
600
601
602 float16_t *outp=output.ptr();
603 int16_t *dimsp = dims.ptr();
604 int nbMatrixes = dims.nbSamples()>>1;
605
606 int rows,columns;
607 int i;
608 arm_status status;
609
610 for(i=0;i < nbMatrixes ; i ++)
611 {
612 rows = *dimsp++;
613 columns = *dimsp++;
614
615 PREPAREDATALT();
616
617 status=arm_mat_solve_lower_triangular_f16(&this->in1,&this->in2,&this->out);
618 ASSERT_TRUE(status==ARM_MATH_SUCCESS);
619
620 outp += (rows * columns);
621 inp1 += (rows * rows);
622 inp2 += (rows * columns);
623
624 }
625
626 ASSERT_EMPTY_TAIL(output);
627
628 ASSERT_SNR(output,ref,(float16_t)SNR_THRESHOLD);
629
630 ASSERT_CLOSE_ERROR(ref,output,ABS_ERROR_SOLVE,REL_ERROR_SOLVE);
631 }
632
setUp(Testing::testID_t id,std::vector<Testing::param_t> & params,Client::PatternMgr * mgr)633 void UnaryTestsF16::setUp(Testing::testID_t id,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr)
634 {
635
636
637 (void)params;
638 switch(id)
639 {
640 case TEST_MAT_ADD_F16_1:
641 input1.reload(UnaryTestsF16::INPUTS1_F16_ID,mgr);
642 input2.reload(UnaryTestsF16::INPUTS2_F16_ID,mgr);
643 dims.reload(UnaryTestsF16::DIMSUNARY1_S16_ID,mgr);
644
645 ref.reload(UnaryTestsF16::REFADD1_F16_ID,mgr);
646
647 output.create(ref.nbSamples(),UnaryTestsF16::OUT_F16_ID,mgr);
648 a.create(MAXMATRIXDIM*MAXMATRIXDIM,UnaryTestsF16::TMPA_F16_ID,mgr);
649 b.create(MAXMATRIXDIM*MAXMATRIXDIM,UnaryTestsF16::TMPB_F16_ID,mgr);
650 break;
651
652 case TEST_MAT_SUB_F16_2:
653 input1.reload(UnaryTestsF16::INPUTS1_F16_ID,mgr);
654 input2.reload(UnaryTestsF16::INPUTS2_F16_ID,mgr);
655 dims.reload(UnaryTestsF16::DIMSUNARY1_S16_ID,mgr);
656
657 ref.reload(UnaryTestsF16::REFSUB1_F16_ID,mgr);
658
659 output.create(ref.nbSamples(),UnaryTestsF16::OUT_F16_ID,mgr);
660 a.create(MAXMATRIXDIM*MAXMATRIXDIM,UnaryTestsF16::TMPA_F16_ID,mgr);
661 b.create(MAXMATRIXDIM*MAXMATRIXDIM,UnaryTestsF16::TMPB_F16_ID,mgr);
662 break;
663
664 case TEST_MAT_SCALE_F16_3:
665 input1.reload(UnaryTestsF16::INPUTS1_F16_ID,mgr);
666 dims.reload(UnaryTestsF16::DIMSUNARY1_S16_ID,mgr);
667
668 ref.reload(UnaryTestsF16::REFSCALE1_F16_ID,mgr);
669
670 output.create(ref.nbSamples(),UnaryTestsF16::OUT_F16_ID,mgr);
671 a.create(MAXMATRIXDIM*MAXMATRIXDIM,UnaryTestsF16::TMPA_F16_ID,mgr);
672 break;
673
674 case TEST_MAT_TRANS_F16_4:
675 input1.reload(UnaryTestsF16::INPUTS1_F16_ID,mgr);
676 dims.reload(UnaryTestsF16::DIMSUNARY1_S16_ID,mgr);
677
678 ref.reload(UnaryTestsF16::REFTRANS1_F16_ID,mgr);
679
680 output.create(ref.nbSamples(),UnaryTestsF16::OUT_F16_ID,mgr);
681 a.create(MAXMATRIXDIM*MAXMATRIXDIM,UnaryTestsF16::TMPA_F16_ID,mgr);
682 break;
683
684 case TEST_MAT_INVERSE_F16_5:
685 input1.reload(UnaryTestsF16::INPUTSINV_F16_ID,mgr);
686 dims.reload(UnaryTestsF16::DIMSINVERT1_S16_ID,mgr);
687
688 ref.reload(UnaryTestsF16::REFINV1_F16_ID,mgr);
689
690 output.create(ref.nbSamples(),UnaryTestsF16::OUT_F16_ID,mgr);
691 a.create(MAXMATRIXDIM*MAXMATRIXDIM,UnaryTestsF16::TMPA_F16_ID,mgr);
692 break;
693
694 case TEST_MAT_VEC_MULT_F16_6:
695 input1.reload(UnaryTestsF16::INPUTS1_F16_ID,mgr);
696 input2.reload(UnaryTestsF16::INPUTVEC1_F16_ID,mgr);
697 dims.reload(UnaryTestsF16::DIMSUNARY1_S16_ID,mgr);
698
699 ref.reload(UnaryTestsF16::REFVECMUL1_F16_ID,mgr);
700
701 output.create(ref.nbSamples(),UnaryTestsF16::OUT_F16_ID,mgr);
702 a.create(MAXMATRIXDIM*MAXMATRIXDIM,UnaryTestsF16::TMPA_F16_ID,mgr);
703 b.create(MAXMATRIXDIM,UnaryTestsF16::TMPB_F16_ID,mgr);
704 break;
705
706 case TEST_MAT_CMPLX_TRANS_F16_7:
707 input1.reload(UnaryTestsF16::INPUTSC1_F16_ID,mgr);
708 dims.reload(UnaryTestsF16::DIMSUNARY1_S16_ID,mgr);
709
710 ref.reload(UnaryTestsF16::REFTRANSC1_F16_ID,mgr);
711
712 output.create(ref.nbSamples(),UnaryTestsF16::OUT_F16_ID,mgr);
713 a.create(MAXMATRIXDIM*MAXMATRIXDIM,UnaryTestsF16::TMPA_F16_ID,mgr);
714 break;
715
716 case TEST_MAT_CHOLESKY_DPO_F16_8:
717 input1.reload(UnaryTestsF16::INPUTSCHOLESKY1_DPO_F16_ID,mgr);
718 dims.reload(UnaryTestsF16::DIMSCHOLESKY1_DPO_S16_ID,mgr);
719
720 ref.reload(UnaryTestsF16::REFCHOLESKY1_DPO_F16_ID,mgr);
721
722 output.create(ref.nbSamples(),UnaryTestsF16::OUT_F16_ID,mgr);
723 a.create(MAXMATRIXDIM*MAXMATRIXDIM,UnaryTestsF16::TMPA_F16_ID,mgr);
724 break;
725
726 case TEST_SOLVE_UPPER_TRIANGULAR_F16_9:
727 input1.reload(UnaryTestsF16::INPUT_MAT_UTSOLVE_F16_ID,mgr);
728 input2.reload(UnaryTestsF16::INPUT_VEC_LTSOLVE_F16_ID,mgr);
729 dims.reload(UnaryTestsF16::DIM_LTSOLVE_F16_ID,mgr);
730
731 ref.reload(UnaryTestsF16::REF_UT_SOLVE_F16_ID,mgr);
732
733 output.create(ref.nbSamples(),UnaryTestsF16::OUT_F16_ID,mgr);
734 a.create(MAXMATRIXDIM*MAXMATRIXDIM,UnaryTestsF16::TMPA_F16_ID,mgr);
735 b.create(MAXMATRIXDIM*MAXMATRIXDIM,UnaryTestsF16::TMPB_F16_ID,mgr);
736 break;
737
738 case TEST_SOLVE_LOWER_TRIANGULAR_F16_10:
739 input1.reload(UnaryTestsF16::INPUT_MAT_LTSOLVE_F16_ID,mgr);
740 input2.reload(UnaryTestsF16::INPUT_VEC_LTSOLVE_F16_ID,mgr);
741 dims.reload(UnaryTestsF16::DIM_LTSOLVE_F16_ID,mgr);
742
743 ref.reload(UnaryTestsF16::REF_LT_SOLVE_F16_ID,mgr);
744
745 output.create(ref.nbSamples(),UnaryTestsF16::OUT_F16_ID,mgr);
746 a.create(MAXMATRIXDIM*MAXMATRIXDIM,UnaryTestsF16::TMPA_F16_ID,mgr);
747 b.create(MAXMATRIXDIM*MAXMATRIXDIM,UnaryTestsF16::TMPB_F16_ID,mgr);
748 break;
749
750 case TEST_HOUSEHOLDER_F16_11:
751 input1.reload(UnaryTestsF16::INPUTS_HOUSEHOLDER_F16_ID,mgr);
752 dims.reload(UnaryTestsF16::DIMS_HOUSEHOLDER_S16_ID,mgr);
753 ref.reload(UnaryTestsF16::REF_HOUSEHOLDER_V_F16_ID,mgr);
754 refBeta.reload(UnaryTestsF16::REF_HOUSEHOLDER_BETA_F16_ID,mgr);
755
756
757 output.create(ref.nbSamples(),UnaryTestsF16::TMPA_F16_ID,mgr);
758 outputBeta.create(refBeta.nbSamples(),UnaryTestsF16::TMPB_F16_ID,mgr);
759 break;
760
761
762 case TEST_MAT_QR_F16_12:
763 input1.reload(UnaryTestsF16::INPUTS_QR_F16_ID,mgr);
764 dims.reload(UnaryTestsF16::DIMS_QR_S16_ID,mgr);
765 refTau.reload(UnaryTestsF16::REF_QR_TAU_F16_ID,mgr);
766 refR.reload(UnaryTestsF16::REF_QR_R_F16_ID,mgr);
767 refQ.reload(UnaryTestsF16::REF_QR_Q_F16_ID,mgr);
768
769
770 outputTau.create(refTau.nbSamples(),UnaryTestsF16::TMPA_F16_ID,mgr);
771 outputR.create(refR.nbSamples(),UnaryTestsF16::TMPB_F16_ID,mgr);
772 outputQ.create(refQ.nbSamples(),UnaryTestsF16::TMPC_F16_ID,mgr);
773
774 a.create(47,UnaryTestsF16::TMPC_F16_ID,mgr);
775 b.create(47,UnaryTestsF16::TMPD_F16_ID,mgr);
776 break;
777 }
778
779
780
781 }
782
tearDown(Testing::testID_t id,Client::PatternMgr * mgr)783 void UnaryTestsF16::tearDown(Testing::testID_t id,Client::PatternMgr *mgr)
784 {
785 (void)id;
786 //output.dump(mgr);
787 (void)mgr;
788 }
789