1 #include "StatsTestsF32.h" 2 #include <stdio.h> 3 #include "Error.h" 4 #include "Test.h" 5 6 7 #define SNR_THRESHOLD 120 8 /* 9 10 Reference patterns are generated with 11 a double precision computation. 12 13 */ 14 #define REL_ERROR (1.0e-5) 15 test_max_f32()16 void StatsTestsF32::test_max_f32() 17 { 18 const float32_t *inp = inputA.ptr(); 19 20 float32_t result; 21 uint32_t indexval; 22 23 float32_t *refp = ref.ptr(); 24 int16_t *refind = maxIndexes.ptr(); 25 26 float32_t *outp = output.ptr(); 27 int16_t *ind = index.ptr(); 28 29 arm_max_f32(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_f32()42 void StatsTestsF32::test_absmax_f32() 43 { 44 const float32_t *inp = inputA.ptr(); 45 46 float32_t result; 47 uint32_t indexval; 48 49 float32_t *refp = ref.ptr(); 50 int16_t *refind = maxIndexes.ptr(); 51 52 float32_t *outp = output.ptr(); 53 int16_t *ind = index.ptr(); 54 55 arm_absmax_f32(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_f32()68 void StatsTestsF32::test_max_no_idx_f32() 69 { 70 const float32_t *inp = inputA.ptr(); 71 72 float32_t result; 73 74 float32_t *refp = ref.ptr(); 75 76 float32_t *outp = output.ptr(); 77 78 arm_max_no_idx_f32(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_f32()88 void StatsTestsF32::test_absmax_no_idx_f32() 89 { 90 const float32_t *inp = inputA.ptr(); 91 92 float32_t result; 93 94 float32_t *refp = ref.ptr(); 95 96 float32_t *outp = output.ptr(); 97 98 arm_absmax_no_idx_f32(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_f32()108 void StatsTestsF32::test_min_no_idx_f32() 109 { 110 const float32_t *inp = inputA.ptr(); 111 112 float32_t result; 113 114 float32_t *refp = ref.ptr(); 115 116 float32_t *outp = output.ptr(); 117 118 arm_min_no_idx_f32(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_f32()128 void StatsTestsF32::test_absmin_no_idx_f32() 129 { 130 const float32_t *inp = inputA.ptr(); 131 132 float32_t result; 133 134 float32_t *refp = ref.ptr(); 135 136 float32_t *outp = output.ptr(); 137 138 arm_absmin_no_idx_f32(inp, 139 inputA.nbSamples(), 140 &result); 141 142 outp[0] = result; 143 144 ASSERT_EQ(result,refp[this->refOffset]); 145 146 } 147 test_min_f32()148 void StatsTestsF32::test_min_f32() 149 { 150 const float32_t *inp = inputA.ptr(); 151 152 float32_t result; 153 uint32_t indexval; 154 155 float32_t *refp = ref.ptr(); 156 int16_t *refind = minIndexes.ptr(); 157 158 float32_t *outp = output.ptr(); 159 int16_t *ind = index.ptr(); 160 161 arm_min_f32(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_f32()174 void StatsTestsF32::test_absmin_f32() 175 { 176 const float32_t *inp = inputA.ptr(); 177 178 float32_t result; 179 uint32_t indexval; 180 181 float32_t *refp = ref.ptr(); 182 int16_t *refind = minIndexes.ptr(); 183 184 float32_t *outp = output.ptr(); 185 int16_t *ind = index.ptr(); 186 187 arm_absmin_f32(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_f32()200 void StatsTestsF32::test_mean_f32() 201 { 202 const float32_t *inp = inputA.ptr(); 203 204 float32_t result; 205 206 float32_t *refp = ref.ptr(); 207 208 float32_t *outp = output.ptr(); 209 210 arm_mean_f32(inp, 211 inputA.nbSamples(), 212 &result); 213 214 outp[0] = result; 215 216 ASSERT_SNR(result,refp[this->refOffset],(float32_t)SNR_THRESHOLD); 217 218 ASSERT_REL_ERROR(result,refp[this->refOffset],REL_ERROR); 219 220 } 221 test_power_f32()222 void StatsTestsF32::test_power_f32() 223 { 224 const float32_t *inp = inputA.ptr(); 225 226 float32_t result; 227 228 float32_t *refp = ref.ptr(); 229 230 float32_t *outp = output.ptr(); 231 232 arm_power_f32(inp, 233 inputA.nbSamples(), 234 &result); 235 236 outp[0] = result; 237 238 ASSERT_SNR(result,refp[this->refOffset],(float32_t)SNR_THRESHOLD); 239 240 ASSERT_REL_ERROR(result,refp[this->refOffset],REL_ERROR); 241 242 } 243 test_rms_f32()244 void StatsTestsF32::test_rms_f32() 245 { 246 const float32_t *inp = inputA.ptr(); 247 248 float32_t result; 249 250 float32_t *refp = ref.ptr(); 251 252 float32_t *outp = output.ptr(); 253 254 arm_rms_f32(inp, 255 inputA.nbSamples(), 256 &result); 257 258 outp[0] = result; 259 260 ASSERT_SNR(result,refp[this->refOffset],(float32_t)SNR_THRESHOLD); 261 262 ASSERT_REL_ERROR(result,refp[this->refOffset],REL_ERROR); 263 264 } 265 test_std_f32()266 void StatsTestsF32::test_std_f32() 267 { 268 const float32_t *inp = inputA.ptr(); 269 270 float32_t result; 271 272 float32_t *refp = ref.ptr(); 273 274 float32_t *outp = output.ptr(); 275 276 arm_std_f32(inp, 277 inputA.nbSamples(), 278 &result); 279 280 outp[0] = result; 281 282 ASSERT_SNR(result,refp[this->refOffset],(float32_t)SNR_THRESHOLD); 283 284 ASSERT_REL_ERROR(result,refp[this->refOffset],REL_ERROR); 285 286 } 287 test_var_f32()288 void StatsTestsF32::test_var_f32() 289 { 290 const float32_t *inp = inputA.ptr(); 291 292 float32_t result; 293 294 float32_t *refp = ref.ptr(); 295 296 float32_t *outp = output.ptr(); 297 298 arm_var_f32(inp, 299 inputA.nbSamples(), 300 &result); 301 302 outp[0] = result; 303 304 ASSERT_SNR(result,refp[this->refOffset],(float32_t)SNR_THRESHOLD); 305 306 ASSERT_REL_ERROR(result,refp[this->refOffset],REL_ERROR); 307 308 } 309 310 test_std_stability_f32()311 void StatsTestsF32::test_std_stability_f32() 312 { 313 /* 314 315 With the textbook algorithm, those values will produce a negative 316 value for the variance. 317 318 The CMSIS-DSP variance algorithm is the two pass one so will work 319 with those values. 320 321 So, it should be possible to compute the square root for the standard 322 deviation. 323 324 */ 325 float32_t in[4]={4.0f, 7.0f, 13.0f, 16.0f}; 326 float32_t result; 327 int i; 328 329 /* 330 331 Add bigger offset so that average is much bigger than standard deviation. 332 333 */ 334 for(i=0 ; i < 4; i++) 335 { 336 in[i] += 3.0e4f; 337 } 338 339 arm_std_f32(in,4,&result); 340 341 /* 342 343 If variance is giving a negative value, the square root 344 should return zero. 345 346 We check it is not happening here. 347 348 349 */ 350 351 ASSERT_TRUE(fabs(5.47723f - result) < 1.0e-4f); 352 353 } 354 test_entropy_f32()355 void StatsTestsF32::test_entropy_f32() 356 { 357 const float32_t *inp = inputA.ptr(); 358 const int16_t *dimsp = dims.ptr(); 359 360 float32_t *outp = output.ptr(); 361 362 for(int i=0;i < this->nbPatterns; i++) 363 { 364 *outp = arm_entropy_f32(inp,dimsp[i+1]); 365 outp++; 366 inp += dimsp[i+1]; 367 } 368 369 ASSERT_SNR(ref,output,(float32_t)SNR_THRESHOLD); 370 371 ASSERT_REL_ERROR(ref,output,REL_ERROR); 372 373 } 374 test_logsumexp_f32()375 void StatsTestsF32::test_logsumexp_f32() 376 { 377 const float32_t *inp = inputA.ptr(); 378 const int16_t *dimsp = dims.ptr(); 379 380 float32_t *outp = output.ptr(); 381 382 for(int i=0;i < this->nbPatterns; i++) 383 { 384 *outp = arm_logsumexp_f32(inp,dimsp[i+1]); 385 outp++; 386 inp += dimsp[i+1]; 387 } 388 389 ASSERT_SNR(ref,output,(float32_t)SNR_THRESHOLD); 390 391 ASSERT_REL_ERROR(ref,output,REL_ERROR); 392 } 393 394 test_kullback_leibler_f32()395 void StatsTestsF32::test_kullback_leibler_f32() 396 { 397 const float32_t *inpA = inputA.ptr(); 398 const float32_t *inpB = inputB.ptr(); 399 const int16_t *dimsp = dims.ptr(); 400 401 float32_t *outp = output.ptr(); 402 403 for(int i=0;i < this->nbPatterns; i++) 404 { 405 *outp = arm_kullback_leibler_f32(inpA,inpB,dimsp[i+1]); 406 outp++; 407 inpA += dimsp[i+1]; 408 inpB += dimsp[i+1]; 409 } 410 411 ASSERT_SNR(ref,output,(float32_t)SNR_THRESHOLD); 412 413 ASSERT_REL_ERROR(ref,output,REL_ERROR); 414 } 415 test_logsumexp_dot_prod_f32()416 void StatsTestsF32::test_logsumexp_dot_prod_f32() 417 { 418 const float32_t *inpA = inputA.ptr(); 419 const float32_t *inpB = inputB.ptr(); 420 const int16_t *dimsp = dims.ptr(); 421 422 float32_t *outp = output.ptr(); 423 float32_t *tmpp = tmp.ptr(); 424 425 for(int i=0;i < this->nbPatterns; i++) 426 { 427 *outp = arm_logsumexp_dot_prod_f32(inpA,inpB,dimsp[i+1],tmpp); 428 outp++; 429 inpA += dimsp[i+1]; 430 inpB += dimsp[i+1]; 431 } 432 433 ASSERT_SNR(ref,output,(float32_t)SNR_THRESHOLD); 434 435 ASSERT_REL_ERROR(ref,output,REL_ERROR); 436 } 437 438 test_mse_f32()439 void StatsTestsF32::test_mse_f32() 440 { 441 const float32_t *inpA = inputA.ptr(); 442 const float32_t *inpB = inputB.ptr(); 443 444 float32_t result; 445 446 float32_t *refp = ref.ptr(); 447 448 float32_t *outp = output.ptr(); 449 450 arm_mse_f32(inpA,inpB, 451 inputA.nbSamples(), 452 &result); 453 454 outp[0] = result; 455 456 ASSERT_SNR(result,refp[this->refOffset],(float32_t)SNR_THRESHOLD); 457 458 ASSERT_REL_ERROR(result,refp[this->refOffset],(float32_t)REL_ERROR); 459 460 } 461 test_accumulate_f32()462 void StatsTestsF32::test_accumulate_f32() 463 { 464 const float32_t *inp = inputA.ptr(); 465 const int16_t *dimsp = dims.ptr(); 466 467 float32_t *outp = output.ptr(); 468 469 for(int i=0;i < this->nbPatterns; i++) 470 { 471 arm_accumulate_f32(inp,dimsp[i+1],outp); 472 outp++; 473 } 474 475 ASSERT_SNR(ref,output,(float32_t)SNR_THRESHOLD); 476 477 ASSERT_REL_ERROR(ref,output,REL_ERROR); 478 479 } 480 481 setUp(Testing::testID_t id,std::vector<Testing::param_t> & paramsArgs,Client::PatternMgr * mgr)482 void StatsTestsF32::setUp(Testing::testID_t id,std::vector<Testing::param_t>& paramsArgs,Client::PatternMgr *mgr) 483 { 484 (void)paramsArgs; 485 switch(id) 486 { 487 case StatsTestsF32::TEST_MAX_F32_1: 488 { 489 inputA.reload(StatsTestsF32::INPUT1_F32_ID,mgr,3); 490 491 maxIndexes.reload(StatsTestsF32::MAXINDEXES_S16_ID,mgr); 492 ref.reload(StatsTestsF32::MAXVALS_F32_ID,mgr); 493 494 output.create(1,StatsTestsF32::OUT_F32_ID,mgr); 495 index.create(1,StatsTestsF32::OUT_S16_ID,mgr); 496 497 refOffset = 0; 498 } 499 break; 500 501 case StatsTestsF32::TEST_MAX_F32_2: 502 { 503 inputA.reload(StatsTestsF32::INPUT1_F32_ID,mgr,8); 504 505 maxIndexes.reload(StatsTestsF32::MAXINDEXES_S16_ID,mgr); 506 ref.reload(StatsTestsF32::MAXVALS_F32_ID,mgr); 507 508 output.create(1,StatsTestsF32::OUT_F32_ID,mgr); 509 index.create(1,StatsTestsF32::OUT_S16_ID,mgr); 510 511 refOffset = 1; 512 } 513 break; 514 515 case StatsTestsF32::TEST_MAX_F32_3: 516 { 517 inputA.reload(StatsTestsF32::INPUT1_F32_ID,mgr,11); 518 519 maxIndexes.reload(StatsTestsF32::MAXINDEXES_S16_ID,mgr); 520 ref.reload(StatsTestsF32::MAXVALS_F32_ID,mgr); 521 522 output.create(1,StatsTestsF32::OUT_F32_ID,mgr); 523 index.create(1,StatsTestsF32::OUT_S16_ID,mgr); 524 525 refOffset = 2; 526 } 527 break; 528 529 case StatsTestsF32::TEST_MEAN_F32_4: 530 { 531 inputA.reload(StatsTestsF32::INPUT2_F32_ID,mgr,3); 532 533 ref.reload(StatsTestsF32::MEANVALS_F32_ID,mgr); 534 535 output.create(1,StatsTestsF32::OUT_F32_ID,mgr); 536 537 refOffset = 0; 538 } 539 break; 540 541 case StatsTestsF32::TEST_MEAN_F32_5: 542 { 543 inputA.reload(StatsTestsF32::INPUT2_F32_ID,mgr,8); 544 545 ref.reload(StatsTestsF32::MEANVALS_F32_ID,mgr); 546 547 output.create(1,StatsTestsF32::OUT_F32_ID,mgr); 548 549 refOffset = 1; 550 } 551 break; 552 553 case StatsTestsF32::TEST_MEAN_F32_6: 554 { 555 inputA.reload(StatsTestsF32::INPUT2_F32_ID,mgr,11); 556 557 ref.reload(StatsTestsF32::MEANVALS_F32_ID,mgr); 558 559 output.create(1,StatsTestsF32::OUT_F32_ID,mgr); 560 561 refOffset = 2; 562 } 563 break; 564 565 case StatsTestsF32::TEST_MIN_F32_7: 566 { 567 inputA.reload(StatsTestsF32::INPUT1_F32_ID,mgr,3); 568 569 minIndexes.reload(StatsTestsF32::MININDEXES_S16_ID,mgr); 570 ref.reload(StatsTestsF32::MINVALS_F32_ID,mgr); 571 572 output.create(1,StatsTestsF32::OUT_F32_ID,mgr); 573 index.create(1,StatsTestsF32::OUT_S16_ID,mgr); 574 575 refOffset = 0; 576 } 577 break; 578 579 case StatsTestsF32::TEST_MIN_F32_8: 580 { 581 inputA.reload(StatsTestsF32::INPUT1_F32_ID,mgr,8); 582 583 minIndexes.reload(StatsTestsF32::MININDEXES_S16_ID,mgr); 584 ref.reload(StatsTestsF32::MINVALS_F32_ID,mgr); 585 586 output.create(1,StatsTestsF32::OUT_F32_ID,mgr); 587 index.create(1,StatsTestsF32::OUT_S16_ID,mgr); 588 589 refOffset = 1; 590 } 591 break; 592 593 case StatsTestsF32::TEST_MIN_F32_9: 594 { 595 inputA.reload(StatsTestsF32::INPUT1_F32_ID,mgr,11); 596 597 minIndexes.reload(StatsTestsF32::MININDEXES_S16_ID,mgr); 598 ref.reload(StatsTestsF32::MINVALS_F32_ID,mgr); 599 600 output.create(1,StatsTestsF32::OUT_F32_ID,mgr); 601 index.create(1,StatsTestsF32::OUT_S16_ID,mgr); 602 603 refOffset = 2; 604 } 605 break; 606 607 case StatsTestsF32::TEST_POWER_F32_10: 608 { 609 inputA.reload(StatsTestsF32::INPUT1_F32_ID,mgr,3); 610 611 ref.reload(StatsTestsF32::POWERVALS_F32_ID,mgr); 612 613 output.create(1,StatsTestsF32::OUT_F32_ID,mgr); 614 615 refOffset = 0; 616 } 617 break; 618 619 case StatsTestsF32::TEST_POWER_F32_11: 620 { 621 inputA.reload(StatsTestsF32::INPUT1_F32_ID,mgr,8); 622 623 ref.reload(StatsTestsF32::POWERVALS_F32_ID,mgr); 624 625 output.create(1,StatsTestsF32::OUT_F32_ID,mgr); 626 627 refOffset = 1; 628 } 629 break; 630 631 case StatsTestsF32::TEST_POWER_F32_12: 632 { 633 inputA.reload(StatsTestsF32::INPUT1_F32_ID,mgr,11); 634 635 ref.reload(StatsTestsF32::POWERVALS_F32_ID,mgr); 636 637 output.create(1,StatsTestsF32::OUT_F32_ID,mgr); 638 639 refOffset = 2; 640 } 641 break; 642 643 case StatsTestsF32::TEST_RMS_F32_13: 644 { 645 inputA.reload(StatsTestsF32::INPUT1_F32_ID,mgr,3); 646 647 ref.reload(StatsTestsF32::RMSVALS_F32_ID,mgr); 648 649 output.create(1,StatsTestsF32::OUT_F32_ID,mgr); 650 651 refOffset = 0; 652 } 653 break; 654 655 case StatsTestsF32::TEST_RMS_F32_14: 656 { 657 inputA.reload(StatsTestsF32::INPUT1_F32_ID,mgr,8); 658 659 ref.reload(StatsTestsF32::RMSVALS_F32_ID,mgr); 660 661 output.create(1,StatsTestsF32::OUT_F32_ID,mgr); 662 663 refOffset = 1; 664 } 665 break; 666 667 case StatsTestsF32::TEST_RMS_F32_15: 668 { 669 inputA.reload(StatsTestsF32::INPUT1_F32_ID,mgr,11); 670 671 ref.reload(StatsTestsF32::RMSVALS_F32_ID,mgr); 672 673 output.create(1,StatsTestsF32::OUT_F32_ID,mgr); 674 675 refOffset = 2; 676 } 677 break; 678 679 case StatsTestsF32::TEST_STD_F32_16: 680 { 681 inputA.reload(StatsTestsF32::INPUT1_F32_ID,mgr,3); 682 683 ref.reload(StatsTestsF32::STDVALS_F32_ID,mgr); 684 685 output.create(1,StatsTestsF32::OUT_F32_ID,mgr); 686 687 refOffset = 0; 688 } 689 break; 690 691 case StatsTestsF32::TEST_STD_F32_17: 692 { 693 inputA.reload(StatsTestsF32::INPUT1_F32_ID,mgr,8); 694 695 ref.reload(StatsTestsF32::STDVALS_F32_ID,mgr); 696 697 output.create(1,StatsTestsF32::OUT_F32_ID,mgr); 698 699 refOffset = 1; 700 } 701 break; 702 703 case StatsTestsF32::TEST_STD_F32_18: 704 { 705 inputA.reload(StatsTestsF32::INPUT1_F32_ID,mgr,11); 706 707 ref.reload(StatsTestsF32::STDVALS_F32_ID,mgr); 708 709 output.create(1,StatsTestsF32::OUT_F32_ID,mgr); 710 711 refOffset = 2; 712 } 713 break; 714 715 case StatsTestsF32::TEST_VAR_F32_19: 716 { 717 inputA.reload(StatsTestsF32::INPUT1_F32_ID,mgr,3); 718 719 ref.reload(StatsTestsF32::VARVALS_F32_ID,mgr); 720 721 output.create(1,StatsTestsF32::OUT_F32_ID,mgr); 722 723 refOffset = 0; 724 } 725 break; 726 727 case StatsTestsF32::TEST_VAR_F32_20: 728 { 729 inputA.reload(StatsTestsF32::INPUT1_F32_ID,mgr,8); 730 731 ref.reload(StatsTestsF32::VARVALS_F32_ID,mgr); 732 733 output.create(1,StatsTestsF32::OUT_F32_ID,mgr); 734 735 refOffset = 1; 736 } 737 break; 738 739 case StatsTestsF32::TEST_VAR_F32_21: 740 { 741 inputA.reload(StatsTestsF32::INPUT1_F32_ID,mgr,11); 742 743 ref.reload(StatsTestsF32::VARVALS_F32_ID,mgr); 744 745 output.create(1,StatsTestsF32::OUT_F32_ID,mgr); 746 747 refOffset = 2; 748 } 749 break; 750 751 case StatsTestsF32::TEST_ENTROPY_F32_22: 752 { 753 inputA.reload(StatsTestsF32::INPUT22_F32_ID,mgr); 754 dims.reload(StatsTestsF32::DIM22_S16_ID,mgr); 755 ref.reload(StatsTestsF32::REF22_ENTROPY_F32_ID,mgr); 756 output.create(ref.nbSamples(),StatsTestsF32::OUT_F32_ID,mgr); 757 758 const int16_t *dimsp = dims.ptr(); 759 this->nbPatterns=dimsp[0]; 760 } 761 break; 762 763 case StatsTestsF32::TEST_LOGSUMEXP_F32_23: 764 { 765 inputA.reload(StatsTestsF32::INPUT23_F32_ID,mgr); 766 dims.reload(StatsTestsF32::DIM23_S16_ID,mgr); 767 ref.reload(StatsTestsF32::REF23_LOGSUMEXP_F32_ID,mgr); 768 output.create(ref.nbSamples(),StatsTestsF32::OUT_F32_ID,mgr); 769 770 const int16_t *dimsp = dims.ptr(); 771 this->nbPatterns=dimsp[0]; 772 } 773 break; 774 775 case StatsTestsF32::TEST_KULLBACK_LEIBLER_F32_24: 776 { 777 inputA.reload(StatsTestsF32::INPUTA24_F32_ID,mgr); 778 inputB.reload(StatsTestsF32::INPUTB24_F32_ID,mgr); 779 dims.reload(StatsTestsF32::DIM24_S16_ID,mgr); 780 ref.reload(StatsTestsF32::REF24_KL_F32_ID,mgr); 781 output.create(ref.nbSamples(),StatsTestsF32::OUT_F32_ID,mgr); 782 783 const int16_t *dimsp = dims.ptr(); 784 this->nbPatterns=dimsp[0]; 785 } 786 break; 787 788 case StatsTestsF32::TEST_LOGSUMEXP_DOT_PROD_F32_25: 789 { 790 inputA.reload(StatsTestsF32::INPUTA25_F32_ID,mgr); 791 inputB.reload(StatsTestsF32::INPUTB25_F32_ID,mgr); 792 dims.reload(StatsTestsF32::DIM25_S16_ID,mgr); 793 ref.reload(StatsTestsF32::REF25_LOGSUMEXP_DOT_F32_ID,mgr); 794 output.create(ref.nbSamples(),StatsTestsF32::OUT_F32_ID,mgr); 795 796 const int16_t *dimsp = dims.ptr(); 797 this->nbPatterns=dimsp[0]; 798 799 /* 12 is max vecDim as defined in Python script generating the data */ 800 tmp.create(12,StatsTestsF32::TMP_F32_ID,mgr); 801 } 802 break; 803 804 case StatsTestsF32::TEST_MAX_NO_IDX_F32_26: 805 { 806 inputA.reload(StatsTestsF32::INPUT1_F32_ID,mgr,3); 807 808 ref.reload(StatsTestsF32::MAXVALS_F32_ID,mgr); 809 810 output.create(1,StatsTestsF32::OUT_F32_ID,mgr); 811 812 refOffset = 0; 813 } 814 break; 815 816 case StatsTestsF32::TEST_MAX_NO_IDX_F32_27: 817 { 818 inputA.reload(StatsTestsF32::INPUT1_F32_ID,mgr,8); 819 820 ref.reload(StatsTestsF32::MAXVALS_F32_ID,mgr); 821 822 output.create(1,StatsTestsF32::OUT_F32_ID,mgr); 823 824 refOffset = 1; 825 } 826 break; 827 828 case StatsTestsF32::TEST_MAX_NO_IDX_F32_28: 829 { 830 inputA.reload(StatsTestsF32::INPUT1_F32_ID,mgr,11); 831 832 ref.reload(StatsTestsF32::MAXVALS_F32_ID,mgr); 833 834 output.create(1,StatsTestsF32::OUT_F32_ID,mgr); 835 836 refOffset = 2; 837 } 838 break; 839 840 case TEST_MEAN_F32_29: 841 inputA.reload(StatsTestsF32::INPUT2_F32_ID,mgr,100); 842 843 ref.reload(StatsTestsF32::MEANVALS_F32_ID,mgr); 844 845 output.create(1,StatsTestsF32::OUT_F32_ID,mgr); 846 847 refOffset = 3; 848 break; 849 850 case TEST_RMS_F32_30: 851 inputA.reload(StatsTestsF32::INPUT1_F32_ID,mgr,100); 852 853 ref.reload(StatsTestsF32::RMSVALS_F32_ID,mgr); 854 855 output.create(1,StatsTestsF32::OUT_F32_ID,mgr); 856 857 refOffset = 3; 858 break; 859 860 case TEST_STD_F32_31: 861 inputA.reload(StatsTestsF32::INPUT1_F32_ID,mgr,100); 862 863 ref.reload(StatsTestsF32::STDVALS_F32_ID,mgr); 864 865 output.create(1,StatsTestsF32::OUT_F32_ID,mgr); 866 867 refOffset = 3; 868 break; 869 870 case TEST_VAR_F32_32: 871 inputA.reload(StatsTestsF32::INPUT1_F32_ID,mgr,100); 872 873 ref.reload(StatsTestsF32::VARVALS_F32_ID,mgr); 874 875 output.create(1,StatsTestsF32::OUT_F32_ID,mgr); 876 877 refOffset = 3; 878 break; 879 880 case StatsTestsF32::TEST_ABSMAX_F32_34: 881 { 882 inputA.reload(StatsTestsF32::INPUTNEW1_F32_ID,mgr,3); 883 884 maxIndexes.reload(StatsTestsF32::ABSMAXINDEXES_S16_ID,mgr); 885 ref.reload(StatsTestsF32::ABSMAXVALS_F32_ID,mgr); 886 887 output.create(1,StatsTestsF32::OUT_F32_ID,mgr); 888 index.create(1,StatsTestsF32::OUT_S16_ID,mgr); 889 890 refOffset = 0; 891 } 892 break; 893 894 case StatsTestsF32::TEST_ABSMAX_F32_35: 895 { 896 inputA.reload(StatsTestsF32::INPUTNEW1_F32_ID,mgr,8); 897 898 maxIndexes.reload(StatsTestsF32::ABSMAXINDEXES_S16_ID,mgr); 899 ref.reload(StatsTestsF32::ABSMAXVALS_F32_ID,mgr); 900 901 output.create(1,StatsTestsF32::OUT_F32_ID,mgr); 902 index.create(1,StatsTestsF32::OUT_S16_ID,mgr); 903 904 refOffset = 1; 905 } 906 break; 907 908 case StatsTestsF32::TEST_ABSMAX_F32_36: 909 { 910 inputA.reload(StatsTestsF32::INPUTNEW1_F32_ID,mgr,11); 911 912 maxIndexes.reload(StatsTestsF32::ABSMAXINDEXES_S16_ID,mgr); 913 ref.reload(StatsTestsF32::ABSMAXVALS_F32_ID,mgr); 914 915 output.create(1,StatsTestsF32::OUT_F32_ID,mgr); 916 index.create(1,StatsTestsF32::OUT_S16_ID,mgr); 917 918 refOffset = 2; 919 } 920 break; 921 922 case StatsTestsF32::TEST_ABSMIN_F32_37: 923 { 924 inputA.reload(StatsTestsF32::INPUTNEW1_F32_ID,mgr,3); 925 926 minIndexes.reload(StatsTestsF32::ABSMININDEXES_S16_ID,mgr); 927 ref.reload(StatsTestsF32::ABSMINVALS_F32_ID,mgr); 928 929 output.create(1,StatsTestsF32::OUT_F32_ID,mgr); 930 index.create(1,StatsTestsF32::OUT_S16_ID,mgr); 931 932 refOffset = 0; 933 } 934 break; 935 936 case StatsTestsF32::TEST_ABSMIN_F32_38: 937 { 938 inputA.reload(StatsTestsF32::INPUTNEW1_F32_ID,mgr,8); 939 940 minIndexes.reload(StatsTestsF32::ABSMININDEXES_S16_ID,mgr); 941 ref.reload(StatsTestsF32::ABSMINVALS_F32_ID,mgr); 942 943 output.create(1,StatsTestsF32::OUT_F32_ID,mgr); 944 index.create(1,StatsTestsF32::OUT_S16_ID,mgr); 945 946 refOffset = 1; 947 } 948 break; 949 950 case StatsTestsF32::TEST_ABSMIN_F32_39: 951 { 952 inputA.reload(StatsTestsF32::INPUTNEW1_F32_ID,mgr,11); 953 954 minIndexes.reload(StatsTestsF32::ABSMININDEXES_S16_ID,mgr); 955 ref.reload(StatsTestsF32::ABSMINVALS_F32_ID,mgr); 956 957 output.create(1,StatsTestsF32::OUT_F32_ID,mgr); 958 index.create(1,StatsTestsF32::OUT_S16_ID,mgr); 959 960 refOffset = 2; 961 } 962 break; 963 964 case StatsTestsF32::TEST_MIN_NO_IDX_F32_40: 965 { 966 inputA.reload(StatsTestsF32::INPUT1_F32_ID,mgr,3); 967 968 ref.reload(StatsTestsF32::MINVALS_F32_ID,mgr); 969 970 output.create(1,StatsTestsF32::OUT_F32_ID,mgr); 971 972 refOffset = 0; 973 } 974 break; 975 976 case StatsTestsF32::TEST_MIN_NO_IDX_F32_41: 977 { 978 inputA.reload(StatsTestsF32::INPUT1_F32_ID,mgr,8); 979 980 ref.reload(StatsTestsF32::MINVALS_F32_ID,mgr); 981 982 output.create(1,StatsTestsF32::OUT_F32_ID,mgr); 983 984 refOffset = 1; 985 } 986 break; 987 988 case StatsTestsF32::TEST_MIN_NO_IDX_F32_42: 989 { 990 inputA.reload(StatsTestsF32::INPUT1_F32_ID,mgr,11); 991 992 ref.reload(StatsTestsF32::MINVALS_F32_ID,mgr); 993 994 output.create(1,StatsTestsF32::OUT_F32_ID,mgr); 995 996 refOffset = 2; 997 } 998 break; 999 1000 case StatsTestsF32::TEST_ABSMAX_NO_IDX_F32_43: 1001 { 1002 inputA.reload(StatsTestsF32::INPUTNEW1_F32_ID,mgr,3); 1003 1004 ref.reload(StatsTestsF32::ABSMAXVALS_F32_ID,mgr); 1005 1006 output.create(1,StatsTestsF32::OUT_F32_ID,mgr); 1007 1008 refOffset = 0; 1009 } 1010 break; 1011 1012 case StatsTestsF32::TEST_ABSMAX_NO_IDX_F32_44: 1013 { 1014 inputA.reload(StatsTestsF32::INPUTNEW1_F32_ID,mgr,8); 1015 1016 ref.reload(StatsTestsF32::ABSMAXVALS_F32_ID,mgr); 1017 1018 output.create(1,StatsTestsF32::OUT_F32_ID,mgr); 1019 1020 refOffset = 1; 1021 } 1022 break; 1023 1024 case StatsTestsF32::TEST_ABSMAX_NO_IDX_F32_45: 1025 { 1026 inputA.reload(StatsTestsF32::INPUTNEW1_F32_ID,mgr,11); 1027 1028 ref.reload(StatsTestsF32::ABSMAXVALS_F32_ID,mgr); 1029 1030 output.create(1,StatsTestsF32::OUT_F32_ID,mgr); 1031 1032 refOffset = 2; 1033 } 1034 break; 1035 1036 case StatsTestsF32::TEST_ABSMIN_NO_IDX_F32_46: 1037 { 1038 inputA.reload(StatsTestsF32::INPUTNEW1_F32_ID,mgr,3); 1039 1040 ref.reload(StatsTestsF32::ABSMINVALS_F32_ID,mgr); 1041 1042 output.create(1,StatsTestsF32::OUT_F32_ID,mgr); 1043 1044 refOffset = 0; 1045 } 1046 break; 1047 1048 case StatsTestsF32::TEST_ABSMIN_NO_IDX_F32_47: 1049 { 1050 inputA.reload(StatsTestsF32::INPUTNEW1_F32_ID,mgr,8); 1051 1052 ref.reload(StatsTestsF32::ABSMINVALS_F32_ID,mgr); 1053 1054 output.create(1,StatsTestsF32::OUT_F32_ID,mgr); 1055 1056 refOffset = 1; 1057 } 1058 break; 1059 1060 case StatsTestsF32::TEST_ABSMIN_NO_IDX_F32_48: 1061 { 1062 inputA.reload(StatsTestsF32::INPUTNEW1_F32_ID,mgr,11); 1063 1064 ref.reload(StatsTestsF32::ABSMINVALS_F32_ID,mgr); 1065 1066 output.create(1,StatsTestsF32::OUT_F32_ID,mgr); 1067 1068 refOffset = 2; 1069 } 1070 break; 1071 1072 case StatsTestsF32::TEST_MSE_F32_49: 1073 { 1074 inputA.reload(StatsTestsF32::INPUTNEW1_F32_ID,mgr,3); 1075 inputB.reload(StatsTestsF32::INPUTNEW2_F32_ID,mgr,3); 1076 1077 ref.reload(StatsTestsF32::MSE_F32_ID,mgr); 1078 1079 output.create(1,StatsTestsF32::OUT_F32_ID,mgr); 1080 1081 refOffset = 0; 1082 } 1083 break; 1084 1085 case StatsTestsF32::TEST_MSE_F32_50: 1086 { 1087 inputA.reload(StatsTestsF32::INPUTNEW1_F32_ID,mgr,8); 1088 inputB.reload(StatsTestsF32::INPUTNEW2_F32_ID,mgr,8); 1089 1090 ref.reload(StatsTestsF32::MSE_F32_ID,mgr); 1091 1092 output.create(1,StatsTestsF32::OUT_F32_ID,mgr); 1093 1094 refOffset = 1; 1095 } 1096 break; 1097 1098 case StatsTestsF32::TEST_MSE_F32_51: 1099 { 1100 inputA.reload(StatsTestsF32::INPUTNEW1_F32_ID,mgr,11); 1101 inputB.reload(StatsTestsF32::INPUTNEW2_F32_ID,mgr,11); 1102 1103 ref.reload(StatsTestsF32::MSE_F32_ID,mgr); 1104 1105 output.create(1,StatsTestsF32::OUT_F32_ID,mgr); 1106 1107 refOffset = 2; 1108 } 1109 break; 1110 1111 case StatsTestsF32::TEST_MSE_F32_52: 1112 { 1113 inputA.reload(StatsTestsF32::INPUTNEW1_F32_ID,mgr,100); 1114 inputB.reload(StatsTestsF32::INPUTNEW2_F32_ID,mgr,100); 1115 1116 ref.reload(StatsTestsF32::MSE_F32_ID,mgr); 1117 1118 output.create(1,StatsTestsF32::OUT_F32_ID,mgr); 1119 1120 refOffset = 3; 1121 } 1122 break; 1123 1124 case StatsTestsF32::TEST_ACCUMULATE_F32_53: 1125 { 1126 inputA.reload(StatsTestsF32::INPUT_ACCUMULATE_F32_ID,mgr); 1127 ref.reload(StatsTestsF32::REF_ACCUMULATE_F32_ID,mgr); 1128 dims.reload(StatsTestsF32::INPUT_ACCUMULATE_CONFIG_S16_ID,mgr); 1129 output.create(ref.nbSamples(),StatsTestsF32::OUT_F32_ID,mgr); 1130 1131 const int16_t *dimsp = dims.ptr(); 1132 this->nbPatterns=dimsp[0]; 1133 1134 1135 } 1136 break; 1137 1138 1139 } 1140 1141 } 1142 tearDown(Testing::testID_t id,Client::PatternMgr * mgr)1143 void StatsTestsF32::tearDown(Testing::testID_t id,Client::PatternMgr *mgr) 1144 { 1145 (void)id; 1146 switch(id) 1147 { 1148 case StatsTestsF32::TEST_MAX_F32_1: 1149 case StatsTestsF32::TEST_MAX_F32_2: 1150 case StatsTestsF32::TEST_MAX_F32_3: 1151 case StatsTestsF32::TEST_MIN_F32_7: 1152 case StatsTestsF32::TEST_MIN_F32_8: 1153 case StatsTestsF32::TEST_MIN_F32_9: 1154 index.dump(mgr); 1155 output.dump(mgr); 1156 break; 1157 1158 default: 1159 output.dump(mgr); 1160 } 1161 } 1162