CBLAS: count error-exit tests

The C error-exit checkers report only a pass/fail verdict per routine.
Report the counts too, matching the Fortran drivers:

     cblas_sgemv      ERROR-EXIT TESTS:       13 RUN,        0 FAILED

One test is one chkxer() call. A test fails either because the routine
never reached xerbla, which chkxer already detects through cblas_lerr,
or because c_xerbla.c was reached with the wrong routine name, which
clears cblas_ok without chkxer noticing. The extended API build hits
exactly that second case, reporting cblas_sgemv_64 against an expected
cblas_sgemv, so a new cblas_xbad flag carries it across and the counts
agree with the verdict.

The Windows path that skips the xerbla tests returns before printing a
verdict and so prints no counts either.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Simon Maertens
2026-07-29 16:04:07 +01:00
co-authored by Claude Opus 5
parent 1be34149cb
commit 8250cb5ce2
9 changed files with 98 additions and 0 deletions
+12
View File
@@ -5,6 +5,7 @@
CBLAS_INT cblas_ok, cblas_lerr, cblas_info;
CBLAS_INT link_xerbla=TRUE;
CBLAS_INT cblas_xtests, cblas_xfails, cblas_xbad;
char *cblas_rout;
#ifdef F77_Char
@@ -20,11 +21,17 @@ void F77_xerbla(char *srname, void *vinfo
void chkxer(void) {
extern CBLAS_INT cblas_ok, cblas_lerr, cblas_info;
extern CBLAS_INT link_xerbla;
extern CBLAS_INT cblas_xtests, cblas_xfails, cblas_xbad;
extern char *cblas_rout;
cblas_xtests++;
if (cblas_lerr == 1 ) {
printf("***** ILLEGAL VALUE OF PARAMETER NUMBER %d NOT DETECTED BY %s *****\n", (int) cblas_info, cblas_rout);
cblas_ok = 0 ;
cblas_xfails++;
} else if (cblas_xbad) {
cblas_xfails++;
}
cblas_xbad = 0;
cblas_lerr = 1 ;
}
@@ -60,6 +67,9 @@ void F77_c2chke(char *rout
link_xerbla = 0;
cblas_ok = TRUE ;
cblas_lerr = PASSED ;
cblas_xtests = 0;
cblas_xfails = 0;
cblas_xbad = 0;
if (strncmp( sf,"cblas_cgemv",11)==0) {
cblas_rout = "cblas_cgemv";
@@ -839,4 +849,6 @@ void F77_c2chke(char *rout
printf(" %-12s PASSED THE TESTS OF ERROR-EXITS\n", cblas_rout);
else
printf("******* %s FAILED THE TESTS OF ERROR-EXITS *******\n",cblas_rout);
printf(" %-12s ERROR-EXIT TESTS:%9d RUN,%9d FAILED\n",
cblas_rout, (int) cblas_xtests, (int) cblas_xfails);
}
+12
View File
@@ -5,6 +5,7 @@
CBLAS_INT cblas_ok, cblas_lerr, cblas_info;
CBLAS_INT link_xerbla=TRUE;
CBLAS_INT cblas_xtests, cblas_xfails, cblas_xbad;
char *cblas_rout;
#ifdef F77_Char
@@ -20,11 +21,17 @@ void F77_xerbla(char *srname, void *vinfo
void chkxer(void) {
extern CBLAS_INT cblas_ok, cblas_lerr, cblas_info;
extern CBLAS_INT link_xerbla;
extern CBLAS_INT cblas_xtests, cblas_xfails, cblas_xbad;
extern char *cblas_rout;
cblas_xtests++;
if (cblas_lerr == 1 ) {
printf("***** ILLEGAL VALUE OF PARAMETER NUMBER %d NOT DETECTED BY %s *****\n", (int) cblas_info, cblas_rout);
cblas_ok = 0 ;
cblas_xfails++;
} else if (cblas_xbad) {
cblas_xfails++;
}
cblas_xbad = 0;
cblas_lerr = 1 ;
}
@@ -45,6 +52,9 @@ void F77_c3chke(char * rout
cblas_ok = TRUE ;
cblas_lerr = PASSED ;
cblas_xtests = 0;
cblas_xfails = 0;
cblas_xbad = 0;
#ifndef HAS_ATTRIBUTE_WEAK_SUPPORT
#ifdef CBLAS_DLL_IMPORTS
@@ -1949,4 +1959,6 @@ void F77_c3chke(char * rout
printf(" %-13s PASSED THE TESTS OF ERROR-EXITS\n", cblas_rout);
else
printf("***** %s FAILED THE TESTS OF ERROR-EXITS *******\n",cblas_rout);
printf(" %-13s ERROR-EXIT TESTS:%9d RUN,%9d FAILED\n",
cblas_rout, (int) cblas_xtests, (int) cblas_xfails);
}
+12
View File
@@ -5,6 +5,7 @@
CBLAS_INT cblas_ok, cblas_lerr, cblas_info;
CBLAS_INT link_xerbla=TRUE;
CBLAS_INT cblas_xtests, cblas_xfails, cblas_xbad;
char *cblas_rout;
#ifdef F77_Char
@@ -20,11 +21,17 @@ void F77_xerbla(char *srname, void *vinfo
void chkxer(void) {
extern CBLAS_INT cblas_ok, cblas_lerr, cblas_info;
extern CBLAS_INT link_xerbla;
extern CBLAS_INT cblas_xtests, cblas_xfails, cblas_xbad;
extern char *cblas_rout;
cblas_xtests++;
if (cblas_lerr == 1 ) {
printf("***** ILLEGAL VALUE OF PARAMETER NUMBER %d NOT DETECTED BY %s *****\n", (int) cblas_info, cblas_rout);
cblas_ok = 0 ;
cblas_xfails++;
} else if (cblas_xbad) {
cblas_xfails++;
}
cblas_xbad = 0;
cblas_lerr = 1 ;
}
@@ -59,6 +66,9 @@ void F77_d2chke(char *rout
link_xerbla = 0;
cblas_ok = TRUE ;
cblas_lerr = PASSED ;
cblas_xtests = 0;
cblas_xfails = 0;
cblas_xbad = 0;
if (strncmp( sf,"cblas_dgemv",11)==0) {
cblas_rout = "cblas_dgemv";
@@ -884,4 +894,6 @@ void F77_d2chke(char *rout
printf(" %-16s PASSED THE TESTS OF ERROR-EXITS\n", cblas_rout);
else
printf("******* %s FAILED THE TESTS OF ERROR-EXITS *******\n",cblas_rout);
printf(" %-16s ERROR-EXIT TESTS:%9d RUN,%9d FAILED\n",
cblas_rout, (int) cblas_xtests, (int) cblas_xfails);
}
+12
View File
@@ -5,6 +5,7 @@
CBLAS_INT cblas_ok, cblas_lerr, cblas_info;
CBLAS_INT link_xerbla=TRUE;
CBLAS_INT cblas_xtests, cblas_xfails, cblas_xbad;
char *cblas_rout;
#ifdef F77_Char
@@ -20,11 +21,17 @@ void F77_xerbla(char *srname, void *vinfo
void chkxer(void) {
extern CBLAS_INT cblas_ok, cblas_lerr, cblas_info;
extern CBLAS_INT link_xerbla;
extern CBLAS_INT cblas_xtests, cblas_xfails, cblas_xbad;
extern char *cblas_rout;
cblas_xtests++;
if (cblas_lerr == 1 ) {
printf("***** ILLEGAL VALUE OF PARAMETER NUMBER %d NOT DETECTED BY %s *****\n", (int) cblas_info, cblas_rout);
cblas_ok = 0 ;
cblas_xfails++;
} else if (cblas_xbad) {
cblas_xfails++;
}
cblas_xbad = 0;
cblas_lerr = 1 ;
}
@@ -59,6 +66,9 @@ void F77_d3chke(char *rout
link_xerbla = 0;
cblas_ok = TRUE ;
cblas_lerr = PASSED ;
cblas_xtests = 0;
cblas_xfails = 0;
cblas_xbad = 0;
if (strncmp( sf,"cblas_dgemmtr" ,13)==0) {
cblas_rout = "cblas_dgemmtr" ;
@@ -1834,4 +1844,6 @@ void F77_d3chke(char *rout
printf(" %-17s PASSED THE TESTS OF ERROR-EXITS\n", cblas_rout);
else
printf("***** %s FAILED THE TESTS OF ERROR-EXITS *******\n",cblas_rout);
printf(" %-17s ERROR-EXIT TESTS:%9d RUN,%9d FAILED\n",
cblas_rout, (int) cblas_xtests, (int) cblas_xfails);
}
+12
View File
@@ -5,6 +5,7 @@
CBLAS_INT cblas_ok, cblas_lerr, cblas_info;
CBLAS_INT link_xerbla=TRUE;
CBLAS_INT cblas_xtests, cblas_xfails, cblas_xbad;
char *cblas_rout;
#ifdef F77_Char
@@ -20,11 +21,17 @@ void F77_xerbla(char *srname, void *vinfo
void chkxer(void) {
extern CBLAS_INT cblas_ok, cblas_lerr, cblas_info;
extern CBLAS_INT link_xerbla;
extern CBLAS_INT cblas_xtests, cblas_xfails, cblas_xbad;
extern char *cblas_rout;
cblas_xtests++;
if (cblas_lerr == 1 ) {
printf("***** ILLEGAL VALUE OF PARAMETER NUMBER %d NOT DETECTED BY %s *****\n", (int) cblas_info, cblas_rout);
cblas_ok = 0 ;
cblas_xfails++;
} else if (cblas_xbad) {
cblas_xfails++;
}
cblas_xbad = 0;
cblas_lerr = 1 ;
}
@@ -59,6 +66,9 @@ void F77_s2chke(char *rout
link_xerbla = 0;
cblas_ok = TRUE ;
cblas_lerr = PASSED ;
cblas_xtests = 0;
cblas_xfails = 0;
cblas_xbad = 0;
if (strncmp( sf,"cblas_sgemv",11)==0) {
cblas_rout = "cblas_sgemv";
@@ -884,4 +894,6 @@ void F77_s2chke(char *rout
printf(" %-16s PASSED THE TESTS OF ERROR-EXITS\n", cblas_rout);
else
printf("******* %s FAILED THE TESTS OF ERROR-EXITS *******\n",cblas_rout);
printf(" %-16s ERROR-EXIT TESTS:%9d RUN,%9d FAILED\n",
cblas_rout, (int) cblas_xtests, (int) cblas_xfails);
}
+12
View File
@@ -5,6 +5,7 @@
CBLAS_INT cblas_ok, cblas_lerr, cblas_info;
CBLAS_INT link_xerbla=TRUE;
CBLAS_INT cblas_xtests, cblas_xfails, cblas_xbad;
char *cblas_rout;
#ifdef F77_Char
@@ -20,11 +21,17 @@ void F77_xerbla(char *srname, void *vinfo
void chkxer(void) {
extern CBLAS_INT cblas_ok, cblas_lerr, cblas_info;
extern CBLAS_INT link_xerbla;
extern CBLAS_INT cblas_xtests, cblas_xfails, cblas_xbad;
extern char *cblas_rout;
cblas_xtests++;
if (cblas_lerr == 1 ) {
printf("***** ILLEGAL VALUE OF PARAMETER NUMBER %d NOT DETECTED BY %s *****\n", (int) cblas_info, cblas_rout);
cblas_ok = 0 ;
cblas_xfails++;
} else if (cblas_xbad) {
cblas_xfails++;
}
cblas_xbad = 0;
cblas_lerr = 1 ;
}
@@ -60,6 +67,9 @@ void F77_s3chke(char *rout
link_xerbla = 0;
cblas_ok = TRUE ;
cblas_lerr = PASSED ;
cblas_xtests = 0;
cblas_xfails = 0;
cblas_xbad = 0;
if (strncmp( sf,"cblas_sgemmtr" ,13)==0) {
cblas_rout = "cblas_sgemmtr" ;
@@ -1838,4 +1848,6 @@ void F77_s3chke(char *rout
printf(" %-17s PASSED THE TESTS OF ERROR-EXITS\n", cblas_rout);
else
printf("***** %s FAILED THE TESTS OF ERROR-EXITS *******\n",cblas_rout);
printf(" %-17s ERROR-EXIT TESTS:%9d RUN,%9d FAILED\n",
cblas_rout, (int) cblas_xtests, (int) cblas_xfails);
}
+2
View File
@@ -9,6 +9,7 @@ void API_SUFFIX(cblas_xerbla)(CBLAS_INT info, const char *rout, const char *form
{
extern CBLAS_INT cblas_lerr, cblas_info, cblas_ok;
extern CBLAS_INT link_xerbla;
extern CBLAS_INT cblas_xbad;
extern char *cblas_rout;
/* Initially, c__3chke may call this routine with
@@ -21,6 +22,7 @@ void API_SUFFIX(cblas_xerbla)(CBLAS_INT info, const char *rout, const char *form
if (cblas_rout != NULL && strcmp(cblas_rout, rout) != 0){
printf("***** XERBLA WAS CALLED WITH SRNAME = <%s> INSTEAD OF <%s> *******\n", rout, cblas_rout);
cblas_ok = FALSE;
cblas_xbad = 1;
}
if (RowMajorStrg)
+12
View File
@@ -5,6 +5,7 @@
CBLAS_INT cblas_ok, cblas_lerr, cblas_info;
CBLAS_INT link_xerbla=TRUE;
CBLAS_INT cblas_xtests, cblas_xfails, cblas_xbad;
char *cblas_rout;
#ifdef F77_Char
@@ -20,11 +21,17 @@ void F77_xerbla(char *srname, void *vinfo
void chkxer(void) {
extern CBLAS_INT cblas_ok, cblas_lerr, cblas_info;
extern CBLAS_INT link_xerbla;
extern CBLAS_INT cblas_xtests, cblas_xfails, cblas_xbad;
extern char *cblas_rout;
cblas_xtests++;
if (cblas_lerr == 1 ) {
printf("***** ILLEGAL VALUE OF PARAMETER NUMBER %d NOT DETECTED BY %s *****\n", (int) cblas_info, cblas_rout);
cblas_ok = 0 ;
cblas_xfails++;
} else if (cblas_xbad) {
cblas_xfails++;
}
cblas_xbad = 0;
cblas_lerr = 1 ;
}
@@ -61,6 +68,9 @@ void F77_z2chke(char *rout
link_xerbla = 0;
cblas_ok = TRUE ;
cblas_lerr = PASSED ;
cblas_xtests = 0;
cblas_xfails = 0;
cblas_xbad = 0;
if (strncmp( sf,"cblas_zgemv",11)==0) {
cblas_rout = "cblas_zgemv";
@@ -840,4 +850,6 @@ void F77_z2chke(char *rout
printf(" %-12s PASSED THE TESTS OF ERROR-EXITS\n", cblas_rout);
else
printf("******* %s FAILED THE TESTS OF ERROR-EXITS *******\n",cblas_rout);
printf(" %-12s ERROR-EXIT TESTS:%9d RUN,%9d FAILED\n",
cblas_rout, (int) cblas_xtests, (int) cblas_xfails);
}
+12
View File
@@ -5,6 +5,7 @@
CBLAS_INT cblas_ok, cblas_lerr, cblas_info;
CBLAS_INT link_xerbla=TRUE;
CBLAS_INT cblas_xtests, cblas_xfails, cblas_xbad;
char *cblas_rout;
#ifdef F77_Char
@@ -20,11 +21,17 @@ void F77_xerbla(char *srname, void *vinfo
void chkxer(void) {
extern CBLAS_INT cblas_ok, cblas_lerr, cblas_info;
extern CBLAS_INT link_xerbla;
extern CBLAS_INT cblas_xtests, cblas_xfails, cblas_xbad;
extern char *cblas_rout;
cblas_xtests++;
if (cblas_lerr == 1 ) {
printf("***** ILLEGAL VALUE OF PARAMETER NUMBER %d NOT DETECTED BY %s *****\n", (int) cblas_info, cblas_rout);
cblas_ok = 0 ;
cblas_xfails++;
} else if (cblas_xbad) {
cblas_xfails++;
}
cblas_xbad = 0;
cblas_lerr = 1 ;
}
@@ -45,6 +52,9 @@ void F77_z3chke(char *rout
cblas_ok = TRUE ;
cblas_lerr = PASSED ;
cblas_xtests = 0;
cblas_xfails = 0;
cblas_xbad = 0;
#ifndef HAS_ATTRIBUTE_WEAK_SUPPORT
#ifdef CBLAS_DLL_IMPORTS
@@ -1950,4 +1960,6 @@ void F77_z3chke(char *rout
printf(" %-13s PASSED THE TESTS OF ERROR-EXITS\n", cblas_rout);
else
printf("***** %s FAILED THE TESTS OF ERROR-EXITS *******\n",cblas_rout);
printf(" %-13s ERROR-EXIT TESTS:%9d RUN,%9d FAILED\n",
cblas_rout, (int) cblas_xtests, (int) cblas_xfails);
}