UnaryTestsF64.cpp 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. #include "arm_math.h"
  2. #include "UnaryTestsF64.h"
  3. #include <stdio.h>
  4. #include "Error.h"
  5. #define SNR_THRESHOLD 120
  6. /*
  7. Reference patterns are generated with
  8. a double precision computation.
  9. */
  10. #define REL_ERROR (1.0e-6)
  11. #define ABS_ERROR (1.0e-5)
  12. #define LOADDATA2() \
  13. const float64_t *inp1=input1.ptr(); \
  14. const float64_t *inp2=input2.ptr(); \
  15. \
  16. float64_t *ap=a.ptr(); \
  17. float64_t *bp=b.ptr(); \
  18. \
  19. float64_t *outp=output.ptr(); \
  20. int16_t *dimsp = dims.ptr(); \
  21. int nbMatrixes = dims.nbSamples() >> 1;\
  22. int rows,columns; \
  23. int i;
  24. #define LOADDATA1() \
  25. const float64_t *inp1=input1.ptr(); \
  26. \
  27. float64_t *ap=a.ptr(); \
  28. \
  29. float64_t *outp=output.ptr(); \
  30. int16_t *dimsp = dims.ptr(); \
  31. int nbMatrixes = dims.nbSamples() >> 1;\
  32. int rows,columns; \
  33. int i;
  34. #define PREPAREDATA2() \
  35. in1.numRows=rows; \
  36. in1.numCols=columns; \
  37. memcpy((void*)ap,(const void*)inp1,sizeof(float64_t)*rows*columns);\
  38. in1.pData = ap; \
  39. \
  40. in2.numRows=rows; \
  41. in2.numCols=columns; \
  42. memcpy((void*)bp,(const void*)inp2,sizeof(float64_t)*rows*columns);\
  43. in2.pData = bp; \
  44. \
  45. out.numRows=rows; \
  46. out.numCols=columns; \
  47. out.pData = outp;
  48. #define PREPAREDATA1(TRANSPOSED) \
  49. in1.numRows=rows; \
  50. in1.numCols=columns; \
  51. memcpy((void*)ap,(const void*)inp1,sizeof(float64_t)*rows*columns);\
  52. in1.pData = ap; \
  53. \
  54. if (TRANSPOSED) \
  55. { \
  56. out.numRows=columns; \
  57. out.numCols=rows; \
  58. } \
  59. else \
  60. { \
  61. out.numRows=rows; \
  62. out.numCols=columns; \
  63. } \
  64. out.pData = outp;
  65. void UnaryTestsF64::test_mat_inverse_f64()
  66. {
  67. const float64_t *inp1=input1.ptr();
  68. float64_t *ap=a.ptr();
  69. float64_t *outp=output.ptr();
  70. int16_t *dimsp = dims.ptr();
  71. int nbMatrixes = dims.nbSamples();
  72. int rows,columns;
  73. int i;
  74. for(i=0;i < nbMatrixes ; i ++)
  75. {
  76. rows = *dimsp++;
  77. columns = rows;
  78. PREPAREDATA1(false);
  79. arm_mat_inverse_f64(&this->in1,&this->out);
  80. outp += (rows * columns);
  81. inp1 += (rows * columns);
  82. }
  83. ASSERT_EMPTY_TAIL(output);
  84. ASSERT_SNR(output,ref,(float64_t)SNR_THRESHOLD);
  85. ASSERT_CLOSE_ERROR(output,ref,ABS_ERROR,REL_ERROR);
  86. }
  87. void UnaryTestsF64::setUp(Testing::testID_t id,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr)
  88. {
  89. switch(id)
  90. {
  91. case TEST_MAT_INVERSE_F64_5:
  92. input1.reload(UnaryTestsF64::INPUTSINV_F64_ID,mgr);
  93. dims.reload(UnaryTestsF64::DIMSINVERT1_S16_ID,mgr);
  94. ref.reload(UnaryTestsF64::REFINV1_F64_ID,mgr);
  95. output.create(ref.nbSamples(),UnaryTestsF64::OUT_F64_ID,mgr);
  96. a.create(ref.nbSamples(),UnaryTestsF64::TMPA_F64_ID,mgr);
  97. break;
  98. }
  99. }
  100. void UnaryTestsF64::tearDown(Testing::testID_t id,Client::PatternMgr *mgr)
  101. {
  102. output.dump(mgr);
  103. }