UnaryTestsF64.cpp 4.9 KB

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