Browse Source

utest: Add utest for {c/z}scal and {c/z}gemv

tags/v0.3.30
gxw 8 months ago
parent
commit
6954845d8d
2 changed files with 528 additions and 0 deletions
  1. +474
    -0
      utest/test_gemv.c
  2. +54
    -0
      utest/test_zscal.c

+ 474
- 0
utest/test_gemv.c View File

@@ -128,3 +128,477 @@ CTEST(dgemv, 0_nan_inf_incy_2)
}

#endif

#ifdef BUILD_COMPLEX

CTEST(cgemv, 0_nan_inf)
{
int i;
blasint N = 17;
blasint incX = 1;
blasint incY = 1;
float alpha[2] = {0.0, 0.0};
float beta[2] = {0.0, 0.0};
char trans = 'N';
float A[17 * 17 * 4];
float X[17 * 2];
float Y[17 * 2];

memset(A, 0, sizeof(A));
memset(X, 0, sizeof(X));
for (i = 0; i < (2 * N - 2); i += 4)
{
Y[i] = NAN;
Y[i + 1] = NAN;

Y[i + 2] = INFINITY;
Y[i + 3] = INFINITY;
}
Y[2 * N - 1] = NAN;
Y[2 * N - 2] = NAN;
BLASFUNC(cgemv)(&trans, &N, &N, alpha, A, &N, X, &incX, beta, Y, &incY);
for (i = 0; i < 2 * N; i ++)
ASSERT_TRUE(Y[i] == 0.0);
}

CTEST(cgemv, 0_nan_inf_incy_2)
{
int i;
blasint N = 17;
blasint incX = 1;
blasint incY = 2;
float alpha[2] = {0.0, 0.0};
float beta[2] = {0.0, 0.0};
char trans = 'N';
float A[17 * 17 * 4];
float X[17];
float Y[17 * 2 * 2];
float *ay = Y;

memset(A, 0, sizeof(A));
memset(X, 0, sizeof(X));
memset(Y, 0, sizeof(Y));
for (i = 0; i < (2 * N - 2); i += 4)
{
ay[0] = NAN;
ay[1] = NAN;
ay += 4;
ay[0] = INFINITY;
ay[1] = INFINITY;
ay += 4;
}
Y[4 * N - 4] = NAN;
Y[4 * N - 3] = NAN;
BLASFUNC(cgemv)(&trans, &N, &N, alpha, A, &N, X, &incX, beta, Y, &incY);
for (i = 0; i < 4 * N; i ++)
ASSERT_TRUE(Y[i] == 0.0);
}

CTEST(cgemv, 0_2_nan_1_inf_1)
{
int i;
blasint N = 17;
blasint incX = 1;
blasint incY = 1;
float alpha[2] = {0.0, 0.0};
float beta[2] = {0.0, 2.0};
char trans = 'N';
float A[17 * 17 * 4];
float X[17 * 2];
float Y[17 * 2];

memset(A, 0, sizeof(A));
memset(X, 0, sizeof(X));
for (i = 0; i < (2 * N - 2); i += 4)
{
Y[i] = NAN;
Y[i + 1] = 1.0;

Y[i + 2] = INFINITY;
Y[i + 3] = 1.0;
}
Y[2 * N - 2] = NAN;
Y[2 * N - 1] = 1.0;
BLASFUNC(cgemv)(&trans, &N, &N, alpha, A, &N, X, &incX, beta, Y, &incY);
for (i = 0; i < 2 * N; i += 2) {
if ((i >> 1) % 2){
ASSERT_TRUE(isnan(Y[i]));
ASSERT_TRUE(isinf(Y[i + 1]));
}
else {
ASSERT_TRUE(isnan(Y[i]));
ASSERT_TRUE(isnan(Y[i + 1]));
}
}
}

CTEST(cgemv, 0_2_nan_1_inf_1_incy_2)
{
int i;
blasint N = 17;
blasint incX = 1;
blasint incY = 2;
float alpha[2] = {0.0, 0.0};
float beta[2] = {0.0, 2.0};
char trans = 'N';
float A[17 * 17 * 4];
float X[17];
float Y[17 * 2 * 2];
float *ay = Y;

memset(A, 0, sizeof(A));
memset(X, 0, sizeof(X));
memset(Y, 0, sizeof(Y));
for (i = 0; i < (2 * N - 2); i += 4)
{
ay[0] = NAN;
ay[1] = 1.0;
ay += 4;
ay[0] = INFINITY;
ay[1] = 1.0;
ay += 4;
}
Y[4 * N - 4] = NAN;
Y[4 * N - 3] = 1.0;
BLASFUNC(cgemv)(&trans, &N, &N, alpha, A, &N, X, &incX, beta, Y, &incY);
for (i = 0; i < 4 * N; i += 2) {
if ((i >> 1) % 2) {
ASSERT_TRUE(Y[i] == 0.0);
ASSERT_TRUE(Y[i + 1] == 0.0);
}
else {
if ((i >> 2) % 2) {
ASSERT_TRUE(isnan(Y[i]));
ASSERT_TRUE(isinf(Y[i + 1]));
}
else {
ASSERT_TRUE(isnan(Y[i]));
ASSERT_TRUE(isnan(Y[i + 1]));
}
}
}
}

