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