DistanceTestsF32.cpp 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298
  1. #include "DistanceTestsF32.h"
  2. #include <stdio.h>
  3. #include "Error.h"
  4. #include "Test.h"
  5. void DistanceTestsF32::test_braycurtis_distance_f32()
  6. {
  7. const float32_t *inpA = inputA.ptr();
  8. const float32_t *inpB = inputB.ptr();
  9. float32_t *outp = output.ptr();
  10. for(int i=0; i < this->nbPatterns ; i ++)
  11. {
  12. *outp = arm_braycurtis_distance_f32(inpA, inpB, this->vecDim);
  13. inpA += this->vecDim;
  14. inpB += this->vecDim;
  15. outp ++;
  16. }
  17. ASSERT_NEAR_EQ(output,ref,(float32_t)1e-3);
  18. }
  19. void DistanceTestsF32::test_canberra_distance_f32()
  20. {
  21. const float32_t *inpA = inputA.ptr();
  22. const float32_t *inpB = inputB.ptr();
  23. float32_t *outp = output.ptr();
  24. for(int i=0; i < this->nbPatterns ; i ++)
  25. {
  26. *outp = arm_canberra_distance_f32(inpA, inpB, this->vecDim);
  27. inpA += this->vecDim;
  28. inpB += this->vecDim;
  29. outp ++;
  30. }
  31. ASSERT_NEAR_EQ(output,ref,(float32_t)1e-3);
  32. }
  33. void DistanceTestsF32::test_chebyshev_distance_f32()
  34. {
  35. const float32_t *inpA = inputA.ptr();
  36. const float32_t *inpB = inputB.ptr();
  37. float32_t *outp = output.ptr();
  38. for(int i=0; i < this->nbPatterns ; i ++)
  39. {
  40. *outp = arm_chebyshev_distance_f32(inpA, inpB, this->vecDim);
  41. inpA += this->vecDim;
  42. inpB += this->vecDim;
  43. outp ++;
  44. }
  45. ASSERT_NEAR_EQ(output,ref,(float32_t)1e-3);
  46. }
  47. void DistanceTestsF32::test_cityblock_distance_f32()
  48. {
  49. const float32_t *inpA = inputA.ptr();
  50. const float32_t *inpB = inputB.ptr();
  51. float32_t *outp = output.ptr();
  52. for(int i=0; i < this->nbPatterns ; i ++)
  53. {
  54. *outp = arm_cityblock_distance_f32(inpA, inpB, this->vecDim);
  55. inpA += this->vecDim;
  56. inpB += this->vecDim;
  57. outp ++;
  58. }
  59. ASSERT_NEAR_EQ(output,ref,(float32_t)1e-3);
  60. }
  61. void DistanceTestsF32::test_correlation_distance_f32()
  62. {
  63. const float32_t *inpA = inputA.ptr();
  64. const float32_t *inpB = inputB.ptr();
  65. float32_t *tmpap = tmpA.ptr();
  66. float32_t *tmpbp = tmpB.ptr();
  67. float32_t *outp = output.ptr();
  68. for(int i=0; i < this->nbPatterns ; i ++)
  69. {
  70. memcpy(tmpap, inpA, sizeof(float32_t) * this->vecDim);
  71. memcpy(tmpbp, inpB, sizeof(float32_t) * this->vecDim);
  72. *outp = arm_correlation_distance_f32(tmpap, tmpbp, this->vecDim);
  73. inpA += this->vecDim;
  74. inpB += this->vecDim;
  75. outp ++;
  76. }
  77. ASSERT_NEAR_EQ(output,ref,(float32_t)1e-3);
  78. }
  79. void DistanceTestsF32::test_cosine_distance_f32()
  80. {
  81. const float32_t *inpA = inputA.ptr();
  82. const float32_t *inpB = inputB.ptr();
  83. float32_t *outp = output.ptr();
  84. for(int i=0; i < this->nbPatterns ; i ++)
  85. {
  86. *outp = arm_cosine_distance_f32(inpA, inpB, this->vecDim);
  87. inpA += this->vecDim;
  88. inpB += this->vecDim;
  89. outp ++;
  90. }
  91. ASSERT_NEAR_EQ(output,ref,(float32_t)1e-3);
  92. }
  93. void DistanceTestsF32::test_euclidean_distance_f32()
  94. {
  95. const float32_t *inpA = inputA.ptr();
  96. const float32_t *inpB = inputB.ptr();
  97. float32_t *outp = output.ptr();
  98. for(int i=0; i < this->nbPatterns ; i ++)
  99. {
  100. *outp = arm_euclidean_distance_f32(inpA, inpB, this->vecDim);
  101. inpA += this->vecDim;
  102. inpB += this->vecDim;
  103. outp ++;
  104. }
  105. ASSERT_NEAR_EQ(output,ref,(float32_t)1e-3);
  106. }
  107. void DistanceTestsF32::test_jensenshannon_distance_f32()
  108. {
  109. const float32_t *inpA = inputA.ptr();
  110. const float32_t *inpB = inputB.ptr();
  111. float32_t *outp = output.ptr();
  112. for(int i=0; i < this->nbPatterns ; i ++)
  113. {
  114. *outp = arm_jensenshannon_distance_f32(inpA, inpB, this->vecDim);
  115. inpA += this->vecDim;
  116. inpB += this->vecDim;
  117. outp ++;
  118. }
  119. ASSERT_NEAR_EQ(output,ref,(float32_t)1e-3);
  120. }
  121. void DistanceTestsF32::test_minkowski_distance_f32()
  122. {
  123. const float32_t *inpA = inputA.ptr();
  124. const float32_t *inpB = inputB.ptr();
  125. const int16_t *dimsp= dims.ptr();
  126. dimsp += 2;
  127. float32_t *outp = output.ptr();
  128. for(int i=0; i < this->nbPatterns ; i ++)
  129. {
  130. *outp = arm_minkowski_distance_f32(inpA, inpB, *dimsp,this->vecDim);
  131. inpA += this->vecDim;
  132. inpB += this->vecDim;
  133. outp ++;
  134. dimsp ++;
  135. }
  136. ASSERT_NEAR_EQ(output,ref,(float32_t)1e-3);
  137. }
  138. void DistanceTestsF32::setUp(Testing::testID_t id,std::vector<Testing::param_t>& paramsArgs,Client::PatternMgr *mgr)
  139. {
  140. (void)paramsArgs;
  141. if ((id != DistanceTestsF32::TEST_MINKOWSKI_DISTANCE_F32_9) && (id != DistanceTestsF32::TEST_JENSENSHANNON_DISTANCE_F32_8))
  142. {
  143. inputA.reload(DistanceTestsF32::INPUTA_F32_ID,mgr);
  144. inputB.reload(DistanceTestsF32::INPUTB_F32_ID,mgr);
  145. dims.reload(DistanceTestsF32::DIMS_S16_ID,mgr);
  146. const int16_t *dimsp = dims.ptr();
  147. this->nbPatterns=dimsp[0];
  148. this->vecDim=dimsp[1];
  149. output.create(this->nbPatterns,DistanceTestsF32::OUT_F32_ID,mgr);
  150. }
  151. switch(id)
  152. {
  153. case DistanceTestsF32::TEST_BRAYCURTIS_DISTANCE_F32_1:
  154. {
  155. ref.reload(DistanceTestsF32::REF1_F32_ID,mgr);
  156. }
  157. break;
  158. case DistanceTestsF32::TEST_CANBERRA_DISTANCE_F32_2:
  159. {
  160. ref.reload(DistanceTestsF32::REF2_F32_ID,mgr);
  161. }
  162. break;
  163. case DistanceTestsF32::TEST_CHEBYSHEV_DISTANCE_F32_3:
  164. {
  165. ref.reload(DistanceTestsF32::REF3_F32_ID,mgr);
  166. }
  167. break;
  168. case DistanceTestsF32::TEST_CITYBLOCK_DISTANCE_F32_4:
  169. {
  170. ref.reload(DistanceTestsF32::REF4_F32_ID,mgr);
  171. }
  172. break;
  173. case DistanceTestsF32::TEST_CORRELATION_DISTANCE_F32_5:
  174. {
  175. ref.reload(DistanceTestsF32::REF5_F32_ID,mgr);
  176. tmpA.create(this->vecDim,DistanceTestsF32::TMPA_F32_ID,mgr);
  177. tmpB.create(this->vecDim,DistanceTestsF32::TMPB_F32_ID,mgr);
  178. }
  179. break;
  180. case DistanceTestsF32::TEST_COSINE_DISTANCE_F32_6:
  181. {
  182. ref.reload(DistanceTestsF32::REF6_F32_ID,mgr);
  183. }
  184. break;
  185. case DistanceTestsF32::TEST_EUCLIDEAN_DISTANCE_F32_7:
  186. {
  187. ref.reload(DistanceTestsF32::REF7_F32_ID,mgr);
  188. }
  189. break;
  190. case DistanceTestsF32::TEST_JENSENSHANNON_DISTANCE_F32_8:
  191. {
  192. inputA.reload(DistanceTestsF32::INPUTA_JEN_F32_ID,mgr);
  193. inputB.reload(DistanceTestsF32::INPUTB_JEN_F32_ID,mgr);
  194. dims.reload(DistanceTestsF32::DIMS_S16_ID,mgr);
  195. const int16_t *dimsp = dims.ptr();
  196. this->nbPatterns=dimsp[0];
  197. this->vecDim=dimsp[1];
  198. output.create(this->nbPatterns,DistanceTestsF32::OUT_F32_ID,mgr);
  199. ref.reload(DistanceTestsF32::REF8_F32_ID,mgr);
  200. }
  201. break;
  202. case DistanceTestsF32::TEST_MINKOWSKI_DISTANCE_F32_9:
  203. {
  204. inputA.reload(DistanceTestsF32::INPUTA_F32_ID,mgr);
  205. inputB.reload(DistanceTestsF32::INPUTB_F32_ID,mgr);
  206. dims.reload(DistanceTestsF32::DIMS_MINKOWSKI_S16_ID,mgr);
  207. const int16_t *dimsp = dims.ptr();
  208. this->nbPatterns=dimsp[0];
  209. this->vecDim=dimsp[1];
  210. output.create(this->nbPatterns,DistanceTestsF32::OUT_F32_ID,mgr);
  211. ref.reload(DistanceTestsF32::REF9_F32_ID,mgr);
  212. }
  213. break;
  214. }
  215. }
  216. void DistanceTestsF32::tearDown(Testing::testID_t id,Client::PatternMgr *mgr)
  217. {
  218. (void)id;
  219. output.dump(mgr);
  220. }