CTEST(cgemv, 2_0_nan_1_inf_1)
{
int i;
blasint N = 17;
blasint incX = 1;
blasint incY = 1;
float alpha[2] = {0.0, 0.0};
float beta[2] = {2.0, 0.0};
char trans = 'N';
float A[17 * 17 * 4];
float X[17 * 2];
float Y[17 * 2];

memset(A, 0, sizeof(A));
memset(X, 0, sizeof(X));
for (i = 0; i < (2 * N - 2); i += 4)
{
Y[i] = NAN;
Y[i + 1] = 1.0;

Y[i + 2] = INFINITY;
Y[i + 3] = 1.0;
}
Y[2 * N - 2] = NAN;
Y[2 * N - 1] = 1.0;
BLASFUNC(cgemv)(&trans, &N, &N, alpha, A, &N, X, &incX, beta, Y, &incY);
for (i = 0; i < 2 * N; i += 2) {
if ((i >> 1) % 2){
ASSERT_TRUE(isinf(Y[i]));
ASSERT_TRUE(isnan(Y[i + 1]));
}
else {
ASSERT_TRUE(isnan(Y[i]));
ASSERT_TRUE(isnan(Y[i + 1]));
}
}
}

CTEST(cgemv, 2_0_nan_1_inf_1_incy_2)
{
int i;
blasint N = 17;
blasint incX = 1;
blasint incY = 2;
float alpha[2] = {0.0, 0.0};
float beta[2] = {2.0, 0.0};
char trans = 'N';
float A[17 * 17 * 4];
float X[17];
float Y[17 * 2 * 2];
float *ay = Y;

memset(A, 0, sizeof(A));
memset(X, 0, sizeof(X));
memset(Y, 0, sizeof(Y));
for (i = 0; i < (2 * N - 2); i += 4)
{
ay[0] = NAN;
ay[1] = 1.0;
ay += 4;
ay[0] = INFINITY;
ay[1] = 1.0;
ay += 4;
}
Y[4 * N - 4] = NAN;
Y[4 * N - 3] = 1.0;
BLASFUNC(cgemv)(&trans, &N, &N, alpha, A, &N, X, &incX, beta, Y, &incY);
for (i = 0; i < 4 * N; i += 2) {
if ((i >> 1) % 2) {
ASSERT_TRUE(Y[i] == 0.0);
ASSERT_TRUE(Y[i + 1] == 0.0);
}
else {
if ((i >> 2) % 2) {
ASSERT_TRUE(isinf(Y[i]));
ASSERT_TRUE(isnan(Y[i + 1]));
}
else {
ASSERT_TRUE(isnan(Y[i]));
ASSERT_TRUE(isnan(Y[i + 1]));
}
}
}
}

#endif

#ifdef BUILD_COMPLEX16

CTEST(zgemv, 0_nan_inf)
{
int i;
blasint N = 17;
blasint incX = 1;
blasint incY = 1;
double alpha[2] = {0.0, 0.0};
double beta[2] = {0.0, 0.0};
char trans = 'N';
double A[17 * 17 * 4];
double X[17 * 2];
double Y[17 * 2];

memset(A, 0, sizeof(A));
memset(X, 0, sizeof(X));
for (i = 0; i < (2 * N - 2); i += 4)
{
Y[i] = NAN;
Y[i + 1] = NAN;

Y[i + 2] = INFINITY;
Y[i + 3] = INFINITY;
}
Y[2 * N - 1] = NAN;
Y[2 * N - 2] = NAN;
BLASFUNC(zgemv)(&trans, &N, &N, alpha, A, &N, X, &incX, beta, Y, &incY);
for (i = 0; i < 2 * N; i ++)
ASSERT_TRUE(Y[i] == 0.0);
}

