diff options
author | Pedro Vicente Nunes <pvn@hdfgroup.org> | 2003-01-23 22:08:51 (GMT) |
---|---|---|
committer | Pedro Vicente Nunes <pvn@hdfgroup.org> | 2003-01-23 22:08:51 (GMT) |
commit | 85751bbbe9cd8eb592ea2b58d2cfa07cc16cfc72 (patch) | |
tree | 90f75cb32cb6066cc09f79ca4d57446f6ebfdb95 /tools/h5diff/h5difftst.c | |
parent | f1c8081093204f16e53c2bf524fbdf93e6c319e8 (diff) | |
download | hdf5-85751bbbe9cd8eb592ea2b58d2cfa07cc16cfc72.zip hdf5-85751bbbe9cd8eb592ea2b58d2cfa07cc16cfc72.tar.gz hdf5-85751bbbe9cd8eb592ea2b58d2cfa07cc16cfc72.tar.bz2 |
[svn-r6326] Purpose:
added h5diff to CVS
current version, options only work for float dataset type
Platforms tested:
windows, linux
Diffstat (limited to 'tools/h5diff/h5difftst.c')
-rw-r--r-- | tools/h5diff/h5difftst.c | 438 |
1 files changed, 1 insertions, 437 deletions
diff --git a/tools/h5diff/h5difftst.c b/tools/h5diff/h5difftst.c index e0065f7..b839511 100644 --- a/tools/h5diff/h5difftst.c +++ b/tools/h5diff/h5difftst.c @@ -6,447 +6,11 @@ #include "hdf5.h" -#ifndef FALSE -#define FALSE 0 -#endif -#ifndef TRUE -#define TRUE 1 -#endif - -int do_test_files(); -int h5diff_dataset( hid_t file1_id, hid_t file2_id, const char *dset_name ); -void array_diff( void *buf1, void *buf2, hsize_t tot_cnt, hid_t type_id ); - - - - -/*------------------------------------------------------------------------- - * Function: usage - * - * Purpose: print a usage message - * - * Return: void - * - * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu - * - * Date: October 8, 2002 - * - * Comments: - * - * Modifications: - * - *------------------------------------------------------------------------- - */ - -void usage( const char *progname ) -{ -#define USAGE "\ - [-d dset] Compare only the specified dataset(s)\n\ - file1 File name of the first HDF5 file\n\ - file2 File name of the second HDF5 file\n" - - fprintf(stderr, - "%s [-d] file1 file2\n%s", - progname, - USAGE); - exit(EXIT_FAILURE); -} - - -/*------------------------------------------------------------------------- - * Function: main - * - * Purpose: H5diff - * - * Return: Success: 0, Failure: 1 - * - * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu - * - * Date: October 8, 2002 - * - * Comments: - * - * Modifications: - * - *------------------------------------------------------------------------- - */ int main(int argc, const char *argv[]) { - const char *progname = argv[0]; - int dset_only = FALSE; - int argno; - const char *s = NULL; - const char *file1_name = NULL; - const char *file2_name = NULL; - const char *dset_name = NULL; - hid_t file1_id, file2_id; - herr_t status; - - do_test_files(); - - -/*------------------------------------------------------------------------- - * parse command line options - *------------------------------------------------------------------------- - */ - - if (argc < 2) { - usage( progname ); - exit(EXIT_FAILURE); - } - - /* parse command line options */ - for (argno=1; argno<argc ; argno++) - { - - /* get the single-letter switches */ - if ( '-'==argv[argno][0] ) - { - - for (s=argv[argno]+1; *s; s++) - { - switch (*s) { - case 'h': - usage(progname); - exit(EXIT_SUCCESS); - case 'd': - dset_only = TRUE; - dset_name = argv[argno+1]; - break; - } /*switch*/ - } /*for*/ - } /*if*/ - - }/*for*/ - - -/*------------------------------------------------------------------------- - * process the files - *------------------------------------------------------------------------- - */ - - file1_name = argv[argno-2]; - file2_name = argv[argno-1]; - - /* Open the files */ - if ((file1_id=H5Fopen(file1_name,H5F_ACC_RDONLY,H5P_DEFAULT))<0 || - (file2_id=H5Fopen(file2_name,H5F_ACC_RDONLY,H5P_DEFAULT))<0) - exit(EXIT_FAILURE); - - if ( dset_only ) - { - - h5diff_dataset(file1_id,file2_id,dset_name); - - } - - - /* Close */ - status = H5Fclose(file1_id); - status = H5Fclose(file2_id); - - - + return 0; } - -/*------------------------------------------------------------------------- - * Function: h5diff_dataset - * - * Purpose: - * - * Return: Success: 0, Failure: -11 - * - * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu - * - * Date: October 8, 2002 - * - * Comments: - * - * Modifications: - * - *------------------------------------------------------------------------- - */ - - - -int h5diff_dataset( hid_t file1_id, hid_t file2_id, const char *dset_name ) -{ - - hid_t dset1_id, dset2_id; - hid_t space1_id, space2_id; - hid_t type1_id, type2_id; - hid_t rank1, rank2; - void *buf1, *buf2; - hsize_t tot_cnt, tot_cnt1, tot_cnt2; - hsize_t dims1[32], dims2[32]; - int i; - herr_t status; - -/*------------------------------------------------------------------------- - * open the handles - *------------------------------------------------------------------------- - */ - - /* Open the datasets */ - if ( (dset1_id = H5Dopen(file1_id,dset_name)) < 0 ) - return -1; - - if ( (dset2_id = H5Dopen(file2_id,dset_name)) < 0 ) - return -1; - - /* Get the datatype */ - if ( (type1_id = H5Dget_type(dset1_id)) < 0 ) - goto out; - - /* Get the datatype */ - if ( (type2_id = H5Dget_type(dset2_id)) < 0 ) - goto out; - - /* Get the dataspace handle */ - if ( (space1_id = H5Dget_space(dset1_id)) < 0 ) - return -1; - - /* Get rank */ - if ( (rank1 = H5Sget_simple_extent_ndims(space1_id)) < 0 ) - return -1; - - /* Get the dataspace handle */ - if ( (space2_id = H5Dget_space(dset2_id)) < 0 ) - return -1; - - /* Get rank */ - if ( (rank2 = H5Sget_simple_extent_ndims(space2_id)) < 0 ) - return -1; - - /* Get dimensions */ - if ( H5Sget_simple_extent_dims(space1_id,dims1,NULL) < 0 ) - goto out; - - /* Get dimensions */ - if ( H5Sget_simple_extent_dims(space2_id,dims2,NULL) < 0 ) - goto out; - - -/*------------------------------------------------------------------------- - * compare - *------------------------------------------------------------------------- - */ - - - printf("\n---------------------------\n"); - printf("Dataset Name: %s .... Comparing\n", dset_name); - - if ( rank1 != rank2 ) - { - goto out; - } - - tot_cnt1 = 1; - for (i = 0; i < rank1; i++) - { - tot_cnt1 *= dims1[i]; - } - - tot_cnt2 = 1; - for (i = 0; i < rank2; i++) - { - tot_cnt2 *= dims2[i]; - } - - buf1 = (void *) malloc((unsigned) (tot_cnt1*H5Tget_size(type1_id))); - buf2 = (void *) malloc((unsigned) (tot_cnt2*H5Tget_size(type2_id))); - - - if ( H5Dread(dset1_id,type1_id,H5S_ALL,H5S_ALL,H5P_DEFAULT,buf1) < 0 ) - goto out; - - if ( H5Dread(dset2_id,type2_id,H5S_ALL,H5S_ALL,H5P_DEFAULT,buf2) < 0 ) - goto out; - - if (tot_cnt1 > tot_cnt2) - tot_cnt = tot_cnt2; - else - tot_cnt = tot_cnt1; - - array_diff(buf1,buf2,tot_cnt,type1_id); - - - free((char *) buf1); - free((char *) buf2); - -/*------------------------------------------------------------------------- - * close - *------------------------------------------------------------------------- - */ - - -out: - - /* Close */ - status = H5Dclose(dset1_id); - status = H5Dclose(dset2_id); - status = H5Sclose(space1_id); - status = H5Sclose(space2_id); - status = H5Tclose(type1_id); - status = H5Tclose(type2_id); - - return 0; - -} - - - -/*------------------------------------------------------------------------- - * Function: array_diff - * - * Purpose: - * - * Return: Success: 0, Failure: -11 - * - * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu - * - * Date: October 8, 2002 - * - * Comments: - * - * Modifications: - * - *------------------------------------------------------------------------- - */ - - -void array_diff( void *buf1, void *buf2, hsize_t tot_cnt, hid_t type_id ) -{ - -#if 0 - char *i1ptr1, *i1ptr2; - short *i2ptr1, *i2ptr2; - float *fptr1, *fptr2; - double *dptr1, *dptr2; -#endif - - int *i4ptr1, *i4ptr2; - int i; - - H5T_class_t type_class; - size_t type_size; - - /* Get the class. */ - type_class = H5Tget_class( type_id ); - - /* Get the size. */ - type_size = H5Tget_size( type_id ); - - - switch(type_class) - { - case H5T_INTEGER: - - - switch(type_size) - { - case 4: - - i4ptr1 = (int *) buf1; - i4ptr2 = (int *) buf2; - for ( i = 0; i < tot_cnt; i++) - { - if (*i4ptr1 != *i4ptr2) - { - printf("Index: %d, File1: %d, File2: %d\n", i, *i4ptr1, *i4ptr2); - } - i4ptr1++; i4ptr2++; - } - - - - break; - - } /*switch*/ - - - - break; /* H5T_INTEGER */ - - - - } /*switch*/ - - - -} - - - - - -/*------------------------------------------------------------------------- - * do some test files - *------------------------------------------------------------------------- - */ - -int do_test_files() -{ - - hid_t file_id; - hid_t dataset_id; - hid_t space_id; - hsize_t dims1[1] = { 5 }; - int data1[5] = {1,2,3,4,5}; - hsize_t dims2[1] = { 5 }; - int data2[5] = {6,7,8,9,10}; - herr_t status; - -/*------------------------------------------------------------------------- - * Create one file - *------------------------------------------------------------------------- - */ - - /* Create a file */ - file_id = H5Fcreate ("h5diff_test1.h5", H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT); - - /* Create a data space */ - space_id = H5Screate_simple(1,dims1,NULL); - - /* Create a dataset "dset" */ - dataset_id = H5Dcreate(file_id,"dset",H5T_NATIVE_INT,space_id,H5P_DEFAULT); - - /* Write the data */ - status = H5Dwrite(dataset_id,H5T_NATIVE_INT,H5S_ALL,H5S_ALL,H5P_DEFAULT,data1); - - /* Close */ - status = H5Dclose(dataset_id); - status = H5Sclose(space_id); - status = H5Fclose(file_id); - -/*------------------------------------------------------------------------- - * Create another file - *------------------------------------------------------------------------- - */ - - /* Create a file */ - file_id = H5Fcreate ("h5diff_test2.h5", H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT); - - /* Create a data space */ - space_id = H5Screate_simple(1,dims2,NULL); - - /* Create a dataset "dset" */ - dataset_id = H5Dcreate(file_id,"dset",H5T_NATIVE_INT,space_id,H5P_DEFAULT); - - /* Write the data */ - status = H5Dwrite(dataset_id,H5T_NATIVE_INT,H5S_ALL,H5S_ALL,H5P_DEFAULT,data2); - - /* Close */ - status = H5Dclose(dataset_id); - status = H5Sclose(space_id); - status = H5Fclose(file_id); - - - return 0; - - -} |