| @@ -50,14 +50,15 @@ CTEST(amax, samax){ | |||
| ASSERT_DBL_NEAR_TOL((double)(tr_max), (double)(te_max), SINGLE_EPS); | |||
| } | |||
| CTEST (drotmg,rotmg){ | |||
| CTEST (drotmg,rotmg) | |||
| { | |||
| double te_d1, tr_d1; | |||
| double te_d2, tr_d2; | |||
| double te_x1, tr_x1; | |||
| double te_y1, tr_y1; | |||
| double te_param[5]; | |||
| double tr_param[5]; | |||
| blasint i=0; | |||
| int i=0; | |||
| // original test case for libGoto bug fixed by feb2014 rewrite | |||
| te_d1= 0.21149573940783739; | |||
| te_d2= 0.046892057172954082; | |||
| @@ -87,26 +88,27 @@ CTEST (drotmg,rotmg){ | |||
| tr_param[4]= 0.0; | |||
| BLASFUNC(drotmg)(&te_d1, &te_d2, &te_x1, &te_y1, te_param); | |||
| ASSERT_DBL_NEAR_TOL(te_d1, tr_d1, DOUBLE_EPS); | |||
| ASSERT_DBL_NEAR_TOL(te_d2, tr_d2, DOUBLE_EPS); | |||
| ASSERT_DBL_NEAR_TOL(te_x1, tr_x1, DOUBLE_EPS); | |||
| ASSERT_DBL_NEAR_TOL(te_y1, tr_y1, DOUBLE_EPS); | |||
| ASSERT_DBL_NEAR_TOL(tr_d1, te_d1, DOUBLE_EPS); | |||
| ASSERT_DBL_NEAR_TOL(tr_d2, te_d2, DOUBLE_EPS); | |||
| ASSERT_DBL_NEAR_TOL(tr_x1, te_x1, DOUBLE_EPS); | |||
| ASSERT_DBL_NEAR_TOL(tr_y1, te_y1, DOUBLE_EPS); | |||
| for(i=0; i<5; i++){ | |||
| ASSERT_DBL_NEAR_TOL(te_param[i], tr_param[i], DOUBLE_EPS); | |||
| ASSERT_DBL_NEAR_TOL(tr_param[i], te_param[i], DOUBLE_EPS); | |||
| } | |||
| } | |||
| CTEST (drotmg,rotmg_issue1452){ | |||
| CTEST (drotmg,rotmg_issue1452) | |||
| { | |||
| double te_d1, tr_d1; | |||
| double te_d2, tr_d2; | |||
| double te_x1, tr_x1; | |||
| double te_y1, tr_y1; | |||
| double te_param[5]; | |||
| double tr_param[5]; | |||
| blasint i=0; | |||
| int i=0; | |||
| // from issue #1452, buggy version returned 0.000244 for param[3] | |||
| // from issue #1452 | |||
| te_d1 = 5.9e-8; | |||
| te_d2 = 5.960464e-8; | |||
| te_x1 = 1.0; | |||
| @@ -115,8 +117,8 @@ CTEST (drotmg,rotmg_issue1452){ | |||
| for(i=0; i<5; i++){ | |||
| te_param[i]=tr_param[i]=0.0; | |||
| } | |||
| //reference values as calulated by netlib blas | |||
| te_param[3]=1./4096.; | |||
| //reference values as calulated by gonum blas with rotmg rewritten to Hopkins' algorithm | |||
| tr_d1= 0.99995592822897; | |||
| tr_d2= 0.98981219860583; | |||
| tr_x1= 0.03662270484346; | |||
| @@ -125,31 +127,32 @@ CTEST (drotmg,rotmg_issue1452){ | |||
| tr_param[0]= -1.0; | |||
| tr_param[1]= 0.00000161109346; | |||
| tr_param[2]= -0.00024414062500; | |||
| tr_param[3]= 1.0; | |||
| tr_param[3]= 0.00024414062500; | |||
| tr_param[4]= 0.00000162760417; | |||
| //OpenBLAS | |||
| BLASFUNC(drotmg)(&te_d1, &te_d2, &te_x1, &te_y1, te_param); | |||
| ASSERT_DBL_NEAR_TOL(te_d1, tr_d1, DOUBLE_EPS); | |||
| ASSERT_DBL_NEAR_TOL(te_d2, tr_d2, DOUBLE_EPS); | |||
| ASSERT_DBL_NEAR_TOL(te_x1, tr_x1, DOUBLE_EPS); | |||
| ASSERT_DBL_NEAR_TOL(te_y1, tr_y1, DOUBLE_EPS); | |||
| ASSERT_DBL_NEAR_TOL(tr_d1, te_d1, DOUBLE_EPS); | |||
| ASSERT_DBL_NEAR_TOL(tr_d2, te_d2, DOUBLE_EPS); | |||
| ASSERT_DBL_NEAR_TOL(tr_x1, te_x1, DOUBLE_EPS); | |||
| ASSERT_DBL_NEAR_TOL(tr_y1, te_y1, DOUBLE_EPS); | |||
| for(i=0; i<5; i++){ | |||
| ASSERT_DBL_NEAR_TOL(te_param[i], tr_param[i], DOUBLE_EPS); | |||
| ASSERT_DBL_NEAR_TOL(tr_param[i], te_param[i], DOUBLE_EPS); | |||
| } | |||
| } | |||
| CTEST(drotmg, rotmg_D1eqD2_X1eqX2){ | |||
| CTEST(drotmg, rotmg_D1eqD2_X1eqX2) | |||
| { | |||
| double te_d1, tr_d1; | |||
| double te_d2, tr_d2; | |||
| double te_x1, tr_x1; | |||
| double te_y1, tr_y1; | |||
| double te_param[5]; | |||
| double tr_param[5]; | |||
| blasint i=0; | |||
| int i=0; | |||
| te_d1= tr_d1=2.; | |||
| te_d2= tr_d2=2.; | |||
| te_x1= tr_x1=8.; | |||
| @@ -174,13 +177,48 @@ CTEST(drotmg, rotmg_D1eqD2_X1eqX2){ | |||
| //OpenBLAS | |||
| BLASFUNC(drotmg)(&te_d1, &te_d2, &te_x1, &te_y1, te_param); | |||
| ASSERT_DBL_NEAR_TOL(te_d1, tr_d1, DOUBLE_EPS); | |||
| ASSERT_DBL_NEAR_TOL(te_d2, tr_d2, DOUBLE_EPS); | |||
| ASSERT_DBL_NEAR_TOL(te_x1, tr_x1, DOUBLE_EPS); | |||
| ASSERT_DBL_NEAR_TOL(te_y1, tr_y1, DOUBLE_EPS); | |||
| ASSERT_DBL_NEAR_TOL(tr_d1, te_d1, DOUBLE_EPS); | |||
| ASSERT_DBL_NEAR_TOL(tr_d2, te_d2, DOUBLE_EPS); | |||
| ASSERT_DBL_NEAR_TOL(tr_x1, te_x1, DOUBLE_EPS); | |||
| ASSERT_DBL_NEAR_TOL(tr_y1, te_y1, DOUBLE_EPS); | |||
| for(i=0; i<5; i++){ | |||
| ASSERT_DBL_NEAR_TOL(te_param[i], tr_param[i], DOUBLE_EPS); | |||
| ASSERT_DBL_NEAR_TOL(tr_param[i], te_param[i], DOUBLE_EPS); | |||
| } | |||
| } | |||
| CTEST(drotmg, drotmg_D1_big_D2_big_flag_zero) | |||
| { | |||
| double te_d1, tr_d1; | |||
| double te_d2, tr_d2; | |||
| double te_x1, tr_x1; | |||
| double te_y1, tr_y1; | |||
| double te_param[5]={1.,4096.,-4096.,1.,4096.}; | |||
| double tr_param[5]={-1.,4096.,-3584.,1792.,4096.}; | |||
| int i=0; | |||
| te_d1= tr_d1=1600000000.; | |||
| te_d2= tr_d2=800000000.; | |||
| te_x1= tr_x1=8.; | |||
| te_y1= tr_y1=7.; | |||
| //reference values as calulated by gonum | |||
| tr_d1= 68.96627824858757; | |||
| tr_d2= 34.483139124293785; | |||
| tr_x1= 45312.; | |||
| tr_y1= 7.0; | |||
| //OpenBLAS | |||
| BLASFUNC(drotmg)(&te_d1, &te_d2, &te_x1, &te_y1, te_param); | |||
| ASSERT_DBL_NEAR_TOL(tr_d1, te_d1, DOUBLE_EPS); | |||
| ASSERT_DBL_NEAR_TOL(tr_d2, te_d2, DOUBLE_EPS); | |||
| ASSERT_DBL_NEAR_TOL(tr_x1, te_x1, DOUBLE_EPS); | |||
| ASSERT_DBL_NEAR_TOL(tr_y1, te_y1, DOUBLE_EPS); | |||
| for(i=0; i<5; i++){ | |||
| ASSERT_DBL_NEAR_TOL(tr_param[i], te_param[i], DOUBLE_EPS); | |||
| } | |||
| } | |||
| @@ -199,8 +237,8 @@ CTEST(axpy,daxpy_inc_0) | |||
| BLASFUNC(daxpy)(&N,&a,x1,&incX,y1,&incY); | |||
| for(i=0; i<N; i++){ | |||
| ASSERT_DBL_NEAR_TOL(x1[i], x2[i], DOUBLE_EPS); | |||
| ASSERT_DBL_NEAR_TOL(y1[i], y2[i], DOUBLE_EPS); | |||
| ASSERT_DBL_NEAR_TOL(x2[i], x1[i], DOUBLE_EPS); | |||
| ASSERT_DBL_NEAR_TOL(y2[i], y1[i], DOUBLE_EPS); | |||
| } | |||
| } | |||
| @@ -218,8 +256,8 @@ CTEST(axpy,zaxpy_inc_0) | |||
| BLASFUNC(zaxpy)(&N,a,x1,&incX,y1,&incY); | |||
| for(i=0; i<2*N; i++){ | |||
| ASSERT_DBL_NEAR_TOL(x1[i], x2[i], DOUBLE_EPS); | |||
| ASSERT_DBL_NEAR_TOL(y1[i], y2[i], DOUBLE_EPS); | |||
| ASSERT_DBL_NEAR_TOL(x2[i], x1[i], DOUBLE_EPS); | |||
| ASSERT_DBL_NEAR_TOL(y2[i], y1[i], DOUBLE_EPS); | |||
| } | |||
| } | |||
| @@ -237,8 +275,8 @@ CTEST(axpy,saxpy_inc_0) | |||
| BLASFUNC(saxpy)(&N,&a,x1,&incX,y1,&incY); | |||
| for(i=0; i<N; i++){ | |||
| ASSERT_DBL_NEAR_TOL(x1[i], x2[i], DOUBLE_EPS); | |||
| ASSERT_DBL_NEAR_TOL(y1[i], y2[i], DOUBLE_EPS); | |||
| ASSERT_DBL_NEAR_TOL(x2[i], x1[i], DOUBLE_EPS); | |||
| ASSERT_DBL_NEAR_TOL(y2[i], y1[i], DOUBLE_EPS); | |||
| } | |||
| } | |||
| @@ -256,8 +294,8 @@ CTEST(axpy,caxpy_inc_0) | |||
| BLASFUNC(caxpy)(&N,a,x1,&incX,y1,&incY); | |||
| for(i=0; i<2*N; i++){ | |||
| ASSERT_DBL_NEAR_TOL(x1[i], x2[i], DOUBLE_EPS); | |||
| ASSERT_DBL_NEAR_TOL(y1[i], y2[i], DOUBLE_EPS); | |||
| ASSERT_DBL_NEAR_TOL(x2[i], x1[i], DOUBLE_EPS); | |||
| ASSERT_DBL_NEAR_TOL(y2[i], y1[i], DOUBLE_EPS); | |||
| } | |||
| } | |||
| @@ -275,11 +313,11 @@ CTEST( zdotu,zdotu_n_1) | |||
| #endif | |||
| #ifdef OPENBLAS_COMPLEX_STRUCT | |||
| ASSERT_DBL_NEAR_TOL(result1.real, result2.real, DOUBLE_EPS); | |||
| ASSERT_DBL_NEAR_TOL(result1.imag, result2.imag, DOUBLE_EPS); | |||
| ASSERT_DBL_NEAR_TOL(result2.real, result1.real, DOUBLE_EPS); | |||
| ASSERT_DBL_NEAR_TOL(result2.imag, result1.imag, DOUBLE_EPS); | |||
| #else | |||
| ASSERT_DBL_NEAR_TOL(creal(result1), creal(result2), DOUBLE_EPS); | |||
| ASSERT_DBL_NEAR_TOL(cimag(result1), cimag(result2), DOUBLE_EPS); | |||
| ASSERT_DBL_NEAR_TOL(creal(result2), creal(result1), DOUBLE_EPS); | |||
| ASSERT_DBL_NEAR_TOL(cimag(result2), cimag(result1), DOUBLE_EPS); | |||
| #endif | |||
| } | |||
| @@ -297,11 +335,11 @@ CTEST(zdotu, zdotu_offset_1) | |||
| #endif | |||
| #ifdef OPENBLAS_COMPLEX_STRUCT | |||
| ASSERT_DBL_NEAR_TOL(result1.real, result2.real, DOUBLE_EPS); | |||
| ASSERT_DBL_NEAR_TOL(result1.imag, result2.imag, DOUBLE_EPS); | |||
| ASSERT_DBL_NEAR_TOL(result2.real, result1.real, DOUBLE_EPS); | |||
| ASSERT_DBL_NEAR_TOL(result2.imag, result1.imag, DOUBLE_EPS); | |||
| #else | |||
| ASSERT_DBL_NEAR_TOL(creal(result1), creal(result2), DOUBLE_EPS); | |||
| ASSERT_DBL_NEAR_TOL(cimag(result1), cimag(result2), DOUBLE_EPS); | |||
| ASSERT_DBL_NEAR_TOL(creal(result2), creal(result1), DOUBLE_EPS); | |||
| ASSERT_DBL_NEAR_TOL(cimag(result2), cimag(result1), DOUBLE_EPS); | |||
| #endif | |||
| } | |||
| @@ -316,7 +354,7 @@ CTEST(dsdot,dsdot_n_1) | |||
| double res1=0.0f, res2=-0.00239335360107; | |||
| res1=BLASFUNC(dsdot)(&n, &x, &incx, &y, &incy); | |||
| ASSERT_DBL_NEAR_TOL(res1, res2, DOUBLE_EPS); | |||
| ASSERT_DBL_NEAR_TOL(res2, res1, DOUBLE_EPS); | |||
| } | |||
| @@ -335,8 +373,8 @@ CTEST(rot,drot_inc_0) | |||
| BLASFUNC(drot)(&N,x1,&incX,y1,&incY,&c,&s); | |||
| for(i=0; i<N; i++){ | |||
| ASSERT_DBL_NEAR_TOL(x1[i], x2[i], DOUBLE_EPS); | |||
| ASSERT_DBL_NEAR_TOL(y1[i], y2[i], DOUBLE_EPS); | |||
| ASSERT_DBL_NEAR_TOL(x2[i], x1[i], DOUBLE_EPS); | |||
| ASSERT_DBL_NEAR_TOL(y2[i], y1[i], DOUBLE_EPS); | |||
| } | |||
| } | |||
| @@ -355,8 +393,8 @@ CTEST(rot,zdrot_inc_0) | |||
| BLASFUNC(zdrot)(&N,x1,&incX,y1,&incY,&c,&s); | |||
| for(i=0; i<2*N; i++){ | |||
| ASSERT_DBL_NEAR_TOL(x1[i], x2[i], DOUBLE_EPS); | |||
| ASSERT_DBL_NEAR_TOL(y1[i], y2[i], DOUBLE_EPS); | |||
| ASSERT_DBL_NEAR_TOL(x2[i], x1[i], DOUBLE_EPS); | |||
| ASSERT_DBL_NEAR_TOL(y2[i], y1[i], DOUBLE_EPS); | |||
| } | |||
| } | |||
| @@ -374,8 +412,8 @@ CTEST(rot,srot_inc_0) | |||
| BLASFUNC(srot)(&N,x1,&incX,y1,&incY,&c,&s); | |||
| for(i=0; i<N; i++){ | |||
| ASSERT_DBL_NEAR_TOL(x1[i], x2[i], SINGLE_EPS); | |||
| ASSERT_DBL_NEAR_TOL(y1[i], y2[i], SINGLE_EPS); | |||
| ASSERT_DBL_NEAR_TOL(x2[i], x1[i], SINGLE_EPS); | |||
| ASSERT_DBL_NEAR_TOL(y2[i], y1[i], SINGLE_EPS); | |||
| } | |||
| } | |||
| @@ -393,8 +431,8 @@ CTEST(rot, csrot_inc_0) | |||
| BLASFUNC(csrot)(&N,x1,&incX,y1,&incY,&c,&s); | |||
| for(i=0; i<2*N; i++){ | |||
| ASSERT_DBL_NEAR_TOL(x1[i], x2[i], SINGLE_EPS); | |||
| ASSERT_DBL_NEAR_TOL(y1[i], y2[i], SINGLE_EPS); | |||
| ASSERT_DBL_NEAR_TOL(x2[i], x1[i], SINGLE_EPS); | |||
| ASSERT_DBL_NEAR_TOL(y2[i], y1[i], SINGLE_EPS); | |||
| } | |||
| } | |||
| @@ -411,8 +449,8 @@ CTEST(swap,dswap_inc_0) | |||
| BLASFUNC(dswap)(&N,x1,&incX,y1,&incY); | |||
| for(i=0; i<N; i++){ | |||
| ASSERT_DBL_NEAR_TOL(x1[i], x2[i], DOUBLE_EPS); | |||
| ASSERT_DBL_NEAR_TOL(y1[i], y2[i], DOUBLE_EPS); | |||
| ASSERT_DBL_NEAR_TOL(x2[i], x1[i], DOUBLE_EPS); | |||
| ASSERT_DBL_NEAR_TOL(y2[i], y1[i], DOUBLE_EPS); | |||
| } | |||
| } | |||
| @@ -429,8 +467,8 @@ CTEST(swap,zswap_inc_0) | |||
| BLASFUNC(zswap)(&N,x1,&incX,y1,&incY); | |||
| for(i=0; i<2*N; i++){ | |||
| ASSERT_DBL_NEAR_TOL(x1[i], x2[i], DOUBLE_EPS); | |||
| ASSERT_DBL_NEAR_TOL(y1[i], y2[i], DOUBLE_EPS); | |||
| ASSERT_DBL_NEAR_TOL(x2[i], x1[i], DOUBLE_EPS); | |||
| ASSERT_DBL_NEAR_TOL(y2[i], y1[i], DOUBLE_EPS); | |||
| } | |||
| } | |||
| @@ -447,8 +485,8 @@ CTEST(swap,sswap_inc_0) | |||
| BLASFUNC(sswap)(&N,x1,&incX,y1,&incY); | |||
| for(i=0; i<N; i++){ | |||
| ASSERT_DBL_NEAR_TOL(x1[i], x2[i], SINGLE_EPS); | |||
| ASSERT_DBL_NEAR_TOL(y1[i], y2[i], SINGLE_EPS); | |||
| ASSERT_DBL_NEAR_TOL(x2[i], x1[i], SINGLE_EPS); | |||
| ASSERT_DBL_NEAR_TOL(y2[i], y1[i], SINGLE_EPS); | |||
| } | |||
| } | |||
| @@ -465,8 +503,8 @@ CTEST(swap,cswap_inc_0) | |||
| BLASFUNC(cswap)(&N,x1,&incX,y1,&incY); | |||
| for(i=0; i<2*N; i++){ | |||
| ASSERT_DBL_NEAR_TOL(x1[i], x2[i], SINGLE_EPS); | |||
| ASSERT_DBL_NEAR_TOL(y1[i], y2[i], SINGLE_EPS); | |||
| ASSERT_DBL_NEAR_TOL(x2[i], x1[i], SINGLE_EPS); | |||
| ASSERT_DBL_NEAR_TOL(y2[i], y1[i], SINGLE_EPS); | |||
| } | |||
| } | |||
| @@ -475,18 +513,19 @@ int main(int argc, const char ** argv){ | |||
| CTEST_ADD(amax, samax); | |||
| CTEST_ADD (drotmg,rotmg); | |||
| CTEST_ADD (drotmg,rotmg_issue1452); | |||
| CTEST_ADD (drotmg, rotmg_D1eqD2_X1eqX2); | |||
| CTEST_ADD (drotmg,rotmg_D1eqD2_X1eqX2); | |||
| CTEST_ADD (drotmg,drotmg_D1_big_D2_big_flag_zero); | |||
| CTEST_ADD (axpy,daxpy_inc_0); | |||
| CTEST_ADD (axpy,zaxpy_inc_0); | |||
| CTEST_ADD (axpy,saxpy_inc_0); | |||
| CTEST_ADD (axpy,caxpy_inc_0); | |||
| CTEST_ADD (zdotu,zdotu_n_1); | |||
| CTEST_ADD (zdotu, zdotu_offset_1); | |||
| CTEST_ADD (zdotu,zdotu_offset_1); | |||
| CTEST_ADD (dsdot,dsdot_n_1); | |||
| CTEST_ADD (rot,drot_inc_0); | |||
| CTEST_ADD (rot,zdrot_inc_0); | |||
| CTEST_ADD (rot,srot_inc_0); | |||
| CTEST_ADD (rot, csrot_inc_0); | |||
| CTEST_ADD (rot,csrot_inc_0); | |||
| CTEST_ADD (swap,dswap_inc_0); | |||
| CTEST_ADD (swap,zswap_inc_0); | |||
| CTEST_ADD (swap,sswap_inc_0); | |||
| @@ -498,4 +537,3 @@ int main(int argc, const char ** argv){ | |||
| return num_fail; | |||
| } | |||