StatsTestsQ7.cpp 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931
  1. #include "StatsTestsQ7.h"
  2. #include <stdio.h>
  3. #include "Error.h"
  4. #include "Test.h"
  5. //#include <cstdio>
  6. #define SNR_THRESHOLD 20
  7. /*
  8. Reference patterns are generated with
  9. a double precision computation.
  10. */
  11. #define ABS_ERROR_Q7 ((q7_t)20)
  12. #define ABS_ERROR_Q31 ((q31_t)(1<<15))
  13. void StatsTestsQ7::test_max_q7()
  14. {
  15. const q7_t *inp = inputA.ptr();
  16. q7_t result;
  17. uint32_t indexval;
  18. q7_t *refp = ref.ptr();
  19. int16_t *refind = maxIndexes.ptr();
  20. q7_t *outp = output.ptr();
  21. int16_t *ind = index.ptr();
  22. arm_max_q7(inp,
  23. inputA.nbSamples(),
  24. &result,
  25. &indexval);
  26. outp[0] = result;
  27. ind[0] = indexval;
  28. ASSERT_EQ(result,refp[this->refOffset]);
  29. ASSERT_EQ((int16_t)indexval,refind[this->refOffset]);
  30. }
  31. void StatsTestsQ7::test_max_no_idx_q7()
  32. {
  33. const q7_t *inp = inputA.ptr();
  34. q7_t result;
  35. q7_t *refp = ref.ptr();
  36. q7_t *outp = output.ptr();
  37. arm_max_no_idx_q7(inp,
  38. inputA.nbSamples(),
  39. &result);
  40. outp[0] = result;
  41. ASSERT_EQ(result,refp[this->refOffset]);
  42. }
  43. void StatsTestsQ7::test_absmax_no_idx_q7()
  44. {
  45. const q7_t *inp = inputA.ptr();
  46. q7_t result;
  47. q7_t *refp = ref.ptr();
  48. q7_t *outp = output.ptr();
  49. arm_absmax_no_idx_q7(inp,
  50. inputA.nbSamples(),
  51. &result);
  52. outp[0] = result;
  53. ASSERT_EQ(result,refp[this->refOffset]);
  54. }
  55. void StatsTestsQ7::test_absmax_q7()
  56. {
  57. const q7_t *inp = inputA.ptr();
  58. q7_t result;
  59. uint32_t indexval;
  60. q7_t *refp = ref.ptr();
  61. int16_t *refind = maxIndexes.ptr();
  62. q7_t *outp = output.ptr();
  63. int16_t *ind = index.ptr();
  64. arm_absmax_q7(inp,
  65. inputA.nbSamples(),
  66. &result,
  67. &indexval);
  68. outp[0] = result;
  69. ind[0] = indexval;
  70. ASSERT_EQ(result,refp[this->refOffset]);
  71. ASSERT_EQ((int16_t)indexval,refind[this->refOffset]);
  72. }
  73. /*
  74. May fail on the index. It depends on the values generated by Python.
  75. If the values are too close and thus equal with q7 accuracy
  76. then the index computed by Python and by the q7 implementation
  77. will be different.
  78. Python code must be tuned to change this.
  79. */
  80. void StatsTestsQ7::test_min_q7()
  81. {
  82. const q7_t *inp = inputA.ptr();
  83. q7_t result;
  84. uint32_t indexval;
  85. q7_t *refp = ref.ptr();
  86. int16_t *refind = minIndexes.ptr();
  87. q7_t *outp = output.ptr();
  88. int16_t *ind = index.ptr();
  89. arm_min_q7(inp,
  90. inputA.nbSamples(),
  91. &result,
  92. &indexval);
  93. outp[0] = result;
  94. ind[0] = indexval;
  95. ASSERT_EQ(result,refp[this->refOffset]);
  96. ASSERT_EQ((int16_t)indexval,refind[this->refOffset]);
  97. }
  98. void StatsTestsQ7::test_min_no_idx_q7()
  99. {
  100. const q7_t *inp = inputA.ptr();
  101. q7_t result;
  102. q7_t *refp = ref.ptr();
  103. q7_t *outp = output.ptr();
  104. arm_min_no_idx_q7(inp,
  105. inputA.nbSamples(),
  106. &result);
  107. outp[0] = result;
  108. ASSERT_EQ(result,refp[this->refOffset]);
  109. }
  110. void StatsTestsQ7::test_absmin_no_idx_q7()
  111. {
  112. const q7_t *inp = inputA.ptr();
  113. q7_t result;
  114. q7_t *refp = ref.ptr();
  115. q7_t *outp = output.ptr();
  116. arm_absmin_no_idx_q7(inp,
  117. inputA.nbSamples(),
  118. &result);
  119. outp[0] = result;
  120. ASSERT_EQ(result,refp[this->refOffset]);
  121. }
  122. void StatsTestsQ7::test_absmin_q7()
  123. {
  124. const q7_t *inp = inputA.ptr();
  125. q7_t result;
  126. uint32_t indexval;
  127. q7_t *refp = ref.ptr();
  128. int16_t *refind = minIndexes.ptr();
  129. q7_t *outp = output.ptr();
  130. int16_t *ind = index.ptr();
  131. arm_absmin_q7(inp,
  132. inputA.nbSamples(),
  133. &result,
  134. &indexval);
  135. outp[0] = result;
  136. ind[0] = indexval;
  137. ASSERT_EQ(result,refp[this->refOffset]);
  138. ASSERT_EQ((int16_t)indexval,refind[this->refOffset]);
  139. }
  140. void StatsTestsQ7::test_mean_q7()
  141. {
  142. const q7_t *inp = inputA.ptr();
  143. q7_t result;
  144. q7_t *refp = ref.ptr();
  145. q7_t *outp = output.ptr();
  146. arm_mean_q7(inp,
  147. inputA.nbSamples(),
  148. &result);
  149. outp[0] = result;
  150. ASSERT_SNR(result,refp[this->refOffset],(float32_t)5);
  151. ASSERT_NEAR_EQ(result,refp[this->refOffset],ABS_ERROR_Q7);
  152. }
  153. void StatsTestsQ7::test_power_q7()
  154. {
  155. const q7_t *inp = inputA.ptr();
  156. q31_t result;
  157. q31_t *refp = refPower.ptr();
  158. q31_t *outp = outputPower.ptr();
  159. arm_power_q7(inp,
  160. inputA.nbSamples(),
  161. &result);
  162. outp[0] = result;
  163. ASSERT_SNR(result,refp[this->refOffset],(float32_t)SNR_THRESHOLD);
  164. ASSERT_NEAR_EQ(result,refp[this->refOffset],(q31_t)ABS_ERROR_Q31);
  165. }
  166. #if 0
  167. /*
  168. Those functions do not yet exist in CMSIS-DSP.
  169. But the tests are kept for when they will be available.
  170. */
  171. void StatsTestsQ7::test_rms_q7()
  172. {
  173. const q7_t *inp = inputA.ptr();
  174. q7_t result;
  175. q7_t *refp = ref.ptr();
  176. q7_t *outp = output.ptr();
  177. arm_rms_q7(inp,
  178. inputA.nbSamples(),
  179. &result);
  180. outp[0] = result;
  181. ASSERT_SNR(result,refp[this->refOffset],(float32_t)SNR_THRESHOLD);
  182. ASSERT_NEAR_EQ(result,refp[this->refOffset],ABS_ERROR_Q7);
  183. }
  184. void StatsTestsQ7::test_std_q7()
  185. {
  186. const q7_t *inp = inputA.ptr();
  187. q7_t result;
  188. q7_t *refp = ref.ptr();
  189. q7_t *outp = output.ptr();
  190. arm_std_q7(inp,
  191. inputA.nbSamples(),
  192. &result);
  193. outp[0] = result;
  194. ASSERT_SNR(result,refp[this->refOffset],(float32_t)SNR_THRESHOLD);
  195. ASSERT_NEAR_EQ(result,refp[this->refOffset],ABS_ERROR_Q7);
  196. }
  197. void StatsTestsQ7::test_var_q7()
  198. {
  199. const q7_t *inp = inputA.ptr();
  200. q7_t result;
  201. q7_t *refp = ref.ptr();
  202. q7_t *outp = output.ptr();
  203. arm_var_q7(inp,
  204. inputA.nbSamples(),
  205. &result);
  206. outp[0] = result;
  207. ASSERT_SNR(result,refp[this->refOffset],(float32_t)SNR_THRESHOLD);
  208. ASSERT_NEAR_EQ(result,refp[this->refOffset],ABS_ERROR_Q7);
  209. }
  210. #endif
  211. void StatsTestsQ7::setUp(Testing::testID_t id,std::vector<Testing::param_t>& paramsArgs,Client::PatternMgr *mgr)
  212. {
  213. (void)paramsArgs;
  214. switch(id)
  215. {
  216. case StatsTestsQ7::TEST_MAX_Q7_1:
  217. {
  218. inputA.reload(StatsTestsQ7::INPUT1_Q7_ID,mgr,15);
  219. maxIndexes.reload(StatsTestsQ7::MAXINDEXES_S16_ID,mgr);
  220. ref.reload(StatsTestsQ7::MAXVALS_Q7_ID,mgr);
  221. output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
  222. index.create(1,StatsTestsQ7::OUT_S16_ID,mgr);
  223. refOffset = 0;
  224. }
  225. break;
  226. case StatsTestsQ7::TEST_MAX_Q7_2:
  227. {
  228. inputA.reload(StatsTestsQ7::INPUT1_Q7_ID,mgr,32);
  229. maxIndexes.reload(StatsTestsQ7::MAXINDEXES_S16_ID,mgr);
  230. ref.reload(StatsTestsQ7::MAXVALS_Q7_ID,mgr);
  231. output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
  232. index.create(1,StatsTestsQ7::OUT_S16_ID,mgr);
  233. refOffset = 1;
  234. }
  235. break;
  236. case StatsTestsQ7::TEST_MAX_Q7_3:
  237. {
  238. inputA.reload(StatsTestsQ7::INPUT1_Q7_ID,mgr,47);
  239. maxIndexes.reload(StatsTestsQ7::MAXINDEXES_S16_ID,mgr);
  240. ref.reload(StatsTestsQ7::MAXVALS_Q7_ID,mgr);
  241. output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
  242. index.create(1,StatsTestsQ7::OUT_S16_ID,mgr);
  243. refOffset = 2;
  244. }
  245. break;
  246. /*
  247. For MEAN tests, INPUT2 pattern is used.
  248. It contains only positive values and prevent the average
  249. value from being too close to zero which make the estimation
  250. of the errors difficult.
  251. */
  252. case StatsTestsQ7::TEST_MEAN_Q7_4:
  253. {
  254. inputA.reload(StatsTestsQ7::INPUT2_Q7_ID,mgr,15);
  255. ref.reload(StatsTestsQ7::MEANVALS_Q7_ID,mgr);
  256. output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
  257. refOffset = 0;
  258. }
  259. break;
  260. case StatsTestsQ7::TEST_MEAN_Q7_5:
  261. {
  262. inputA.reload(StatsTestsQ7::INPUT2_Q7_ID,mgr,32);
  263. ref.reload(StatsTestsQ7::MEANVALS_Q7_ID,mgr);
  264. output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
  265. refOffset = 1;
  266. }
  267. break;
  268. case StatsTestsQ7::TEST_MEAN_Q7_6:
  269. {
  270. inputA.reload(StatsTestsQ7::INPUT2_Q7_ID,mgr,47);
  271. ref.reload(StatsTestsQ7::MEANVALS_Q7_ID,mgr);
  272. output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
  273. refOffset = 2;
  274. }
  275. break;
  276. case StatsTestsQ7::TEST_MIN_Q7_7:
  277. {
  278. inputA.reload(StatsTestsQ7::INPUT1_Q7_ID,mgr,15);
  279. minIndexes.reload(StatsTestsQ7::MININDEXES_S16_ID,mgr);
  280. ref.reload(StatsTestsQ7::MINVALS_Q7_ID,mgr);
  281. output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
  282. index.create(1,StatsTestsQ7::OUT_S16_ID,mgr);
  283. refOffset = 0;
  284. }
  285. break;
  286. case StatsTestsQ7::TEST_MIN_Q7_8:
  287. {
  288. inputA.reload(StatsTestsQ7::INPUT1_Q7_ID,mgr,32);
  289. minIndexes.reload(StatsTestsQ7::MININDEXES_S16_ID,mgr);
  290. ref.reload(StatsTestsQ7::MINVALS_Q7_ID,mgr);
  291. output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
  292. index.create(1,StatsTestsQ7::OUT_S16_ID,mgr);
  293. refOffset = 1;
  294. }
  295. break;
  296. case StatsTestsQ7::TEST_MIN_Q7_9:
  297. {
  298. inputA.reload(StatsTestsQ7::INPUT1_Q7_ID,mgr,47);
  299. minIndexes.reload(StatsTestsQ7::MININDEXES_S16_ID,mgr);
  300. ref.reload(StatsTestsQ7::MINVALS_Q7_ID,mgr);
  301. output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
  302. index.create(1,StatsTestsQ7::OUT_S16_ID,mgr);
  303. refOffset = 2;
  304. }
  305. break;
  306. case StatsTestsQ7::TEST_POWER_Q7_10:
  307. {
  308. inputA.reload(StatsTestsQ7::INPUT1_Q7_ID,mgr,15);
  309. refPower.reload(StatsTestsQ7::POWERVALS_Q31_ID,mgr);
  310. outputPower.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
  311. refOffset = 0;
  312. }
  313. break;
  314. case StatsTestsQ7::TEST_POWER_Q7_11:
  315. {
  316. inputA.reload(StatsTestsQ7::INPUT1_Q7_ID,mgr,32);
  317. refPower.reload(StatsTestsQ7::POWERVALS_Q31_ID,mgr);
  318. outputPower.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
  319. refOffset = 1;
  320. }
  321. break;
  322. case StatsTestsQ7::TEST_POWER_Q7_12:
  323. {
  324. inputA.reload(StatsTestsQ7::INPUT1_Q7_ID,mgr,47);
  325. refPower.reload(StatsTestsQ7::POWERVALS_Q31_ID,mgr);
  326. outputPower.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
  327. refOffset = 2;
  328. }
  329. break;
  330. #if 0
  331. /*
  332. Those functions do not yet exist in CMSIS-DSP.
  333. But the tests are kept for when they will be available.
  334. */
  335. case StatsTestsQ7::TEST_RMS_Q7_13:
  336. {
  337. inputA.reload(StatsTestsQ7::INPUT1_Q7_ID,mgr,15);
  338. ref.reload(StatsTestsQ7::RMSVALS_Q7_ID,mgr);
  339. output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
  340. refOffset = 0;
  341. }
  342. break;
  343. case StatsTestsQ7::TEST_RMS_Q7_14:
  344. {
  345. inputA.reload(StatsTestsQ7::INPUT1_Q7_ID,mgr,32);
  346. ref.reload(StatsTestsQ7::RMSVALS_Q7_ID,mgr);
  347. output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
  348. refOffset = 1;
  349. }
  350. break;
  351. case StatsTestsQ7::TEST_RMS_Q7_15:
  352. {
  353. inputA.reload(StatsTestsQ7::INPUT1_Q7_ID,mgr,47);
  354. ref.reload(StatsTestsQ7::RMSVALS_Q7_ID,mgr);
  355. output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
  356. refOffset = 2;
  357. }
  358. break;
  359. case StatsTestsQ7::TEST_STD_Q7_16:
  360. {
  361. inputA.reload(StatsTestsQ7::INPUT1_Q7_ID,mgr,15);
  362. ref.reload(StatsTestsQ7::STDVALS_Q7_ID,mgr);
  363. output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
  364. refOffset = 0;
  365. }
  366. break;
  367. case StatsTestsQ7::TEST_STD_Q7_17:
  368. {
  369. inputA.reload(StatsTestsQ7::INPUT1_Q7_ID,mgr,32);
  370. ref.reload(StatsTestsQ7::STDVALS_Q7_ID,mgr);
  371. output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
  372. refOffset = 1;
  373. }
  374. break;
  375. case StatsTestsQ7::TEST_STD_Q7_18:
  376. {
  377. inputA.reload(StatsTestsQ7::INPUT1_Q7_ID,mgr,47);
  378. ref.reload(StatsTestsQ7::STDVALS_Q7_ID,mgr);
  379. output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
  380. refOffset = 2;
  381. }
  382. break;
  383. case StatsTestsQ7::TEST_VAR_Q7_19:
  384. {
  385. inputA.reload(StatsTestsQ7::INPUT1_Q7_ID,mgr,15);
  386. ref.reload(StatsTestsQ7::VARVALS_Q7_ID,mgr);
  387. output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
  388. refOffset = 0;
  389. }
  390. break;
  391. case StatsTestsQ7::TEST_VAR_Q7_20:
  392. {
  393. inputA.reload(StatsTestsQ7::INPUT1_Q7_ID,mgr,32);
  394. ref.reload(StatsTestsQ7::VARVALS_Q7_ID,mgr);
  395. output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
  396. refOffset = 1;
  397. }
  398. break;
  399. case StatsTestsQ7::TEST_VAR_Q7_21:
  400. {
  401. inputA.reload(StatsTestsQ7::INPUT1_Q7_ID,mgr,47);
  402. ref.reload(StatsTestsQ7::VARVALS_Q7_ID,mgr);
  403. output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
  404. refOffset = 2;
  405. }
  406. break;
  407. #endif
  408. case StatsTestsQ7::TEST_MAX_Q7_13:
  409. {
  410. inputA.reload(StatsTestsQ7::MAXINDEXMAX_Q7_ID,mgr,280);
  411. maxIndexes.reload(StatsTestsQ7::MAXINDEXES_S16_ID,mgr);
  412. ref.reload(StatsTestsQ7::MAXVALS_Q7_ID,mgr);
  413. output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
  414. index.create(1,StatsTestsQ7::OUT_S16_ID,mgr);
  415. refOffset = 3;
  416. }
  417. break;
  418. case StatsTestsQ7::TEST_MIN_Q7_14:
  419. {
  420. inputA.reload(StatsTestsQ7::MININDEXMAX_Q7_ID,mgr,280);
  421. minIndexes.reload(StatsTestsQ7::MININDEXES_S16_ID,mgr);
  422. ref.reload(StatsTestsQ7::MINVALS_Q7_ID,mgr);
  423. output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
  424. index.create(1,StatsTestsQ7::OUT_S16_ID,mgr);
  425. refOffset = 3;
  426. }
  427. break;
  428. case StatsTestsQ7::TEST_ABSMAX_Q7_15:
  429. {
  430. inputA.reload(StatsTestsQ7::INPUTNEW1_Q7_ID,mgr,15);
  431. maxIndexes.reload(StatsTestsQ7::ABSMAXINDEXES_S16_ID,mgr);
  432. ref.reload(StatsTestsQ7::ABSMAXVALS_Q7_ID,mgr);
  433. output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
  434. index.create(1,StatsTestsQ7::OUT_S16_ID,mgr);
  435. refOffset = 0;
  436. }
  437. break;
  438. case StatsTestsQ7::TEST_ABSMAX_Q7_16:
  439. {
  440. inputA.reload(StatsTestsQ7::INPUTNEW1_Q7_ID,mgr,32);
  441. maxIndexes.reload(StatsTestsQ7::ABSMAXINDEXES_S16_ID,mgr);
  442. ref.reload(StatsTestsQ7::ABSMAXVALS_Q7_ID,mgr);
  443. output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
  444. index.create(1,StatsTestsQ7::OUT_S16_ID,mgr);
  445. refOffset = 1;
  446. }
  447. break;
  448. case StatsTestsQ7::TEST_ABSMAX_Q7_17:
  449. {
  450. inputA.reload(StatsTestsQ7::INPUTNEW1_Q7_ID,mgr,47);
  451. maxIndexes.reload(StatsTestsQ7::ABSMAXINDEXES_S16_ID,mgr);
  452. ref.reload(StatsTestsQ7::ABSMAXVALS_Q7_ID,mgr);
  453. output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
  454. index.create(1,StatsTestsQ7::OUT_S16_ID,mgr);
  455. refOffset = 2;
  456. }
  457. break;
  458. case StatsTestsQ7::TEST_ABSMIN_Q7_18:
  459. {
  460. inputA.reload(StatsTestsQ7::INPUTNEW1_Q7_ID,mgr,15);
  461. minIndexes.reload(StatsTestsQ7::ABSMININDEXES_S16_ID,mgr);
  462. ref.reload(StatsTestsQ7::ABSMINVALS_Q7_ID,mgr);
  463. output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
  464. index.create(1,StatsTestsQ7::OUT_S16_ID,mgr);
  465. refOffset = 0;
  466. }
  467. break;
  468. case StatsTestsQ7::TEST_ABSMIN_Q7_19:
  469. {
  470. inputA.reload(StatsTestsQ7::INPUTNEW1_Q7_ID,mgr,32);
  471. minIndexes.reload(StatsTestsQ7::ABSMININDEXES_S16_ID,mgr);
  472. ref.reload(StatsTestsQ7::ABSMINVALS_Q7_ID,mgr);
  473. output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
  474. index.create(1,StatsTestsQ7::OUT_S16_ID,mgr);
  475. refOffset = 1;
  476. }
  477. break;
  478. case StatsTestsQ7::TEST_ABSMIN_Q7_20:
  479. {
  480. inputA.reload(StatsTestsQ7::INPUTNEW1_Q7_ID,mgr,47);
  481. minIndexes.reload(StatsTestsQ7::ABSMININDEXES_S16_ID,mgr);
  482. ref.reload(StatsTestsQ7::ABSMINVALS_Q7_ID,mgr);
  483. output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
  484. index.create(1,StatsTestsQ7::OUT_S16_ID,mgr);
  485. refOffset = 2;
  486. }
  487. break;
  488. case StatsTestsQ7::TEST_ABSMAX_Q7_21:
  489. {
  490. inputA.reload(StatsTestsQ7::ABSMAXINDEXMAX_Q7_ID,mgr,280);
  491. maxIndexes.reload(StatsTestsQ7::ABSMAXINDEXES_S16_ID,mgr);
  492. ref.reload(StatsTestsQ7::ABSMAXVALS_Q7_ID,mgr);
  493. output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
  494. index.create(1,StatsTestsQ7::OUT_S16_ID,mgr);
  495. refOffset = 3;
  496. }
  497. break;
  498. case StatsTestsQ7::TEST_ABSMIN_Q7_22:
  499. {
  500. inputA.reload(StatsTestsQ7::ABSMININDEXMAX_Q7_ID,mgr,280);
  501. minIndexes.reload(StatsTestsQ7::ABSMININDEXES_S16_ID,mgr);
  502. ref.reload(StatsTestsQ7::ABSMINVALS_Q7_ID,mgr);
  503. output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
  504. index.create(1,StatsTestsQ7::OUT_S16_ID,mgr);
  505. refOffset = 3;
  506. }
  507. break;
  508. case StatsTestsQ7::TEST_MAX_NO_IDX_Q7_23:
  509. {
  510. inputA.reload(StatsTestsQ7::INPUT1_Q7_ID,mgr,15);
  511. ref.reload(StatsTestsQ7::MAXVALS_Q7_ID,mgr);
  512. output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
  513. refOffset = 0;
  514. }
  515. break;
  516. case StatsTestsQ7::TEST_MAX_NO_IDX_Q7_24:
  517. {
  518. inputA.reload(StatsTestsQ7::INPUT1_Q7_ID,mgr,32);
  519. ref.reload(StatsTestsQ7::MAXVALS_Q7_ID,mgr);
  520. output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
  521. refOffset = 1;
  522. }
  523. break;
  524. case StatsTestsQ7::TEST_MAX_NO_IDX_Q7_25:
  525. {
  526. inputA.reload(StatsTestsQ7::INPUT1_Q7_ID,mgr,47);
  527. ref.reload(StatsTestsQ7::MAXVALS_Q7_ID,mgr);
  528. output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
  529. refOffset = 2;
  530. }
  531. break;
  532. case StatsTestsQ7::TEST_MIN_NO_IDX_Q7_26:
  533. {
  534. inputA.reload(StatsTestsQ7::INPUT1_Q7_ID,mgr,15);
  535. ref.reload(StatsTestsQ7::MINVALS_Q7_ID,mgr);
  536. output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
  537. refOffset = 0;
  538. }
  539. break;
  540. case StatsTestsQ7::TEST_MIN_NO_IDX_Q7_27:
  541. {
  542. inputA.reload(StatsTestsQ7::INPUT1_Q7_ID,mgr,32);
  543. ref.reload(StatsTestsQ7::MINVALS_Q7_ID,mgr);
  544. output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
  545. refOffset = 1;
  546. }
  547. break;
  548. case StatsTestsQ7::TEST_MIN_NO_IDX_Q7_28:
  549. {
  550. inputA.reload(StatsTestsQ7::INPUT1_Q7_ID,mgr,47);
  551. ref.reload(StatsTestsQ7::MINVALS_Q7_ID,mgr);
  552. output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
  553. refOffset = 2;
  554. }
  555. break;
  556. case StatsTestsQ7::TEST_ABSMAX_NO_IDX_Q7_29:
  557. {
  558. inputA.reload(StatsTestsQ7::INPUTNEW1_Q7_ID,mgr,15);
  559. ref.reload(StatsTestsQ7::ABSMAXVALS_Q7_ID,mgr);
  560. output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
  561. refOffset = 0;
  562. }
  563. break;
  564. case StatsTestsQ7::TEST_ABSMAX_NO_IDX_Q7_30:
  565. {
  566. inputA.reload(StatsTestsQ7::INPUTNEW1_Q7_ID,mgr,32);
  567. ref.reload(StatsTestsQ7::ABSMAXVALS_Q7_ID,mgr);
  568. output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
  569. refOffset = 1;
  570. }
  571. break;
  572. case StatsTestsQ7::TEST_ABSMAX_NO_IDX_Q7_31:
  573. {
  574. inputA.reload(StatsTestsQ7::INPUTNEW1_Q7_ID,mgr,47);
  575. ref.reload(StatsTestsQ7::ABSMAXVALS_Q7_ID,mgr);
  576. output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
  577. refOffset = 2;
  578. }
  579. break;
  580. case StatsTestsQ7::TEST_ABSMIN_NO_IDX_Q7_32:
  581. {
  582. inputA.reload(StatsTestsQ7::INPUTNEW1_Q7_ID,mgr,15);
  583. ref.reload(StatsTestsQ7::ABSMINVALS_Q7_ID,mgr);
  584. output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
  585. refOffset = 0;
  586. }
  587. break;
  588. case StatsTestsQ7::TEST_ABSMIN_NO_IDX_Q7_33:
  589. {
  590. inputA.reload(StatsTestsQ7::INPUTNEW1_Q7_ID,mgr,32);
  591. ref.reload(StatsTestsQ7::ABSMINVALS_Q7_ID,mgr);
  592. output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
  593. refOffset = 1;
  594. }
  595. break;
  596. case StatsTestsQ7::TEST_ABSMIN_NO_IDX_Q7_34:
  597. {
  598. inputA.reload(StatsTestsQ7::INPUTNEW1_Q7_ID,mgr,47);
  599. ref.reload(StatsTestsQ7::ABSMINVALS_Q7_ID,mgr);
  600. output.create(1,StatsTestsQ7::OUT_Q7_ID,mgr);
  601. refOffset = 2;
  602. }
  603. break;
  604. }
  605. }
  606. void StatsTestsQ7::tearDown(Testing::testID_t id,Client::PatternMgr *mgr)
  607. {
  608. (void)id;
  609. switch(id)
  610. {
  611. case StatsTestsQ7::TEST_MAX_Q7_1:
  612. case StatsTestsQ7::TEST_MAX_Q7_2:
  613. case StatsTestsQ7::TEST_MAX_Q7_3:
  614. case StatsTestsQ7::TEST_MIN_Q7_7:
  615. case StatsTestsQ7::TEST_MIN_Q7_8:
  616. case StatsTestsQ7::TEST_MIN_Q7_9:
  617. case StatsTestsQ7::TEST_MAX_Q7_13:
  618. case StatsTestsQ7::TEST_MIN_Q7_14:
  619. index.dump(mgr);
  620. output.dump(mgr);
  621. break;
  622. case TEST_POWER_Q7_10:
  623. case TEST_POWER_Q7_11:
  624. case TEST_POWER_Q7_12:
  625. outputPower.dump(mgr);
  626. break;
  627. default:
  628. output.dump(mgr);
  629. }
  630. }