BasicTestsF64.cpp 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350
  1. #include "BasicTestsF64.h"
  2. #include <stdio.h>
  3. #include "Error.h"
  4. #define SNR_THRESHOLD 250
  5. /*
  6. Reference patterns are generated with
  7. a double precision computation.
  8. */
  9. #define REL_ERROR (2.0e-13)
  10. #define GET_F64_PTR() \
  11. const float64_t *inp1=input1.ptr(); \
  12. const float64_t *inp2=input2.ptr(); \
  13. float64_t *outp=output.ptr();
  14. void BasicTestsF64::test_add_f64()
  15. {
  16. GET_F64_PTR();
  17. arm_add_f64(inp1,inp2,outp,input1.nbSamples());
  18. ASSERT_EMPTY_TAIL(output);
  19. ASSERT_SNR(output,ref,(float64_t)SNR_THRESHOLD);
  20. ASSERT_REL_ERROR(output,ref,REL_ERROR);
  21. }
  22. /*
  23. void BasicTestsF64::test_clip_f64()
  24. {
  25. const float64_t *inp=input1.ptr();
  26. float64_t *outp=output.ptr();
  27. arm_clip_f64(inp,outp,this->min, this->max,input1.nbSamples());
  28. ASSERT_EMPTY_TAIL(output);
  29. ASSERT_SNR(output,ref,(float64_t)SNR_THRESHOLD);
  30. ASSERT_REL_ERROR(output,ref,REL_ERROR);
  31. }
  32. */
  33. void BasicTestsF64::test_sub_f64()
  34. {
  35. GET_F64_PTR();
  36. arm_sub_f64(inp1,inp2,outp,input1.nbSamples());
  37. ASSERT_EMPTY_TAIL(output);
  38. ASSERT_SNR(output,ref,(float64_t)SNR_THRESHOLD);
  39. ASSERT_REL_ERROR(output,ref,REL_ERROR);
  40. }
  41. void BasicTestsF64::test_mult_f64()
  42. {
  43. GET_F64_PTR();
  44. arm_mult_f64(inp1,inp2,outp,input1.nbSamples());
  45. ASSERT_EMPTY_TAIL(output);
  46. ASSERT_SNR(output,ref,(float64_t)SNR_THRESHOLD);
  47. ASSERT_REL_ERROR(output,ref,REL_ERROR);
  48. }
  49. void BasicTestsF64::test_negate_f64()
  50. {
  51. GET_F64_PTR();
  52. (void)inp2;
  53. arm_negate_f64(inp1,outp,input1.nbSamples());
  54. ASSERT_EMPTY_TAIL(output);
  55. ASSERT_SNR(output,ref,(float64_t)SNR_THRESHOLD);
  56. ASSERT_REL_ERROR(output,ref,REL_ERROR);
  57. }
  58. void BasicTestsF64::test_offset_f64()
  59. {
  60. GET_F64_PTR();
  61. (void)inp2;
  62. arm_offset_f64(inp1,0.5,outp,input1.nbSamples());
  63. ASSERT_EMPTY_TAIL(output);
  64. ASSERT_SNR(output,ref,(float64_t)SNR_THRESHOLD);
  65. ASSERT_REL_ERROR(output,ref,REL_ERROR);
  66. }
  67. void BasicTestsF64::test_scale_f64()
  68. {
  69. GET_F64_PTR();
  70. (void)inp2;
  71. arm_scale_f64(inp1,0.5,outp,input1.nbSamples());
  72. ASSERT_EMPTY_TAIL(output);
  73. ASSERT_SNR(output,ref,(float64_t)SNR_THRESHOLD);
  74. ASSERT_REL_ERROR(output,ref,REL_ERROR);
  75. }
  76. void BasicTestsF64::test_dot_prod_f64()
  77. {
  78. float64_t r;
  79. GET_F64_PTR();
  80. arm_dot_prod_f64(inp1,inp2,input1.nbSamples(),&r);
  81. outp[0] = r;
  82. ASSERT_SNR(output,ref,(float64_t)SNR_THRESHOLD);
  83. ASSERT_REL_ERROR(output,ref,REL_ERROR);
  84. ASSERT_EMPTY_TAIL(output);
  85. }
  86. void BasicTestsF64::test_abs_f64()
  87. {
  88. GET_F64_PTR();
  89. (void)inp2;
  90. arm_abs_f64(inp1,outp,input1.nbSamples());
  91. ASSERT_EMPTY_TAIL(output);
  92. ASSERT_SNR(output,ref,(float64_t)SNR_THRESHOLD);
  93. ASSERT_REL_ERROR(output,ref,REL_ERROR);
  94. }
  95. void BasicTestsF64::setUp(Testing::testID_t id,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr)
  96. {
  97. (void)params;
  98. Testing::nbSamples_t nb=MAX_NB_SAMPLES;
  99. switch(id)
  100. {
  101. case BasicTestsF64::TEST_ADD_F64_1:
  102. nb = 2;
  103. ref.reload(BasicTestsF64::REF_ADD_F64_ID,mgr,nb);
  104. break;
  105. case BasicTestsF64::TEST_ADD_F64_2:
  106. nb = 4;
  107. ref.reload(BasicTestsF64::REF_ADD_F64_ID,mgr,nb);
  108. break;
  109. case BasicTestsF64::TEST_ADD_F64_3:
  110. nb = 5;
  111. ref.reload(BasicTestsF64::REF_ADD_F64_ID,mgr,nb);
  112. break;
  113. case BasicTestsF64::TEST_SUB_F64_4:
  114. nb = 2;
  115. ref.reload(BasicTestsF64::REF_SUB_F64_ID,mgr,nb);
  116. break;
  117. case BasicTestsF64::TEST_SUB_F64_5:
  118. nb = 4;
  119. ref.reload(BasicTestsF64::REF_SUB_F64_ID,mgr,nb);
  120. break;
  121. case BasicTestsF64::TEST_SUB_F64_6:
  122. nb = 5;
  123. ref.reload(BasicTestsF64::REF_SUB_F64_ID,mgr,nb);
  124. break;
  125. case BasicTestsF64::TEST_MULT_F64_7:
  126. nb = 2;
  127. ref.reload(BasicTestsF64::REF_MULT_F64_ID,mgr,nb);
  128. break;
  129. case BasicTestsF64::TEST_MULT_F64_8:
  130. nb = 4;
  131. ref.reload(BasicTestsF64::REF_MULT_F64_ID,mgr,nb);
  132. break;
  133. case BasicTestsF64::TEST_MULT_F64_9:
  134. nb = 5;
  135. ref.reload(BasicTestsF64::REF_MULT_F64_ID,mgr,nb);
  136. break;
  137. case BasicTestsF64::TEST_NEGATE_F64_10:
  138. nb = 2;
  139. ref.reload(BasicTestsF64::REF_NEGATE_F64_ID,mgr,nb);
  140. break;
  141. case BasicTestsF64::TEST_NEGATE_F64_11:
  142. nb = 4;
  143. ref.reload(BasicTestsF64::REF_NEGATE_F64_ID,mgr,nb);
  144. break;
  145. case BasicTestsF64::TEST_NEGATE_F64_12:
  146. nb = 5;
  147. ref.reload(BasicTestsF64::REF_NEGATE_F64_ID,mgr,nb);
  148. break;
  149. case BasicTestsF64::TEST_OFFSET_F64_13:
  150. nb = 2;
  151. ref.reload(BasicTestsF64::REF_OFFSET_F64_ID,mgr,nb);
  152. break;
  153. case BasicTestsF64::TEST_OFFSET_F64_14:
  154. nb = 4;
  155. ref.reload(BasicTestsF64::REF_OFFSET_F64_ID,mgr,nb);
  156. break;
  157. case BasicTestsF64::TEST_OFFSET_F64_15:
  158. nb = 5;
  159. ref.reload(BasicTestsF64::REF_OFFSET_F64_ID,mgr,nb);
  160. break;
  161. case BasicTestsF64::TEST_SCALE_F64_16:
  162. nb = 2;
  163. ref.reload(BasicTestsF64::REF_SCALE_F64_ID,mgr,nb);
  164. break;
  165. case BasicTestsF64::TEST_SCALE_F64_17:
  166. nb = 4;
  167. ref.reload(BasicTestsF64::REF_SCALE_F64_ID,mgr,nb);
  168. break;
  169. case BasicTestsF64::TEST_SCALE_F64_18:
  170. nb = 5;
  171. ref.reload(BasicTestsF64::REF_SCALE_F64_ID,mgr,nb);
  172. break;
  173. case BasicTestsF64::TEST_DOT_PROD_F64_19:
  174. nb = 2;
  175. ref.reload(BasicTestsF64::REF_DOT_3_F64_ID,mgr);
  176. break;
  177. case BasicTestsF64::TEST_DOT_PROD_F64_20:
  178. nb = 4;
  179. ref.reload(BasicTestsF64::REF_DOT_4N_F64_ID,mgr);
  180. break;
  181. case BasicTestsF64::TEST_DOT_PROD_F64_21:
  182. nb = 5;
  183. ref.reload(BasicTestsF64::REF_DOT_4N1_F64_ID,mgr);
  184. break;
  185. case BasicTestsF64::TEST_ABS_F64_22:
  186. nb = 2;
  187. ref.reload(BasicTestsF64::REF_ABS_F64_ID,mgr,nb);
  188. break;
  189. case BasicTestsF64::TEST_ABS_F64_23:
  190. nb = 4;
  191. ref.reload(BasicTestsF64::REF_ABS_F64_ID,mgr,nb);
  192. break;
  193. case BasicTestsF64::TEST_ABS_F64_24:
  194. nb = 5;
  195. ref.reload(BasicTestsF64::REF_ABS_F64_ID,mgr,nb);
  196. break;
  197. case BasicTestsF64::TEST_ADD_F64_25:
  198. ref.reload(BasicTestsF64::REF_ADD_F64_ID,mgr,nb);
  199. break;
  200. case BasicTestsF64::TEST_SUB_F64_26:
  201. ref.reload(BasicTestsF64::REF_SUB_F64_ID,mgr,nb);
  202. break;
  203. case BasicTestsF64::TEST_MULT_F64_27:
  204. ref.reload(BasicTestsF64::REF_MULT_F64_ID,mgr,nb);
  205. break;
  206. case BasicTestsF64::TEST_NEGATE_F64_28:
  207. ref.reload(BasicTestsF64::REF_NEGATE_F64_ID,mgr,nb);
  208. break;
  209. case BasicTestsF64::TEST_OFFSET_F64_29:
  210. ref.reload(BasicTestsF64::REF_OFFSET_F64_ID,mgr,nb);
  211. break;
  212. case BasicTestsF64::TEST_SCALE_F64_30:
  213. ref.reload(BasicTestsF64::REF_SCALE_F64_ID,mgr,nb);
  214. break;
  215. case BasicTestsF64::TEST_DOT_PROD_F64_31:
  216. ref.reload(BasicTestsF64::REF_DOT_LONG_F64_ID,mgr);
  217. break;
  218. case BasicTestsF64::TEST_ABS_F64_32:
  219. ref.reload(BasicTestsF64::REF_ABS_F64_ID,mgr,nb);
  220. break;
  221. case BasicTestsF64::TEST_CLIP_F64_33:
  222. ref.reload(BasicTestsF64::REF_CLIP1_F64_ID,mgr);
  223. input1.reload(BasicTestsF64::INPUT_CLIP_F64_ID,mgr,ref.nbSamples());
  224. // Must be coherent with Python script used to generate test patterns
  225. this->min=-0.5;
  226. this->max=-0.1;
  227. break;
  228. case BasicTestsF64::TEST_CLIP_F64_34:
  229. ref.reload(BasicTestsF64::REF_CLIP2_F64_ID,mgr);
  230. input1.reload(BasicTestsF64::INPUT_CLIP_F64_ID,mgr,ref.nbSamples());
  231. // Must be coherent with Python script used to generate test patterns
  232. this->min=-0.5;
  233. this->max=0.5;
  234. break;
  235. case BasicTestsF64::TEST_CLIP_F64_35:
  236. ref.reload(BasicTestsF64::REF_CLIP3_F64_ID,mgr);
  237. input1.reload(BasicTestsF64::INPUT_CLIP_F64_ID,mgr,ref.nbSamples());
  238. // Must be coherent with Python script used to generate test patterns
  239. this->min=0.1;
  240. this->max=0.5;
  241. break;
  242. }
  243. if (id < TEST_CLIP_F64_33)
  244. {
  245. input1.reload(BasicTestsF64::INPUT1_F64_ID,mgr,nb);
  246. input2.reload(BasicTestsF64::INPUT2_F64_ID,mgr,nb);
  247. }
  248. output.create(ref.nbSamples(),BasicTestsF64::OUT_SAMPLES_F64_ID,mgr);
  249. }
  250. void BasicTestsF64::tearDown(Testing::testID_t id,Client::PatternMgr *mgr)
  251. {
  252. (void)id;
  253. output.dump(mgr);
  254. }