DistanceTestsF32.cpp 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297
  1. #include "DistanceTestsF32.h"
  2. #include <stdio.h>
  3. #include "Error.h"
  4. #include "arm_math.h"
  5. #include "Test.h"
  6. void DistanceTestsF32::test_braycurtis_distance_f32()
  7. {
  8. const float32_t *inpA = inputA.ptr();
  9. const float32_t *inpB = inputB.ptr();
  10. float32_t *outp = output.ptr();
  11. for(int i=0; i < this->nbPatterns ; i ++)
  12. {
  13. *outp = arm_braycurtis_distance_f32(inpA, inpB, this->vecDim);
  14. inpA += this->vecDim;
  15. inpB += this->vecDim;
  16. outp ++;
  17. }
  18. ASSERT_NEAR_EQ(output,ref,(float32_t)1e-3);
  19. }
  20. void DistanceTestsF32::test_canberra_distance_f32()
  21. {
  22. const float32_t *inpA = inputA.ptr();
  23. const float32_t *inpB = inputB.ptr();
  24. float32_t *outp = output.ptr();
  25. for(int i=0; i < this->nbPatterns ; i ++)
  26. {
  27. *outp = arm_canberra_distance_f32(inpA, inpB, this->vecDim);
  28. inpA += this->vecDim;
  29. inpB += this->vecDim;
  30. outp ++;
  31. }
  32. ASSERT_NEAR_EQ(output,ref,(float32_t)1e-3);
  33. }
  34. void DistanceTestsF32::test_chebyshev_distance_f32()
  35. {
  36. const float32_t *inpA = inputA.ptr();
  37. const float32_t *inpB = inputB.ptr();
  38. float32_t *outp = output.ptr();
  39. for(int i=0; i < this->nbPatterns ; i ++)
  40. {
  41. *outp = arm_chebyshev_distance_f32(inpA, inpB, this->vecDim);
  42. inpA += this->vecDim;
  43. inpB += this->vecDim;
  44. outp ++;
  45. }
  46. ASSERT_NEAR_EQ(output,ref,(float32_t)1e-3);
  47. }
  48. void DistanceTestsF32::test_cityblock_distance_f32()
  49. {
  50. const float32_t *inpA = inputA.ptr();
  51. const float32_t *inpB = inputB.ptr();
  52. float32_t *outp = output.ptr();
  53. for(int i=0; i < this->nbPatterns ; i ++)
  54. {
  55. *outp = arm_cityblock_distance_f32(inpA, inpB, this->vecDim);
  56. inpA += this->vecDim;
  57. inpB += this->vecDim;
  58. outp ++;
  59. }
  60. ASSERT_NEAR_EQ(output,ref,(float32_t)1e-3);
  61. }
  62. void DistanceTestsF32::test_correlation_distance_f32()
  63. {
  64. const float32_t *inpA = inputA.ptr();
  65. const float32_t *inpB = inputB.ptr();
  66. float32_t *tmpap = tmpA.ptr();
  67. float32_t *tmpbp = tmpB.ptr();
  68. float32_t *outp = output.ptr();
  69. for(int i=0; i < this->nbPatterns ; i ++)
  70. {
  71. memcpy(tmpap, inpA, sizeof(float32_t) * this->vecDim);
  72. memcpy(tmpbp, inpB, sizeof(float32_t) * this->vecDim);
  73. *outp = arm_correlation_distance_f32(tmpap, tmpbp, this->vecDim);
  74. inpA += this->vecDim;
  75. inpB += this->vecDim;
  76. outp ++;
  77. }
  78. ASSERT_NEAR_EQ(output,ref,(float32_t)1e-3);
  79. }
  80. void DistanceTestsF32::test_cosine_distance_f32()
  81. {
  82. const float32_t *inpA = inputA.ptr();
  83. const float32_t *inpB = inputB.ptr();
  84. float32_t *outp = output.ptr();
  85. for(int i=0; i < this->nbPatterns ; i ++)
  86. {
  87. *outp = arm_cosine_distance_f32(inpA, inpB, this->vecDim);
  88. inpA += this->vecDim;
  89. inpB += this->vecDim;
  90. outp ++;
  91. }
  92. ASSERT_NEAR_EQ(output,ref,(float32_t)1e-3);
  93. }
  94. void DistanceTestsF32::test_euclidean_distance_f32()
  95. {
  96. const float32_t *inpA = inputA.ptr();
  97. const float32_t *inpB = inputB.ptr();
  98. float32_t *outp = output.ptr();
  99. for(int i=0; i < this->nbPatterns ; i ++)
  100. {
  101. *outp = arm_euclidean_distance_f32(inpA, inpB, this->vecDim);
  102. inpA += this->vecDim;
  103. inpB += this->vecDim;
  104. outp ++;
  105. }
  106. ASSERT_NEAR_EQ(output,ref,(float32_t)1e-3);
  107. }
  108. void DistanceTestsF32::test_jensenshannon_distance_f32()
  109. {
  110. const float32_t *inpA = inputA.ptr();
  111. const float32_t *inpB = inputB.ptr();
  112. float32_t *outp = output.ptr();
  113. for(int i=0; i < this->nbPatterns ; i ++)
  114. {
  115. *outp = arm_jensenshannon_distance_f32(inpA, inpB, this->vecDim);
  116. inpA += this->vecDim;
  117. inpB += this->vecDim;
  118. outp ++;
  119. }
  120. ASSERT_NEAR_EQ(output,ref,(float32_t)1e-3);
  121. }
  122. void DistanceTestsF32::test_minkowski_distance_f32()
  123. {
  124. const float32_t *inpA = inputA.ptr();
  125. const float32_t *inpB = inputB.ptr();
  126. const int16_t *dimsp= dims.ptr();
  127. dimsp += 2;
  128. float32_t *outp = output.ptr();
  129. for(int i=0; i < this->nbPatterns ; i ++)
  130. {
  131. *outp = arm_minkowski_distance_f32(inpA, inpB, *dimsp,this->vecDim);
  132. inpA += this->vecDim;
  133. inpB += this->vecDim;
  134. outp ++;
  135. dimsp ++;
  136. }
  137. ASSERT_NEAR_EQ(output,ref,(float32_t)1e-3);
  138. }
  139. void DistanceTestsF32::setUp(Testing::testID_t id,std::vector<Testing::param_t>& paramsArgs,Client::PatternMgr *mgr)
  140. {
  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. output.dump(mgr);
  219. }