BasicTestsQ7.cpp 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729
  1. #include "BasicTestsQ7.h"
  2. #include <stdio.h>
  3. #include "Error.h"
  4. #define SNR_THRESHOLD 20
  5. #define ABS_ERROR_Q7 ((q7_t)2)
  6. #define ABS_ERROR_Q31 ((q31_t)(1<<15))
  7. #define ONEHALF 0x40
  8. #define GET_Q7_PTR() \
  9. const q7_t *inp1=input1.ptr(); \
  10. const q7_t *inp2=input2.ptr(); \
  11. q7_t *outp=output.ptr();
  12. #define GET_LOGICAL_UINT8_PTR() \
  13. const uint8_t *inp1=inputLogical1.ptr(); \
  14. const uint8_t *inp2=inputLogical2.ptr(); \
  15. uint8_t *outp=outputLogical.ptr();
  16. void BasicTestsQ7::test_add_q7()
  17. {
  18. GET_Q7_PTR();
  19. arm_add_q7(inp1,inp2,outp,input1.nbSamples());
  20. ASSERT_EMPTY_TAIL(output);
  21. ASSERT_SNR(output,ref,(float32_t)SNR_THRESHOLD);
  22. ASSERT_NEAR_EQ(output,ref,ABS_ERROR_Q7);
  23. }
  24. void BasicTestsQ7::test_clip_q7()
  25. {
  26. const q7_t *inp=input1.ptr();
  27. q7_t *outp=output.ptr();
  28. arm_clip_q7(inp,outp,this->min, this->max,input1.nbSamples());
  29. ASSERT_EMPTY_TAIL(output);
  30. ASSERT_SNR(output,ref,(float32_t)SNR_THRESHOLD);
  31. ASSERT_NEAR_EQ(output,ref,ABS_ERROR_Q7);
  32. }
  33. void BasicTestsQ7::test_sub_q7()
  34. {
  35. GET_Q7_PTR();
  36. arm_sub_q7(inp1,inp2,outp,input1.nbSamples());
  37. ASSERT_EMPTY_TAIL(output);
  38. ASSERT_SNR(output,ref,(float32_t)SNR_THRESHOLD);
  39. ASSERT_NEAR_EQ(output,ref,ABS_ERROR_Q7);
  40. }
  41. void BasicTestsQ7::test_mult_q7()
  42. {
  43. GET_Q7_PTR();
  44. arm_mult_q7(inp1,inp2,outp,input1.nbSamples());
  45. ASSERT_EMPTY_TAIL(output);
  46. ASSERT_SNR(output,ref,(float32_t)SNR_THRESHOLD);
  47. ASSERT_NEAR_EQ(output,ref,ABS_ERROR_Q7);
  48. }
  49. /*
  50. This test is run on a very short signal (3 samples).
  51. It is too short for a good SNR estimation.
  52. So, SNR is artificially decreased a little just for this test.
  53. */
  54. void BasicTestsQ7::test_mult_short_q7()
  55. {
  56. GET_Q7_PTR();
  57. arm_mult_q7(inp1,inp2,outp,input1.nbSamples());
  58. ASSERT_EMPTY_TAIL(output);
  59. ASSERT_SNR(output,ref,(float32_t)SNR_THRESHOLD - 1.0f);
  60. ASSERT_NEAR_EQ(output,ref,ABS_ERROR_Q7);
  61. }
  62. void BasicTestsQ7::test_negate_q7()
  63. {
  64. const q7_t *inp1=input1.ptr();
  65. q7_t *outp=output.ptr();
  66. arm_negate_q7(inp1,outp,input1.nbSamples());
  67. ASSERT_EMPTY_TAIL(output);
  68. ASSERT_SNR(output,ref,(float32_t)SNR_THRESHOLD);
  69. ASSERT_NEAR_EQ(output,ref,ABS_ERROR_Q7);
  70. }
  71. void BasicTestsQ7::test_offset_q7()
  72. {
  73. const q7_t *inp1=input1.ptr();
  74. q7_t *outp=output.ptr();
  75. arm_offset_q7(inp1,this->scalar,outp,input1.nbSamples());
  76. ASSERT_EMPTY_TAIL(output);
  77. ASSERT_SNR(output,ref,(float32_t)SNR_THRESHOLD);
  78. ASSERT_NEAR_EQ(output,ref,ABS_ERROR_Q7);
  79. }
  80. void BasicTestsQ7::test_scale_q7()
  81. {
  82. const q7_t *inp1=input1.ptr();
  83. q7_t *outp=output.ptr();
  84. arm_scale_q7(inp1,this->scalar,0,outp,input1.nbSamples());
  85. ASSERT_EMPTY_TAIL(output);
  86. ASSERT_SNR(output,ref,(float32_t)SNR_THRESHOLD);
  87. ASSERT_NEAR_EQ(output,ref,ABS_ERROR_Q7);
  88. }
  89. void BasicTestsQ7::test_dot_prod_q7()
  90. {
  91. q31_t r;
  92. const q7_t *inp1=input1.ptr();
  93. const q7_t *inp2=input2.ptr();
  94. q31_t *outp=dotOutput.ptr();
  95. arm_dot_prod_q7(inp1,inp2,input1.nbSamples(),&r);
  96. outp[0] = r;
  97. ASSERT_SNR(dotOutput,dotRef,(float32_t)SNR_THRESHOLD);
  98. ASSERT_NEAR_EQ(dotOutput,dotRef,ABS_ERROR_Q31);
  99. ASSERT_EMPTY_TAIL(dotOutput);
  100. }
  101. void BasicTestsQ7::test_abs_q7()
  102. {
  103. GET_Q7_PTR();
  104. (void)inp2;
  105. arm_abs_q7(inp1,outp,input1.nbSamples());
  106. ASSERT_EMPTY_TAIL(output);
  107. ASSERT_SNR(output,ref,(float32_t)SNR_THRESHOLD);
  108. ASSERT_NEAR_EQ(output,ref,ABS_ERROR_Q7);
  109. }
  110. void BasicTestsQ7::test_shift_q7()
  111. {
  112. const q7_t *inp1=input1.ptr();
  113. q7_t *outp=output.ptr();
  114. arm_shift_q7(inp1,1,outp,input1.nbSamples());
  115. ASSERT_EMPTY_TAIL(output);
  116. ASSERT_SNR(output,ref,(float32_t)SNR_THRESHOLD);
  117. ASSERT_NEAR_EQ(output,ref,ABS_ERROR_Q7);
  118. }
  119. void BasicTestsQ7::test_and_u8()
  120. {
  121. GET_LOGICAL_UINT8_PTR();
  122. arm_and_u8(inp1,inp2,outp,inputLogical1.nbSamples());
  123. ASSERT_EMPTY_TAIL(outputLogical);
  124. ASSERT_EQ(outputLogical, refLogical);
  125. }
  126. void BasicTestsQ7::test_or_u8()
  127. {
  128. GET_LOGICAL_UINT8_PTR();
  129. arm_or_u8(inp1,inp2,outp,inputLogical1.nbSamples());
  130. ASSERT_EMPTY_TAIL(outputLogical);
  131. ASSERT_EQ(outputLogical, refLogical);
  132. }
  133. void BasicTestsQ7::test_not_u8()
  134. {
  135. GET_LOGICAL_UINT8_PTR();
  136. (void)inp2;
  137. arm_not_u8(inp1,outp,inputLogical1.nbSamples());
  138. ASSERT_EMPTY_TAIL(outputLogical);
  139. ASSERT_EQ(outputLogical, refLogical);
  140. }
  141. void BasicTestsQ7::test_xor_u8()
  142. {
  143. GET_LOGICAL_UINT8_PTR();
  144. arm_xor_u8(inp1,inp2,outp,inputLogical1.nbSamples());
  145. ASSERT_EMPTY_TAIL(outputLogical);
  146. ASSERT_EQ(outputLogical, refLogical);
  147. }
  148. void BasicTestsQ7::setUp(Testing::testID_t id,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr)
  149. {
  150. Testing::nbSamples_t nb=MAX_NB_SAMPLES;
  151. this->scalar = ONEHALF;
  152. (void)params;
  153. switch(id)
  154. {
  155. case BasicTestsQ7::TEST_ADD_Q7_1:
  156. nb = 15;
  157. ref.reload(BasicTestsQ7::REF_ADD_Q7_ID,mgr,nb);
  158. output.create(ref.nbSamples(),BasicTestsQ7::OUT_SAMPLES_ID,mgr);
  159. input1.reload(BasicTestsQ7::INPUT1_Q7_ID,mgr,nb);
  160. input2.reload(BasicTestsQ7::INPUT2_Q7_ID,mgr,nb);
  161. break;
  162. case BasicTestsQ7::TEST_ADD_Q7_2:
  163. nb = 32;
  164. ref.reload(BasicTestsQ7::REF_ADD_Q7_ID,mgr,nb);
  165. output.create(ref.nbSamples(),BasicTestsQ7::OUT_SAMPLES_ID,mgr);
  166. input1.reload(BasicTestsQ7::INPUT1_Q7_ID,mgr,nb);
  167. input2.reload(BasicTestsQ7::INPUT2_Q7_ID,mgr,nb);
  168. break;
  169. case BasicTestsQ7::TEST_ADD_Q7_3:
  170. nb = 47;
  171. ref.reload(BasicTestsQ7::REF_ADD_Q7_ID,mgr,nb);
  172. output.create(ref.nbSamples(),BasicTestsQ7::OUT_SAMPLES_ID,mgr);
  173. input1.reload(BasicTestsQ7::INPUT1_Q7_ID,mgr,nb);
  174. input2.reload(BasicTestsQ7::INPUT2_Q7_ID,mgr,nb);
  175. break;
  176. case BasicTestsQ7::TEST_SUB_Q7_4:
  177. nb = 15;
  178. ref.reload(BasicTestsQ7::REF_SUB_Q7_ID,mgr,nb);
  179. output.create(ref.nbSamples(),BasicTestsQ7::OUT_SAMPLES_ID,mgr);
  180. input1.reload(BasicTestsQ7::INPUT1_Q7_ID,mgr,nb);
  181. input2.reload(BasicTestsQ7::INPUT2_Q7_ID,mgr,nb);
  182. break;
  183. case BasicTestsQ7::TEST_SUB_Q7_5:
  184. nb = 32;
  185. ref.reload(BasicTestsQ7::REF_SUB_Q7_ID,mgr,nb);
  186. output.create(ref.nbSamples(),BasicTestsQ7::OUT_SAMPLES_ID,mgr);
  187. input1.reload(BasicTestsQ7::INPUT1_Q7_ID,mgr,nb);
  188. input2.reload(BasicTestsQ7::INPUT2_Q7_ID,mgr,nb);
  189. break;
  190. case BasicTestsQ7::TEST_SUB_Q7_6:
  191. nb = 47;
  192. ref.reload(BasicTestsQ7::REF_SUB_Q7_ID,mgr,nb);
  193. output.create(ref.nbSamples(),BasicTestsQ7::OUT_SAMPLES_ID,mgr);
  194. input1.reload(BasicTestsQ7::INPUT1_Q7_ID,mgr,nb);
  195. input2.reload(BasicTestsQ7::INPUT2_Q7_ID,mgr,nb);
  196. break;
  197. case BasicTestsQ7::TEST_MULT_SHORT_Q7_7:
  198. nb = 15;
  199. ref.reload(BasicTestsQ7::REF_MULT_Q7_ID,mgr,nb);
  200. output.create(ref.nbSamples(),BasicTestsQ7::OUT_SAMPLES_ID,mgr);
  201. input1.reload(BasicTestsQ7::INPUT1_Q7_ID,mgr,nb);
  202. input2.reload(BasicTestsQ7::INPUT2_Q7_ID,mgr,nb);
  203. break;
  204. case BasicTestsQ7::TEST_MULT_Q7_8:
  205. nb = 32;
  206. ref.reload(BasicTestsQ7::REF_MULT_Q7_ID,mgr,nb);
  207. output.create(ref.nbSamples(),BasicTestsQ7::OUT_SAMPLES_ID,mgr);
  208. input1.reload(BasicTestsQ7::INPUT1_Q7_ID,mgr,nb);
  209. input2.reload(BasicTestsQ7::INPUT2_Q7_ID,mgr,nb);
  210. break;
  211. case BasicTestsQ7::TEST_MULT_Q7_9:
  212. nb = 47;
  213. ref.reload(BasicTestsQ7::REF_MULT_Q7_ID,mgr,nb);
  214. output.create(ref.nbSamples(),BasicTestsQ7::OUT_SAMPLES_ID,mgr);
  215. input1.reload(BasicTestsQ7::INPUT1_Q7_ID,mgr,nb);
  216. input2.reload(BasicTestsQ7::INPUT2_Q7_ID,mgr,nb);
  217. break;
  218. case BasicTestsQ7::TEST_NEGATE_Q7_10:
  219. nb = 15;
  220. ref.reload(BasicTestsQ7::REF_NEGATE_Q7_ID,mgr,nb);
  221. output.create(ref.nbSamples(),BasicTestsQ7::OUT_SAMPLES_ID,mgr);
  222. input1.reload(BasicTestsQ7::INPUT1_Q7_ID,mgr,nb);
  223. break;
  224. case BasicTestsQ7::TEST_NEGATE_Q7_11:
  225. nb = 32;
  226. ref.reload(BasicTestsQ7::REF_NEGATE_Q7_ID,mgr,nb);
  227. output.create(ref.nbSamples(),BasicTestsQ7::OUT_SAMPLES_ID,mgr);
  228. input1.reload(BasicTestsQ7::INPUT1_Q7_ID,mgr,nb);
  229. break;
  230. case BasicTestsQ7::TEST_NEGATE_Q7_12:
  231. nb = 47;
  232. ref.reload(BasicTestsQ7::REF_NEGATE_Q7_ID,mgr,nb);
  233. output.create(ref.nbSamples(),BasicTestsQ7::OUT_SAMPLES_ID,mgr);
  234. input1.reload(BasicTestsQ7::INPUT1_Q7_ID,mgr,nb);
  235. break;
  236. case BasicTestsQ7::TEST_OFFSET_Q7_13:
  237. nb = 15;
  238. ref.reload(BasicTestsQ7::REF_OFFSET_Q7_ID,mgr,nb);
  239. output.create(ref.nbSamples(),BasicTestsQ7::OUT_SAMPLES_ID,mgr);
  240. input1.reload(BasicTestsQ7::INPUT1_Q7_ID,mgr,nb);
  241. break;
  242. case BasicTestsQ7::TEST_OFFSET_Q7_14:
  243. nb = 32;
  244. ref.reload(BasicTestsQ7::REF_OFFSET_Q7_ID,mgr,nb);
  245. output.create(ref.nbSamples(),BasicTestsQ7::OUT_SAMPLES_ID,mgr);
  246. input1.reload(BasicTestsQ7::INPUT1_Q7_ID,mgr,nb);
  247. break;
  248. case BasicTestsQ7::TEST_OFFSET_Q7_15:
  249. nb = 47;
  250. ref.reload(BasicTestsQ7::REF_OFFSET_Q7_ID,mgr,nb);
  251. output.create(ref.nbSamples(),BasicTestsQ7::OUT_SAMPLES_ID,mgr);
  252. input1.reload(BasicTestsQ7::INPUT1_Q7_ID,mgr,nb);
  253. break;
  254. case BasicTestsQ7::TEST_SCALE_Q7_16:
  255. nb = 15;
  256. ref.reload(BasicTestsQ7::REF_SCALE_Q7_ID,mgr,nb);
  257. output.create(ref.nbSamples(),BasicTestsQ7::OUT_SAMPLES_ID,mgr);
  258. input1.reload(BasicTestsQ7::INPUT1_Q7_ID,mgr,nb);
  259. break;
  260. case BasicTestsQ7::TEST_SCALE_Q7_17:
  261. nb = 32;
  262. ref.reload(BasicTestsQ7::REF_SCALE_Q7_ID,mgr,nb);
  263. output.create(ref.nbSamples(),BasicTestsQ7::OUT_SAMPLES_ID,mgr);
  264. input1.reload(BasicTestsQ7::INPUT1_Q7_ID,mgr,nb);
  265. break;
  266. case BasicTestsQ7::TEST_SCALE_Q7_18:
  267. nb = 47;
  268. ref.reload(BasicTestsQ7::REF_SCALE_Q7_ID,mgr,nb);
  269. output.create(ref.nbSamples(),BasicTestsQ7::OUT_SAMPLES_ID,mgr);
  270. input1.reload(BasicTestsQ7::INPUT1_Q7_ID,mgr,nb);
  271. break;
  272. case BasicTestsQ7::TEST_DOT_PROD_Q7_19:
  273. nb = 15;
  274. dotRef.reload(BasicTestsQ7::REF_DOT_3_Q7_ID,mgr);
  275. dotOutput.create(dotRef.nbSamples(),BasicTestsQ7::OUT_SAMPLES_ID,mgr);
  276. input1.reload(BasicTestsQ7::INPUT1_Q7_ID,mgr,nb);
  277. input2.reload(BasicTestsQ7::INPUT2_Q7_ID,mgr,nb);
  278. break;
  279. case BasicTestsQ7::TEST_DOT_PROD_Q7_20:
  280. nb = 32;
  281. dotRef.reload(BasicTestsQ7::REF_DOT_4N_Q7_ID,mgr);
  282. dotOutput.create(dotRef.nbSamples(),BasicTestsQ7::OUT_SAMPLES_ID,mgr);
  283. input1.reload(BasicTestsQ7::INPUT1_Q7_ID,mgr,nb);
  284. input2.reload(BasicTestsQ7::INPUT2_Q7_ID,mgr,nb);
  285. break;
  286. case BasicTestsQ7::TEST_DOT_PROD_Q7_21:
  287. nb = 47;
  288. dotRef.reload(BasicTestsQ7::REF_DOT_4N1_Q7_ID,mgr);
  289. dotOutput.create(dotRef.nbSamples(),BasicTestsQ7::OUT_SAMPLES_ID,mgr);
  290. input1.reload(BasicTestsQ7::INPUT1_Q7_ID,mgr,nb);
  291. input2.reload(BasicTestsQ7::INPUT2_Q7_ID,mgr,nb);
  292. break;
  293. case BasicTestsQ7::TEST_ABS_Q7_22:
  294. nb = 15;
  295. ref.reload(BasicTestsQ7::REF_ABS_Q7_ID,mgr,nb);
  296. output.create(ref.nbSamples(),BasicTestsQ7::OUT_SAMPLES_ID,mgr);
  297. input1.reload(BasicTestsQ7::INPUT1_Q7_ID,mgr,nb);
  298. input2.reload(BasicTestsQ7::INPUT2_Q7_ID,mgr,nb);
  299. break;
  300. case BasicTestsQ7::TEST_ABS_Q7_23:
  301. nb = 32;
  302. ref.reload(BasicTestsQ7::REF_ABS_Q7_ID,mgr,nb);
  303. output.create(ref.nbSamples(),BasicTestsQ7::OUT_SAMPLES_ID,mgr);
  304. input1.reload(BasicTestsQ7::INPUT1_Q7_ID,mgr,nb);
  305. input2.reload(BasicTestsQ7::INPUT2_Q7_ID,mgr,nb);
  306. break;
  307. case BasicTestsQ7::TEST_ABS_Q7_24:
  308. nb = 47;
  309. ref.reload(BasicTestsQ7::REF_ABS_Q7_ID,mgr,nb);
  310. output.create(ref.nbSamples(),BasicTestsQ7::OUT_SAMPLES_ID,mgr);
  311. input1.reload(BasicTestsQ7::INPUT1_Q7_ID,mgr,nb);
  312. input2.reload(BasicTestsQ7::INPUT2_Q7_ID,mgr,nb);
  313. break;
  314. case BasicTestsQ7::TEST_ADD_Q7_25:
  315. input1.reload(BasicTestsQ7::MAXPOS_Q7_ID,mgr);
  316. input2.reload(BasicTestsQ7::MAXPOS_Q7_ID,mgr);
  317. ref.reload(BasicTestsQ7::REF_POSSAT_12_Q7_ID,mgr);
  318. output.create(ref.nbSamples(),BasicTestsQ7::OUT_SAMPLES_ID,mgr);
  319. break;
  320. case BasicTestsQ7::TEST_ADD_Q7_26:
  321. input1.reload(BasicTestsQ7::MAXNEG_Q7_ID,mgr);
  322. input2.reload(BasicTestsQ7::MAXNEG_Q7_ID,mgr);
  323. ref.reload(BasicTestsQ7::REF_NEGSAT_13_Q7_ID,mgr);
  324. output.create(ref.nbSamples(),BasicTestsQ7::OUT_SAMPLES_ID,mgr);
  325. break;
  326. case BasicTestsQ7::TEST_SUB_Q7_27:
  327. ref.reload(BasicTestsQ7::REF_POSSAT_14_Q7_ID,mgr);
  328. output.create(ref.nbSamples(),BasicTestsQ7::OUT_SAMPLES_ID,mgr);
  329. input1.reload(BasicTestsQ7::MAXPOS_Q7_ID,mgr);
  330. input2.reload(BasicTestsQ7::MAXNEG_Q7_ID,mgr);
  331. break;
  332. case BasicTestsQ7::TEST_SUB_Q7_28:
  333. ref.reload(BasicTestsQ7::REF_NEGSAT_15_Q7_ID,mgr);
  334. output.create(ref.nbSamples(),BasicTestsQ7::OUT_SAMPLES_ID,mgr);
  335. input1.reload(BasicTestsQ7::MAXNEG_Q7_ID,mgr);
  336. input2.reload(BasicTestsQ7::MAXPOS_Q7_ID,mgr);
  337. break;
  338. case BasicTestsQ7::TEST_MULT_Q7_29:
  339. ref.reload(BasicTestsQ7::REF_POSSAT_16_Q7_ID,mgr);
  340. output.create(ref.nbSamples(),BasicTestsQ7::OUT_SAMPLES_ID,mgr);
  341. input1.reload(BasicTestsQ7::MAXNEG2_Q7_ID,mgr);
  342. input2.reload(BasicTestsQ7::MAXNEG2_Q7_ID,mgr);
  343. break;
  344. case BasicTestsQ7::TEST_NEGATE_Q7_30:
  345. ref.reload(BasicTestsQ7::REF_POSSAT_17_Q7_ID,mgr);
  346. output.create(ref.nbSamples(),BasicTestsQ7::OUT_SAMPLES_ID,mgr);
  347. input1.reload(BasicTestsQ7::MAXNEG2_Q7_ID,mgr);
  348. break;
  349. case BasicTestsQ7::TEST_OFFSET_Q7_31:
  350. ref.reload(BasicTestsQ7::REF_POSSAT_18_Q7_ID,mgr);
  351. output.create(ref.nbSamples(),BasicTestsQ7::OUT_SAMPLES_ID,mgr);
  352. input1.reload(BasicTestsQ7::MAXPOS_Q7_ID,mgr);
  353. /* 0.9 */
  354. this->scalar = 0x73;
  355. break;
  356. case BasicTestsQ7::TEST_OFFSET_Q7_32:
  357. ref.reload(BasicTestsQ7::REF_NEGSAT_19_Q7_ID,mgr);
  358. output.create(ref.nbSamples(),BasicTestsQ7::OUT_SAMPLES_ID,mgr);
  359. input1.reload(BasicTestsQ7::MAXNEG_Q7_ID,mgr);
  360. /* -0.9 */
  361. this->scalar = 0x8d;
  362. break;
  363. case BasicTestsQ7::TEST_SCALE_Q7_33:
  364. ref.reload(BasicTestsQ7::REF_POSSAT_20_Q7_ID,mgr);
  365. output.create(ref.nbSamples(),BasicTestsQ7::OUT_SAMPLES_ID,mgr);
  366. input1.reload(BasicTestsQ7::MAXNEG2_Q7_ID,mgr);
  367. /* Minus max*/
  368. this->scalar = 0x80;
  369. break;
  370. case BasicTestsQ7::TEST_SHIFT_Q7_34:
  371. ref.reload(BasicTestsQ7::REF_SHIFT_21_Q7_ID,mgr);
  372. output.create(ref.nbSamples(),BasicTestsQ7::OUT_SAMPLES_ID,mgr);
  373. input1.reload(BasicTestsQ7::INPUTRAND_Q7_ID,mgr);
  374. break;
  375. case BasicTestsQ7::TEST_SHIFT_Q7_35:
  376. ref.reload(BasicTestsQ7::REF_SHIFT_POSSAT_22_Q7_ID,mgr);
  377. output.create(ref.nbSamples(),BasicTestsQ7::OUT_SAMPLES_ID,mgr);
  378. input1.reload(BasicTestsQ7::MAXPOS_Q7_ID,mgr);
  379. break;
  380. case BasicTestsQ7::TEST_SHIFT_Q7_36:
  381. ref.reload(BasicTestsQ7::REF_SHIFT_NEGSAT_23_Q7_ID,mgr);
  382. output.create(ref.nbSamples(),BasicTestsQ7::OUT_SAMPLES_ID,mgr);
  383. input1.reload(BasicTestsQ7::MAXNEG_Q7_ID,mgr);
  384. break;
  385. case BasicTestsQ7::TEST_AND_U8_37:
  386. nb = 15;
  387. refLogical.reload(BasicTestsQ7::REF_AND_Q7_ID,mgr,nb);
  388. outputLogical.create(refLogical.nbSamples(),BasicTestsQ7::OUT_SAMPLES_ID,mgr);
  389. inputLogical1.reload(BasicTestsQ7::INPUT1_BITWISE_Q7_ID,mgr,nb);
  390. inputLogical2.reload(BasicTestsQ7::INPUT2_BITWISE_Q7_ID,mgr,nb);
  391. break;
  392. case BasicTestsQ7::TEST_AND_U8_38:
  393. nb = 32;
  394. refLogical.reload(BasicTestsQ7::REF_AND_Q7_ID,mgr,nb);
  395. outputLogical.create(refLogical.nbSamples(),BasicTestsQ7::OUT_SAMPLES_ID,mgr);
  396. inputLogical1.reload(BasicTestsQ7::INPUT1_BITWISE_Q7_ID,mgr,nb);
  397. inputLogical2.reload(BasicTestsQ7::INPUT2_BITWISE_Q7_ID,mgr,nb);
  398. break;
  399. case BasicTestsQ7::TEST_AND_U8_39:
  400. nb = 47;
  401. refLogical.reload(BasicTestsQ7::REF_AND_Q7_ID,mgr,nb);
  402. outputLogical.create(refLogical.nbSamples(),BasicTestsQ7::OUT_SAMPLES_ID,mgr);
  403. inputLogical1.reload(BasicTestsQ7::INPUT1_BITWISE_Q7_ID,mgr,nb);
  404. inputLogical2.reload(BasicTestsQ7::INPUT2_BITWISE_Q7_ID,mgr,nb);
  405. break;
  406. case BasicTestsQ7::TEST_OR_U8_40:
  407. nb = 15;
  408. refLogical.reload(BasicTestsQ7::REF_OR_Q7_ID,mgr,nb);
  409. outputLogical.create(refLogical.nbSamples(),BasicTestsQ7::OUT_SAMPLES_ID,mgr);
  410. inputLogical1.reload(BasicTestsQ7::INPUT1_BITWISE_Q7_ID,mgr,nb);
  411. inputLogical2.reload(BasicTestsQ7::INPUT2_BITWISE_Q7_ID,mgr,nb);
  412. break;
  413. case BasicTestsQ7::TEST_OR_U8_41:
  414. nb = 32;
  415. refLogical.reload(BasicTestsQ7::REF_OR_Q7_ID,mgr,nb);
  416. outputLogical.create(refLogical.nbSamples(),BasicTestsQ7::OUT_SAMPLES_ID,mgr);
  417. inputLogical1.reload(BasicTestsQ7::INPUT1_BITWISE_Q7_ID,mgr,nb);
  418. inputLogical2.reload(BasicTestsQ7::INPUT2_BITWISE_Q7_ID,mgr,nb);
  419. break;
  420. case BasicTestsQ7::TEST_OR_U8_42:
  421. nb = 47;
  422. refLogical.reload(BasicTestsQ7::REF_OR_Q7_ID,mgr,nb);
  423. outputLogical.create(refLogical.nbSamples(),BasicTestsQ7::OUT_SAMPLES_ID,mgr);
  424. inputLogical1.reload(BasicTestsQ7::INPUT1_BITWISE_Q7_ID,mgr,nb);
  425. inputLogical2.reload(BasicTestsQ7::INPUT2_BITWISE_Q7_ID,mgr,nb);
  426. break;
  427. case BasicTestsQ7::TEST_NOT_U8_43:
  428. nb = 15;
  429. refLogical.reload(BasicTestsQ7::REF_NOT_Q7_ID,mgr,nb);
  430. outputLogical.create(refLogical.nbSamples(),BasicTestsQ7::OUT_SAMPLES_ID,mgr);
  431. inputLogical1.reload(BasicTestsQ7::INPUT1_BITWISE_Q7_ID,mgr,nb);
  432. inputLogical2.reload(BasicTestsQ7::INPUT2_BITWISE_Q7_ID,mgr,nb);
  433. break;
  434. case BasicTestsQ7::TEST_NOT_U8_44:
  435. nb = 32;
  436. refLogical.reload(BasicTestsQ7::REF_NOT_Q7_ID,mgr,nb);
  437. outputLogical.create(refLogical.nbSamples(),BasicTestsQ7::OUT_SAMPLES_ID,mgr);
  438. inputLogical1.reload(BasicTestsQ7::INPUT1_BITWISE_Q7_ID,mgr,nb);
  439. inputLogical2.reload(BasicTestsQ7::INPUT2_BITWISE_Q7_ID,mgr,nb);
  440. break;
  441. case BasicTestsQ7::TEST_NOT_U8_45:
  442. nb = 47;
  443. refLogical.reload(BasicTestsQ7::REF_NOT_Q7_ID,mgr,nb);
  444. outputLogical.create(refLogical.nbSamples(),BasicTestsQ7::OUT_SAMPLES_ID,mgr);
  445. inputLogical1.reload(BasicTestsQ7::INPUT1_BITWISE_Q7_ID,mgr,nb);
  446. inputLogical2.reload(BasicTestsQ7::INPUT2_BITWISE_Q7_ID,mgr,nb);
  447. break;
  448. case BasicTestsQ7::TEST_XOR_U8_46:
  449. nb = 15;
  450. refLogical.reload(BasicTestsQ7::REF_XOR_Q7_ID,mgr,nb);
  451. outputLogical.create(refLogical.nbSamples(),BasicTestsQ7::OUT_SAMPLES_ID,mgr);
  452. inputLogical1.reload(BasicTestsQ7::INPUT1_BITWISE_Q7_ID,mgr,nb);
  453. inputLogical2.reload(BasicTestsQ7::INPUT2_BITWISE_Q7_ID,mgr,nb);
  454. break;
  455. case BasicTestsQ7::TEST_XOR_U8_47:
  456. nb = 32;
  457. refLogical.reload(BasicTestsQ7::REF_XOR_Q7_ID,mgr,nb);
  458. outputLogical.create(refLogical.nbSamples(),BasicTestsQ7::OUT_SAMPLES_ID,mgr);
  459. inputLogical1.reload(BasicTestsQ7::INPUT1_BITWISE_Q7_ID,mgr,nb);
  460. inputLogical2.reload(BasicTestsQ7::INPUT2_BITWISE_Q7_ID,mgr,nb);
  461. break;
  462. case BasicTestsQ7::TEST_XOR_U8_48:
  463. nb = 47;
  464. refLogical.reload(BasicTestsQ7::REF_XOR_Q7_ID,mgr,nb);
  465. outputLogical.create(refLogical.nbSamples(),BasicTestsQ7::OUT_SAMPLES_ID,mgr);
  466. inputLogical1.reload(BasicTestsQ7::INPUT1_BITWISE_Q7_ID,mgr,nb);
  467. inputLogical2.reload(BasicTestsQ7::INPUT2_BITWISE_Q7_ID,mgr,nb);
  468. break;
  469. case BasicTestsQ7::TEST_ADD_Q7_49:
  470. ref.reload(BasicTestsQ7::REF_ADD_Q7_ID,mgr,nb);
  471. output.create(ref.nbSamples(),BasicTestsQ7::OUT_SAMPLES_ID,mgr);
  472. input1.reload(BasicTestsQ7::INPUT1_Q7_ID,mgr,nb);
  473. input2.reload(BasicTestsQ7::INPUT2_Q7_ID,mgr,nb);
  474. break;
  475. case BasicTestsQ7::TEST_SUB_Q7_50:
  476. ref.reload(BasicTestsQ7::REF_SUB_Q7_ID,mgr,nb);
  477. output.create(ref.nbSamples(),BasicTestsQ7::OUT_SAMPLES_ID,mgr);
  478. input1.reload(BasicTestsQ7::INPUT1_Q7_ID,mgr,nb);
  479. input2.reload(BasicTestsQ7::INPUT2_Q7_ID,mgr,nb);
  480. break;
  481. case BasicTestsQ7::TEST_MULT_Q7_51:
  482. ref.reload(BasicTestsQ7::REF_MULT_Q7_ID,mgr,nb);
  483. output.create(ref.nbSamples(),BasicTestsQ7::OUT_SAMPLES_ID,mgr);
  484. input1.reload(BasicTestsQ7::INPUT1_Q7_ID,mgr,nb);
  485. input2.reload(BasicTestsQ7::INPUT2_Q7_ID,mgr,nb);
  486. break;
  487. case BasicTestsQ7::TEST_NEGATE_Q7_52:
  488. ref.reload(BasicTestsQ7::REF_NEGATE_Q7_ID,mgr,nb);
  489. output.create(ref.nbSamples(),BasicTestsQ7::OUT_SAMPLES_ID,mgr);
  490. input1.reload(BasicTestsQ7::INPUT1_Q7_ID,mgr,nb);
  491. break;
  492. case BasicTestsQ7::TEST_OFFSET_Q7_53:
  493. ref.reload(BasicTestsQ7::REF_OFFSET_Q7_ID,mgr,nb);
  494. output.create(ref.nbSamples(),BasicTestsQ7::OUT_SAMPLES_ID,mgr);
  495. input1.reload(BasicTestsQ7::INPUT1_Q7_ID,mgr,nb);
  496. break;
  497. case BasicTestsQ7::TEST_SCALE_Q7_54:
  498. ref.reload(BasicTestsQ7::REF_SCALE_Q7_ID,mgr,nb);
  499. output.create(ref.nbSamples(),BasicTestsQ7::OUT_SAMPLES_ID,mgr);
  500. input1.reload(BasicTestsQ7::INPUT1_Q7_ID,mgr,nb);
  501. break;
  502. case BasicTestsQ7::TEST_DOT_PROD_Q7_55:
  503. dotRef.reload(BasicTestsQ7::REF_DOT_LONG_Q7_ID,mgr);
  504. dotOutput.create(dotRef.nbSamples(),BasicTestsQ7::OUT_SAMPLES_ID,mgr);
  505. input1.reload(BasicTestsQ7::INPUT1_Q7_ID,mgr,nb);
  506. input2.reload(BasicTestsQ7::INPUT2_Q7_ID,mgr,nb);
  507. break;
  508. case BasicTestsQ7::TEST_ABS_Q7_56:
  509. ref.reload(BasicTestsQ7::REF_ABS_Q7_ID,mgr,nb);
  510. output.create(ref.nbSamples(),BasicTestsQ7::OUT_SAMPLES_ID,mgr);
  511. input1.reload(BasicTestsQ7::INPUT1_Q7_ID,mgr,nb);
  512. input2.reload(BasicTestsQ7::INPUT2_Q7_ID,mgr,nb);
  513. break;
  514. case BasicTestsQ7::TEST_CLIP_Q7_57:
  515. ref.reload(BasicTestsQ7::REF_CLIP1_Q7_ID,mgr);
  516. input1.reload(BasicTestsQ7::INPUT_CLIP_Q7_ID,mgr,ref.nbSamples());
  517. output.create(ref.nbSamples(),BasicTestsQ7::OUT_SAMPLES_ID,mgr);
  518. // Must be coherent with Python script used to generate test patterns
  519. this->min=0xC0;
  520. this->max=0xF3;
  521. break;
  522. case BasicTestsQ7::TEST_CLIP_Q7_58:
  523. ref.reload(BasicTestsQ7::REF_CLIP2_Q7_ID,mgr);
  524. input1.reload(BasicTestsQ7::INPUT_CLIP_Q7_ID,mgr,ref.nbSamples());
  525. output.create(ref.nbSamples(),BasicTestsQ7::OUT_SAMPLES_ID,mgr);
  526. // Must be coherent with Python script used to generate test patterns
  527. this->min=0xC0;
  528. this->max=0x40;
  529. break;
  530. case BasicTestsQ7::TEST_CLIP_Q7_59:
  531. ref.reload(BasicTestsQ7::REF_CLIP3_Q7_ID,mgr);
  532. input1.reload(BasicTestsQ7::INPUT_CLIP_Q7_ID,mgr,ref.nbSamples());
  533. output.create(ref.nbSamples(),BasicTestsQ7::OUT_SAMPLES_ID,mgr);
  534. // Must be coherent with Python script used to generate test patterns
  535. this->min=0x0D;
  536. this->max=0x40;
  537. break;
  538. }
  539. }
  540. void BasicTestsQ7::tearDown(Testing::testID_t id,Client::PatternMgr *mgr)
  541. {
  542. switch(id)
  543. {
  544. case BasicTestsQ7::TEST_DOT_PROD_Q7_19:
  545. case BasicTestsQ7::TEST_DOT_PROD_Q7_20:
  546. case BasicTestsQ7::TEST_DOT_PROD_Q7_21:
  547. case BasicTestsQ7::TEST_DOT_PROD_Q7_55:
  548. dotOutput.dump(mgr);
  549. break;
  550. case BasicTestsQ7::TEST_AND_U8_37:
  551. case BasicTestsQ7::TEST_AND_U8_38:
  552. case BasicTestsQ7::TEST_AND_U8_39:
  553. case BasicTestsQ7::TEST_OR_U8_40:
  554. case BasicTestsQ7::TEST_OR_U8_41:
  555. case BasicTestsQ7::TEST_OR_U8_42:
  556. case BasicTestsQ7::TEST_NOT_U8_43:
  557. case BasicTestsQ7::TEST_NOT_U8_44:
  558. case BasicTestsQ7::TEST_NOT_U8_45:
  559. case BasicTestsQ7::TEST_XOR_U8_46:
  560. case BasicTestsQ7::TEST_XOR_U8_47:
  561. case BasicTestsQ7::TEST_XOR_U8_48:
  562. outputLogical.dump(mgr);
  563. break;
  564. default:
  565. output.dump(mgr);
  566. }
  567. }