/* test_sort.c */
#include "../SubMtx.h"
#include "../../Drand.h"
#include "../../timings.h"
/*--------------------------------------------------------------------*/
int
main ( int argc, char *argv[] )
/*
-----------------------
test the sort methods.
created -- 98apr15, cca
-----------------------
*/
{
SubMtx *mtxA ;
double t1, t2 ;
Drand *drand ;
FILE *msgFile ;
int mode, msglvl, ncolA, nentA, nrowA, seed, type ;
int *colind, *ivtemp, *rowind ;
if ( argc != 9 ) {
fprintf(stdout,
"\n\n usage : %s msglvl msgFile type mode "
"\n nrowA ncolA nentA seed"
"\n msglvl -- message level"
"\n msgFile -- message file"
"\n type -- type of entries"
"\n 1 -- real"
"\n 2 -- complex"
"\n mode -- type of matrix A"
"\n 0 -- dense stored by rows"
"\n 1 -- dense stored by columns"
"\n 2 -- sparse stored by rows"
"\n 3 -- sparse stored by columns"
"\n nrowA -- # of rows in matrix A"
"\n ncolA -- # of columns in matrix A"
"\n nentA -- # of entries in matrix A"
"\n seed -- random number seed"
"\n", argv[0]) ;
return(0) ;
}
if ( (msglvl = atoi(argv[1])) < 0 ) {
fprintf(stderr, "\n message level must be positive\n") ;
exit(-1) ;
}
if ( strcmp(argv[2], "stdout") == 0 ) {
msgFile = stdout ;
} else if ( (msgFile = fopen(argv[2], "a")) == NULL ) {
fprintf(stderr, "\n unable to open file %s\n", argv[2]) ;
return(-1) ;
}
type = atoi(argv[3]) ;
mode = atoi(argv[4]) ;
nrowA = atoi(argv[5]) ;
ncolA = atoi(argv[6]) ;
nentA = atoi(argv[7]) ;
seed = atoi(argv[8]) ;
fprintf(msgFile, "\n %% %s:"
"\n %% msglvl = %d"
"\n %% msgFile = %s"
"\n %% type = %d"
"\n %% mode = %d"
"\n %% nrowA = %d"
"\n %% ncolA = %d"
"\n %% nentA = %d"
"\n %% seed = %d",
argv[0], msglvl, argv[2], type, mode,
nrowA, ncolA, nentA, seed) ;
/*
-----------------------------
check for errors in the input
-----------------------------
*/
if ( nrowA <= 0
|| ncolA <= 0
|| nentA > nrowA*ncolA ) {
fprintf(stderr, "\n invalid input\n") ;
exit(-1) ;
}
/*
--------------------------------------
initialize the random number generator
--------------------------------------
*/
drand = Drand_new() ;
Drand_init(drand) ;
Drand_setSeed(drand, seed) ;
Drand_setNormal(drand, 0.0, 1.0) ;
/*
-----------------------------------
initialize the A matrix SubMtx object
-----------------------------------
*/
mtxA = SubMtx_new() ;
SubMtx_initRandom(mtxA, type, mode, 0, 0, nrowA, ncolA, nentA, seed) ;
SubMtx_rowIndices(mtxA, &nrowA, &rowind) ;
ivtemp = IVinit(nrowA + 5, -1) ;
IVramp(nrowA + 5, ivtemp, 0, 1) ;
IVshuffle(nrowA + 5, ivtemp, ++seed) ;
IVcopy(nrowA, rowind, ivtemp) ;
IVfree(ivtemp) ;
SubMtx_columnIndices(mtxA, &ncolA, &colind) ;
ivtemp = IVinit(ncolA + 5, -1) ;
IVramp(ncolA + 5, ivtemp, 0, 1) ;
IVshuffle(ncolA + 5, ivtemp, ++seed) ;
IVcopy(ncolA, colind, ivtemp) ;
IVfree(ivtemp) ;
SubMtx_writeToFile(mtxA, "temp.submtxb") ;
SubMtx_writeToFile(mtxA, "temp.submtxf") ;
/*
--------------------
print out the matrix
--------------------
*/
if ( msglvl > 1 ) {
fprintf(msgFile, "\n\n %% A SubMtx object") ;
fprintf(msgFile, "\n A = zeros(%d,%d) ;", nrowA+5, ncolA+5) ;
SubMtx_writeForMatlab(mtxA, "A", msgFile) ;
fflush(msgFile) ;
}
switch ( mode ) {
case SUBMTX_DENSE_ROWS :
case SUBMTX_SPARSE_ROWS :
/*
--------------------------------
sort the rows in ascending order
--------------------------------
*/
SubMtx_sortRowsUp(mtxA) ;
break ;
}
switch ( mode ) {
case SUBMTX_DENSE_COLUMNS :
case SUBMTX_SPARSE_COLUMNS :
/*
-----------------------------------
sort the columns in ascending order
-----------------------------------
*/
SubMtx_sortColumnsUp(mtxA) ;
break ;
}
/*
--------------------------
print out the matrix again
--------------------------
*/
if ( msglvl > 1 ) {
fprintf(msgFile, "\n\n %% B SubMtx object") ;
fprintf(msgFile, "\n B = zeros(%d,%d) ;", nrowA+5, ncolA+5) ;
SubMtx_writeForMatlab(mtxA, "B", msgFile) ;
fflush(msgFile) ;
}
/*
-----------------
check with matlab
-----------------
*/
if ( msglvl > 1 ) {
fprintf(msgFile, "\n\n maxabs = max(max(abs(A - B))) ") ;
fflush(msgFile) ;
}
/*
------------------------
free the working storage
------------------------
*/
SubMtx_free(mtxA) ;
Drand_free(drand) ;
fprintf(msgFile, "\n") ;
return(1) ; }
/*--------------------------------------------------------------------*/
syntax highlighted by Code2HTML, v. 0.9.1