CTEST(zgemv, 0_nan_inf_incy_2)
{
int i;
blasint N = 17;
blasint incX = 1;
blasint incY = 2;
double alpha[2] = {0.0, 0.0};
double beta[2] = {0.0, 0.0};
char trans = 'N';
double A[17 * 17 * 4];
double X[17];
double Y[17 * 2 * 2];
double *ay = Y;

memset(A, 0, sizeof(A));
memset(X, 0, sizeof(X));
memset(Y, 0, sizeof(Y));
for (i = 0; i < (2 * N - 2); i += 4)
{
ay[0] = NAN;
ay[1] = NAN;
ay += 4;
ay[0] = INFINITY;
ay[1] = INFINITY;
ay += 4;
}
Y[4 * N - 4] = NAN;
Y[4 * N - 3] = NAN;
BLASFUNC(zgemv)(&trans, &N, &N, alpha, A, &N, X, &incX, beta, Y, &incY);
for (i = 0; i < 4 * N; i ++)
ASSERT_TRUE(Y[i] == 0.0);
}

CTEST(zgemv, 0_2_nan_1_inf_1)
{
int i;
blasint N = 17;
blasint incX = 1;
blasint incY = 1;
double alpha[2] = {0.0, 0.0};
double beta[2] = {0.0, 2.0};
char trans = 'N';
double A[17 * 17 * 4];
double X[17 * 2];
double Y[17 * 2];

memset(A, 0, sizeof(A));
memset(X, 0, sizeof(X));
for (i = 0; i < (2 * N - 2); i += 4)
{
Y[i] = NAN;
Y[i + 1] = 1.0;

Y[i + 2] = INFINITY;
Y[i + 3] = 1.0;
}
Y[2 * N - 2] = NAN;
Y[2 * N - 1] = 1.0;
BLASFUNC(zgemv)(&trans, &N, &N, alpha, A, &N, X, &incX, beta, Y, &incY);
for (i = 0; i < 2 * N; i += 2) {
if ((i >> 1) % 2){
ASSERT_TRUE(isnan(Y[i]));
ASSERT_TRUE(isinf(Y[i + 1]));
}
else {
ASSERT_TRUE(isnan(Y[i]));
ASSERT_TRUE(isnan(Y[i + 1]));
}
}
}

CTEST(zgemv, 0_2_nan_1_inf_1_incy_2)
{
int i;
blasint N = 17;
blasint incX = 1;
blasint incY = 2;
double alpha[2] = {0.0, 0.0};
double beta[2] = {0.0, 2.0};
char trans = 'N';
double A[17 * 17 * 4];
double X[17];
double Y[17 * 2 * 2];
double *ay = Y;

memset(A, 0, sizeof(A));
memset(X, 0, sizeof(X));
memset(Y, 0, sizeof(Y));
for (i = 0; i < (2 * N - 2); i += 4)
{
ay[0] = NAN;
ay[1] = 1.0;
ay += 4;
ay[0] = INFINITY;
ay[1] = 1.0;
ay += 4;
}
Y[4 * N - 4] = NAN;
Y[4 * N - 3] = 1.0;
BLASFUNC(zgemv)(&trans, &N, &N, alpha, A, &N, X, &incX, beta, Y, &incY);
for (i = 0; i < 4 * N; i += 2) {
if ((i >> 1) % 2) {
ASSERT_TRUE(Y[i] == 0.0);
ASSERT_TRUE(Y[i + 1] == 0.0);
}
else {
if ((i >> 2) % 2) {
ASSERT_TRUE(isnan(Y[i]));
ASSERT_TRUE(isinf(Y[i + 1]));
}
else {
ASSERT_TRUE(isnan(Y[i]));
ASSERT_TRUE(isnan(Y[i + 1]));
}
}
}
}

CTEST(zgemv, 2_0_nan_1_inf_1)
{
int i;
blasint N = 17;
blasint incX = 1;
blasint incY = 1;
double alpha[2] = {0.0, 0.0};
double beta[2] = {2.0, 0.0};
char trans = 'N';
double A[17 * 17 * 4];
double X[17 * 2];
double Y[17 * 2];

memset(A, 0, sizeof(A));
memset(X, 0, sizeof(X));
for (i = 0; i < (2 * N - 2); i += 4)
{
Y[i] = NAN;
Y[i + 1] = 1.0;

Y[i + 2] = INFINITY;
Y[i + 3] = 1.0;
}
Y[2 * N - 2] = NAN;
Y[2 * N - 1] = 1.0;
BLASFUNC(zgemv)(&trans, &N, &N, alpha, A, &N, X, &incX, beta, Y, &incY);
for (i = 0; i < 2 * N; i += 2) {
if ((i >> 1) % 2){
ASSERT_TRUE(isinf(Y[i]));
ASSERT_TRUE(isnan(Y[i + 1]));
}
else {
ASSERT_TRUE(isnan(Y[i]));
ASSERT_TRUE(isnan(Y[i + 1]));
}
}
}

