You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

test_gemv.c 2.5 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. #include "openblas_utest.h"
  2. #include <cblas.h>
  3. #ifndef NAN
  4. #define NAN 0.0/0.0
  5. #endif
  6. #ifndef INFINITY
  7. #define INFINITY 1.0/0.0
  8. #endif
  9. #define N 17
  10. #define Ny 33
  11. #ifdef BUILD_SINGLE
  12. CTEST(sgemv, 0_nan_inf)
  13. {
  14. int i;
  15. blasint incX = 1;
  16. blasint incY = 1;
  17. float alpha = 0.0;
  18. float beta = 0.0;
  19. char trans = 'N';
  20. float A[N * N];
  21. float X[N];
  22. float Y[N];
  23. memset(A, 0, sizeof(A));
  24. memset(X, 0, sizeof(X));
  25. for (i = 0; i < (N - 1); i += 2)
  26. {
  27. Y[i] = NAN;
  28. Y[i + 1] = INFINITY;
  29. }
  30. Y[N - 1] = NAN;
  31. BLASFUNC(sgemv)(&trans, &N, &N, &alpha, A, &N, X, &incX, &beta, Y, &incY);
  32. for (i = 0; i < N; i ++)
  33. ASSERT_TRUE(Y[i] == 0.0);
  34. }
  35. CTEST(sgemv, 0_nan_inf_incy_2)
  36. {
  37. int i;
  38. blasint incX = 1;
  39. blasint incY = 2;
  40. float alpha = 0.0;
  41. float beta = 0.0;
  42. char trans = 'N';
  43. float A[N * N];
  44. float X[N];
  45. float Y[Ny];
  46. float *ay = Y;
  47. memset(A, 0, sizeof(A));
  48. memset(X, 0, sizeof(X));
  49. memset(Y, 0, sizeof(Y));
  50. for (i = 0; i < (N - 1); i += 2)
  51. {
  52. ay[0] = NAN;
  53. ay += 2;
  54. ay[0] = INFINITY;
  55. ay += 2;
  56. }
  57. Y[Ny - 1] = NAN;
  58. BLASFUNC(sgemv)(&trans, &N, &N, &alpha, A, &N, X, &incX, &beta, Y, &incY);
  59. for (i = 0; i < Ny; i ++)
  60. ASSERT_TRUE(Y[i] == 0.0);
  61. }
  62. #endif
  63. #ifdef BUILD_DOUBLE
  64. CTEST(dgemv, 0_nan_inf)
  65. {
  66. int i;
  67. blasint incX = 1;
  68. blasint incY = 1;
  69. double alpha = 0.0;
  70. double beta = 0.0;
  71. char trans = 'N';
  72. double A[N * N];
  73. double X[N];
  74. double Y[N];
  75. memset(A, 0, sizeof(A));
  76. memset(X, 0, sizeof(X));
  77. for (i = 0; i < (N - 1); i += 2)
  78. {
  79. Y[i] = NAN;
  80. Y[i + 1] = INFINITY;
  81. }
  82. Y[N - 1] = NAN;
  83. BLASFUNC(dgemv)(&trans, &N, &N, &alpha, A, &N, X, &incX, &beta, Y, &incY);
  84. for (i = 0; i < N; i ++)
  85. ASSERT_TRUE(Y[i] == 0.0);
  86. }
  87. CTEST(dgemv, 0_nan_inf_incy_2)
  88. {
  89. int i;
  90. blasint incX = 1;
  91. blasint incY = 2;
  92. double alpha = 0.0;
  93. double beta = 0.0;
  94. char trans = 'N';
  95. double A[N * N];
  96. double X[N];
  97. double Y[Ny];
  98. double *ay = Y;
  99. memset(A, 0, sizeof(A));
  100. memset(X, 0, sizeof(X));
  101. memset(Y, 0, sizeof(Y));
  102. for (i = 0; i < (N - 1); i += 2)
  103. {
  104. ay[0] = NAN;
  105. ay += 2;
  106. ay[0] = INFINITY;
  107. ay += 2;
  108. }
  109. Y[Ny - 1] = NAN;
  110. BLASFUNC(dgemv)(&trans, &N, &N, &alpha, A, &N, X, &incX, &beta, Y, &incY);
  111. for (i = 0; i < Ny; i ++)
  112. ASSERT_TRUE(Y[i] == 0.0);
  113. }
  114. #endif