BasicTestsF32.cpp 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350
  1. #include "BasicTestsF32.h"
  2. #include <stdio.h>
  3. #include "Error.h"
  4. #define SNR_THRESHOLD 120
  5. /*
  6. Reference patterns are generated with
  7. a double precision computation.
  8. */
  9. #define REL_ERROR (5.0e-5)
  10. #define GET_F32_PTR() \
  11. const float32_t *inp1=input1.ptr(); \
  12. const float32_t *inp2=input2.ptr(); \
  13. float32_t *outp=output.ptr();
  14. void BasicTestsF32::test_add_f32()
  15. {
  16. GET_F32_PTR();
  17. arm_add_f32(inp1,inp2,outp,input1.nbSamples());
  18. ASSERT_EMPTY_TAIL(output);
  19. ASSERT_SNR(output,ref,(float32_t)SNR_THRESHOLD);
  20. ASSERT_REL_ERROR(output,ref,REL_ERROR);
  21. }
  22. void BasicTestsF32::test_clip_f32()
  23. {
  24. const float32_t *inp=input1.ptr();
  25. float32_t *outp=output.ptr();
  26. arm_clip_f32(inp,outp,this->min, this->max,input1.nbSamples());
  27. ASSERT_EMPTY_TAIL(output);
  28. ASSERT_SNR(output,ref,(float32_t)SNR_THRESHOLD);
  29. ASSERT_REL_ERROR(output,ref,REL_ERROR);
  30. }
  31. void BasicTestsF32::test_sub_f32()
  32. {
  33. GET_F32_PTR();
  34. arm_sub_f32(inp1,inp2,outp,input1.nbSamples());
  35. ASSERT_EMPTY_TAIL(output);
  36. ASSERT_SNR(output,ref,(float32_t)SNR_THRESHOLD);
  37. ASSERT_REL_ERROR(output,ref,REL_ERROR);
  38. }
  39. void BasicTestsF32::test_mult_f32()
  40. {
  41. GET_F32_PTR();
  42. arm_mult_f32(inp1,inp2,outp,input1.nbSamples());
  43. ASSERT_EMPTY_TAIL(output);
  44. ASSERT_SNR(output,ref,(float32_t)SNR_THRESHOLD);
  45. ASSERT_REL_ERROR(output,ref,REL_ERROR);
  46. }
  47. void BasicTestsF32::test_negate_f32()
  48. {
  49. GET_F32_PTR();
  50. (void)inp2;
  51. arm_negate_f32(inp1,outp,input1.nbSamples());
  52. ASSERT_EMPTY_TAIL(output);
  53. ASSERT_SNR(output,ref,(float32_t)SNR_THRESHOLD);
  54. ASSERT_REL_ERROR(output,ref,REL_ERROR);
  55. }
  56. void BasicTestsF32::test_offset_f32()
  57. {
  58. GET_F32_PTR();
  59. (void)inp2;
  60. arm_offset_f32(inp1,0.5,outp,input1.nbSamples());
  61. ASSERT_EMPTY_TAIL(output);
  62. ASSERT_SNR(output,ref,(float32_t)SNR_THRESHOLD);
  63. ASSERT_REL_ERROR(output,ref,REL_ERROR);
  64. }
  65. void BasicTestsF32::test_scale_f32()
  66. {
  67. GET_F32_PTR();
  68. (void)inp2;
  69. arm_scale_f32(inp1,0.5,outp,input1.nbSamples());
  70. ASSERT_EMPTY_TAIL(output);
  71. ASSERT_SNR(output,ref,(float32_t)SNR_THRESHOLD);
  72. ASSERT_REL_ERROR(output,ref,REL_ERROR);
  73. }
  74. void BasicTestsF32::test_dot_prod_f32()
  75. {
  76. float32_t r;
  77. GET_F32_PTR();
  78. arm_dot_prod_f32(inp1,inp2,input1.nbSamples(),&r);
  79. outp[0] = r;
  80. ASSERT_SNR(output,ref,(float32_t)SNR_THRESHOLD);
  81. ASSERT_REL_ERROR(output,ref,REL_ERROR);
  82. ASSERT_EMPTY_TAIL(output);
  83. }
  84. void BasicTestsF32::test_abs_f32()
  85. {
  86. GET_F32_PTR();
  87. (void)inp2;
  88. arm_abs_f32(inp1,outp,input1.nbSamples());
  89. ASSERT_EMPTY_TAIL(output);
  90. ASSERT_SNR(output,ref,(float32_t)SNR_THRESHOLD);
  91. ASSERT_REL_ERROR(output,ref,REL_ERROR);
  92. }
  93. void BasicTestsF32::setUp(Testing::testID_t id,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr)
  94. {
  95. (void)params;
  96. Testing::nbSamples_t nb=MAX_NB_SAMPLES;
  97. switch(id)
  98. {
  99. case BasicTestsF32::TEST_ADD_F32_1:
  100. nb = 3;
  101. ref.reload(BasicTestsF32::REF_ADD_F32_ID,mgr,nb);
  102. break;
  103. case BasicTestsF32::TEST_ADD_F32_2:
  104. nb = 8;
  105. ref.reload(BasicTestsF32::REF_ADD_F32_ID,mgr,nb);
  106. break;
  107. case BasicTestsF32::TEST_ADD_F32_3:
  108. nb = 11;
  109. ref.reload(BasicTestsF32::REF_ADD_F32_ID,mgr,nb);
  110. break;
  111. case BasicTestsF32::TEST_SUB_F32_4:
  112. nb = 3;
  113. ref.reload(BasicTestsF32::REF_SUB_F32_ID,mgr,nb);
  114. break;
  115. case BasicTestsF32::TEST_SUB_F32_5:
  116. nb = 8;
  117. ref.reload(BasicTestsF32::REF_SUB_F32_ID,mgr,nb);
  118. break;
  119. case BasicTestsF32::TEST_SUB_F32_6:
  120. nb = 11;
  121. ref.reload(BasicTestsF32::REF_SUB_F32_ID,mgr,nb);
  122. break;
  123. case BasicTestsF32::TEST_MULT_F32_7:
  124. nb = 3;
  125. ref.reload(BasicTestsF32::REF_MULT_F32_ID,mgr,nb);
  126. break;
  127. case BasicTestsF32::TEST_MULT_F32_8:
  128. nb = 8;
  129. ref.reload(BasicTestsF32::REF_MULT_F32_ID,mgr,nb);
  130. break;
  131. case BasicTestsF32::TEST_MULT_F32_9:
  132. nb = 11;
  133. ref.reload(BasicTestsF32::REF_MULT_F32_ID,mgr,nb);
  134. break;
  135. case BasicTestsF32::TEST_NEGATE_F32_10:
  136. nb = 3;
  137. ref.reload(BasicTestsF32::REF_NEGATE_F32_ID,mgr,nb);
  138. break;
  139. case BasicTestsF32::TEST_NEGATE_F32_11:
  140. nb = 8;
  141. ref.reload(BasicTestsF32::REF_NEGATE_F32_ID,mgr,nb);
  142. break;
  143. case BasicTestsF32::TEST_NEGATE_F32_12:
  144. nb = 11;
  145. ref.reload(BasicTestsF32::REF_NEGATE_F32_ID,mgr,nb);
  146. break;
  147. case BasicTestsF32::TEST_OFFSET_F32_13:
  148. nb = 3;
  149. ref.reload(BasicTestsF32::REF_OFFSET_F32_ID,mgr,nb);
  150. break;
  151. case BasicTestsF32::TEST_OFFSET_F32_14:
  152. nb = 8;
  153. ref.reload(BasicTestsF32::REF_OFFSET_F32_ID,mgr,nb);
  154. break;
  155. case BasicTestsF32::TEST_OFFSET_F32_15:
  156. nb = 11;
  157. ref.reload(BasicTestsF32::REF_OFFSET_F32_ID,mgr,nb);
  158. break;
  159. case BasicTestsF32::TEST_SCALE_F32_16:
  160. nb = 3;
  161. ref.reload(BasicTestsF32::REF_SCALE_F32_ID,mgr,nb);
  162. break;
  163. case BasicTestsF32::TEST_SCALE_F32_17:
  164. nb = 8;
  165. ref.reload(BasicTestsF32::REF_SCALE_F32_ID,mgr,nb);
  166. break;
  167. case BasicTestsF32::TEST_SCALE_F32_18:
  168. nb = 11;
  169. ref.reload(BasicTestsF32::REF_SCALE_F32_ID,mgr,nb);
  170. break;
  171. case BasicTestsF32::TEST_DOT_PROD_F32_19:
  172. nb = 3;
  173. ref.reload(BasicTestsF32::REF_DOT_3_F32_ID,mgr);
  174. break;
  175. case BasicTestsF32::TEST_DOT_PROD_F32_20:
  176. nb = 8;
  177. ref.reload(BasicTestsF32::REF_DOT_4N_F32_ID,mgr);
  178. break;
  179. case BasicTestsF32::TEST_DOT_PROD_F32_21:
  180. nb = 11;
  181. ref.reload(BasicTestsF32::REF_DOT_4N1_F32_ID,mgr);
  182. break;
  183. case BasicTestsF32::TEST_ABS_F32_22:
  184. nb = 3;
  185. ref.reload(BasicTestsF32::REF_ABS_F32_ID,mgr,nb);
  186. break;
  187. case BasicTestsF32::TEST_ABS_F32_23:
  188. nb = 8;
  189. ref.reload(BasicTestsF32::REF_ABS_F32_ID,mgr,nb);
  190. break;
  191. case BasicTestsF32::TEST_ABS_F32_24:
  192. nb = 11;
  193. ref.reload(BasicTestsF32::REF_ABS_F32_ID,mgr,nb);
  194. break;
  195. case BasicTestsF32::TEST_ADD_F32_25:
  196. ref.reload(BasicTestsF32::REF_ADD_F32_ID,mgr,nb);
  197. break;
  198. case BasicTestsF32::TEST_SUB_F32_26:
  199. ref.reload(BasicTestsF32::REF_SUB_F32_ID,mgr,nb);
  200. break;
  201. case BasicTestsF32::TEST_MULT_F32_27:
  202. ref.reload(BasicTestsF32::REF_MULT_F32_ID,mgr,nb);
  203. break;
  204. case BasicTestsF32::TEST_NEGATE_F32_28:
  205. ref.reload(BasicTestsF32::REF_NEGATE_F32_ID,mgr,nb);
  206. break;
  207. case BasicTestsF32::TEST_OFFSET_F32_29:
  208. ref.reload(BasicTestsF32::REF_OFFSET_F32_ID,mgr,nb);
  209. break;
  210. case BasicTestsF32::TEST_SCALE_F32_30:
  211. ref.reload(BasicTestsF32::REF_SCALE_F32_ID,mgr,nb);
  212. break;
  213. case BasicTestsF32::TEST_DOT_PROD_F32_31:
  214. ref.reload(BasicTestsF32::REF_DOT_LONG_F32_ID,mgr);
  215. break;
  216. case BasicTestsF32::TEST_ABS_F32_32:
  217. ref.reload(BasicTestsF32::REF_ABS_F32_ID,mgr,nb);
  218. break;
  219. case BasicTestsF32::TEST_CLIP_F32_33:
  220. ref.reload(BasicTestsF32::REF_CLIP1_F32_ID,mgr);
  221. input1.reload(BasicTestsF32::INPUT_CLIP_F32_ID,mgr,ref.nbSamples());
  222. // Must be coherent with Python script used to generate test patterns
  223. this->min=-0.5f;
  224. this->max=-0.1f;
  225. break;
  226. case BasicTestsF32::TEST_CLIP_F32_34:
  227. ref.reload(BasicTestsF32::REF_CLIP2_F32_ID,mgr);
  228. input1.reload(BasicTestsF32::INPUT_CLIP_F32_ID,mgr,ref.nbSamples());
  229. // Must be coherent with Python script used to generate test patterns
  230. this->min=-0.5f;
  231. this->max=0.5f;
  232. break;
  233. case BasicTestsF32::TEST_CLIP_F32_35:
  234. ref.reload(BasicTestsF32::REF_CLIP3_F32_ID,mgr);
  235. input1.reload(BasicTestsF32::INPUT_CLIP_F32_ID,mgr,ref.nbSamples());
  236. // Must be coherent with Python script used to generate test patterns
  237. this->min=0.1f;
  238. this->max=0.5f;
  239. break;
  240. }
  241. if (id < TEST_CLIP_F32_33)
  242. {
  243. input1.reload(BasicTestsF32::INPUT1_F32_ID,mgr,nb);
  244. input2.reload(BasicTestsF32::INPUT2_F32_ID,mgr,nb);
  245. }
  246. output.create(ref.nbSamples(),BasicTestsF32::OUT_SAMPLES_F32_ID,mgr);
  247. }
  248. void BasicTestsF32::tearDown(Testing::testID_t id,Client::PatternMgr *mgr)
  249. {
  250. (void)id;
  251. output.dump(mgr);
  252. }