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.6 kB

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