StatsTestsQ7.cpp 27 KB

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