CTEST(zgemv, 2_0_nan_1_inf_1_incy_2)
{
int i;
blasint N = 17;
blasint incX = 1;
blasint incY = 2;
double alpha[2] = {0.0, 0.0};
double beta[2] = {2.0, 0.0};
char trans = 'N';
double A[17 * 17 * 4];
double X[17];
double Y[17 * 2 * 2];
double *ay = Y;

memset(A, 0, sizeof(A));
memset(X, 0, sizeof(X));
memset(Y, 0, sizeof(Y));
for (i = 0; i < (2 * N - 2); i += 4)
{
ay[0] = NAN;
ay[1] = 1.0;
ay += 4;
ay[0] = INFINITY;
ay[1] = 1.0;
ay += 4;
}
Y[4 * N - 4] = NAN;
Y[4 * N - 3] = 1.0;
BLASFUNC(zgemv)(&trans, &N, &N, alpha, A, &N, X, &incX, beta, Y, &incY);
for (i = 0; i < 4 * N; i += 2) {
if ((i >> 1) % 2) {
ASSERT_TRUE(Y[i] == 0.0);
ASSERT_TRUE(Y[i + 1] == 0.0);
}
else {
if ((i >> 2) % 2) {
ASSERT_TRUE(isinf(Y[i]));
ASSERT_TRUE(isnan(Y[i + 1]));
}
else {
ASSERT_TRUE(isnan(Y[i]));
ASSERT_TRUE(isnan(Y[i + 1]));
}
}
}
}

#endif

+ 54
- 0
utest/test_zscal.c View File

@@ -442,6 +442,33 @@ CTEST(cscal, i_0inf_inc_2)
ASSERT_TRUE(isnan(inf[17]));
}

CTEST(cscal, i00_NAN)
{
blasint N=9;
blasint incX=1;
float i[] = {0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0 };
float nan[] = {NAN, 0, NAN,0, NAN,0, NAN,0, NAN,0, NAN,0, NAN,0, NAN,0, NAN,0};
BLASFUNC(cscal)(&N, i, nan, &incX);
ASSERT_TRUE(isnan(nan[0]));
ASSERT_TRUE(isnan(nan[1]));
ASSERT_TRUE(isnan(nan[16]));
ASSERT_TRUE(isnan(nan[17]));
}

CTEST(cscal, i00_NAN_incx_2)
{
blasint N=9;
blasint incX=2;
float i[] = {0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0 };
float nan[] = {0,NAN, 0,NAN, 0,NAN, 0,NAN, 0,NAN, 0,NAN, 0,NAN, 0,NAN, 0,NAN,
0,NAN, 0,NAN, 0,NAN, 0,NAN, 0,NAN, 0,NAN, 0,NAN, 0,NAN, 0,NAN};
BLASFUNC(cscal)(&N, i, nan, &incX);
ASSERT_TRUE(isnan(nan[0]));
ASSERT_TRUE(isnan(nan[1]));
ASSERT_TRUE(isnan(nan[16]));
ASSERT_TRUE(isnan(nan[17]));
}

#endif

#ifdef BUILD_COMPLEX16
@@ -588,4 +615,31 @@ CTEST(zscal, i_0inf_inc_2)
ASSERT_TRUE(isnan(inf[17]));
}

CTEST(zscal, i00_NAN)
{
blasint N=9;
blasint incX=1;
double i[] = {0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0 };
double nan[] = {NAN, 0, NAN,0, NAN,0, NAN,0, NAN,0, NAN,0, NAN,0, NAN,0, NAN,0};
BLASFUNC(zscal)(&N, i, nan, &incX);
ASSERT_TRUE(isnan(nan[0]));
ASSERT_TRUE(isnan(nan[1]));
ASSERT_TRUE(isnan(nan[16]));
ASSERT_TRUE(isnan(nan[17]));
}

CTEST(zscal, i00_NAN_incx_2)
{
blasint N=9;
blasint incX=2;
double i[] = {0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0 };
double nan[] = {0,NAN, 0,NAN, 0,NAN, 0,NAN, 0,NAN, 0,NAN, 0,NAN, 0,NAN, 0,NAN,
0,NAN, 0,NAN, 0,NAN, 0,NAN, 0,NAN, 0,NAN, 0,NAN, 0,NAN, 0,NAN};
BLASFUNC(zscal)(&N, i, nan, &incX);
ASSERT_TRUE(isnan(nan[0]));
ASSERT_TRUE(isnan(nan[1]));
ASSERT_TRUE(isnan(nan[16]));
ASSERT_TRUE(isnan(nan[17]));
}

#endif

Loading…
Cancel
Save