BasicTestsF32.cpp 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264
  1. #include "BasicTestsF32.h"
  2. #include "Error.h"
  3. #define SNR_THRESHOLD 120
  4. /*
  5. Reference patterns are generated with
  6. a double precision computation.
  7. */
  8. #define REL_ERROR (1.0e-6)
  9. #define GET_F32_PTR() \
  10. const float32_t *inp1=input1.ptr(); \
  11. const float32_t *inp2=input2.ptr(); \
  12. float32_t *refp=ref.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_sub_f32()
  23. {
  24. GET_F32_PTR();
  25. arm_sub_f32(inp1,inp2,outp,input1.nbSamples());
  26. ASSERT_EMPTY_TAIL(output);
  27. ASSERT_SNR(output,ref,(float32_t)SNR_THRESHOLD);
  28. ASSERT_REL_ERROR(output,ref,REL_ERROR);
  29. }
  30. void BasicTestsF32::test_mult_f32()
  31. {
  32. GET_F32_PTR();
  33. arm_mult_f32(inp1,inp2,outp,input1.nbSamples());
  34. ASSERT_EMPTY_TAIL(output);
  35. ASSERT_SNR(output,ref,(float32_t)SNR_THRESHOLD);
  36. ASSERT_REL_ERROR(output,ref,REL_ERROR);
  37. }
  38. void BasicTestsF32::test_negate_f32()
  39. {
  40. GET_F32_PTR();
  41. arm_negate_f32(inp1,outp,input1.nbSamples());
  42. ASSERT_EMPTY_TAIL(output);
  43. ASSERT_SNR(output,ref,(float32_t)SNR_THRESHOLD);
  44. ASSERT_REL_ERROR(output,ref,REL_ERROR);
  45. }
  46. void BasicTestsF32::test_offset_f32()
  47. {
  48. GET_F32_PTR();
  49. arm_offset_f32(inp1,0.5,outp,input1.nbSamples());
  50. ASSERT_EMPTY_TAIL(output);
  51. ASSERT_SNR(output,ref,(float32_t)SNR_THRESHOLD);
  52. ASSERT_REL_ERROR(output,ref,REL_ERROR);
  53. }
  54. void BasicTestsF32::test_scale_f32()
  55. {
  56. GET_F32_PTR();
  57. arm_scale_f32(inp1,0.5,outp,input1.nbSamples());
  58. ASSERT_EMPTY_TAIL(output);
  59. ASSERT_SNR(output,ref,(float32_t)SNR_THRESHOLD);
  60. ASSERT_REL_ERROR(output,ref,REL_ERROR);
  61. }
  62. void BasicTestsF32::test_dot_prod_f32()
  63. {
  64. float32_t r;
  65. GET_F32_PTR();
  66. arm_dot_prod_f32(inp1,inp2,input1.nbSamples(),&r);
  67. outp[0] = r;
  68. ASSERT_SNR(output,ref,(float32_t)SNR_THRESHOLD);
  69. ASSERT_REL_ERROR(output,ref,REL_ERROR);
  70. ASSERT_EMPTY_TAIL(output);
  71. }
  72. void BasicTestsF32::test_abs_f32()
  73. {
  74. GET_F32_PTR();
  75. arm_abs_f32(inp1,outp,input1.nbSamples());
  76. ASSERT_EMPTY_TAIL(output);
  77. ASSERT_SNR(output,ref,(float32_t)SNR_THRESHOLD);
  78. ASSERT_REL_ERROR(output,ref,REL_ERROR);
  79. }
  80. void BasicTestsF32::setUp(Testing::testID_t id,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr)
  81. {
  82. Testing::nbSamples_t nb=MAX_NB_SAMPLES;
  83. switch(id)
  84. {
  85. case BasicTestsF32::TEST_ADD_F32_1:
  86. nb = 3;
  87. ref.reload(BasicTestsF32::REF_ADD_F32_ID,mgr,nb);
  88. break;
  89. case BasicTestsF32::TEST_ADD_F32_2:
  90. nb = 8;
  91. ref.reload(BasicTestsF32::REF_ADD_F32_ID,mgr,nb);
  92. break;
  93. case BasicTestsF32::TEST_ADD_F32_3:
  94. nb = 9;
  95. ref.reload(BasicTestsF32::REF_ADD_F32_ID,mgr,nb);
  96. break;
  97. case BasicTestsF32::TEST_SUB_F32_4:
  98. nb = 3;
  99. ref.reload(BasicTestsF32::REF_SUB_F32_ID,mgr,nb);
  100. break;
  101. case BasicTestsF32::TEST_SUB_F32_5:
  102. nb = 8;
  103. ref.reload(BasicTestsF32::REF_SUB_F32_ID,mgr,nb);
  104. break;
  105. case BasicTestsF32::TEST_SUB_F32_6:
  106. nb = 9;
  107. ref.reload(BasicTestsF32::REF_SUB_F32_ID,mgr,nb);
  108. break;
  109. case BasicTestsF32::TEST_MULT_F32_7:
  110. nb = 3;
  111. ref.reload(BasicTestsF32::REF_MULT_F32_ID,mgr,nb);
  112. break;
  113. case BasicTestsF32::TEST_MULT_F32_8:
  114. nb = 8;
  115. ref.reload(BasicTestsF32::REF_MULT_F32_ID,mgr,nb);
  116. break;
  117. case BasicTestsF32::TEST_MULT_F32_9:
  118. nb = 9;
  119. ref.reload(BasicTestsF32::REF_MULT_F32_ID,mgr,nb);
  120. break;
  121. case BasicTestsF32::TEST_NEGATE_F32_10:
  122. nb = 3;
  123. ref.reload(BasicTestsF32::REF_NEGATE_F32_ID,mgr,nb);
  124. break;
  125. case BasicTestsF32::TEST_NEGATE_F32_11:
  126. nb = 8;
  127. ref.reload(BasicTestsF32::REF_NEGATE_F32_ID,mgr,nb);
  128. break;
  129. case BasicTestsF32::TEST_NEGATE_F32_12:
  130. nb = 9;
  131. ref.reload(BasicTestsF32::REF_NEGATE_F32_ID,mgr,nb);
  132. break;
  133. case BasicTestsF32::TEST_OFFSET_F32_13:
  134. nb = 3;
  135. ref.reload(BasicTestsF32::REF_OFFSET_F32_ID,mgr,nb);
  136. break;
  137. case BasicTestsF32::TEST_OFFSET_F32_14:
  138. nb = 8;
  139. ref.reload(BasicTestsF32::REF_OFFSET_F32_ID,mgr,nb);
  140. break;
  141. case BasicTestsF32::TEST_OFFSET_F32_15:
  142. nb = 9;
  143. ref.reload(BasicTestsF32::REF_OFFSET_F32_ID,mgr,nb);
  144. break;
  145. case BasicTestsF32::TEST_SCALE_F32_16:
  146. nb = 3;
  147. ref.reload(BasicTestsF32::REF_SCALE_F32_ID,mgr,nb);
  148. break;
  149. case BasicTestsF32::TEST_SCALE_F32_17:
  150. nb = 8;
  151. ref.reload(BasicTestsF32::REF_SCALE_F32_ID,mgr,nb);
  152. break;
  153. case BasicTestsF32::TEST_SCALE_F32_18:
  154. nb = 9;
  155. ref.reload(BasicTestsF32::REF_SCALE_F32_ID,mgr,nb);
  156. break;
  157. case BasicTestsF32::TEST_DOT_PROD_F32_19:
  158. nb = 3;
  159. ref.reload(BasicTestsF32::REF_DOT_3_F32_ID,mgr);
  160. break;
  161. case BasicTestsF32::TEST_DOT_PROD_F32_20:
  162. nb = 8;
  163. ref.reload(BasicTestsF32::REF_DOT_4N_F32_ID,mgr);
  164. break;
  165. case BasicTestsF32::TEST_DOT_PROD_F32_21:
  166. nb = 9;
  167. ref.reload(BasicTestsF32::REF_DOT_4N1_F32_ID,mgr);
  168. break;
  169. case BasicTestsF32::TEST_ABS_F32_22:
  170. nb = 3;
  171. ref.reload(BasicTestsF32::REF_ABS_F32_ID,mgr,nb);
  172. break;
  173. case BasicTestsF32::TEST_ABS_F32_23:
  174. nb = 8;
  175. ref.reload(BasicTestsF32::REF_ABS_F32_ID,mgr,nb);
  176. break;
  177. case BasicTestsF32::TEST_ABS_F32_24:
  178. nb = 9;
  179. ref.reload(BasicTestsF32::REF_ABS_F32_ID,mgr,nb);
  180. break;
  181. }
  182. input1.reload(BasicTestsF32::INPUT1_F32_ID,mgr,nb);
  183. input2.reload(BasicTestsF32::INPUT2_F32_ID,mgr,nb);
  184. output.create(ref.nbSamples(),BasicTestsF32::OUT_SAMPLES_F32_ID,mgr);
  185. }
  186. void BasicTestsF32::tearDown(Testing::testID_t id,Client::PatternMgr *mgr)
  187. {
  188. output.dump(mgr);
  189. }