BasicTestsQ31.cpp 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711
  1. #include "BasicTestsQ31.h"
  2. #include <stdio.h>
  3. #include "Error.h"
  4. #define SNR_THRESHOLD 100
  5. /*
  6. Reference patterns are generated with
  7. a double precision computation.
  8. */
  9. #define ABS_ERROR_Q31 ((q31_t)4)
  10. #define ABS_ERROR_Q63 ((q63_t)(1<<17))
  11. #define ONEHALF 0x40000000
  12. #define GET_Q31_PTR() \
  13. const q31_t *inp1=input1.ptr(); \
  14. const q31_t *inp2=input2.ptr(); \
  15. q31_t *outp=output.ptr();
  16. #define GET_LOGICAL_UINT32_PTR() \
  17. const uint32_t *inp1=inputLogical1.ptr(); \
  18. const uint32_t *inp2=inputLogical2.ptr(); \
  19. uint32_t *outp=outputLogical.ptr();
  20. void BasicTestsQ31::test_add_q31()
  21. {
  22. GET_Q31_PTR();
  23. arm_add_q31(inp1,inp2,outp,input1.nbSamples());
  24. ASSERT_EMPTY_TAIL(output);
  25. ASSERT_SNR(output,ref,(float32_t)SNR_THRESHOLD);
  26. ASSERT_NEAR_EQ(output,ref,ABS_ERROR_Q31);
  27. }
  28. void BasicTestsQ31::test_clip_q31()
  29. {
  30. const q31_t *inp=input1.ptr();
  31. q31_t *outp=output.ptr();
  32. arm_clip_q31(inp,outp,this->min, this->max,input1.nbSamples());
  33. ASSERT_EMPTY_TAIL(output);
  34. ASSERT_SNR(output,ref,(float32_t)SNR_THRESHOLD);
  35. ASSERT_NEAR_EQ(output,ref,ABS_ERROR_Q31);
  36. }
  37. void BasicTestsQ31::test_sub_q31()
  38. {
  39. GET_Q31_PTR();
  40. arm_sub_q31(inp1,inp2,outp,input1.nbSamples());
  41. ASSERT_EMPTY_TAIL(output);
  42. ASSERT_SNR(output,ref,(float32_t)SNR_THRESHOLD);
  43. ASSERT_NEAR_EQ(output,ref,ABS_ERROR_Q31);
  44. }
  45. void BasicTestsQ31::test_mult_q31()
  46. {
  47. GET_Q31_PTR();
  48. arm_mult_q31(inp1,inp2,outp,input1.nbSamples());
  49. ASSERT_EMPTY_TAIL(output);
  50. ASSERT_SNR(output,ref,(float32_t)SNR_THRESHOLD);
  51. ASSERT_NEAR_EQ(output,ref,ABS_ERROR_Q31);
  52. }
  53. void BasicTestsQ31::test_negate_q31()
  54. {
  55. const q31_t *inp1=input1.ptr();
  56. q31_t *outp=output.ptr();
  57. arm_negate_q31(inp1,outp,input1.nbSamples());
  58. ASSERT_EMPTY_TAIL(output);
  59. ASSERT_SNR(output,ref,(float32_t)SNR_THRESHOLD);
  60. ASSERT_NEAR_EQ(output,ref,ABS_ERROR_Q31);
  61. }
  62. void BasicTestsQ31::test_offset_q31()
  63. {
  64. const q31_t *inp1=input1.ptr();
  65. q31_t *outp=output.ptr();
  66. arm_offset_q31(inp1,this->scalar,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_Q31);
  70. }
  71. void BasicTestsQ31::test_scale_q31()
  72. {
  73. const q31_t *inp1=input1.ptr();
  74. q31_t *outp=output.ptr();
  75. arm_scale_q31(inp1,this->scalar,0,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_Q31);
  79. }
  80. void BasicTestsQ31::test_dot_prod_q31()
  81. {
  82. q63_t r;
  83. const q31_t *inp1=input1.ptr();
  84. const q31_t *inp2=input2.ptr();
  85. q63_t *outp=dotOutput.ptr();
  86. arm_dot_prod_q31(inp1,inp2,input1.nbSamples(),&r);
  87. outp[0] = r;
  88. ASSERT_SNR(dotOutput,dotRef,(float32_t)SNR_THRESHOLD);
  89. ASSERT_NEAR_EQ(dotOutput,dotRef,(q63_t)ABS_ERROR_Q63);
  90. ASSERT_EMPTY_TAIL(dotOutput);
  91. }
  92. void BasicTestsQ31::test_abs_q31()
  93. {
  94. GET_Q31_PTR();
  95. (void)inp2;
  96. arm_abs_q31(inp1,outp,input1.nbSamples());
  97. ASSERT_EMPTY_TAIL(output);
  98. ASSERT_SNR(output,ref,(float32_t)SNR_THRESHOLD);
  99. ASSERT_NEAR_EQ(output,ref,ABS_ERROR_Q31);
  100. }
  101. void BasicTestsQ31::test_shift_q31()
  102. {
  103. const q31_t *inp1=input1.ptr();
  104. q31_t *outp=output.ptr();
  105. arm_shift_q31(inp1,1,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_Q31);
  109. }
  110. void BasicTestsQ31::test_and_u32()
  111. {
  112. GET_LOGICAL_UINT32_PTR();
  113. arm_and_u32(inp1, inp2, outp,inputLogical1.nbSamples());
  114. ASSERT_EMPTY_TAIL(outputLogical);
  115. ASSERT_EQ(outputLogical,refLogical);
  116. }
  117. void BasicTestsQ31::test_or_u32()
  118. {
  119. GET_LOGICAL_UINT32_PTR();
  120. arm_or_u32(inp1,inp2,outp,inputLogical1.nbSamples());
  121. ASSERT_EMPTY_TAIL(outputLogical);
  122. ASSERT_EQ(outputLogical,refLogical);
  123. }
  124. void BasicTestsQ31::test_not_u32()
  125. {
  126. GET_LOGICAL_UINT32_PTR();
  127. (void)inp2;
  128. arm_not_u32(inp1,outp,inputLogical1.nbSamples());
  129. ASSERT_EMPTY_TAIL(outputLogical);
  130. ASSERT_EQ(outputLogical,refLogical);
  131. }
  132. void BasicTestsQ31::test_xor_u32()
  133. {
  134. GET_LOGICAL_UINT32_PTR();
  135. arm_xor_u32(inp1,inp2,outp,inputLogical1.nbSamples());
  136. ASSERT_EMPTY_TAIL(outputLogical);
  137. ASSERT_EQ(outputLogical,refLogical);
  138. }
  139. void BasicTestsQ31::setUp(Testing::testID_t id,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr)
  140. {
  141. (void)params;
  142. Testing::nbSamples_t nb=MAX_NB_SAMPLES;
  143. this->scalar = ONEHALF;
  144. switch(id)
  145. {
  146. case BasicTestsQ31::TEST_ADD_Q31_1:
  147. nb = 3;
  148. ref.reload(BasicTestsQ31::REF_ADD_Q31_ID,mgr,nb);
  149. output.create(ref.nbSamples(),BasicTestsQ31::OUT_SAMPLES_ID,mgr);
  150. input1.reload(BasicTestsQ31::INPUT1_Q31_ID,mgr,nb);
  151. input2.reload(BasicTestsQ31::INPUT2_Q31_ID,mgr,nb);
  152. break;
  153. case BasicTestsQ31::TEST_ADD_Q31_2:
  154. nb = 8;
  155. ref.reload(BasicTestsQ31::REF_ADD_Q31_ID,mgr,nb);
  156. output.create(ref.nbSamples(),BasicTestsQ31::OUT_SAMPLES_ID,mgr);
  157. input1.reload(BasicTestsQ31::INPUT1_Q31_ID,mgr,nb);
  158. input2.reload(BasicTestsQ31::INPUT2_Q31_ID,mgr,nb);
  159. break;
  160. case BasicTestsQ31::TEST_ADD_Q31_3:
  161. nb = 11;
  162. ref.reload(BasicTestsQ31::REF_ADD_Q31_ID,mgr,nb);
  163. output.create(ref.nbSamples(),BasicTestsQ31::OUT_SAMPLES_ID,mgr);
  164. input1.reload(BasicTestsQ31::INPUT1_Q31_ID,mgr,nb);
  165. input2.reload(BasicTestsQ31::INPUT2_Q31_ID,mgr,nb);
  166. break;
  167. case BasicTestsQ31::TEST_SUB_Q31_4:
  168. nb = 3;
  169. ref.reload(BasicTestsQ31::REF_SUB_Q31_ID,mgr,nb);
  170. output.create(ref.nbSamples(),BasicTestsQ31::OUT_SAMPLES_ID,mgr);
  171. input1.reload(BasicTestsQ31::INPUT1_Q31_ID,mgr,nb);
  172. input2.reload(BasicTestsQ31::INPUT2_Q31_ID,mgr,nb);
  173. break;
  174. case BasicTestsQ31::TEST_SUB_Q31_5:
  175. nb = 8;
  176. ref.reload(BasicTestsQ31::REF_SUB_Q31_ID,mgr,nb);
  177. output.create(ref.nbSamples(),BasicTestsQ31::OUT_SAMPLES_ID,mgr);
  178. input1.reload(BasicTestsQ31::INPUT1_Q31_ID,mgr,nb);
  179. input2.reload(BasicTestsQ31::INPUT2_Q31_ID,mgr,nb);
  180. break;
  181. case BasicTestsQ31::TEST_SUB_Q31_6:
  182. nb = 11;
  183. ref.reload(BasicTestsQ31::REF_SUB_Q31_ID,mgr,nb);
  184. output.create(ref.nbSamples(),BasicTestsQ31::OUT_SAMPLES_ID,mgr);
  185. input1.reload(BasicTestsQ31::INPUT1_Q31_ID,mgr,nb);
  186. input2.reload(BasicTestsQ31::INPUT2_Q31_ID,mgr,nb);
  187. break;
  188. case BasicTestsQ31::TEST_MULT_Q31_7:
  189. nb = 3;
  190. ref.reload(BasicTestsQ31::REF_MULT_Q31_ID,mgr,nb);
  191. output.create(ref.nbSamples(),BasicTestsQ31::OUT_SAMPLES_ID,mgr);
  192. input1.reload(BasicTestsQ31::INPUT1_Q31_ID,mgr,nb);
  193. input2.reload(BasicTestsQ31::INPUT2_Q31_ID,mgr,nb);
  194. break;
  195. case BasicTestsQ31::TEST_MULT_Q31_8:
  196. nb = 8;
  197. ref.reload(BasicTestsQ31::REF_MULT_Q31_ID,mgr,nb);
  198. output.create(ref.nbSamples(),BasicTestsQ31::OUT_SAMPLES_ID,mgr);
  199. input1.reload(BasicTestsQ31::INPUT1_Q31_ID,mgr,nb);
  200. input2.reload(BasicTestsQ31::INPUT2_Q31_ID,mgr,nb);
  201. break;
  202. case BasicTestsQ31::TEST_MULT_Q31_9:
  203. nb = 11;
  204. ref.reload(BasicTestsQ31::REF_MULT_Q31_ID,mgr,nb);
  205. output.create(ref.nbSamples(),BasicTestsQ31::OUT_SAMPLES_ID,mgr);
  206. input1.reload(BasicTestsQ31::INPUT1_Q31_ID,mgr,nb);
  207. input2.reload(BasicTestsQ31::INPUT2_Q31_ID,mgr,nb);
  208. break;
  209. case BasicTestsQ31::TEST_NEGATE_Q31_10:
  210. nb = 3;
  211. ref.reload(BasicTestsQ31::REF_NEGATE_Q31_ID,mgr,nb);
  212. output.create(ref.nbSamples(),BasicTestsQ31::OUT_SAMPLES_ID,mgr);
  213. input1.reload(BasicTestsQ31::INPUT1_Q31_ID,mgr,nb);
  214. break;
  215. case BasicTestsQ31::TEST_NEGATE_Q31_11:
  216. nb = 8;
  217. ref.reload(BasicTestsQ31::REF_NEGATE_Q31_ID,mgr,nb);
  218. output.create(ref.nbSamples(),BasicTestsQ31::OUT_SAMPLES_ID,mgr);
  219. input1.reload(BasicTestsQ31::INPUT1_Q31_ID,mgr,nb);
  220. break;
  221. case BasicTestsQ31::TEST_NEGATE_Q31_12:
  222. nb = 11;
  223. ref.reload(BasicTestsQ31::REF_NEGATE_Q31_ID,mgr,nb);
  224. output.create(ref.nbSamples(),BasicTestsQ31::OUT_SAMPLES_ID,mgr);
  225. input1.reload(BasicTestsQ31::INPUT1_Q31_ID,mgr,nb);
  226. break;
  227. case BasicTestsQ31::TEST_OFFSET_Q31_13:
  228. nb = 3;
  229. ref.reload(BasicTestsQ31::REF_OFFSET_Q31_ID,mgr,nb);
  230. output.create(ref.nbSamples(),BasicTestsQ31::OUT_SAMPLES_ID,mgr);
  231. input1.reload(BasicTestsQ31::INPUT1_Q31_ID,mgr,nb);
  232. break;
  233. case BasicTestsQ31::TEST_OFFSET_Q31_14:
  234. nb = 8;
  235. ref.reload(BasicTestsQ31::REF_OFFSET_Q31_ID,mgr,nb);
  236. output.create(ref.nbSamples(),BasicTestsQ31::OUT_SAMPLES_ID,mgr);
  237. input1.reload(BasicTestsQ31::INPUT1_Q31_ID,mgr,nb);
  238. break;
  239. case BasicTestsQ31::TEST_OFFSET_Q31_15:
  240. nb = 11;
  241. ref.reload(BasicTestsQ31::REF_OFFSET_Q31_ID,mgr,nb);
  242. output.create(ref.nbSamples(),BasicTestsQ31::OUT_SAMPLES_ID,mgr);
  243. input1.reload(BasicTestsQ31::INPUT1_Q31_ID,mgr,nb);
  244. break;
  245. case BasicTestsQ31::TEST_SCALE_Q31_16:
  246. nb = 3;
  247. ref.reload(BasicTestsQ31::REF_SCALE_Q31_ID,mgr,nb);
  248. output.create(ref.nbSamples(),BasicTestsQ31::OUT_SAMPLES_ID,mgr);
  249. input1.reload(BasicTestsQ31::INPUT1_Q31_ID,mgr,nb);
  250. break;
  251. case BasicTestsQ31::TEST_SCALE_Q31_17:
  252. nb = 8;
  253. ref.reload(BasicTestsQ31::REF_SCALE_Q31_ID,mgr,nb);
  254. output.create(ref.nbSamples(),BasicTestsQ31::OUT_SAMPLES_ID,mgr);
  255. input1.reload(BasicTestsQ31::INPUT1_Q31_ID,mgr,nb);
  256. break;
  257. case BasicTestsQ31::TEST_SCALE_Q31_18:
  258. nb = 11;
  259. ref.reload(BasicTestsQ31::REF_SCALE_Q31_ID,mgr,nb);
  260. output.create(ref.nbSamples(),BasicTestsQ31::OUT_SAMPLES_ID,mgr);
  261. input1.reload(BasicTestsQ31::INPUT1_Q31_ID,mgr,nb);
  262. break;
  263. case BasicTestsQ31::TEST_DOT_PROD_Q31_19:
  264. nb = 3;
  265. dotRef.reload(BasicTestsQ31::REF_DOT_3_Q31_ID,mgr);
  266. dotOutput.create(dotRef.nbSamples(),BasicTestsQ31::OUT_SAMPLES_ID,mgr);
  267. input1.reload(BasicTestsQ31::INPUT1_Q31_ID,mgr,nb);
  268. input2.reload(BasicTestsQ31::INPUT2_Q31_ID,mgr,nb);
  269. break;
  270. case BasicTestsQ31::TEST_DOT_PROD_Q31_20:
  271. nb = 8;
  272. dotRef.reload(BasicTestsQ31::REF_DOT_4N_Q31_ID,mgr);
  273. dotOutput.create(dotRef.nbSamples(),BasicTestsQ31::OUT_SAMPLES_ID,mgr);
  274. input1.reload(BasicTestsQ31::INPUT1_Q31_ID,mgr,nb);
  275. input2.reload(BasicTestsQ31::INPUT2_Q31_ID,mgr,nb);
  276. break;
  277. case BasicTestsQ31::TEST_DOT_PROD_Q31_21:
  278. nb = 11;
  279. dotRef.reload(BasicTestsQ31::REF_DOT_4N1_Q31_ID,mgr);
  280. dotOutput.create(dotRef.nbSamples(),BasicTestsQ31::OUT_SAMPLES_ID,mgr);
  281. input1.reload(BasicTestsQ31::INPUT1_Q31_ID,mgr,nb);
  282. input2.reload(BasicTestsQ31::INPUT2_Q31_ID,mgr,nb);
  283. break;
  284. case BasicTestsQ31::TEST_ABS_Q31_22:
  285. nb = 3;
  286. ref.reload(BasicTestsQ31::REF_ABS_Q31_ID,mgr,nb);
  287. output.create(ref.nbSamples(),BasicTestsQ31::OUT_SAMPLES_ID,mgr);
  288. input1.reload(BasicTestsQ31::INPUT1_Q31_ID,mgr,nb);
  289. input2.reload(BasicTestsQ31::INPUT2_Q31_ID,mgr,nb);
  290. break;
  291. case BasicTestsQ31::TEST_ABS_Q31_23:
  292. nb = 8;
  293. ref.reload(BasicTestsQ31::REF_ABS_Q31_ID,mgr,nb);
  294. output.create(ref.nbSamples(),BasicTestsQ31::OUT_SAMPLES_ID,mgr);
  295. input1.reload(BasicTestsQ31::INPUT1_Q31_ID,mgr,nb);
  296. input2.reload(BasicTestsQ31::INPUT2_Q31_ID,mgr,nb);
  297. break;
  298. case BasicTestsQ31::TEST_ABS_Q31_24:
  299. nb = 11;
  300. ref.reload(BasicTestsQ31::REF_ABS_Q31_ID,mgr,nb);
  301. output.create(ref.nbSamples(),BasicTestsQ31::OUT_SAMPLES_ID,mgr);
  302. input1.reload(BasicTestsQ31::INPUT1_Q31_ID,mgr,nb);
  303. input2.reload(BasicTestsQ31::INPUT2_Q31_ID,mgr,nb);
  304. break;
  305. case BasicTestsQ31::TEST_ADD_Q31_25:
  306. input1.reload(BasicTestsQ31::MAXPOS_Q31_ID,mgr);
  307. input2.reload(BasicTestsQ31::MAXPOS_Q31_ID,mgr);
  308. ref.reload(BasicTestsQ31::REF_POSSAT_12_Q31_ID,mgr);
  309. output.create(ref.nbSamples(),BasicTestsQ31::OUT_SAMPLES_ID,mgr);
  310. break;
  311. case BasicTestsQ31::TEST_ADD_Q31_26:
  312. input1.reload(BasicTestsQ31::MAXNEG_Q31_ID,mgr);
  313. input2.reload(BasicTestsQ31::MAXNEG_Q31_ID,mgr);
  314. ref.reload(BasicTestsQ31::REF_NEGSAT_13_Q31_ID,mgr);
  315. output.create(ref.nbSamples(),BasicTestsQ31::OUT_SAMPLES_ID,mgr);
  316. break;
  317. case BasicTestsQ31::TEST_SUB_Q31_27:
  318. ref.reload(BasicTestsQ31::REF_POSSAT_14_Q31_ID,mgr);
  319. output.create(ref.nbSamples(),BasicTestsQ31::OUT_SAMPLES_ID,mgr);
  320. input1.reload(BasicTestsQ31::MAXPOS_Q31_ID,mgr);
  321. input2.reload(BasicTestsQ31::MAXNEG_Q31_ID,mgr);
  322. break;
  323. case BasicTestsQ31::TEST_SUB_Q31_28:
  324. ref.reload(BasicTestsQ31::REF_NEGSAT_15_Q31_ID,mgr);
  325. output.create(ref.nbSamples(),BasicTestsQ31::OUT_SAMPLES_ID,mgr);
  326. input1.reload(BasicTestsQ31::MAXNEG_Q31_ID,mgr);
  327. input2.reload(BasicTestsQ31::MAXPOS_Q31_ID,mgr);
  328. break;
  329. case BasicTestsQ31::TEST_MULT_Q31_29:
  330. ref.reload(BasicTestsQ31::REF_POSSAT_16_Q31_ID,mgr);
  331. output.create(ref.nbSamples(),BasicTestsQ31::OUT_SAMPLES_ID,mgr);
  332. input1.reload(BasicTestsQ31::MAXNEG2_Q31_ID,mgr);
  333. input2.reload(BasicTestsQ31::MAXNEG2_Q31_ID,mgr);
  334. break;
  335. case BasicTestsQ31::TEST_NEGATE_Q31_30:
  336. ref.reload(BasicTestsQ31::REF_POSSAT_17_Q31_ID,mgr);
  337. output.create(ref.nbSamples(),BasicTestsQ31::OUT_SAMPLES_ID,mgr);
  338. input1.reload(BasicTestsQ31::MAXNEG2_Q31_ID,mgr);
  339. break;
  340. case BasicTestsQ31::TEST_OFFSET_Q31_31:
  341. ref.reload(BasicTestsQ31::REF_POSSAT_18_Q31_ID,mgr);
  342. output.create(ref.nbSamples(),BasicTestsQ31::OUT_SAMPLES_ID,mgr);
  343. input1.reload(BasicTestsQ31::MAXPOS_Q31_ID,mgr);
  344. /* 0.9 */
  345. this->scalar = 0x73333333;
  346. break;
  347. case BasicTestsQ31::TEST_OFFSET_Q31_32:
  348. ref.reload(BasicTestsQ31::REF_NEGSAT_19_Q31_ID,mgr);
  349. output.create(ref.nbSamples(),BasicTestsQ31::OUT_SAMPLES_ID,mgr);
  350. input1.reload(BasicTestsQ31::MAXNEG_Q31_ID,mgr);
  351. /* -0.9 */
  352. this->scalar = 0x8ccccccd;
  353. break;
  354. case BasicTestsQ31::TEST_SCALE_Q31_33:
  355. ref.reload(BasicTestsQ31::REF_POSSAT_20_Q31_ID,mgr);
  356. output.create(ref.nbSamples(),BasicTestsQ31::OUT_SAMPLES_ID,mgr);
  357. input1.reload(BasicTestsQ31::MAXNEG2_Q31_ID,mgr);
  358. /* Minus max*/
  359. this->scalar = 0x80000000;
  360. break;
  361. case BasicTestsQ31::TEST_SHIFT_Q31_34:
  362. ref.reload(BasicTestsQ31::REF_SHIFT_21_Q31_ID,mgr);
  363. output.create(ref.nbSamples(),BasicTestsQ31::OUT_SAMPLES_ID,mgr);
  364. input1.reload(BasicTestsQ31::INPUTRAND_Q31_ID,mgr);
  365. break;
  366. case BasicTestsQ31::TEST_SHIFT_Q31_35:
  367. ref.reload(BasicTestsQ31::REF_SHIFT_POSSAT_22_Q31_ID,mgr);
  368. output.create(ref.nbSamples(),BasicTestsQ31::OUT_SAMPLES_ID,mgr);
  369. input1.reload(BasicTestsQ31::MAXPOS_Q31_ID,mgr);
  370. break;
  371. case BasicTestsQ31::TEST_SHIFT_Q31_36:
  372. ref.reload(BasicTestsQ31::REF_SHIFT_NEGSAT_23_Q31_ID,mgr);
  373. output.create(ref.nbSamples(),BasicTestsQ31::OUT_SAMPLES_ID,mgr);
  374. input1.reload(BasicTestsQ31::MAXNEG_Q31_ID,mgr);
  375. break;
  376. case BasicTestsQ31::TEST_AND_U32_37:
  377. nb = 3;
  378. refLogical.reload(BasicTestsQ31::REF_AND_Q31_ID,mgr,nb);
  379. outputLogical.create(refLogical.nbSamples(),BasicTestsQ31::OUT_SAMPLES_ID,mgr);
  380. inputLogical1.reload(BasicTestsQ31::INPUT1_BITWISE_Q31_ID,mgr,nb);
  381. inputLogical2.reload(BasicTestsQ31::INPUT2_BITWISE_Q31_ID,mgr,nb);
  382. break;
  383. case BasicTestsQ31::TEST_AND_U32_38:
  384. nb = 8;
  385. refLogical.reload(BasicTestsQ31::REF_AND_Q31_ID,mgr,nb);
  386. outputLogical.create(refLogical.nbSamples(),BasicTestsQ31::OUT_SAMPLES_ID,mgr);
  387. inputLogical1.reload(BasicTestsQ31::INPUT1_BITWISE_Q31_ID,mgr,nb);
  388. inputLogical2.reload(BasicTestsQ31::INPUT2_BITWISE_Q31_ID,mgr,nb);
  389. break;
  390. case BasicTestsQ31::TEST_AND_U32_39:
  391. nb = 11;
  392. refLogical.reload(BasicTestsQ31::REF_AND_Q31_ID,mgr,nb);
  393. outputLogical.create(refLogical.nbSamples(),BasicTestsQ31::OUT_SAMPLES_ID,mgr);
  394. inputLogical1.reload(BasicTestsQ31::INPUT1_BITWISE_Q31_ID,mgr,nb);
  395. inputLogical2.reload(BasicTestsQ31::INPUT2_BITWISE_Q31_ID,mgr,nb);
  396. break;
  397. case BasicTestsQ31::TEST_OR_U32_40:
  398. nb = 3;
  399. refLogical.reload(BasicTestsQ31::REF_OR_Q31_ID,mgr,nb);
  400. outputLogical.create(refLogical.nbSamples(),BasicTestsQ31::OUT_SAMPLES_ID,mgr);
  401. inputLogical1.reload(BasicTestsQ31::INPUT1_BITWISE_Q31_ID,mgr,nb);
  402. inputLogical2.reload(BasicTestsQ31::INPUT2_BITWISE_Q31_ID,mgr,nb);
  403. break;
  404. case BasicTestsQ31::TEST_OR_U32_41:
  405. nb = 8;
  406. refLogical.reload(BasicTestsQ31::REF_OR_Q31_ID,mgr,nb);
  407. outputLogical.create(refLogical.nbSamples(),BasicTestsQ31::OUT_SAMPLES_ID,mgr);
  408. inputLogical1.reload(BasicTestsQ31::INPUT1_BITWISE_Q31_ID,mgr,nb);
  409. inputLogical2.reload(BasicTestsQ31::INPUT2_BITWISE_Q31_ID,mgr,nb);
  410. break;
  411. case BasicTestsQ31::TEST_OR_U32_42:
  412. nb = 11;
  413. refLogical.reload(BasicTestsQ31::REF_OR_Q31_ID,mgr,nb);
  414. outputLogical.create(refLogical.nbSamples(),BasicTestsQ31::OUT_SAMPLES_ID,mgr);
  415. inputLogical1.reload(BasicTestsQ31::INPUT1_BITWISE_Q31_ID,mgr,nb);
  416. inputLogical2.reload(BasicTestsQ31::INPUT2_BITWISE_Q31_ID,mgr,nb);
  417. break;
  418. case BasicTestsQ31::TEST_NOT_U32_43:
  419. nb = 3;
  420. refLogical.reload(BasicTestsQ31::REF_NOT_Q31_ID,mgr,nb);
  421. outputLogical.create(refLogical.nbSamples(),BasicTestsQ31::OUT_SAMPLES_ID,mgr);
  422. inputLogical1.reload(BasicTestsQ31::INPUT1_BITWISE_Q31_ID,mgr,nb);
  423. inputLogical2.reload(BasicTestsQ31::INPUT2_BITWISE_Q31_ID,mgr,nb);
  424. break;
  425. case BasicTestsQ31::TEST_NOT_U32_44:
  426. nb = 8;
  427. refLogical.reload(BasicTestsQ31::REF_NOT_Q31_ID,mgr,nb);
  428. outputLogical.create(refLogical.nbSamples(),BasicTestsQ31::OUT_SAMPLES_ID,mgr);
  429. inputLogical1.reload(BasicTestsQ31::INPUT1_BITWISE_Q31_ID,mgr,nb);
  430. inputLogical2.reload(BasicTestsQ31::INPUT2_BITWISE_Q31_ID,mgr,nb);
  431. break;
  432. case BasicTestsQ31::TEST_NOT_U32_45:
  433. nb = 11;
  434. refLogical.reload(BasicTestsQ31::REF_NOT_Q31_ID,mgr,nb);
  435. outputLogical.create(refLogical.nbSamples(),BasicTestsQ31::OUT_SAMPLES_ID,mgr);
  436. inputLogical1.reload(BasicTestsQ31::INPUT1_BITWISE_Q31_ID,mgr,nb);
  437. inputLogical2.reload(BasicTestsQ31::INPUT2_BITWISE_Q31_ID,mgr,nb);
  438. break;
  439. case BasicTestsQ31::TEST_XOR_U32_46:
  440. nb = 3;
  441. refLogical.reload(BasicTestsQ31::REF_XOR_Q31_ID,mgr,nb);
  442. outputLogical.create(refLogical.nbSamples(),BasicTestsQ31::OUT_SAMPLES_ID,mgr);
  443. inputLogical1.reload(BasicTestsQ31::INPUT1_BITWISE_Q31_ID,mgr,nb);
  444. inputLogical2.reload(BasicTestsQ31::INPUT2_BITWISE_Q31_ID,mgr,nb);
  445. break;
  446. case BasicTestsQ31::TEST_XOR_U32_47:
  447. nb = 8;
  448. refLogical.reload(BasicTestsQ31::REF_XOR_Q31_ID,mgr,nb);
  449. outputLogical.create(refLogical.nbSamples(),BasicTestsQ31::OUT_SAMPLES_ID,mgr);
  450. inputLogical1.reload(BasicTestsQ31::INPUT1_BITWISE_Q31_ID,mgr,nb);
  451. inputLogical2.reload(BasicTestsQ31::INPUT2_BITWISE_Q31_ID,mgr,nb);
  452. break;
  453. case BasicTestsQ31::TEST_XOR_U32_48:
  454. nb = 11;
  455. refLogical.reload(BasicTestsQ31::REF_XOR_Q31_ID,mgr,nb);
  456. outputLogical.create(refLogical.nbSamples(),BasicTestsQ31::OUT_SAMPLES_ID,mgr);
  457. inputLogical1.reload(BasicTestsQ31::INPUT1_BITWISE_Q31_ID,mgr,nb);
  458. inputLogical2.reload(BasicTestsQ31::INPUT2_BITWISE_Q31_ID,mgr,nb);
  459. break;
  460. case BasicTestsQ31::TEST_ADD_Q31_49:
  461. ref.reload(BasicTestsQ31::REF_ADD_Q31_ID,mgr,nb);
  462. output.create(ref.nbSamples(),BasicTestsQ31::OUT_SAMPLES_ID,mgr);
  463. input1.reload(BasicTestsQ31::INPUT1_Q31_ID,mgr,nb);
  464. input2.reload(BasicTestsQ31::INPUT2_Q31_ID,mgr,nb);
  465. break;
  466. case BasicTestsQ31::TEST_SUB_Q31_50:
  467. ref.reload(BasicTestsQ31::REF_SUB_Q31_ID,mgr,nb);
  468. output.create(ref.nbSamples(),BasicTestsQ31::OUT_SAMPLES_ID,mgr);
  469. input1.reload(BasicTestsQ31::INPUT1_Q31_ID,mgr,nb);
  470. input2.reload(BasicTestsQ31::INPUT2_Q31_ID,mgr,nb);
  471. break;
  472. case BasicTestsQ31::TEST_MULT_Q31_51:
  473. ref.reload(BasicTestsQ31::REF_MULT_Q31_ID,mgr,nb);
  474. output.create(ref.nbSamples(),BasicTestsQ31::OUT_SAMPLES_ID,mgr);
  475. input1.reload(BasicTestsQ31::INPUT1_Q31_ID,mgr,nb);
  476. input2.reload(BasicTestsQ31::INPUT2_Q31_ID,mgr,nb);
  477. break;
  478. case BasicTestsQ31::TEST_NEGATE_Q31_52:
  479. ref.reload(BasicTestsQ31::REF_NEGATE_Q31_ID,mgr,nb);
  480. output.create(ref.nbSamples(),BasicTestsQ31::OUT_SAMPLES_ID,mgr);
  481. input1.reload(BasicTestsQ31::INPUT1_Q31_ID,mgr,nb);
  482. break;
  483. case BasicTestsQ31::TEST_OFFSET_Q31_53:
  484. ref.reload(BasicTestsQ31::REF_OFFSET_Q31_ID,mgr,nb);
  485. output.create(ref.nbSamples(),BasicTestsQ31::OUT_SAMPLES_ID,mgr);
  486. input1.reload(BasicTestsQ31::INPUT1_Q31_ID,mgr,nb);
  487. break;
  488. case BasicTestsQ31::TEST_SCALE_Q31_54:
  489. ref.reload(BasicTestsQ31::REF_SCALE_Q31_ID,mgr,nb);
  490. output.create(ref.nbSamples(),BasicTestsQ31::OUT_SAMPLES_ID,mgr);
  491. input1.reload(BasicTestsQ31::INPUT1_Q31_ID,mgr,nb);
  492. break;
  493. case BasicTestsQ31::TEST_DOT_PROD_Q31_55:
  494. dotRef.reload(BasicTestsQ31::REF_DOT_LONG_Q31_ID,mgr);
  495. dotOutput.create(dotRef.nbSamples(),BasicTestsQ31::OUT_SAMPLES_ID,mgr);
  496. input1.reload(BasicTestsQ31::INPUT1_Q31_ID,mgr,nb);
  497. input2.reload(BasicTestsQ31::INPUT2_Q31_ID,mgr,nb);
  498. break;
  499. case BasicTestsQ31::TEST_ABS_Q31_56:
  500. ref.reload(BasicTestsQ31::REF_ABS_Q31_ID,mgr,nb);
  501. output.create(ref.nbSamples(),BasicTestsQ31::OUT_SAMPLES_ID,mgr);
  502. input1.reload(BasicTestsQ31::INPUT1_Q31_ID,mgr,nb);
  503. input2.reload(BasicTestsQ31::INPUT2_Q31_ID,mgr,nb);
  504. break;
  505. case BasicTestsQ31::TEST_CLIP_Q31_57:
  506. ref.reload(BasicTestsQ31::REF_CLIP1_Q31_ID,mgr);
  507. input1.reload(BasicTestsQ31::INPUT_CLIP_Q31_ID,mgr,ref.nbSamples());
  508. output.create(ref.nbSamples(),BasicTestsQ31::OUT_SAMPLES_ID,mgr);
  509. // Must be coherent with Python script used to generate test patterns
  510. this->min=0xC0000000;
  511. this->max=0xF3333333;
  512. break;
  513. case BasicTestsQ31::TEST_CLIP_Q31_58:
  514. ref.reload(BasicTestsQ31::REF_CLIP2_Q31_ID,mgr);
  515. input1.reload(BasicTestsQ31::INPUT_CLIP_Q31_ID,mgr,ref.nbSamples());
  516. output.create(ref.nbSamples(),BasicTestsQ31::OUT_SAMPLES_ID,mgr);
  517. // Must be coherent with Python script used to generate test patterns
  518. this->min=0xC0000000;
  519. this->max=0x40000000;
  520. break;
  521. case BasicTestsQ31::TEST_CLIP_Q31_59:
  522. ref.reload(BasicTestsQ31::REF_CLIP3_Q31_ID,mgr);
  523. input1.reload(BasicTestsQ31::INPUT_CLIP_Q31_ID,mgr,ref.nbSamples());
  524. output.create(ref.nbSamples(),BasicTestsQ31::OUT_SAMPLES_ID,mgr);
  525. // Must be coherent with Python script used to generate test patterns
  526. this->min=0x0CCCCCCD;
  527. this->max=0x40000000;
  528. break;
  529. }
  530. }
  531. void BasicTestsQ31::tearDown(Testing::testID_t id,Client::PatternMgr *mgr)
  532. {
  533. switch(id)
  534. {
  535. case BasicTestsQ31::TEST_DOT_PROD_Q31_19:
  536. case BasicTestsQ31::TEST_DOT_PROD_Q31_20:
  537. case BasicTestsQ31::TEST_DOT_PROD_Q31_21:
  538. case BasicTestsQ31::TEST_DOT_PROD_Q31_55:
  539. dotOutput.dump(mgr);
  540. break;
  541. case BasicTestsQ31::TEST_AND_U32_37:
  542. case BasicTestsQ31::TEST_AND_U32_38:
  543. case BasicTestsQ31::TEST_AND_U32_39:
  544. case BasicTestsQ31::TEST_OR_U32_40:
  545. case BasicTestsQ31::TEST_OR_U32_41:
  546. case BasicTestsQ31::TEST_OR_U32_42:
  547. case BasicTestsQ31::TEST_NOT_U32_43:
  548. case BasicTestsQ31::TEST_NOT_U32_44:
  549. case BasicTestsQ31::TEST_NOT_U32_45:
  550. case BasicTestsQ31::TEST_XOR_U32_46:
  551. case BasicTestsQ31::TEST_XOR_U32_47:
  552. case BasicTestsQ31::TEST_XOR_U32_48:
  553. outputLogical.dump(mgr);
  554. break;
  555. default:
  556. output.dump(mgr);
  557. }
  558. }