#include #include #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 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; }