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