diff options
author | Quincey Koziol <koziol@hdfgroup.org> | 2008-06-16 22:17:29 (GMT) |
---|---|---|
committer | Quincey Koziol <koziol@hdfgroup.org> | 2008-06-16 22:17:29 (GMT) |
commit | db2c4c497abab139485dbf6797e56b1340e4577d (patch) | |
tree | f7dfb321a3643658ed24aaf776ec4c1e48bc76a3 /tools/h5diff | |
parent | 55af47c47c3c0c7bc17266968f5e0e782189e819 (diff) | |
download | hdf5-db2c4c497abab139485dbf6797e56b1340e4577d.zip hdf5-db2c4c497abab139485dbf6797e56b1340e4577d.tar.gz hdf5-db2c4c497abab139485dbf6797e56b1340e4577d.tar.bz2 |
[svn-r15221] Description:
Bring changes from trunk from the time the branch was created (r14280)
up to the 1.8.0 release (r14525) back into the metadata journaling branch.
Tested on:
FreeBSD/32 6.2 (duty) in debug mode
FreeBSD/64 6.2 (liberty) w/C++ & FORTRAN, in debug mode
Linux/32 2.6 (kagiso) w/PGI compilers, w/C++ & FORTRAN, w/threadsafe,
in debug mode
Linux/64-amd64 2.6 (smirom) w/default API=1.6.x, w/C++ & FORTRAN,
in production mode
Linux/64-ia64 2.6 (cobalt) w/Intel compilers, w/C++ & FORTRAN,
in production mode
Solaris/32 2.10 (linew) w/deprecated symbols disabled, w/C++ & FORTRAN,
w/szip filter, in production mode
Linux/64-ia64 2.4 (tg-login3) w/parallel, w/FORTRAN, in production mode
Diffstat (limited to 'tools/h5diff')
-rw-r--r-- | tools/h5diff/Makefile.in | 1 | ||||
-rw-r--r-- | tools/h5diff/h5diff_common.c | 381 | ||||
-rw-r--r-- | tools/h5diff/h5diffgentest.c | 74 |
3 files changed, 146 insertions, 310 deletions
diff --git a/tools/h5diff/Makefile.in b/tools/h5diff/Makefile.in index 79c6ab6..92dbbe3 100644 --- a/tools/h5diff/Makefile.in +++ b/tools/h5diff/Makefile.in @@ -217,6 +217,7 @@ SET_MAKE = @SET_MAKE@ SHELL = /bin/sh SIZE_T = @SIZE_T@ STATIC_SHARED = @STATIC_SHARED@ +STRICT_FORMAT_CHECKS = @STRICT_FORMAT_CHECKS@ STRIP = @STRIP@ TESTPARALLEL = @TESTPARALLEL@ TIME = @TIME@ diff --git a/tools/h5diff/h5diff_common.c b/tools/h5diff/h5diff_common.c index 802cc37..357bb32 100644 --- a/tools/h5diff/h5diff_common.c +++ b/tools/h5diff/h5diff_common.c @@ -52,175 +52,6 @@ static struct long_options l_opts[] = { * *------------------------------------------------------------------------- */ -#if 0 -#define OLD -#endif - -#if defined (OLD) - -void parse_command_line(int argc, - const char* argv[], - const char** fname1, - const char** fname2, - const char** objname1, - const char** objname2, - diff_opt_t* options) -{ - int i; - const char *s = NULL; - - /* process the command-line */ - memset(options, 0, sizeof (diff_opt_t)); - -/*------------------------------------------------------------------------- - * initial check of command line options - *------------------------------------------------------------------------- - */ - - if ( argv[1] && (strcmp("-V",argv[1])==0) ) - { - print_version("h5diff"); - h5diff_exit(EXIT_SUCCESS); - - } - - if ( argc==2 && (strcmp("-h",argv[1])==0) ) - usage(); - - if ( argc<3 ) - { - usage(); - } - -/*------------------------------------------------------------------------- - * file names are first - *------------------------------------------------------------------------- - */ - if ( argc>=3 ) - { - *fname1 = argv[1]; - *fname2 = argv[2]; - } -/*------------------------------------------------------------------------- - * parse command line options - *------------------------------------------------------------------------- - */ - for (i=3; i<argc ; i++) - { - /* get the single-letter switches */ - if ( '-'==argv[i][0] ) - { - for (s=argv[i]+1; *s; s++) - { - switch (*s) { - default: - printf("-%s is an invalid option\n", s ); - usage(); - break; - case 'h': - usage(); - break; - case 'V': - print_version("h5diff"); - h5diff_exit(EXIT_SUCCESS); - case 'v': - options->m_verbose = 1; - break; - case 'q': - /* use quiet mode; supress the message "0 differences found" */ - options->m_quiet = 1; - break; - case 'r': - options->m_report = 1; - break; - case 'd': - /* if it is not another option */ - if ( i<argc-1 &&'-' != argv[i+1][0] ) - { - options->d=1; - if ( check_p_input(argv[i+1])==-1) - { - printf("<-d %s> is not a valid option\n", argv[i+1] ); - usage(); - } - options->delta = atof(argv[i+1]); - i++; /* go to next */ - } - else - { - printf("Not a valid -d option\n"); - usage(); - } - break; - case 'p': - if ( i<argc-1 &&'-' !=argv[i+1][0] ) - { - options->p=1; - if ( check_p_input(argv[i+1])==-1) - { - printf("<-p %s> is not a valid option\n", argv[i+1] ); - usage(); - } - options->percent = atof(argv[i+1]); - i++; /* go to next */ - } - else - { - printf("Not a valid -p option\n"); - usage(); - } - break; - case 'n': - if ( i<argc-1 && '-' !=argv[i+1][0] ) - { - options->n=1; - if ( check_n_input(argv[i+1])==-1) - { - printf("<-n %s> is not a valid option\n", argv[i+1] ); - usage(); - } - options->count = atol(argv[i+1]); - i++; /* go to next */ - } - else - { - printf("Not a valid -n option\n"); - usage(); - } - break; - } /*switch*/ - } /*for*/ - } /*if*/ - - else /* not single-letter switches */ - - { - /* check if it is not a -d, -p parameter */ - if ( '-'==argv[i-1][0] && ('d'==argv[i-1][1] ||'p'==argv[i-1][1] )) - continue; - else - { - if ( *objname1==NULL ) - *objname1 = argv[i]; - if ( *objname2==NULL ) - { - /* check if we have a second object name */ - if ( i+1<argc && '-' !=argv[i+1][0] ) { - /* yes */ - *objname2 = argv[i+1]; - i++; /* go to next */ - } - else - /* no */ - *objname2 = *objname1; - } /*objname2*/ - } /*else*/ - } /*else*/ - - }/*for*/ -} - -#else void parse_command_line(int argc, const char* argv[], @@ -329,40 +160,37 @@ void parse_command_line(int argc, } - -#endif - /*------------------------------------------------------------------------- * Function: print_info * - * Purpose: print several information messages + * Purpose: print several information messages after h5diff call * *------------------------------------------------------------------------- */ -void print_info(diff_opt_t* options) -{ - if (options->m_quiet || options->err_stat) - return; - - if (options->cmn_objs==0) - { - printf("No common objects found. Files are not comparable.\n"); - if (!options->m_verbose) - printf("Use -v for a list of objects.\n"); - } - - if (options->not_cmp==1) + void print_info(diff_opt_t* options) { - printf("--------------------------------\n"); - printf("Some objects are not comparable\n"); - printf("--------------------------------\n"); - if (!options->m_verbose) - printf("Use -v for a list of objects.\n"); + if (options->m_quiet || options->err_stat) + return; + + if (options->cmn_objs==0) + { + printf("No common objects found. Files are not comparable.\n"); + if (!options->m_verbose) + printf("Use -v for a list of objects.\n"); + } + + if (options->not_cmp==1) + { + printf("--------------------------------\n"); + printf("Some objects are not comparable\n"); + printf("--------------------------------\n"); + if (!options->m_verbose) + printf("Use -v for a list of objects.\n"); + } + } -} - /*------------------------------------------------------------------------- * Function: check_n_input * @@ -382,22 +210,22 @@ void print_info(diff_opt_t* options) */ int check_n_input( const char *str ) { - unsigned i; - char c; - - for ( i = 0; i < strlen(str); i++) - { - c = str[i]; - if ( i==0 ) - { - if ( c < 49 || c > 57 ) /* ascii values between 1 and 9 */ - return -1; - } - else - if ( c < 48 || c > 57 ) /* 0 also */ - return -1; - } - return 1; + unsigned i; + char c; + + for ( i = 0; i < strlen(str); i++) + { + c = str[i]; + if ( i==0 ) + { + if ( c < 49 || c > 57 ) /* ascii values between 1 and 9 */ + return -1; + } + else + if ( c < 48 || c > 57 ) /* 0 also */ + return -1; + } + return 1; } /*------------------------------------------------------------------------- @@ -417,20 +245,20 @@ int check_n_input( const char *str ) */ int check_p_input( const char *str ) { - double x; - - /* - the atof return value on a hexadecimal input is different - on some systems; we do a character check for this - */ - if (strlen(str)>2 && str[0]=='0' && str[1]=='x') - return -1; - - x=atof(str); - if (x<=0) - return -1; - - return 1; + double x; + + /* + the atof return value on a hexadecimal input is different + on some systems; we do a character check for this + */ + if (strlen(str)>2 && str[0]=='0' && str[1]=='x') + return -1; + + x=atof(str); + if (x<=0) + return -1; + + return 1; } /*------------------------------------------------------------------------- @@ -450,20 +278,20 @@ int check_p_input( const char *str ) */ int check_d_input( const char *str ) { - double x; - - /* - the atof return value on a hexadecimal input is different - on some systems; we do a character check for this - */ - if (strlen(str)>2 && str[0]=='0' && str[1]=='x') - return -1; - - x=atof(str); - if (x <=0) - return -1; - - return 1; + double x; + + /* + the atof return value on a hexadecimal input is different + on some systems; we do a character check for this + */ + if (strlen(str)>2 && str[0]=='0' && str[1]=='x') + return -1; + + x=atof(str); + if (x <=0) + return -1; + + return 1; } /*------------------------------------------------------------------------- @@ -476,68 +304,6 @@ int check_d_input( const char *str ) *------------------------------------------------------------------------- */ -#if defined (OLD) -void usage(void) -{ - printf("usage: h5diff [OPTIONS] file1 file2 [obj1[obj2]] \n"); - printf("\n"); - printf("file1 File name of the first HDF5 file\n"); - printf("file2 File name of the second HDF5 file\n"); - printf("[obj1] Name of an HDF5 object, in absolute path\n"); - printf("[obj2] Name of an HDF5 object, in absolute path\n"); - printf("[OPTIONS] are:\n"); - printf("[-h] Print out this information\n"); - printf("[-V] Print HDF5 library version number and exit\n"); - printf("[-r] Report mode. Print differences\n"); - printf("[-v] Verbose mode. Print differences, list of objects, warnings\n"); - printf("[-q] Quiet mode. Do not do output\n"); - printf("[-n count] Print difference up to count number\n"); - printf("[-d delta] Print difference when it is greater than limit delta\n"); - printf("[-p relative] Print difference when it is greater than a relative limit\n"); - printf("\n"); - printf("Items in [] are optional\n"); - printf("[obj1] and [obj2] are HDF5 objects (datasets, groups, datatypes or links)\n"); - printf("The 'count' value must be a positive integer\n"); - printf("The 'delta' and 'relative' values must be positive numbers\n"); - printf("The -d compare criteria is |a - b| > delta\n"); - printf("The -p compare criteria is |(b-a)/a| > relative\n"); - printf("\n"); - printf("h5diff has four modes of output:\n"); - printf(" Normal mode: print the number of differences found and where they occured\n"); - printf(" Report mode: print the above plus the differences\n"); - printf(" Verbose mode: print the above plus a list of objects and warnings\n"); - printf(" Quiet mode: do not print output (h5diff always returns an exit code of 1 when differences are found)\n"); - printf("\n"); - printf("Examples of use:\n"); - printf("\n"); - printf("1) h5diff file1 file2 /g1/dset1 /g1/dset2\n"); - printf("\n"); - printf(" Compares object '/g1/dset1' in file1 with '/g1/dset2' in file2\n"); - printf("\n"); - printf("2) h5diff file1 file2 /g1/dset1\n"); - printf("\n"); - printf(" Compares object '/g1/dset1' in both files\n"); - printf("\n"); - printf("3) h5diff file1 file2\n"); - printf("\n"); - printf(" Compares all objects in both files\n"); - printf("\n"); - printf("Note) file1 and file2 can be the same file. Use\n"); - printf("\n"); - printf(" h5diff file1 file1 /g1/dset1 /g1/dset2\n"); - printf("\n"); - printf(" to compare '/g1/dset1' and '/g1/dset2' in the same file\n"); - printf("\n"); - printf("If no objects are specified, h5diff only compares objects with the same "); - printf("absolute path in both files. The compare criteria is: "); - printf("1) datasets: numerical array differences 2) groups: name string difference "); - printf("3) datatypes: the return value of H5Tequal 2) links: name string difference of the linked value\n"); - -} - - -#else - void usage(void) { printf("usage: h5diff [OPTIONS] file1 file2 [obj1[obj2]] \n"); @@ -610,7 +376,6 @@ void usage(void) } -#endif /*------------------------------------------------------------------------- * Function: h5diff_exit @@ -631,14 +396,14 @@ void usage(void) void h5diff_exit(int status) { #ifdef H5_HAVE_PARALLEL - /* if in parallel mode, dismiss workers, close down MPI, then exit */ - if((g_nTasks > 1) && g_Parallel) { - phdiff_dismiss_workers(); - MPI_Barrier(MPI_COMM_WORLD); - } - if(g_Parallel) - MPI_Finalize(); + /* if in parallel mode, dismiss workers, close down MPI, then exit */ + if((g_nTasks > 1) && g_Parallel) { + phdiff_dismiss_workers(); + MPI_Barrier(MPI_COMM_WORLD); + } + if(g_Parallel) + MPI_Finalize(); #endif - exit(status); + exit(status); } diff --git a/tools/h5diff/h5diffgentest.c b/tools/h5diff/h5diffgentest.c index 51e0a83..735dc0f 100644 --- a/tools/h5diff/h5diffgentest.c +++ b/tools/h5diff/h5diffgentest.c @@ -249,10 +249,12 @@ int test_basic(const char *fname1, /*------------------------------------------------------------------------- - * NaNs in floating point + * NaNs in H5T_NATIVE_FLOAT *------------------------------------------------------------------------- */ { + +#if 1 float data15[6]; float data16[6]; @@ -272,10 +274,78 @@ int test_basic(const char *fname1, write_dset(gid1,1,dims1,"fp15",H5T_NATIVE_FLOAT,data15); write_dset(gid1,1,dims1,"fp16",H5T_NATIVE_FLOAT,data16); +#else + +#define NU_ELMTS 1000000 + + hsize_t i; + + hsize_t dims2[1] = { NU_ELMTS }; + + float *data15 = malloc (NU_ELMTS * sizeof(float) ); + float *data16 = malloc (NU_ELMTS * sizeof(float) ); + + data15[0] = (float) sqrt( (double)-1 ); + data15[1] = 1; + data15[2] = (float) sqrt( (double)-1 ); + data15[3] = 1; + data15[4] = 1; + data15[5] = 1; + + data16[0] = (float) sqrt( (double)-1 ); + data16[1] = (float) sqrt( (double)-1 ); + data16[2] = 1; + data16[3] = 1; + data16[4] = 1; + data16[5] = 1; + + for ( i = 6; i < NU_ELMTS; i++ ) + { + data15[i] = /*data15[0];*/ 2; + data16[i] = 1; + } + + write_dset(gid1,1,dims2,"fp15",H5T_NATIVE_FLOAT,data15); + write_dset(gid1,1,dims2,"fp16",H5T_NATIVE_FLOAT,data16); + free( data15 ); + free( data16 ); +#endif + + } + + + /*------------------------------------------------------------------------- + * NaNs in H5T_NATIVE_DOUBLE + *------------------------------------------------------------------------- + */ + { + + double data17[6]; + double data18[6]; + + data17[0] = sqrt( (double)-1 ); + data17[1] = 1; + data17[2] = sqrt( (double)-1 ); + data17[3] = 1; + data17[4] = 1; + data17[5] = 1; + + data18[0] = (float) sqrt( (double)-1 ); + data18[1] = (float) sqrt( (double)-1 ); + data18[2] = 1; + data18[3] = 1; + data18[4] = 1; + data18[5] = 1; + + write_dset(gid1,1,dims1,"fp17",H5T_NATIVE_DOUBLE,data17); + write_dset(gid1,1,dims1,"fp18",H5T_NATIVE_DOUBLE,data18); } + + + /*------------------------------------------------------------------------- * close @@ -2385,7 +2455,7 @@ void gen_datareg(hid_t fid, coord[3][0]=2; coord[3][1]=5; coord[4][0]=1; coord[4][1]=7; } - H5Sselect_elements(sid1,H5S_SELECT_SET,5,(const hsize_t **)coord); + H5Sselect_elements(sid1,H5S_SELECT_SET,5,coord); H5Sget_select_npoints(sid1); /* store second dataset region */ |