DistanceTestsF64.cpp 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301
  1. #include "DistanceTestsF64.h"
  2. #include <stdio.h>
  3. #include "Error.h"
  4. #include "Test.h"
  5. #define REL_ERROR (2.0e-14)
  6. /*
  7. void DistanceTestsF64::test_braycurtis_distance_f64()
  8. {
  9. const float64_t *inpA = inputA.ptr();
  10. const float64_t *inpB = inputB.ptr();
  11. float64_t *outp = output.ptr();
  12. for(int i=0; i < this->nbPatterns ; i ++)
  13. {
  14. *outp = arm_braycurtis_distance_f64(inpA, inpB, this->vecDim);
  15. inpA += this->vecDim;
  16. inpB += this->vecDim;
  17. outp ++;
  18. }
  19. ASSERT_NEAR_EQ(output,ref,(float64_t)1e-3);
  20. }
  21. void DistanceTestsF64::test_canberra_distance_f64()
  22. {
  23. const float64_t *inpA = inputA.ptr();
  24. const float64_t *inpB = inputB.ptr();
  25. float64_t *outp = output.ptr();
  26. for(int i=0; i < this->nbPatterns ; i ++)
  27. {
  28. *outp = arm_canberra_distance_f64(inpA, inpB, this->vecDim);
  29. inpA += this->vecDim;
  30. inpB += this->vecDim;
  31. outp ++;
  32. }
  33. ASSERT_NEAR_EQ(output,ref,(float64_t)1e-3);
  34. }
  35. */
  36. void DistanceTestsF64::test_chebyshev_distance_f64()
  37. {
  38. const float64_t *inpA = inputA.ptr();
  39. const float64_t *inpB = inputB.ptr();
  40. float64_t *outp = output.ptr();
  41. for(int i=0; i < this->nbPatterns ; i ++)
  42. {
  43. *outp = arm_chebyshev_distance_f64(inpA, inpB, this->vecDim);
  44. inpA += this->vecDim;
  45. inpB += this->vecDim;
  46. outp ++;
  47. }
  48. ASSERT_NEAR_EQ(output,ref,(float64_t)REL_ERROR);
  49. }
  50. void DistanceTestsF64::test_cityblock_distance_f64()
  51. {
  52. const float64_t *inpA = inputA.ptr();
  53. const float64_t *inpB = inputB.ptr();
  54. float64_t *outp = output.ptr();
  55. for(int i=0; i < this->nbPatterns ; i ++)
  56. {
  57. *outp = arm_cityblock_distance_f64(inpA, inpB, this->vecDim);
  58. inpA += this->vecDim;
  59. inpB += this->vecDim;
  60. outp ++;
  61. }
  62. ASSERT_NEAR_EQ(output,ref,(float64_t)REL_ERROR);
  63. }
  64. /*
  65. void DistanceTestsF64::test_correlation_distance_f64()
  66. {
  67. const float64_t *inpA = inputA.ptr();
  68. const float64_t *inpB = inputB.ptr();
  69. float64_t *tmpap = tmpA.ptr();
  70. float64_t *tmpbp = tmpB.ptr();
  71. float64_t *outp = output.ptr();
  72. for(int i=0; i < this->nbPatterns ; i ++)
  73. {
  74. memcpy(tmpap, inpA, sizeof(float64_t) * this->vecDim);
  75. memcpy(tmpbp, inpB, sizeof(float64_t) * this->vecDim);
  76. *outp = arm_correlation_distance_f64(tmpap, tmpbp, this->vecDim);
  77. inpA += this->vecDim;
  78. inpB += this->vecDim;
  79. outp ++;
  80. }
  81. ASSERT_NEAR_EQ(output,ref,(float64_t)1e-3);
  82. }
  83. */
  84. void DistanceTestsF64::test_cosine_distance_f64()
  85. {
  86. const float64_t *inpA = inputA.ptr();
  87. const float64_t *inpB = inputB.ptr();
  88. float64_t *outp = output.ptr();
  89. for(int i=0; i < this->nbPatterns ; i ++)
  90. {
  91. *outp = arm_cosine_distance_f64(inpA, inpB, this->vecDim);
  92. inpA += this->vecDim;
  93. inpB += this->vecDim;
  94. outp ++;
  95. }
  96. ASSERT_NEAR_EQ(output,ref,(float64_t)REL_ERROR);
  97. }
  98. void DistanceTestsF64::test_euclidean_distance_f64()
  99. {
  100. const float64_t *inpA = inputA.ptr();
  101. const float64_t *inpB = inputB.ptr();
  102. float64_t *outp = output.ptr();
  103. for(int i=0; i < this->nbPatterns ; i ++)
  104. {
  105. *outp = arm_euclidean_distance_f64(inpA, inpB, this->vecDim);
  106. inpA += this->vecDim;
  107. inpB += this->vecDim;
  108. outp ++;
  109. }
  110. ASSERT_NEAR_EQ(output,ref,(float64_t)REL_ERROR);
  111. }
  112. /*
  113. void DistanceTestsF64::test_jensenshannon_distance_f64()
  114. {
  115. const float64_t *inpA = inputA.ptr();
  116. const float64_t *inpB = inputB.ptr();
  117. float64_t *outp = output.ptr();
  118. for(int i=0; i < this->nbPatterns ; i ++)
  119. {
  120. *outp = arm_jensenshannon_distance_f64(inpA, inpB, this->vecDim);
  121. inpA += this->vecDim;
  122. inpB += this->vecDim;
  123. outp ++;
  124. }
  125. ASSERT_NEAR_EQ(output,ref,(float64_t)1e-3);
  126. }
  127. void DistanceTestsF64::test_minkowski_distance_f64()
  128. {
  129. const float64_t *inpA = inputA.ptr();
  130. const float64_t *inpB = inputB.ptr();
  131. const int16_t *dimsp= dims.ptr();
  132. dimsp += 2;
  133. float64_t *outp = output.ptr();
  134. for(int i=0; i < this->nbPatterns ; i ++)
  135. {
  136. *outp = arm_minkowski_distance_f64(inpA, inpB, *dimsp,this->vecDim);
  137. inpA += this->vecDim;
  138. inpB += this->vecDim;
  139. outp ++;
  140. dimsp ++;
  141. }
  142. ASSERT_NEAR_EQ(output,ref,(float64_t)1e-3);
  143. }
  144. */
  145. void DistanceTestsF64::setUp(Testing::testID_t id,std::vector<Testing::param_t>& paramsArgs,Client::PatternMgr *mgr)
  146. {
  147. (void)paramsArgs;
  148. if ((id != DistanceTestsF64::TEST_MINKOWSKI_DISTANCE_F64_9) && (id != DistanceTestsF64::TEST_JENSENSHANNON_DISTANCE_F64_8))
  149. {
  150. inputA.reload(DistanceTestsF64::INPUTA_F64_ID,mgr);
  151. inputB.reload(DistanceTestsF64::INPUTB_F64_ID,mgr);
  152. dims.reload(DistanceTestsF64::DIMS_S16_ID,mgr);
  153. const int16_t *dimsp = dims.ptr();
  154. this->nbPatterns=dimsp[0];
  155. this->vecDim=dimsp[1];
  156. output.create(this->nbPatterns,DistanceTestsF64::OUT_F64_ID,mgr);
  157. }
  158. switch(id)
  159. {
  160. case DistanceTestsF64::TEST_BRAYCURTIS_DISTANCE_F64_1:
  161. {
  162. ref.reload(DistanceTestsF64::REF1_F64_ID,mgr);
  163. }
  164. break;
  165. case DistanceTestsF64::TEST_CANBERRA_DISTANCE_F64_2:
  166. {
  167. ref.reload(DistanceTestsF64::REF2_F64_ID,mgr);
  168. }
  169. break;
  170. case DistanceTestsF64::TEST_CHEBYSHEV_DISTANCE_F64_3:
  171. {
  172. ref.reload(DistanceTestsF64::REF3_F64_ID,mgr);
  173. }
  174. break;
  175. case DistanceTestsF64::TEST_CITYBLOCK_DISTANCE_F64_4:
  176. {
  177. ref.reload(DistanceTestsF64::REF4_F64_ID,mgr);
  178. }
  179. break;
  180. case DistanceTestsF64::TEST_CORRELATION_DISTANCE_F64_5:
  181. {
  182. ref.reload(DistanceTestsF64::REF5_F64_ID,mgr);
  183. tmpA.create(this->vecDim,DistanceTestsF64::TMPA_F64_ID,mgr);
  184. tmpB.create(this->vecDim,DistanceTestsF64::TMPB_F64_ID,mgr);
  185. }
  186. break;
  187. case DistanceTestsF64::TEST_COSINE_DISTANCE_F64_6:
  188. {
  189. ref.reload(DistanceTestsF64::REF6_F64_ID,mgr);
  190. }
  191. break;
  192. case DistanceTestsF64::TEST_EUCLIDEAN_DISTANCE_F64_7:
  193. {
  194. ref.reload(DistanceTestsF64::REF7_F64_ID,mgr);
  195. }
  196. break;
  197. case DistanceTestsF64::TEST_JENSENSHANNON_DISTANCE_F64_8:
  198. {
  199. inputA.reload(DistanceTestsF64::INPUTA_JEN_F64_ID,mgr);
  200. inputB.reload(DistanceTestsF64::INPUTB_JEN_F64_ID,mgr);
  201. dims.reload(DistanceTestsF64::DIMS_S16_ID,mgr);
  202. const int16_t *dimsp = dims.ptr();
  203. this->nbPatterns=dimsp[0];
  204. this->vecDim=dimsp[1];
  205. output.create(this->nbPatterns,DistanceTestsF64::OUT_F64_ID,mgr);
  206. ref.reload(DistanceTestsF64::REF8_F64_ID,mgr);
  207. }
  208. break;
  209. case DistanceTestsF64::TEST_MINKOWSKI_DISTANCE_F64_9:
  210. {
  211. inputA.reload(DistanceTestsF64::INPUTA_F64_ID,mgr);
  212. inputB.reload(DistanceTestsF64::INPUTB_F64_ID,mgr);
  213. dims.reload(DistanceTestsF64::DIMS_MINKOWSKI_S16_ID,mgr);
  214. const int16_t *dimsp = dims.ptr();
  215. this->nbPatterns=dimsp[0];
  216. this->vecDim=dimsp[1];
  217. output.create(this->nbPatterns,DistanceTestsF64::OUT_F64_ID,mgr);
  218. ref.reload(DistanceTestsF64::REF9_F64_ID,mgr);
  219. }
  220. break;
  221. }
  222. }
  223. void DistanceTestsF64::tearDown(Testing::testID_t id,Client::PatternMgr *mgr)
  224. {
  225. (void)id;
  226. output.dump(mgr);
  227. }