diff options
author | Jonathan Kim <jkm@hdfgroup.org> | 2010-09-16 18:09:59 (GMT) |
---|---|---|
committer | Jonathan Kim <jkm@hdfgroup.org> | 2010-09-16 18:09:59 (GMT) |
commit | a9a3f22e786983ec4e946bd1a8cdd42ec8058c53 (patch) | |
tree | d144bfe7cf780f925535a2466ce37059e6917123 /tools/h5diff | |
parent | 9f028ea4589cfd21ce610050c75895ed69b2ee08 (diff) | |
download | hdf5-a9a3f22e786983ec4e946bd1a8cdd42ec8058c53.zip hdf5-a9a3f22e786983ec4e946bd1a8cdd42ec8058c53.tar.gz hdf5-a9a3f22e786983ec4e946bd1a8cdd42ec8058c53.tar.bz2 |
[svn-r19401] Purpose:
Fix for Bug1975 h5diff - support recursive comparison on group when specified as an object
Description:
Merged from hdf5 trunk (r19400).
Compare member objects and groups recursively when two files or groups are specified to be compared. Support parallel diff and handling symbolic links accordingly.
Tested:
jam, amani
Diffstat (limited to 'tools/h5diff')
43 files changed, 1422 insertions, 186 deletions
diff --git a/tools/h5diff/CMakeLists.txt b/tools/h5diff/CMakeLists.txt index 820c3d0..c31f650 100644 --- a/tools/h5diff/CMakeLists.txt +++ b/tools/h5diff/CMakeLists.txt @@ -123,7 +123,21 @@ IF (BUILD_TESTING) h5diff_56.txt h5diff_57.txt h5diff_58.txt + h5diff_500.txt + h5diff_501.txt + h5diff_503.txt + h5diff_504.txt + h5diff_505.txt + h5diff_506.txt + h5diff_507.txt + h5diff_508.txt + h5diff_509.txt + h5diff_510.txt + h5diff_512.txt + h5diff_513.txt + h5diff_514.txt h5diff_600.txt + h5diff_601.txt h5diff_603.txt h5diff_604.txt h5diff_605.txt @@ -174,6 +188,8 @@ IF (BUILD_TESTING) h5diff_ext2softlink_trg.h5 h5diff_danglelinks1.h5 h5diff_danglelinks2.h5 + h5diff_grp_recurse1.h5 + h5diff_grp_recurse2.h5 ) FOREACH (txt_file ${HDF5_REFERENCE_FILES}) @@ -278,6 +294,8 @@ SET (FILE17 h5diff_ext2softlink_src.h5) SET (FILE18 h5diff_ext2softlink_trg.h5) SET (DANGLE_LINK_FILE1 h5diff_danglelinks1.h5) SET (DANGLE_LINK_FILE2 h5diff_danglelinks2.h5) +SET (GRP_RECURSE_FILE1 h5diff_grp_recurse1.h5) +SET (GRP_RECURSE_FILE2 h5diff_grp_recurse2.h5) # ############################################################################ # # Common usage @@ -402,6 +420,9 @@ ADD_H5_TEST (h5diff_58 1 -v ${FILE7} ${FILE8} refreg) # 6.0: Check if the command line number of arguments is less than 3 ADD_H5_TEST (h5diff_600 1 ${FILE1}) +# 6.1: Check if non-exist object name is specified +ADD_H5_TEST (h5diff_601 2 ${FILE1} ${FILE1} nono_obj) + # ############################################################################## # # -d @@ -659,6 +680,42 @@ ADD_H5_TEST (h5diff_458 2 --follow-symlinks -v --no-dangling-links ${FILE15} $ # dangling link found for ext links (obj to obj). Both dangle links ADD_H5_TEST (h5diff_459 2 --follow-symlinks -v --no-dangling-links ${FILE15} ${FILE15} /ext_link_noexist1 /ext_link_noexist2) + +# ############################################################################## +# # test for group diff recursivly +# ############################################################################## +# root +ADD_H5_TEST (h5diff_500 -v ${GRP_RECURSE_FILE1} ${GRP_RECURSE_FILE2} / /) +ADD_H5_TEST (h5diff_501 -v --follow-symlinks ${GRP_RECURSE_FILE1} ${GRP_RECURSE_FILE2} / /) + +# root vs group +ADD_H5_TEST (h5diff_502 -v ${GRP_RECURSE_FILE1} ${GRP_RECURSE_FILE2} / /grp1/grp2/grp3) + +# group vs group (same name and structure) +ADD_H5_TEST (h5diff_503 -v ${GRP_RECURSE_FILE1} ${GRP_RECURSE_FILE2} /grp1 /grp1) + +# group vs group (different name and structure) +ADD_H5_TEST (h5diff_504 -v ${GRP_RECURSE_FILE1} ${GRP_RECURSE_FILE2} /grp1/grp2 /grp1/grp2/grp3) + +# groups vs soft-link +ADD_H5_TEST (h5diff_505 -v ${GRP_RECURSE_FILE1} ${GRP_RECURSE_FILE2} /grp1 /slink_grp1) +ADD_H5_TEST (h5diff_506 -v --follow-symlinks ${GRP_RECURSE_FILE1} ${GRP_RECURSE_FILE2} /grp1/grp2 /slink_grp2) + +# groups vs ext-link +ADD_H5_TEST (h5diff_507 -v ${GRP_RECURSE_FILE1} ${GRP_RECURSE_FILE2} /grp1 /elink_grp1) +ADD_H5_TEST (h5diff_508 -v --follow-symlinks ${GRP_RECURSE_FILE1} ${GRP_RECURSE_FILE2} /grp1 /elink_grp1) + +# soft-link vs ext-link +ADD_H5_TEST (h5diff_509 -v ${GRP_RECURSE_FILE1} ${GRP_RECURSE_FILE2} /slink_grp1 /elink_grp1) +ADD_H5_TEST (h5diff_510 -v --follow-symlinks ${GRP_RECURSE_FILE1} ${GRP_RECURSE_FILE2} /slink_grp1 /elink_grp1) + +# circled ext links +ADD_H5_TEST (h5diff_511 -v ${GRP_RECURSE_FILE1} ${GRP_RECURSE_FILE2} /grp10 /grp11) +ADD_H5_TEST (h5diff_512 -v --follow-symlinks ${GRP_RECURSE_FILE1} ${GRP_RECURSE_FILE2} /grp10 /grp11) + +# circled soft2ext-link vs soft2ext-link +ADD_H5_TEST (h5diff_513 -v ${GRP_RECURSE_FILE1} ${GRP_RECURSE_FILE2} /slink_grp10 /slink_grp11) +ADD_H5_TEST (h5diff_514 -v --follow-symlinks ${GRP_RECURSE_FILE1} ${GRP_RECURSE_FILE2} /slink_grp10 /slink_grp11) ENDIF (BUILD_TESTING) diff --git a/tools/h5diff/h5diff_common.c b/tools/h5diff/h5diff_common.c index 773f7bd..909d2e2 100644 --- a/tools/h5diff/h5diff_common.c +++ b/tools/h5diff/h5diff_common.c @@ -351,7 +351,7 @@ check_d_input( const char *str ) void usage(void) { - printf("usage: h5diff [OPTIONS] file1 file2 [obj1[obj2]] \n"); + printf("usage: h5diff [OPTIONS] file1 file2 [obj1[ obj2]] \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"); @@ -425,18 +425,29 @@ void usage(void) printf("\n"); - printf(" Compare criteria\n"); - printf(" If no objects [obj1[obj2]] are specified, h5diff only compares objects\n"); - printf(" with the same absolute path in both files\n"); + printf(" File comparison:\n"); + printf(" If no objects [obj1[ obj2]] are specified, the h5diff comparison proceeds as\n"); + printf(" a comparison of the two files' root groups. That is, h5diff first compares\n"); + printf(" the names of root group members, generates a report of root group objects\n"); + printf(" that appear in only one file or in both files, and recursively compares\n"); + printf(" common objects.\n"); printf("\n"); - printf(" The compare criteria is:\n"); - printf(" 1) datasets: numerical array differences\n"); - printf(" 2) groups: name string difference\n"); - printf(" 3) datatypes: the return value of H5Tequal\n"); - printf(" 4) links: name string difference of the linked value as default\n"); - printf(" (refer to --follow-symlinks option).\n"); + printf(" Object comparison:\n"); + printf(" 1) Groups \n"); + printf(" First compares the names of member objects (relative path, from the\n"); + printf(" specified group) and generates a report of objects that appear in only\n"); + printf(" one group or in both groups. Common objects are then compared recursively.\n"); + printf(" 2) Datasets \n"); + printf(" Array rank and dimensions, datatypes, and data values are compared.\n"); + printf(" 3) Datatypes \n"); + printf(" The comparison is based on the return value of H5Tequal.\n"); + printf(" 4) Symbolic links \n"); + printf(" The paths to the target objects are compared.\n"); + printf(" (The option --follow-symlinks overrides the default behavior when\n"); + printf(" symbolic links are compared.).\n"); printf("\n"); + printf(" Exit code:\n"); printf(" 0 if no differences, 1 if differences found, 2 if error\n"); printf("\n"); diff --git a/tools/h5diff/h5diffgentest.c b/tools/h5diff/h5diffgentest.c index cac8935..ed2a68f 100644 --- a/tools/h5diff/h5diffgentest.c +++ b/tools/h5diff/h5diffgentest.c @@ -55,6 +55,8 @@ #define FILE18 "h5diff_ext2softlink_trg.h5" #define DANGLE_LINK_FILE1 "h5diff_danglelinks1.h5" #define DANGLE_LINK_FILE2 "h5diff_danglelinks2.h5" +#define GRP_RECURSE_FILE1 "h5diff_grp_recurse1.h5" +#define GRP_RECURSE_FILE2 "h5diff_grp_recurse2.h5" #define UIMAX 4294967295u /*Maximum value for a variable of type unsigned int */ #define STR_SIZE 3 @@ -99,6 +101,7 @@ static int test_linked_softlinks(const char *fname1); static int test_external_links(const char *fname1, const char *fname2); static int test_ext2soft_links(const char *fname1, const char *fname2); static int test_dangle_links(const char *fname1, const char *fname2); +static int test_group_recurse(const char *fname1, const char *fname2); /* called by test_attributes() and test_datasets() */ static void write_attr_in(hid_t loc_id,const char* dset_name,hid_t fid,int make_diffs); @@ -148,6 +151,8 @@ int main(void) test_dangle_links(DANGLE_LINK_FILE1, DANGLE_LINK_FILE2); + test_group_recurse(GRP_RECURSE_FILE1, GRP_RECURSE_FILE2); + return 0; } @@ -1829,6 +1834,464 @@ out: } /*------------------------------------------------------------------------- +* +* Purpose: For testing comparing group member objects recursively +* +* Programmer: Jonathan Kim (Aug 19, 2010) +* +*-------------------------------------------------------------------------*/ +static int test_group_recurse(const char *fname1, const char *fname2) +{ + hid_t fid1=0; + hid_t fid2=0; + hid_t gid1_f1=0, gid2_f1=0, gid3_f1=0, gid10_f1=0; + hid_t gid1_f2=0, gid2_f2=0, gid3_f2=0, gid11_f2=0; + hsize_t dims2[2] = {2,4}; + int data1[4][2] = {{0,1},{0,1},{1,0},{1,0}}; + int data2[4][2] = {{0,2},{0,2},{2,0},{2,0}}; + int data3[4][2] = {{0,3},{0,3},{3,0},{3,0}}; + herr_t status = SUCCEED; + + /*----------------------------------------------------------------------- + * Create file(s) + *------------------------------------------------------------------------*/ + fid1 = H5Fcreate (fname1, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT); + if (fid1 < 0) + { + fprintf(stderr, "Error: %s> H5Fcreate failed.\n", fname1); + status = FAIL; + goto out; + } + + fid2 = H5Fcreate (fname2, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT); + if (fid2 < 0) + { + fprintf(stderr, "Error: %s> H5Fcreate failed.\n", fname2); + status = FAIL; + goto out; + } + + /*----------------------------------------------------------------------- + * Groups + *------------------------------------------------------------------------*/ + /* file1 */ + gid1_f1 = H5Gcreate2(fid1, "/grp1", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT); + if (gid1_f1 < 0) + { + fprintf(stderr, "Error: %s> H5Gcreate2 failed.\n", fname1); + status = FAIL; + goto out; + } + + gid2_f1 = H5Gcreate2(fid1, "/grp1/grp2", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT); + if (gid2_f1 < 0) + { + fprintf(stderr, "Error: %s> H5Gcreate2 failed.\n", fname1); + status = FAIL; + goto out; + } + + gid3_f1 = H5Gcreate2(fid1, "/grp1/grp2/grp3", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT); + if (gid3_f1 < 0) + { + fprintf(stderr, "Error: %s> H5Gcreate2 failed.\n", fname1); + status = FAIL; + goto out; + } + + gid10_f1 = H5Gcreate2(fid1, "/grp10", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT); + if (gid10_f1 < 0) + { + fprintf(stderr, "Error: %s> H5Gcreate2 failed.\n", fname1); + status = FAIL; + goto out; + } + + /* file2 */ + gid1_f2 = H5Gcreate2(fid2, "/grp1", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT); + if (gid1_f2 < 0) + { + fprintf(stderr, "Error: %s> H5Gcreate2 failed.\n", fname2); + status = FAIL; + goto out; + } + + gid2_f2 = H5Gcreate2(fid2, "/grp1/grp2", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT); + if (gid2_f2 < 0) + { + fprintf(stderr, "Error: %s> H5Gcreate2 failed.\n", fname2); + status = FAIL; + goto out; + } + + gid3_f2 = H5Gcreate2(fid2, "/grp1/grp2/grp3", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT); + if (gid3_f2 < 0) + { + fprintf(stderr, "Error: %s> H5Gcreate2 failed.\n", fname2); + status = FAIL; + goto out; + } + + gid11_f2 = H5Gcreate2(fid2, "/grp11", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT); + if (gid11_f2 < 0) + { + fprintf(stderr, "Error: %s> H5Gcreate2 failed.\n", fname2); + status = FAIL; + goto out; + } + + /*----------------------------------------------------------------------- + * Datasets under root + *------------------------------------------------------------------------*/ + /* file1 */ + status = write_dset(fid1,2,dims2,"dset1",H5T_NATIVE_INT,data1); + if (status == FAIL) + { + fprintf(stderr, "Error: %s> write_dset failed\n", fname1); + status = FAIL; + goto out; + } + + status = write_dset(fid1,2,dims2,"dset2",H5T_NATIVE_INT,data2); + if (status == FAIL) + { + fprintf(stderr, "Error: %s> write_dset failed\n", fname1); + status = FAIL; + goto out; + } + + status = write_dset(fid1,2,dims2,"dset3",H5T_NATIVE_INT,data3); + if (status == FAIL) + { + fprintf(stderr, "Error: %s> write_dset failed\n", fname1); + status = FAIL; + goto out; + } + + /* file2 */ + status = write_dset(fid2,2,dims2,"dset1",H5T_NATIVE_INT,data1); + if (status == FAIL) + { + fprintf(stderr, "Error: %s> write_dset failed\n", fname2); + status = FAIL; + goto out; + } + + status = write_dset(fid2,2,dims2,"dset2",H5T_NATIVE_INT,data2); + if (status == FAIL) + { + fprintf(stderr, "Error: %s> write_dset failed\n", fname2); + status = FAIL; + goto out; + } + + status = write_dset(fid2,2,dims2,"dset3",H5T_NATIVE_INT,data3); + if (status == FAIL) + { + fprintf(stderr, "Error: %s> write_dset failed\n", fname2); + status = FAIL; + goto out; + } + + /*----------------------------------------------------------------------- + * Datasets under group + *------------------------------------------------------------------------*/ + /* file1 */ + status = write_dset(gid1_f1,2,dims2,"dset1",H5T_NATIVE_INT,data1); + if (status == FAIL) + { + fprintf(stderr, "Error: %s> write_dset failed\n", fname1); + status = FAIL; + goto out; + } + + status = write_dset(gid2_f1,2,dims2,"dset1",H5T_NATIVE_INT,data1); + if (status == FAIL) + { + fprintf(stderr, "Error: %s> write_dset failed\n", fname1); + status = FAIL; + goto out; + } + status = write_dset(gid2_f1,2,dims2,"dset2",H5T_NATIVE_INT,data2); + if (status == FAIL) + { + fprintf(stderr, "Error: %s> write_dset failed\n", fname1); + status = FAIL; + goto out; + } + + status = write_dset(gid3_f1,2,dims2,"dset1",H5T_NATIVE_INT,data1); + if (status == FAIL) + { + fprintf(stderr, "Error: %s> write_dset failed\n", fname1); + status = FAIL; + goto out; + } + status = write_dset(gid3_f1,2,dims2,"dset2",H5T_NATIVE_INT,data2); + if (status == FAIL) + { + fprintf(stderr, "Error: %s> write_dset failed\n", fname1); + status = FAIL; + goto out; + } + + status = write_dset(gid3_f1,2,dims2,"dset3",H5T_NATIVE_INT,data3); + if (status == FAIL) + { + fprintf(stderr, "Error: %s> write_dset failed\n", fname1); + status = FAIL; + goto out; + } + + status = write_dset(gid10_f1,2,dims2,"dset4",H5T_NATIVE_INT,data1); + if (status == FAIL) + { + fprintf(stderr, "Error: %s> write_dset failed\n", fname1); + status = FAIL; + goto out; + } + + status = write_dset(gid10_f1,2,dims2,"dset5",H5T_NATIVE_INT,data3); + if (status == FAIL) + { + fprintf(stderr, "Error: %s> write_dset failed\n", fname1); + status = FAIL; + goto out; + } + + /* file2 */ + status = write_dset(gid1_f2,2,dims2,"dset1",H5T_NATIVE_INT,data1); + if (status == FAIL) + { + fprintf(stderr, "Error: %s> write_dset failed\n", fname2); + status = FAIL; + goto out; + } + + status = write_dset(gid2_f2,2,dims2,"dset1",H5T_NATIVE_INT,data1); + if (status == FAIL) + { + fprintf(stderr, "Error: %s> write_dset failed\n", fname2); + status = FAIL; + goto out; + } + status = write_dset(gid2_f2,2,dims2,"dset2",H5T_NATIVE_INT,data2); + if (status == FAIL) + { + fprintf(stderr, "Error: %s> write_dset failed\n", fname2); + status = FAIL; + goto out; + } + + status = write_dset(gid3_f2,2,dims2,"dset1",H5T_NATIVE_INT,data1); + if (status == FAIL) + { + fprintf(stderr, "Error: %s> write_dset failed\n", fname2); + status = FAIL; + goto out; + } + status = write_dset(gid3_f2,2,dims2,"dset2",H5T_NATIVE_INT,data2); + if (status == FAIL) + { + fprintf(stderr, "Error: %s> write_dset failed\n", fname2); + status = FAIL; + goto out; + } + + status = write_dset(gid3_f2,2,dims2,"dset3",H5T_NATIVE_INT,data3); + if (status == FAIL) + { + fprintf(stderr, "Error: %s> write_dset failed\n", fname2); + status = FAIL; + goto out; + } + + status = write_dset(gid11_f2,2,dims2,"dset4",H5T_NATIVE_INT,data1); + if (status == FAIL) + { + fprintf(stderr, "Error: %s> write_dset failed\n", fname2); + status = FAIL; + goto out; + } + + status = write_dset(gid11_f2,2,dims2,"dset5",H5T_NATIVE_INT,data2); + if (status == FAIL) + { + fprintf(stderr, "Error: %s> write_dset failed\n", fname2); + status = FAIL; + goto out; + } + + + /*----------------------------------------------------------------------- + * Soft Links + *------------------------------------------------------------------------*/ + /* file 1 */ + status = H5Lcreate_soft("/grp1", fid1, "slink_grp1", H5P_DEFAULT, H5P_DEFAULT); + if (status < 0) + { + fprintf(stderr, "Error: %s> H5Lcreate_soft failed.\n", fname1); + status = FAIL; + goto out; + } + + status = H5Lcreate_soft("/grp1/grp2", fid1, "slink_grp2", H5P_DEFAULT, H5P_DEFAULT); + if (status < 0) + { + fprintf(stderr, "Error: %s> H5Lcreate_soft failed.\n", fname1); + status = FAIL; + goto out; + } + + status = H5Lcreate_soft("/grp1/grp2/grp3", fid1, "slink_grp3", H5P_DEFAULT, H5P_DEFAULT); + if (status < 0) + { + fprintf(stderr, "Error: %s> H5Lcreate_soft failed.\n", fname1); + status = FAIL; + goto out; + } + + status = H5Lcreate_soft("/grp10", fid1, "slink_grp10", H5P_DEFAULT, H5P_DEFAULT); + if (status < 0) + { + fprintf(stderr, "Error: %s> H5Lcreate_soft failed.\n", fname1); + status = FAIL; + goto out; + } + + /* file 2 */ + status = H5Lcreate_soft("/grp1", fid2, "slink_grp1", H5P_DEFAULT, H5P_DEFAULT); + if (status < 0) + { + fprintf(stderr, "Error: %s> H5Lcreate_soft failed.\n", fname2); + status = FAIL; + goto out; + } + + status = H5Lcreate_soft("/grp1/grp2", fid2, "slink_grp2", H5P_DEFAULT, H5P_DEFAULT); + if (status < 0) + { + fprintf(stderr, "Error: %s> H5Lcreate_soft failed.\n", fname2); + status = FAIL; + goto out; + } + + status = H5Lcreate_soft("/grp1/grp2/grp3", fid2, "slink_grp3", H5P_DEFAULT, H5P_DEFAULT); + if (status < 0) + { + fprintf(stderr, "Error: %s> H5Lcreate_soft failed.\n", fname2); + status = FAIL; + goto out; + } + + status = H5Lcreate_soft("/grp11", fid2, "slink_grp11", H5P_DEFAULT, H5P_DEFAULT); + if (status < 0) + { + fprintf(stderr, "Error: %s> H5Lcreate_soft failed.\n", fname2); + status = FAIL; + goto out; + } + + /*----------------------------------------------------------------------- + * External Links + *------------------------------------------------------------------------*/ + /* file1 */ + status = H5Lcreate_external(fname2, "/grp1", fid1, "elink_grp1", H5P_DEFAULT, H5P_DEFAULT); + if (status < 0) + { + fprintf(stderr, "Error: %s> H5Lcreate_external failed.\n", fname1); + status = FAIL; + goto out; + } + + status = H5Lcreate_external(fname2, "/grp1/grp2", fid1, "elink_grp2", H5P_DEFAULT, H5P_DEFAULT); + if (status < 0) + { + fprintf(stderr, "Error: %s> H5Lcreate_external failed.\n", fname1); + status = FAIL; + goto out; + } + + status = H5Lcreate_external(fname2, "/grp1/grp2/grp3", fid1, "elink_grp3", H5P_DEFAULT, H5P_DEFAULT); + if (status < 0) + { + fprintf(stderr, "Error: %s> H5Lcreate_external failed.\n", fname1); + status = FAIL; + goto out; + } + + /* file2 */ + status = H5Lcreate_external(fname1, "/grp1", fid2, "elink_grp1", H5P_DEFAULT, H5P_DEFAULT); + if (status < 0) + { + fprintf(stderr, "Error: %s> H5Lcreate_external failed.\n", fname2); + status = FAIL; + goto out; + } + + status = H5Lcreate_external(fname1, "/grp1/grp2", fid2, "elink_grp2", H5P_DEFAULT, H5P_DEFAULT); + if (status < 0) + { + fprintf(stderr, "Error: %s> H5Lcreate_external failed.\n", fname2); + status = FAIL; + goto out; + } + + status = H5Lcreate_external(fname1, "/grp1/grp2/grp3", fid2, "elink_grp3", H5P_DEFAULT, H5P_DEFAULT); + if (status < 0) + { + fprintf(stderr, "Error: %s> H5Lcreate_external failed.\n", fname2); + status = FAIL; + goto out; + } + + /*------------------------------ + * external circle route test + * file1/grp11 <-> file2/grp10 via elink_grp_circle link + */ + /* file1 */ + status = H5Lcreate_external(fname2, "/grp11", gid10_f1, "elink_grp_circle", H5P_DEFAULT, H5P_DEFAULT); + if (status < 0) + { + fprintf(stderr, "Error: %s> H5Lcreate_external failed.\n", fname1); + status = FAIL; + goto out; + } + /* file2 */ + status = H5Lcreate_external(fname1, "/grp10", gid11_f2, "elink_grp_circle", H5P_DEFAULT, H5P_DEFAULT); + if (status < 0) + { + fprintf(stderr, "Error: %s> H5Lcreate_external failed.\n", fname2); + status = FAIL; + goto out; + } + + +out: + /*----------------------------------------------------------------------- + * Close + *-----------------------------------------------------------------------*/ + if(fid1) + H5Fclose(fid1); + if(fid2) + H5Fclose(fid2); + if(gid1_f1) + H5Gclose(gid1_f1); + if(gid2_f1) + H5Gclose(gid2_f1); + if(gid3_f1) + H5Gclose(gid3_f1); + if(gid1_f2) + H5Gclose(gid1_f2); + if(gid2_f2) + H5Gclose(gid2_f2); + if(gid3_f2) + H5Gclose(gid3_f2); + + return status; +} + +/*------------------------------------------------------------------------- * Function: write_attr_in * * Purpose: write attributes in LOC_ID (dataset, group, named datatype) diff --git a/tools/h5diff/ph5diff_main.c b/tools/h5diff/ph5diff_main.c index 531503d..f6b0dba 100644 --- a/tools/h5diff/ph5diff_main.c +++ b/tools/h5diff/ph5diff_main.c @@ -135,7 +135,7 @@ ph5diff_worker(int nID) { struct diff_args args; hid_t file1_id, file2_id; - char filenames[2][1024]; + char filenames[2][MAX_FILENAME]; char out_data[PRINT_DATA_MAX_SIZE] = {0}; struct diffs_found diffs; int i; @@ -144,7 +144,7 @@ ph5diff_worker(int nID) MPI_Comm_rank(MPI_COMM_WORLD, &nID); outBuffOffset = 0; - MPI_Recv(filenames, 1024*2, MPI_CHAR, 0, MPI_ANY_TAG, MPI_COMM_WORLD, &Status); + MPI_Recv(filenames, MAX_FILENAME*2, MPI_CHAR, 0, MPI_ANY_TAG, MPI_COMM_WORLD, &Status); if(Status.MPI_TAG == MPI_TAG_PARALLEL) { /* disable error reporting */ @@ -175,7 +175,7 @@ ph5diff_worker(int nID) /*Recv parameters for diff from manager task */ MPI_Recv(&args, sizeof(args), MPI_BYTE, 0, MPI_TAG_ARGS, MPI_COMM_WORLD, &Status); /*Do the diff */ - diffs.nfound = diff(file1_id, args.name, file2_id, args.name, &(args.options), args.type); + diffs.nfound = diff(file1_id, args.name1, file2_id, args.name2, &(args.options), args.type); diffs.not_cmp = args.options.not_cmp; /*If print buffer has something in it, request print token.*/ diff --git a/tools/h5diff/testfiles/h5diff_10.txt b/tools/h5diff/testfiles/h5diff_10.txt index d3ee9a6..224f9bc 100644 --- a/tools/h5diff/testfiles/h5diff_10.txt +++ b/tools/h5diff/testfiles/h5diff_10.txt @@ -1,4 +1,4 @@ -usage: h5diff [OPTIONS] file1 file2 [obj1[obj2]] +usage: h5diff [OPTIONS] file1 file2 [obj1[ obj2]] file1 File name of the first HDF5 file file2 File name of the second HDF5 file [obj1] Name of an HDF5 object, in absolute path @@ -69,16 +69,26 @@ usage: h5diff [OPTIONS] file1 file2 [obj1[obj2]] -v Verbose mode: print the above plus a list of objects and warnings -q Quiet mode: do not print output - Compare criteria - If no objects [obj1[obj2]] are specified, h5diff only compares objects - with the same absolute path in both files + File comparison: + If no objects [obj1[ obj2]] are specified, the h5diff comparison proceeds as + a comparison of the two files' root groups. That is, h5diff first compares + the names of root group members, generates a report of root group objects + that appear in only one file or in both files, and recursively compares + common objects. - The compare criteria is: - 1) datasets: numerical array differences - 2) groups: name string difference - 3) datatypes: the return value of H5Tequal - 4) links: name string difference of the linked value as default - (refer to --follow-symlinks option). + Object comparison: + 1) Groups + First compares the names of member objects (relative path, from the + specified group) and generates a report of objects that appear in only + one group or in both groups. Common objects are then compared recursively. + 2) Datasets + Array rank and dimensions, datatypes, and data values are compared. + 3) Datatypes + The comparison is based on the return value of H5Tequal. + 4) Symbolic links + The paths to the target objects are compared. + (The option --follow-symlinks overrides the default behavior when + symbolic links are compared.). Exit code: 0 if no differences, 1 if differences found, 2 if error diff --git a/tools/h5diff/testfiles/h5diff_23.txt b/tools/h5diff/testfiles/h5diff_23.txt index 5a46ea2..bd1cadb 100644 --- a/tools/h5diff/testfiles/h5diff_23.txt +++ b/tools/h5diff/testfiles/h5diff_23.txt @@ -1,3 +1,8 @@ + +group1 group2 +--------------------------------------- + x x + group : </g1> and </g1> 0 differences found EXIT CODE: 0 diff --git a/tools/h5diff/testfiles/h5diff_26.txt b/tools/h5diff/testfiles/h5diff_26.txt index 8e1fcc3..54a5121 100644 --- a/tools/h5diff/testfiles/h5diff_26.txt +++ b/tools/h5diff/testfiles/h5diff_26.txt @@ -1,3 +1,8 @@ + +group1 group2 +--------------------------------------- + x x + group : </g1> and </g2> -1 differences found -EXIT CODE: 1 +0 differences found +EXIT CODE: 0 diff --git a/tools/h5diff/testfiles/h5diff_400.txt b/tools/h5diff/testfiles/h5diff_400.txt index 97db70d..8b3c03c 100644 --- a/tools/h5diff/testfiles/h5diff_400.txt +++ b/tools/h5diff/testfiles/h5diff_400.txt @@ -3,10 +3,9 @@ file1 file2 --------------------------------------- x x / x x /softlink_dset1_1 - x x /softlink_dset1_2 x x /softlink_dset2 x x /softlink_group1 - x x /softlink_group2 + x x /softlink_group1/dset x x /softlink_noexist x x /target_dset1 x x /target_dset2 @@ -15,25 +14,13 @@ file1 file2 group : </> and </> 0 differences found -link : </softlink_dset1_1> and </softlink_dset1_1> dataset: </softlink_dset1_1> and </softlink_dset1_1> 0 differences found -0 differences found -link : </softlink_dset1_2> and </softlink_dset1_2> -dataset: </softlink_dset1_2> and </softlink_dset1_2> -0 differences found -0 differences found -link : </softlink_dset2> and </softlink_dset2> dataset: </softlink_dset2> and </softlink_dset2> 0 differences found -0 differences found -link : </softlink_group1> and </softlink_group1> group : </softlink_group1> and </softlink_group1> 0 differences found -0 differences found -link : </softlink_group2> and </softlink_group2> -group : </softlink_group2> and </softlink_group2> -0 differences found +dataset: </softlink_group1/dset> and </softlink_group1/dset> 0 differences found dangling link: </softlink_noexist> and </softlink_noexist> 0 differences found diff --git a/tools/h5diff/testfiles/h5diff_404.txt b/tools/h5diff/testfiles/h5diff_404.txt index c9a476d..db317d1 100644 --- a/tools/h5diff/testfiles/h5diff_404.txt +++ b/tools/h5diff/testfiles/h5diff_404.txt @@ -5,27 +5,25 @@ file1 file2 x x /ext_link_dset1 x x /ext_link_dset2 x x /ext_link_grp1 + x x /ext_link_grp1/x_dset x x /ext_link_grp2 + x x /ext_link_grp2/x_dset x x /ext_link_noexist1 x x /ext_link_noexist2 group : </> and </> 0 differences found -external link: </ext_link_dset1> and </ext_link_dset1> dataset: </ext_link_dset1> and </ext_link_dset1> 0 differences found -0 differences found -external link: </ext_link_dset2> and </ext_link_dset2> dataset: </ext_link_dset2> and </ext_link_dset2> 0 differences found -0 differences found -external link: </ext_link_grp1> and </ext_link_grp1> group : </ext_link_grp1> and </ext_link_grp1> 0 differences found +dataset: </ext_link_grp1/x_dset> and </ext_link_grp1/x_dset> 0 differences found -external link: </ext_link_grp2> and </ext_link_grp2> group : </ext_link_grp2> and </ext_link_grp2> 0 differences found +dataset: </ext_link_grp2/x_dset> and </ext_link_grp2/x_dset> 0 differences found dangling link: </ext_link_noexist1> and </ext_link_noexist1> 0 differences found diff --git a/tools/h5diff/testfiles/h5diff_410.txt b/tools/h5diff/testfiles/h5diff_410.txt index b0924f6..6087bb8 100644 --- a/tools/h5diff/testfiles/h5diff_410.txt +++ b/tools/h5diff/testfiles/h5diff_410.txt @@ -23,54 +23,30 @@ file1 file2 group : </> and </> 0 differences found -link : </softlink1_to_dset1> and </softlink1_to_dset1> dataset: </softlink1_to_dset1> and </softlink1_to_dset1> 0 differences found -0 differences found -link : </softlink1_to_slink1> and </softlink1_to_slink1> dataset: </softlink1_to_slink1> and </softlink1_to_slink1> 0 differences found -0 differences found -link : </softlink1_to_slink2> and </softlink1_to_slink2> dataset: </softlink1_to_slink2> and </softlink1_to_slink2> 0 differences found -0 differences found -link : </softlink2_to_dset2> and </softlink2_to_dset2> dataset: </softlink2_to_dset2> and </softlink2_to_dset2> 0 differences found -0 differences found -link : </softlink2_to_slink1> and </softlink2_to_slink1> dataset: </softlink2_to_slink1> and </softlink2_to_slink1> 0 differences found -0 differences found -link : </softlink2_to_slink2> and </softlink2_to_slink2> dataset: </softlink2_to_slink2> and </softlink2_to_slink2> 0 differences found -0 differences found -link : </softlink3_to_group1> and </softlink3_to_group1> group : </softlink3_to_group1> and </softlink3_to_group1> 0 differences found -0 differences found -link : </softlink3_to_slink1> and </softlink3_to_slink1> group : </softlink3_to_slink1> and </softlink3_to_slink1> 0 differences found -0 differences found -link : </softlink3_to_slink2> and </softlink3_to_slink2> group : </softlink3_to_slink2> and </softlink3_to_slink2> 0 differences found -0 differences found -link : </softlink4_to_group2> and </softlink4_to_group2> group : </softlink4_to_group2> and </softlink4_to_group2> 0 differences found -0 differences found -link : </softlink4_to_slink1> and </softlink4_to_slink1> group : </softlink4_to_slink1> and </softlink4_to_slink1> 0 differences found -0 differences found -link : </softlink4_to_slink2> and </softlink4_to_slink2> group : </softlink4_to_slink2> and </softlink4_to_slink2> 0 differences found -0 differences found dataset: </target_dset1> and </target_dset1> 0 differences found dataset: </target_dset2> and </target_dset2> diff --git a/tools/h5diff/testfiles/h5diff_414.txt b/tools/h5diff/testfiles/h5diff_414.txt index e7a991a..a47349e 100644 --- a/tools/h5diff/testfiles/h5diff_414.txt +++ b/tools/h5diff/testfiles/h5diff_414.txt @@ -1,3 +1,9 @@ + +group1 group2 +--------------------------------------- + x x + x /dset + group : </target_group> and </softlink3_to_slink2> -1 differences found +0 differences found EXIT CODE: 1 diff --git a/tools/h5diff/testfiles/h5diff_415.txt b/tools/h5diff/testfiles/h5diff_415.txt index 1e97319..30cc947 100644 --- a/tools/h5diff/testfiles/h5diff_415.txt +++ b/tools/h5diff/testfiles/h5diff_415.txt @@ -1,3 +1,9 @@ + +group1 group2 +--------------------------------------- + x x + x /dset + group : </softlink3_to_slink2> and </target_group> -1 differences found +0 differences found EXIT CODE: 1 diff --git a/tools/h5diff/testfiles/h5diff_416.txt b/tools/h5diff/testfiles/h5diff_416.txt index e4e98b0..551a6c3 100644 --- a/tools/h5diff/testfiles/h5diff_416.txt +++ b/tools/h5diff/testfiles/h5diff_416.txt @@ -1,3 +1,8 @@ + +group1 group2 +--------------------------------------- + x x + group : </softlink3_to_slink2> and </softlink4_to_slink2> -1 differences found -EXIT CODE: 1 +0 differences found +EXIT CODE: 0 diff --git a/tools/h5diff/testfiles/h5diff_453.txt b/tools/h5diff/testfiles/h5diff_453.txt index 9c4d61b..8a5ca52 100644 --- a/tools/h5diff/testfiles/h5diff_453.txt +++ b/tools/h5diff/testfiles/h5diff_453.txt @@ -3,10 +3,9 @@ file1 file2 --------------------------------------- x x / x x /softlink_dset1_1 - x x /softlink_dset1_2 x x /softlink_dset2 x x /softlink_group1 - x x /softlink_group2 + x x /softlink_group1/dset x x /softlink_noexist x x /target_dset1 x x /target_dset2 @@ -15,25 +14,13 @@ file1 file2 group : </> and </> 0 differences found -link : </softlink_dset1_1> and </softlink_dset1_1> dataset: </softlink_dset1_1> and </softlink_dset1_1> 0 differences found -0 differences found -link : </softlink_dset1_2> and </softlink_dset1_2> -dataset: </softlink_dset1_2> and </softlink_dset1_2> -0 differences found -0 differences found -link : </softlink_dset2> and </softlink_dset2> dataset: </softlink_dset2> and </softlink_dset2> 0 differences found -0 differences found -link : </softlink_group1> and </softlink_group1> group : </softlink_group1> and </softlink_group1> 0 differences found -0 differences found -link : </softlink_group2> and </softlink_group2> -group : </softlink_group2> and </softlink_group2> -0 differences found +dataset: </softlink_group1/dset> and </softlink_group1/dset> 0 differences found Warning: </softlink_noexist> is a dangling link. dataset: </target_dset1> and </target_dset1> diff --git a/tools/h5diff/testfiles/h5diff_456.txt b/tools/h5diff/testfiles/h5diff_456.txt index f20e403..9317988 100644 --- a/tools/h5diff/testfiles/h5diff_456.txt +++ b/tools/h5diff/testfiles/h5diff_456.txt @@ -5,27 +5,25 @@ file1 file2 x x /ext_link_dset1 x x /ext_link_dset2 x x /ext_link_grp1 + x x /ext_link_grp1/x_dset x x /ext_link_grp2 + x x /ext_link_grp2/x_dset x x /ext_link_noexist1 x x /ext_link_noexist2 group : </> and </> 0 differences found -external link: </ext_link_dset1> and </ext_link_dset1> dataset: </ext_link_dset1> and </ext_link_dset1> 0 differences found -0 differences found -external link: </ext_link_dset2> and </ext_link_dset2> dataset: </ext_link_dset2> and </ext_link_dset2> 0 differences found -0 differences found -external link: </ext_link_grp1> and </ext_link_grp1> group : </ext_link_grp1> and </ext_link_grp1> 0 differences found +dataset: </ext_link_grp1/x_dset> and </ext_link_grp1/x_dset> 0 differences found -external link: </ext_link_grp2> and </ext_link_grp2> group : </ext_link_grp2> and </ext_link_grp2> 0 differences found +dataset: </ext_link_grp2/x_dset> and </ext_link_grp2/x_dset> 0 differences found Warning: </ext_link_noexist1> is a dangling link. Warning: </ext_link_noexist2> is a dangling link. diff --git a/tools/h5diff/testfiles/h5diff_500.txt b/tools/h5diff/testfiles/h5diff_500.txt new file mode 100644 index 0000000..7d688d2 --- /dev/null +++ b/tools/h5diff/testfiles/h5diff_500.txt @@ -0,0 +1,72 @@ + +file1 file2 +--------------------------------------- + x x / + x x /dset1 + x x /dset2 + x x /dset3 + x x /elink_grp1 + x x /elink_grp2 + x x /elink_grp3 + x x /grp1 + x x /grp1/dset1 + x x /grp1/grp2 + x x /grp1/grp2/dset1 + x x /grp1/grp2/dset2 + x x /grp1/grp2/grp3 + x x /grp1/grp2/grp3/dset1 + x x /grp1/grp2/grp3/dset2 + x x /grp1/grp2/grp3/dset3 + x /grp10 + x /grp10/dset4 + x /grp10/dset5 + x /grp10/elink_grp_circle + x /grp11 + x /grp11/dset4 + x /grp11/dset5 + x /grp11/elink_grp_circle + x x /slink_grp1 + x /slink_grp10 + x /slink_grp11 + x x /slink_grp2 + x x /slink_grp3 + +group : </> and </> +0 differences found +dataset: </dset1> and </dset1> +0 differences found +dataset: </dset2> and </dset2> +0 differences found +dataset: </dset3> and </dset3> +0 differences found +external link: </elink_grp1> and </elink_grp1> +1 differences found +external link: </elink_grp2> and </elink_grp2> +1 differences found +external link: </elink_grp3> and </elink_grp3> +1 differences found +group : </grp1> and </grp1> +0 differences found +dataset: </grp1/dset1> and </grp1/dset1> +0 differences found +group : </grp1/grp2> and </grp1/grp2> +0 differences found +dataset: </grp1/grp2/dset1> and </grp1/grp2/dset1> +0 differences found +dataset: </grp1/grp2/dset2> and </grp1/grp2/dset2> +0 differences found +group : </grp1/grp2/grp3> and </grp1/grp2/grp3> +0 differences found +dataset: </grp1/grp2/grp3/dset1> and </grp1/grp2/grp3/dset1> +0 differences found +dataset: </grp1/grp2/grp3/dset2> and </grp1/grp2/grp3/dset2> +0 differences found +dataset: </grp1/grp2/grp3/dset3> and </grp1/grp2/grp3/dset3> +0 differences found +link : </slink_grp1> and </slink_grp1> +0 differences found +link : </slink_grp2> and </slink_grp2> +0 differences found +link : </slink_grp3> and </slink_grp3> +0 differences found +EXIT CODE: 1 diff --git a/tools/h5diff/testfiles/h5diff_501.txt b/tools/h5diff/testfiles/h5diff_501.txt new file mode 100644 index 0000000..75e91da --- /dev/null +++ b/tools/h5diff/testfiles/h5diff_501.txt @@ -0,0 +1,188 @@ + +file1 file2 +--------------------------------------- + x x / + x x /dset1 + x x /dset2 + x x /dset3 + x x /elink_grp1 + x x /elink_grp1/dset1 + x x /elink_grp1/grp2 + x x /elink_grp1/grp2/dset1 + x x /elink_grp1/grp2/dset2 + x x /elink_grp1/grp2/grp3 + x x /elink_grp1/grp2/grp3/dset1 + x x /elink_grp1/grp2/grp3/dset2 + x x /elink_grp1/grp2/grp3/dset3 + x x /elink_grp2 + x x /elink_grp2/dset1 + x x /elink_grp2/dset2 + x x /elink_grp2/grp3 + x x /elink_grp2/grp3/dset1 + x x /elink_grp2/grp3/dset2 + x x /elink_grp2/grp3/dset3 + x x /elink_grp3 + x x /elink_grp3/dset1 + x x /elink_grp3/dset2 + x x /elink_grp3/dset3 + x x /grp1 + x x /grp1/dset1 + x x /grp1/grp2 + x x /grp1/grp2/dset1 + x x /grp1/grp2/dset2 + x x /grp1/grp2/grp3 + x x /grp1/grp2/grp3/dset1 + x x /grp1/grp2/grp3/dset2 + x x /grp1/grp2/grp3/dset3 + x /grp10 + x /grp10/dset4 + x /grp10/dset5 + x /grp10/elink_grp_circle + x /grp10/elink_grp_circle/dset4 + x /grp10/elink_grp_circle/dset5 + x /grp10/elink_grp_circle/elink_grp_circle + x /grp10/elink_grp_circle/elink_grp_circle/dset4 + x /grp10/elink_grp_circle/elink_grp_circle/dset5 + x /grp11 + x /grp11/dset4 + x /grp11/dset5 + x /grp11/elink_grp_circle + x /grp11/elink_grp_circle/dset4 + x /grp11/elink_grp_circle/dset5 + x /grp11/elink_grp_circle/elink_grp_circle + x /grp11/elink_grp_circle/elink_grp_circle/dset4 + x /grp11/elink_grp_circle/elink_grp_circle/dset5 + x x /slink_grp1 + x x /slink_grp1/dset1 + x x /slink_grp1/grp2 + x x /slink_grp1/grp2/dset1 + x x /slink_grp1/grp2/dset2 + x x /slink_grp1/grp2/grp3 + x x /slink_grp1/grp2/grp3/dset1 + x x /slink_grp1/grp2/grp3/dset2 + x x /slink_grp1/grp2/grp3/dset3 + x /slink_grp10 + x /slink_grp10/dset4 + x /slink_grp10/dset5 + x /slink_grp11 + x /slink_grp11/dset4 + x /slink_grp11/dset5 + x x /slink_grp2 + x x /slink_grp2/dset1 + x x /slink_grp2/dset2 + x x /slink_grp2/grp3 + x x /slink_grp2/grp3/dset1 + x x /slink_grp2/grp3/dset2 + x x /slink_grp2/grp3/dset3 + x x /slink_grp3 + x x /slink_grp3/dset1 + x x /slink_grp3/dset2 + x x /slink_grp3/dset3 + +group : </> and </> +0 differences found +dataset: </dset1> and </dset1> +0 differences found +dataset: </dset2> and </dset2> +0 differences found +dataset: </dset3> and </dset3> +0 differences found +group : </elink_grp1> and </elink_grp1> +0 differences found +dataset: </elink_grp1/dset1> and </elink_grp1/dset1> +0 differences found +group : </elink_grp1/grp2> and </elink_grp1/grp2> +0 differences found +dataset: </elink_grp1/grp2/dset1> and </elink_grp1/grp2/dset1> +0 differences found +dataset: </elink_grp1/grp2/dset2> and </elink_grp1/grp2/dset2> +0 differences found +group : </elink_grp1/grp2/grp3> and </elink_grp1/grp2/grp3> +0 differences found +dataset: </elink_grp1/grp2/grp3/dset1> and </elink_grp1/grp2/grp3/dset1> +0 differences found +dataset: </elink_grp1/grp2/grp3/dset2> and </elink_grp1/grp2/grp3/dset2> +0 differences found +dataset: </elink_grp1/grp2/grp3/dset3> and </elink_grp1/grp2/grp3/dset3> +0 differences found +group : </elink_grp2> and </elink_grp2> +0 differences found +dataset: </elink_grp2/dset1> and </elink_grp2/dset1> +0 differences found +dataset: </elink_grp2/dset2> and </elink_grp2/dset2> +0 differences found +group : </elink_grp2/grp3> and </elink_grp2/grp3> +0 differences found +dataset: </elink_grp2/grp3/dset1> and </elink_grp2/grp3/dset1> +0 differences found +dataset: </elink_grp2/grp3/dset2> and </elink_grp2/grp3/dset2> +0 differences found +dataset: </elink_grp2/grp3/dset3> and </elink_grp2/grp3/dset3> +0 differences found +group : </elink_grp3> and </elink_grp3> +0 differences found +dataset: </elink_grp3/dset1> and </elink_grp3/dset1> +0 differences found +dataset: </elink_grp3/dset2> and </elink_grp3/dset2> +0 differences found +dataset: </elink_grp3/dset3> and </elink_grp3/dset3> +0 differences found +group : </grp1> and </grp1> +0 differences found +dataset: </grp1/dset1> and </grp1/dset1> +0 differences found +group : </grp1/grp2> and </grp1/grp2> +0 differences found +dataset: </grp1/grp2/dset1> and </grp1/grp2/dset1> +0 differences found +dataset: </grp1/grp2/dset2> and </grp1/grp2/dset2> +0 differences found +group : </grp1/grp2/grp3> and </grp1/grp2/grp3> +0 differences found +dataset: </grp1/grp2/grp3/dset1> and </grp1/grp2/grp3/dset1> +0 differences found +dataset: </grp1/grp2/grp3/dset2> and </grp1/grp2/grp3/dset2> +0 differences found +dataset: </grp1/grp2/grp3/dset3> and </grp1/grp2/grp3/dset3> +0 differences found +group : </slink_grp1> and </slink_grp1> +0 differences found +dataset: </slink_grp1/dset1> and </slink_grp1/dset1> +0 differences found +group : </slink_grp1/grp2> and </slink_grp1/grp2> +0 differences found +dataset: </slink_grp1/grp2/dset1> and </slink_grp1/grp2/dset1> +0 differences found +dataset: </slink_grp1/grp2/dset2> and </slink_grp1/grp2/dset2> +0 differences found +group : </slink_grp1/grp2/grp3> and </slink_grp1/grp2/grp3> +0 differences found +dataset: </slink_grp1/grp2/grp3/dset1> and </slink_grp1/grp2/grp3/dset1> +0 differences found +dataset: </slink_grp1/grp2/grp3/dset2> and </slink_grp1/grp2/grp3/dset2> +0 differences found +dataset: </slink_grp1/grp2/grp3/dset3> and </slink_grp1/grp2/grp3/dset3> +0 differences found +group : </slink_grp2> and </slink_grp2> +0 differences found +dataset: </slink_grp2/dset1> and </slink_grp2/dset1> +0 differences found +dataset: </slink_grp2/dset2> and </slink_grp2/dset2> +0 differences found +group : </slink_grp2/grp3> and </slink_grp2/grp3> +0 differences found +dataset: </slink_grp2/grp3/dset1> and </slink_grp2/grp3/dset1> +0 differences found +dataset: </slink_grp2/grp3/dset2> and </slink_grp2/grp3/dset2> +0 differences found +dataset: </slink_grp2/grp3/dset3> and </slink_grp2/grp3/dset3> +0 differences found +group : </slink_grp3> and </slink_grp3> +0 differences found +dataset: </slink_grp3/dset1> and </slink_grp3/dset1> +0 differences found +dataset: </slink_grp3/dset2> and </slink_grp3/dset2> +0 differences found +dataset: </slink_grp3/dset3> and </slink_grp3/dset3> +0 differences found +EXIT CODE: 1 diff --git a/tools/h5diff/testfiles/h5diff_502.txt b/tools/h5diff/testfiles/h5diff_502.txt new file mode 100644 index 0000000..d3de6e5 --- /dev/null +++ b/tools/h5diff/testfiles/h5diff_502.txt @@ -0,0 +1,36 @@ + +group1 group2 +--------------------------------------- + x + x / + x x /dset1 + x x /dset2 + x x /dset3 + x /elink_grp1 + x /elink_grp2 + x /elink_grp3 + x /grp1 + x /grp1/dset1 + x /grp1/grp2 + x /grp1/grp2/dset1 + x /grp1/grp2/dset2 + x /grp1/grp2/grp3 + x /grp1/grp2/grp3/dset1 + x /grp1/grp2/grp3/dset2 + x /grp1/grp2/grp3/dset3 + x /grp10 + x /grp10/dset4 + x /grp10/dset5 + x /grp10/elink_grp_circle + x /slink_grp1 + x /slink_grp10 + x /slink_grp2 + x /slink_grp3 + +dataset: </dset1> and </grp1/grp2/grp3/dset1> +0 differences found +dataset: </dset2> and </grp1/grp2/grp3/dset2> +0 differences found +dataset: </dset3> and </grp1/grp2/grp3/dset3> +0 differences found +EXIT CODE: 1 diff --git a/tools/h5diff/testfiles/h5diff_503.txt b/tools/h5diff/testfiles/h5diff_503.txt new file mode 100644 index 0000000..cf01598 --- /dev/null +++ b/tools/h5diff/testfiles/h5diff_503.txt @@ -0,0 +1,32 @@ + +group1 group2 +--------------------------------------- + x x + x x /dset1 + x x /grp2 + x x /grp2/dset1 + x x /grp2/dset2 + x x /grp2/grp3 + x x /grp2/grp3/dset1 + x x /grp2/grp3/dset2 + x x /grp2/grp3/dset3 + +group : </grp1> and </grp1> +0 differences found +dataset: </grp1/dset1> and </grp1/dset1> +0 differences found +group : </grp1/grp2> and </grp1/grp2> +0 differences found +dataset: </grp1/grp2/dset1> and </grp1/grp2/dset1> +0 differences found +dataset: </grp1/grp2/dset2> and </grp1/grp2/dset2> +0 differences found +group : </grp1/grp2/grp3> and </grp1/grp2/grp3> +0 differences found +dataset: </grp1/grp2/grp3/dset1> and </grp1/grp2/grp3/dset1> +0 differences found +dataset: </grp1/grp2/grp3/dset2> and </grp1/grp2/grp3/dset2> +0 differences found +dataset: </grp1/grp2/grp3/dset3> and </grp1/grp2/grp3/dset3> +0 differences found +EXIT CODE: 0 diff --git a/tools/h5diff/testfiles/h5diff_504.txt b/tools/h5diff/testfiles/h5diff_504.txt new file mode 100644 index 0000000..6cf43b3 --- /dev/null +++ b/tools/h5diff/testfiles/h5diff_504.txt @@ -0,0 +1,19 @@ + +group1 group2 +--------------------------------------- + x x + x x /dset1 + x x /dset2 + x /dset3 + x /grp3 + x /grp3/dset1 + x /grp3/dset2 + x /grp3/dset3 + +group : </grp1/grp2> and </grp1/grp2/grp3> +0 differences found +dataset: </grp1/grp2/dset1> and </grp1/grp2/grp3/dset1> +0 differences found +dataset: </grp1/grp2/dset2> and </grp1/grp2/grp3/dset2> +0 differences found +EXIT CODE: 1 diff --git a/tools/h5diff/testfiles/h5diff_505.txt b/tools/h5diff/testfiles/h5diff_505.txt new file mode 100644 index 0000000..28640b7 --- /dev/null +++ b/tools/h5diff/testfiles/h5diff_505.txt @@ -0,0 +1,6 @@ +</grp1> is of type H5G_GROUP and </slink_grp1> is of type H5G_LINK +-------------------------------- +Some objects are not comparable +-------------------------------- +Use -c for a list of objects. +EXIT CODE: 0 diff --git a/tools/h5diff/testfiles/h5diff_506.txt b/tools/h5diff/testfiles/h5diff_506.txt new file mode 100644 index 0000000..efef9a7 --- /dev/null +++ b/tools/h5diff/testfiles/h5diff_506.txt @@ -0,0 +1,26 @@ + +group1 group2 +--------------------------------------- + x x + x x /dset1 + x x /dset2 + x x /grp3 + x x /grp3/dset1 + x x /grp3/dset2 + x x /grp3/dset3 + +group : </grp1/grp2> and </slink_grp2> +0 differences found +dataset: </grp1/grp2/dset1> and </slink_grp2/dset1> +0 differences found +dataset: </grp1/grp2/dset2> and </slink_grp2/dset2> +0 differences found +group : </grp1/grp2/grp3> and </slink_grp2/grp3> +0 differences found +dataset: </grp1/grp2/grp3/dset1> and </slink_grp2/grp3/dset1> +0 differences found +dataset: </grp1/grp2/grp3/dset2> and </slink_grp2/grp3/dset2> +0 differences found +dataset: </grp1/grp2/grp3/dset3> and </slink_grp2/grp3/dset3> +0 differences found +EXIT CODE: 0 diff --git a/tools/h5diff/testfiles/h5diff_507.txt b/tools/h5diff/testfiles/h5diff_507.txt new file mode 100644 index 0000000..ed2b799 --- /dev/null +++ b/tools/h5diff/testfiles/h5diff_507.txt @@ -0,0 +1,6 @@ +</grp1> is of type H5G_GROUP and </elink_grp1> is of type H5G_UDLINK +-------------------------------- +Some objects are not comparable +-------------------------------- +Use -c for a list of objects. +EXIT CODE: 0 diff --git a/tools/h5diff/testfiles/h5diff_508.txt b/tools/h5diff/testfiles/h5diff_508.txt new file mode 100644 index 0000000..9796345 --- /dev/null +++ b/tools/h5diff/testfiles/h5diff_508.txt @@ -0,0 +1,32 @@ + +group1 group2 +--------------------------------------- + x x + x x /dset1 + x x /grp2 + x x /grp2/dset1 + x x /grp2/dset2 + x x /grp2/grp3 + x x /grp2/grp3/dset1 + x x /grp2/grp3/dset2 + x x /grp2/grp3/dset3 + +group : </grp1> and </elink_grp1> +0 differences found +dataset: </grp1/dset1> and </elink_grp1/dset1> +0 differences found +group : </grp1/grp2> and </elink_grp1/grp2> +0 differences found +dataset: </grp1/grp2/dset1> and </elink_grp1/grp2/dset1> +0 differences found +dataset: </grp1/grp2/dset2> and </elink_grp1/grp2/dset2> +0 differences found +group : </grp1/grp2/grp3> and </elink_grp1/grp2/grp3> +0 differences found +dataset: </grp1/grp2/grp3/dset1> and </elink_grp1/grp2/grp3/dset1> +0 differences found +dataset: </grp1/grp2/grp3/dset2> and </elink_grp1/grp2/grp3/dset2> +0 differences found +dataset: </grp1/grp2/grp3/dset3> and </elink_grp1/grp2/grp3/dset3> +0 differences found +EXIT CODE: 0 diff --git a/tools/h5diff/testfiles/h5diff_509.txt b/tools/h5diff/testfiles/h5diff_509.txt new file mode 100644 index 0000000..145cd9d --- /dev/null +++ b/tools/h5diff/testfiles/h5diff_509.txt @@ -0,0 +1,6 @@ +</slink_grp1> is of type H5G_LINK and </elink_grp1> is of type H5G_UDLINK +-------------------------------- +Some objects are not comparable +-------------------------------- +Use -c for a list of objects. +EXIT CODE: 0 diff --git a/tools/h5diff/testfiles/h5diff_510.txt b/tools/h5diff/testfiles/h5diff_510.txt new file mode 100644 index 0000000..9d92768 --- /dev/null +++ b/tools/h5diff/testfiles/h5diff_510.txt @@ -0,0 +1,32 @@ + +group1 group2 +--------------------------------------- + x x + x x /dset1 + x x /grp2 + x x /grp2/dset1 + x x /grp2/dset2 + x x /grp2/grp3 + x x /grp2/grp3/dset1 + x x /grp2/grp3/dset2 + x x /grp2/grp3/dset3 + +group : </slink_grp1> and </elink_grp1> +0 differences found +dataset: </slink_grp1/dset1> and </elink_grp1/dset1> +0 differences found +group : </slink_grp1/grp2> and </elink_grp1/grp2> +0 differences found +dataset: </slink_grp1/grp2/dset1> and </elink_grp1/grp2/dset1> +0 differences found +dataset: </slink_grp1/grp2/dset2> and </elink_grp1/grp2/dset2> +0 differences found +group : </slink_grp1/grp2/grp3> and </elink_grp1/grp2/grp3> +0 differences found +dataset: </slink_grp1/grp2/grp3/dset1> and </elink_grp1/grp2/grp3/dset1> +0 differences found +dataset: </slink_grp1/grp2/grp3/dset2> and </elink_grp1/grp2/grp3/dset2> +0 differences found +dataset: </slink_grp1/grp2/grp3/dset3> and </elink_grp1/grp2/grp3/dset3> +0 differences found +EXIT CODE: 0 diff --git a/tools/h5diff/testfiles/h5diff_511.txt b/tools/h5diff/testfiles/h5diff_511.txt new file mode 100644 index 0000000..4bac100 --- /dev/null +++ b/tools/h5diff/testfiles/h5diff_511.txt @@ -0,0 +1,24 @@ + +group1 group2 +--------------------------------------- + x x + x x /dset4 + x x /dset5 + x x /elink_grp_circle + +group : </grp10> and </grp11> +0 differences found +dataset: </grp10/dset4> and </grp11/dset4> +0 differences found +dataset: </grp10/dset5> and </grp11/dset5> +size: [2x4] [2x4] +position dset5 dset5 difference +------------------------------------------------------------ +[ 0 1 ] 3 2 1 +[ 0 3 ] 3 2 1 +[ 1 0 ] 3 2 1 +[ 1 2 ] 3 2 1 +4 differences found +external link: </grp10/elink_grp_circle> and </grp11/elink_grp_circle> +1 differences found +EXIT CODE: 1 diff --git a/tools/h5diff/testfiles/h5diff_512.txt b/tools/h5diff/testfiles/h5diff_512.txt new file mode 100644 index 0000000..23fbc12 --- /dev/null +++ b/tools/h5diff/testfiles/h5diff_512.txt @@ -0,0 +1,53 @@ + +group1 group2 +--------------------------------------- + x x + x x /dset4 + x x /dset5 + x x /elink_grp_circle + x x /elink_grp_circle/dset4 + x x /elink_grp_circle/dset5 + x x /elink_grp_circle/elink_grp_circle + x x /elink_grp_circle/elink_grp_circle/dset4 + x x /elink_grp_circle/elink_grp_circle/dset5 + +group : </grp10> and </grp11> +0 differences found +dataset: </grp10/dset4> and </grp11/dset4> +0 differences found +dataset: </grp10/dset5> and </grp11/dset5> +size: [2x4] [2x4] +position dset5 dset5 difference +------------------------------------------------------------ +[ 0 1 ] 3 2 1 +[ 0 3 ] 3 2 1 +[ 1 0 ] 3 2 1 +[ 1 2 ] 3 2 1 +4 differences found +group : </grp10/elink_grp_circle> and </grp11/elink_grp_circle> +0 differences found +dataset: </grp10/elink_grp_circle/dset4> and </grp11/elink_grp_circle/dset4> +0 differences found +dataset: </grp10/elink_grp_circle/dset5> and </grp11/elink_grp_circle/dset5> +size: [2x4] [2x4] +position dset5 dset5 difference +------------------------------------------------------------ +[ 0 1 ] 2 3 1 +[ 0 3 ] 2 3 1 +[ 1 0 ] 2 3 1 +[ 1 2 ] 2 3 1 +4 differences found +group : </grp10/elink_grp_circle/elink_grp_circle> and </grp11/elink_grp_circle/elink_grp_circle> +0 differences found +dataset: </grp10/elink_grp_circle/elink_grp_circle/dset4> and </grp11/elink_grp_circle/elink_grp_circle/dset4> +0 differences found +dataset: </grp10/elink_grp_circle/elink_grp_circle/dset5> and </grp11/elink_grp_circle/elink_grp_circle/dset5> +size: [2x4] [2x4] +position dset5 dset5 difference +------------------------------------------------------------ +[ 0 1 ] 3 2 1 +[ 0 3 ] 3 2 1 +[ 1 0 ] 3 2 1 +[ 1 2 ] 3 2 1 +4 differences found +EXIT CODE: 1 diff --git a/tools/h5diff/testfiles/h5diff_513.txt b/tools/h5diff/testfiles/h5diff_513.txt new file mode 100644 index 0000000..b0af15d --- /dev/null +++ b/tools/h5diff/testfiles/h5diff_513.txt @@ -0,0 +1,3 @@ +link : </slink_grp10> and </slink_grp11> +1 differences found +EXIT CODE: 1 diff --git a/tools/h5diff/testfiles/h5diff_514.txt b/tools/h5diff/testfiles/h5diff_514.txt new file mode 100644 index 0000000..f8e16e9 --- /dev/null +++ b/tools/h5diff/testfiles/h5diff_514.txt @@ -0,0 +1,53 @@ + +group1 group2 +--------------------------------------- + x x + x x /dset4 + x x /dset5 + x x /elink_grp_circle + x x /elink_grp_circle/dset4 + x x /elink_grp_circle/dset5 + x x /elink_grp_circle/elink_grp_circle + x x /elink_grp_circle/elink_grp_circle/dset4 + x x /elink_grp_circle/elink_grp_circle/dset5 + +group : </slink_grp10> and </slink_grp11> +0 differences found +dataset: </slink_grp10/dset4> and </slink_grp11/dset4> +0 differences found +dataset: </slink_grp10/dset5> and </slink_grp11/dset5> +size: [2x4] [2x4] +position dset5 dset5 difference +------------------------------------------------------------ +[ 0 1 ] 3 2 1 +[ 0 3 ] 3 2 1 +[ 1 0 ] 3 2 1 +[ 1 2 ] 3 2 1 +4 differences found +group : </slink_grp10/elink_grp_circle> and </slink_grp11/elink_grp_circle> +0 differences found +dataset: </slink_grp10/elink_grp_circle/dset4> and </slink_grp11/elink_grp_circle/dset4> +0 differences found +dataset: </slink_grp10/elink_grp_circle/dset5> and </slink_grp11/elink_grp_circle/dset5> +size: [2x4] [2x4] +position dset5 dset5 difference +------------------------------------------------------------ +[ 0 1 ] 2 3 1 +[ 0 3 ] 2 3 1 +[ 1 0 ] 2 3 1 +[ 1 2 ] 2 3 1 +4 differences found +group : </slink_grp10/elink_grp_circle/elink_grp_circle> and </slink_grp11/elink_grp_circle/elink_grp_circle> +0 differences found +dataset: </slink_grp10/elink_grp_circle/elink_grp_circle/dset4> and </slink_grp11/elink_grp_circle/elink_grp_circle/dset4> +0 differences found +dataset: </slink_grp10/elink_grp_circle/elink_grp_circle/dset5> and </slink_grp11/elink_grp_circle/elink_grp_circle/dset5> +size: [2x4] [2x4] +position dset5 dset5 difference +------------------------------------------------------------ +[ 0 1 ] 3 2 1 +[ 0 3 ] 3 2 1 +[ 1 0 ] 3 2 1 +[ 1 2 ] 3 2 1 +4 differences found +EXIT CODE: 1 diff --git a/tools/h5diff/testfiles/h5diff_600.txt b/tools/h5diff/testfiles/h5diff_600.txt index cf540ab..b096ab5 100644 --- a/tools/h5diff/testfiles/h5diff_600.txt +++ b/tools/h5diff/testfiles/h5diff_600.txt @@ -1,4 +1,4 @@ -usage: h5diff [OPTIONS] file1 file2 [obj1[obj2]] +usage: h5diff [OPTIONS] file1 file2 [obj1[ obj2]] file1 File name of the first HDF5 file file2 File name of the second HDF5 file [obj1] Name of an HDF5 object, in absolute path @@ -69,16 +69,26 @@ usage: h5diff [OPTIONS] file1 file2 [obj1[obj2]] -v Verbose mode: print the above plus a list of objects and warnings -q Quiet mode: do not print output - Compare criteria - If no objects [obj1[obj2]] are specified, h5diff only compares objects - with the same absolute path in both files + File comparison: + If no objects [obj1[ obj2]] are specified, the h5diff comparison proceeds as + a comparison of the two files' root groups. That is, h5diff first compares + the names of root group members, generates a report of root group objects + that appear in only one file or in both files, and recursively compares + common objects. - The compare criteria is: - 1) datasets: numerical array differences - 2) groups: name string difference - 3) datatypes: the return value of H5Tequal - 4) links: name string difference of the linked value as default - (refer to --follow-symlinks option). + Object comparison: + 1) Groups + First compares the names of member objects (relative path, from the + specified group) and generates a report of objects that appear in only + one group or in both groups. Common objects are then compared recursively. + 2) Datasets + Array rank and dimensions, datatypes, and data values are compared. + 3) Datatypes + The comparison is based on the return value of H5Tequal. + 4) Symbolic links + The paths to the target objects are compared. + (The option --follow-symlinks overrides the default behavior when + symbolic links are compared.). Exit code: 0 if no differences, 1 if differences found, 2 if error diff --git a/tools/h5diff/testfiles/h5diff_601.txt b/tools/h5diff/testfiles/h5diff_601.txt new file mode 100644 index 0000000..eb12f38 --- /dev/null +++ b/tools/h5diff/testfiles/h5diff_601.txt @@ -0,0 +1,2 @@ +Object </nono_obj> could not be found in <h5diff_basic1.h5> +EXIT CODE: 2 diff --git a/tools/h5diff/testfiles/h5diff_603.txt b/tools/h5diff/testfiles/h5diff_603.txt index 2f2e93f..2b37530 100644 --- a/tools/h5diff/testfiles/h5diff_603.txt +++ b/tools/h5diff/testfiles/h5diff_603.txt @@ -1,5 +1,5 @@ <-d -4> is not a valid option -usage: h5diff [OPTIONS] file1 file2 [obj1[obj2]] +usage: h5diff [OPTIONS] file1 file2 [obj1[ obj2]] file1 File name of the first HDF5 file file2 File name of the second HDF5 file [obj1] Name of an HDF5 object, in absolute path @@ -70,16 +70,26 @@ usage: h5diff [OPTIONS] file1 file2 [obj1[obj2]] -v Verbose mode: print the above plus a list of objects and warnings -q Quiet mode: do not print output - Compare criteria - If no objects [obj1[obj2]] are specified, h5diff only compares objects - with the same absolute path in both files + File comparison: + If no objects [obj1[ obj2]] are specified, the h5diff comparison proceeds as + a comparison of the two files' root groups. That is, h5diff first compares + the names of root group members, generates a report of root group objects + that appear in only one file or in both files, and recursively compares + common objects. - The compare criteria is: - 1) datasets: numerical array differences - 2) groups: name string difference - 3) datatypes: the return value of H5Tequal - 4) links: name string difference of the linked value as default - (refer to --follow-symlinks option). + Object comparison: + 1) Groups + First compares the names of member objects (relative path, from the + specified group) and generates a report of objects that appear in only + one group or in both groups. Common objects are then compared recursively. + 2) Datasets + Array rank and dimensions, datatypes, and data values are compared. + 3) Datatypes + The comparison is based on the return value of H5Tequal. + 4) Symbolic links + The paths to the target objects are compared. + (The option --follow-symlinks overrides the default behavior when + symbolic links are compared.). Exit code: 0 if no differences, 1 if differences found, 2 if error diff --git a/tools/h5diff/testfiles/h5diff_606.txt b/tools/h5diff/testfiles/h5diff_606.txt index 3381406..63a1d53 100644 --- a/tools/h5diff/testfiles/h5diff_606.txt +++ b/tools/h5diff/testfiles/h5diff_606.txt @@ -1,5 +1,5 @@ <-d 0x1> is not a valid option -usage: h5diff [OPTIONS] file1 file2 [obj1[obj2]] +usage: h5diff [OPTIONS] file1 file2 [obj1[ obj2]] file1 File name of the first HDF5 file file2 File name of the second HDF5 file [obj1] Name of an HDF5 object, in absolute path @@ -70,16 +70,26 @@ usage: h5diff [OPTIONS] file1 file2 [obj1[obj2]] -v Verbose mode: print the above plus a list of objects and warnings -q Quiet mode: do not print output - Compare criteria - If no objects [obj1[obj2]] are specified, h5diff only compares objects - with the same absolute path in both files + File comparison: + If no objects [obj1[ obj2]] are specified, the h5diff comparison proceeds as + a comparison of the two files' root groups. That is, h5diff first compares + the names of root group members, generates a report of root group objects + that appear in only one file or in both files, and recursively compares + common objects. - The compare criteria is: - 1) datasets: numerical array differences - 2) groups: name string difference - 3) datatypes: the return value of H5Tequal - 4) links: name string difference of the linked value as default - (refer to --follow-symlinks option). + Object comparison: + 1) Groups + First compares the names of member objects (relative path, from the + specified group) and generates a report of objects that appear in only + one group or in both groups. Common objects are then compared recursively. + 2) Datasets + Array rank and dimensions, datatypes, and data values are compared. + 3) Datatypes + The comparison is based on the return value of H5Tequal. + 4) Symbolic links + The paths to the target objects are compared. + (The option --follow-symlinks overrides the default behavior when + symbolic links are compared.). Exit code: 0 if no differences, 1 if differences found, 2 if error diff --git a/tools/h5diff/testfiles/h5diff_612.txt b/tools/h5diff/testfiles/h5diff_612.txt index 8c6051e..6141495 100644 --- a/tools/h5diff/testfiles/h5diff_612.txt +++ b/tools/h5diff/testfiles/h5diff_612.txt @@ -1,5 +1,5 @@ <-p -4> is not a valid option -usage: h5diff [OPTIONS] file1 file2 [obj1[obj2]] +usage: h5diff [OPTIONS] file1 file2 [obj1[ obj2]] file1 File name of the first HDF5 file file2 File name of the second HDF5 file [obj1] Name of an HDF5 object, in absolute path @@ -70,16 +70,26 @@ usage: h5diff [OPTIONS] file1 file2 [obj1[obj2]] -v Verbose mode: print the above plus a list of objects and warnings -q Quiet mode: do not print output - Compare criteria - If no objects [obj1[obj2]] are specified, h5diff only compares objects - with the same absolute path in both files + File comparison: + If no objects [obj1[ obj2]] are specified, the h5diff comparison proceeds as + a comparison of the two files' root groups. That is, h5diff first compares + the names of root group members, generates a report of root group objects + that appear in only one file or in both files, and recursively compares + common objects. - The compare criteria is: - 1) datasets: numerical array differences - 2) groups: name string difference - 3) datatypes: the return value of H5Tequal - 4) links: name string difference of the linked value as default - (refer to --follow-symlinks option). + Object comparison: + 1) Groups + First compares the names of member objects (relative path, from the + specified group) and generates a report of objects that appear in only + one group or in both groups. Common objects are then compared recursively. + 2) Datasets + Array rank and dimensions, datatypes, and data values are compared. + 3) Datatypes + The comparison is based on the return value of H5Tequal. + 4) Symbolic links + The paths to the target objects are compared. + (The option --follow-symlinks overrides the default behavior when + symbolic links are compared.). Exit code: 0 if no differences, 1 if differences found, 2 if error diff --git a/tools/h5diff/testfiles/h5diff_615.txt b/tools/h5diff/testfiles/h5diff_615.txt index b713c7b..eaa2078 100644 --- a/tools/h5diff/testfiles/h5diff_615.txt +++ b/tools/h5diff/testfiles/h5diff_615.txt @@ -1,5 +1,5 @@ <-p 0x1> is not a valid option -usage: h5diff [OPTIONS] file1 file2 [obj1[obj2]] +usage: h5diff [OPTIONS] file1 file2 [obj1[ obj2]] file1 File name of the first HDF5 file file2 File name of the second HDF5 file [obj1] Name of an HDF5 object, in absolute path @@ -70,16 +70,26 @@ usage: h5diff [OPTIONS] file1 file2 [obj1[obj2]] -v Verbose mode: print the above plus a list of objects and warnings -q Quiet mode: do not print output - Compare criteria - If no objects [obj1[obj2]] are specified, h5diff only compares objects - with the same absolute path in both files + File comparison: + If no objects [obj1[ obj2]] are specified, the h5diff comparison proceeds as + a comparison of the two files' root groups. That is, h5diff first compares + the names of root group members, generates a report of root group objects + that appear in only one file or in both files, and recursively compares + common objects. - The compare criteria is: - 1) datasets: numerical array differences - 2) groups: name string difference - 3) datatypes: the return value of H5Tequal - 4) links: name string difference of the linked value as default - (refer to --follow-symlinks option). + Object comparison: + 1) Groups + First compares the names of member objects (relative path, from the + specified group) and generates a report of objects that appear in only + one group or in both groups. Common objects are then compared recursively. + 2) Datasets + Array rank and dimensions, datatypes, and data values are compared. + 3) Datatypes + The comparison is based on the return value of H5Tequal. + 4) Symbolic links + The paths to the target objects are compared. + (The option --follow-symlinks overrides the default behavior when + symbolic links are compared.). Exit code: 0 if no differences, 1 if differences found, 2 if error diff --git a/tools/h5diff/testfiles/h5diff_621.txt b/tools/h5diff/testfiles/h5diff_621.txt index ee23b90..8319db9 100644 --- a/tools/h5diff/testfiles/h5diff_621.txt +++ b/tools/h5diff/testfiles/h5diff_621.txt @@ -1,5 +1,5 @@ <-n -4> is not a valid option -usage: h5diff [OPTIONS] file1 file2 [obj1[obj2]] +usage: h5diff [OPTIONS] file1 file2 [obj1[ obj2]] file1 File name of the first HDF5 file file2 File name of the second HDF5 file [obj1] Name of an HDF5 object, in absolute path @@ -70,16 +70,26 @@ usage: h5diff [OPTIONS] file1 file2 [obj1[obj2]] -v Verbose mode: print the above plus a list of objects and warnings -q Quiet mode: do not print output - Compare criteria - If no objects [obj1[obj2]] are specified, h5diff only compares objects - with the same absolute path in both files + File comparison: + If no objects [obj1[ obj2]] are specified, the h5diff comparison proceeds as + a comparison of the two files' root groups. That is, h5diff first compares + the names of root group members, generates a report of root group objects + that appear in only one file or in both files, and recursively compares + common objects. - The compare criteria is: - 1) datasets: numerical array differences - 2) groups: name string difference - 3) datatypes: the return value of H5Tequal - 4) links: name string difference of the linked value as default - (refer to --follow-symlinks option). + Object comparison: + 1) Groups + First compares the names of member objects (relative path, from the + specified group) and generates a report of objects that appear in only + one group or in both groups. Common objects are then compared recursively. + 2) Datasets + Array rank and dimensions, datatypes, and data values are compared. + 3) Datatypes + The comparison is based on the return value of H5Tequal. + 4) Symbolic links + The paths to the target objects are compared. + (The option --follow-symlinks overrides the default behavior when + symbolic links are compared.). Exit code: 0 if no differences, 1 if differences found, 2 if error diff --git a/tools/h5diff/testfiles/h5diff_622.txt b/tools/h5diff/testfiles/h5diff_622.txt index 11e2ce1..1ccff92 100644 --- a/tools/h5diff/testfiles/h5diff_622.txt +++ b/tools/h5diff/testfiles/h5diff_622.txt @@ -1,5 +1,5 @@ <-n 0> is not a valid option -usage: h5diff [OPTIONS] file1 file2 [obj1[obj2]] +usage: h5diff [OPTIONS] file1 file2 [obj1[ obj2]] file1 File name of the first HDF5 file file2 File name of the second HDF5 file [obj1] Name of an HDF5 object, in absolute path @@ -70,16 +70,26 @@ usage: h5diff [OPTIONS] file1 file2 [obj1[obj2]] -v Verbose mode: print the above plus a list of objects and warnings -q Quiet mode: do not print output - Compare criteria - If no objects [obj1[obj2]] are specified, h5diff only compares objects - with the same absolute path in both files + File comparison: + If no objects [obj1[ obj2]] are specified, the h5diff comparison proceeds as + a comparison of the two files' root groups. That is, h5diff first compares + the names of root group members, generates a report of root group objects + that appear in only one file or in both files, and recursively compares + common objects. - The compare criteria is: - 1) datasets: numerical array differences - 2) groups: name string difference - 3) datatypes: the return value of H5Tequal - 4) links: name string difference of the linked value as default - (refer to --follow-symlinks option). + Object comparison: + 1) Groups + First compares the names of member objects (relative path, from the + specified group) and generates a report of objects that appear in only + one group or in both groups. Common objects are then compared recursively. + 2) Datasets + Array rank and dimensions, datatypes, and data values are compared. + 3) Datatypes + The comparison is based on the return value of H5Tequal. + 4) Symbolic links + The paths to the target objects are compared. + (The option --follow-symlinks overrides the default behavior when + symbolic links are compared.). Exit code: 0 if no differences, 1 if differences found, 2 if error diff --git a/tools/h5diff/testfiles/h5diff_623.txt b/tools/h5diff/testfiles/h5diff_623.txt index f87d6db..2c15d98 100644 --- a/tools/h5diff/testfiles/h5diff_623.txt +++ b/tools/h5diff/testfiles/h5diff_623.txt @@ -1,5 +1,5 @@ <-n u> is not a valid option -usage: h5diff [OPTIONS] file1 file2 [obj1[obj2]] +usage: h5diff [OPTIONS] file1 file2 [obj1[ obj2]] file1 File name of the first HDF5 file file2 File name of the second HDF5 file [obj1] Name of an HDF5 object, in absolute path @@ -70,16 +70,26 @@ usage: h5diff [OPTIONS] file1 file2 [obj1[obj2]] -v Verbose mode: print the above plus a list of objects and warnings -q Quiet mode: do not print output - Compare criteria - If no objects [obj1[obj2]] are specified, h5diff only compares objects - with the same absolute path in both files + File comparison: + If no objects [obj1[ obj2]] are specified, the h5diff comparison proceeds as + a comparison of the two files' root groups. That is, h5diff first compares + the names of root group members, generates a report of root group objects + that appear in only one file or in both files, and recursively compares + common objects. - The compare criteria is: - 1) datasets: numerical array differences - 2) groups: name string difference - 3) datatypes: the return value of H5Tequal - 4) links: name string difference of the linked value as default - (refer to --follow-symlinks option). + Object comparison: + 1) Groups + First compares the names of member objects (relative path, from the + specified group) and generates a report of objects that appear in only + one group or in both groups. Common objects are then compared recursively. + 2) Datasets + Array rank and dimensions, datatypes, and data values are compared. + 3) Datatypes + The comparison is based on the return value of H5Tequal. + 4) Symbolic links + The paths to the target objects are compared. + (The option --follow-symlinks overrides the default behavior when + symbolic links are compared.). Exit code: 0 if no differences, 1 if differences found, 2 if error diff --git a/tools/h5diff/testfiles/h5diff_624.txt b/tools/h5diff/testfiles/h5diff_624.txt index 4c9da26..272b9fc 100644 --- a/tools/h5diff/testfiles/h5diff_624.txt +++ b/tools/h5diff/testfiles/h5diff_624.txt @@ -1,5 +1,5 @@ <-n 0x1> is not a valid option -usage: h5diff [OPTIONS] file1 file2 [obj1[obj2]] +usage: h5diff [OPTIONS] file1 file2 [obj1[ obj2]] file1 File name of the first HDF5 file file2 File name of the second HDF5 file [obj1] Name of an HDF5 object, in absolute path @@ -70,16 +70,26 @@ usage: h5diff [OPTIONS] file1 file2 [obj1[obj2]] -v Verbose mode: print the above plus a list of objects and warnings -q Quiet mode: do not print output - Compare criteria - If no objects [obj1[obj2]] are specified, h5diff only compares objects - with the same absolute path in both files + File comparison: + If no objects [obj1[ obj2]] are specified, the h5diff comparison proceeds as + a comparison of the two files' root groups. That is, h5diff first compares + the names of root group members, generates a report of root group objects + that appear in only one file or in both files, and recursively compares + common objects. - The compare criteria is: - 1) datasets: numerical array differences - 2) groups: name string difference - 3) datatypes: the return value of H5Tequal - 4) links: name string difference of the linked value as default - (refer to --follow-symlinks option). + Object comparison: + 1) Groups + First compares the names of member objects (relative path, from the + specified group) and generates a report of objects that appear in only + one group or in both groups. Common objects are then compared recursively. + 2) Datasets + Array rank and dimensions, datatypes, and data values are compared. + 3) Datatypes + The comparison is based on the return value of H5Tequal. + 4) Symbolic links + The paths to the target objects are compared. + (The option --follow-symlinks overrides the default behavior when + symbolic links are compared.). Exit code: 0 if no differences, 1 if differences found, 2 if error diff --git a/tools/h5diff/testfiles/h5diff_grp_recurse1.h5 b/tools/h5diff/testfiles/h5diff_grp_recurse1.h5 Binary files differnew file mode 100644 index 0000000..cfd4e62 --- /dev/null +++ b/tools/h5diff/testfiles/h5diff_grp_recurse1.h5 diff --git a/tools/h5diff/testfiles/h5diff_grp_recurse2.h5 b/tools/h5diff/testfiles/h5diff_grp_recurse2.h5 Binary files differnew file mode 100644 index 0000000..54bcdec --- /dev/null +++ b/tools/h5diff/testfiles/h5diff_grp_recurse2.h5 diff --git a/tools/h5diff/testh5diff.sh b/tools/h5diff/testh5diff.sh index 421bf73..f9d58c2 100755 --- a/tools/h5diff/testh5diff.sh +++ b/tools/h5diff/testh5diff.sh @@ -54,6 +54,8 @@ FILE17=h5diff_ext2softlink_src.h5 FILE18=h5diff_ext2softlink_trg.h5 DANGLE_LINK_FILE1=h5diff_danglelinks1.h5 DANGLE_LINK_FILE2=h5diff_danglelinks2.h5 +GRP_RECURSE_FILE1=h5diff_grp_recurse1.h5 +GRP_RECURSE_FILE2=h5diff_grp_recurse2.h5 TESTNAME=h5diff EXIT_SUCCESS=0 @@ -305,7 +307,6 @@ SKIP() { # # Common usage # ############################################################################ - # 1.0 TOOLTEST h5diff_10.txt -h @@ -425,6 +426,9 @@ TOOLTEST h5diff_58.txt -v $FILE7 $FILE8 refreg # 6.0: Check if the command line number of arguments is less than 3 TOOLTEST h5diff_600.txt $FILE1 +# 6.1: Check if non-exist object name is specified +TOOLTEST h5diff_601.txt $FILE1 $FILE1 nono_obj + # ############################################################################## # # -d @@ -688,6 +692,44 @@ TOOLTEST h5diff_459.txt --follow-symlinks -v --no-dangling-links $FILE15 $FILE # ############################################################################## +# # test for group diff recursivly +# ############################################################################## +# root +TOOLTEST h5diff_500.txt -v $GRP_RECURSE_FILE1 $GRP_RECURSE_FILE2 / / +TOOLTEST h5diff_501.txt -v --follow-symlinks $GRP_RECURSE_FILE1 $GRP_RECURSE_FILE2 / / + +# root vs group +TOOLTEST h5diff_502.txt -v $GRP_RECURSE_FILE1 $GRP_RECURSE_FILE2 / /grp1/grp2/grp3 + +# group vs group (same name and structure) +TOOLTEST h5diff_503.txt -v $GRP_RECURSE_FILE1 $GRP_RECURSE_FILE2 /grp1 /grp1 + +# group vs group (different name and structure) +TOOLTEST h5diff_504.txt -v $GRP_RECURSE_FILE1 $GRP_RECURSE_FILE2 /grp1/grp2 /grp1/grp2/grp3 + +# groups vs soft-link +TOOLTEST h5diff_505.txt -v $GRP_RECURSE_FILE1 $GRP_RECURSE_FILE2 /grp1 /slink_grp1 +TOOLTEST h5diff_506.txt -v --follow-symlinks $GRP_RECURSE_FILE1 $GRP_RECURSE_FILE2 /grp1/grp2 /slink_grp2 + +# groups vs ext-link +TOOLTEST h5diff_507.txt -v $GRP_RECURSE_FILE1 $GRP_RECURSE_FILE2 /grp1 /elink_grp1 +TOOLTEST h5diff_508.txt -v --follow-symlinks $GRP_RECURSE_FILE1 $GRP_RECURSE_FILE2 /grp1 /elink_grp1 + +# soft-link vs ext-link +TOOLTEST h5diff_509.txt -v $GRP_RECURSE_FILE1 $GRP_RECURSE_FILE2 /slink_grp1 /elink_grp1 +TOOLTEST h5diff_510.txt -v --follow-symlinks $GRP_RECURSE_FILE1 $GRP_RECURSE_FILE2 /slink_grp1 /elink_grp1 + +# circled ext links +TOOLTEST h5diff_511.txt -v $GRP_RECURSE_FILE1 $GRP_RECURSE_FILE2 /grp10 /grp11 +TOOLTEST h5diff_512.txt -v --follow-symlinks $GRP_RECURSE_FILE1 $GRP_RECURSE_FILE2 /grp10 /grp11 + +# circled soft2ext-link vs soft2ext-link +TOOLTEST h5diff_513.txt -v $GRP_RECURSE_FILE1 $GRP_RECURSE_FILE2 /slink_grp10 /slink_grp11 +TOOLTEST h5diff_514.txt -v --follow-symlinks $GRP_RECURSE_FILE1 $GRP_RECURSE_FILE2 /slink_grp10 /slink_grp11 + + + +# ############################################################################## # # END # ############################################################################## |