mirror of
https://github.com/HDFGroup/hdf5.git
synced 2025-02-17 16:10:24 +08:00
[svn-r19400] Purpose:
Fix for Bug1975 h5diff - support recursive comparison on group when specified as an object Description: 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, heiwa
This commit is contained in:
parent
1914737e06
commit
c561dc7183
19
MANIFEST
19
MANIFEST
@ -1529,6 +1529,7 @@
|
||||
./tools/h5diff/testfiles/h5diff_57.txt
|
||||
./tools/h5diff/testfiles/h5diff_58.txt
|
||||
./tools/h5diff/testfiles/h5diff_600.txt
|
||||
./tools/h5diff/testfiles/h5diff_601.txt
|
||||
./tools/h5diff/testfiles/h5diff_603.txt
|
||||
./tools/h5diff/testfiles/h5diff_604.txt
|
||||
./tools/h5diff/testfiles/h5diff_605.txt
|
||||
@ -1607,7 +1608,21 @@
|
||||
./tools/h5diff/testfiles/h5diff_457.txt
|
||||
./tools/h5diff/testfiles/h5diff_458.txt
|
||||
./tools/h5diff/testfiles/h5diff_459.txt
|
||||
|
||||
./tools/h5diff/testfiles/h5diff_500.txt
|
||||
./tools/h5diff/testfiles/h5diff_501.txt
|
||||
./tools/h5diff/testfiles/h5diff_502.txt
|
||||
./tools/h5diff/testfiles/h5diff_503.txt
|
||||
./tools/h5diff/testfiles/h5diff_504.txt
|
||||
./tools/h5diff/testfiles/h5diff_505.txt
|
||||
./tools/h5diff/testfiles/h5diff_506.txt
|
||||
./tools/h5diff/testfiles/h5diff_507.txt
|
||||
./tools/h5diff/testfiles/h5diff_508.txt
|
||||
./tools/h5diff/testfiles/h5diff_509.txt
|
||||
./tools/h5diff/testfiles/h5diff_510.txt
|
||||
./tools/h5diff/testfiles/h5diff_511.txt
|
||||
./tools/h5diff/testfiles/h5diff_512.txt
|
||||
./tools/h5diff/testfiles/h5diff_513.txt
|
||||
./tools/h5diff/testfiles/h5diff_514.txt
|
||||
|
||||
./tools/h5diff/testfiles/h5diff_attr1.h5
|
||||
./tools/h5diff/testfiles/h5diff_attr2.h5
|
||||
@ -1629,6 +1644,8 @@
|
||||
./tools/h5diff/testfiles/h5diff_softlinks.h5
|
||||
./tools/h5diff/testfiles/h5diff_danglelinks1.h5
|
||||
./tools/h5diff/testfiles/h5diff_danglelinks2.h5
|
||||
./tools/h5diff/testfiles/h5diff_grp_recurse1.h5
|
||||
./tools/h5diff/testfiles/h5diff_grp_recurse2.h5
|
||||
|
||||
|
||||
|
||||
|
@ -466,6 +466,9 @@ Bug Fixes since HDF5-1.8.0 release
|
||||
|
||||
Tools
|
||||
-----
|
||||
- Fixed to compare member objects and groups recursively when two
|
||||
files or groups are specified to be compared. Bug#1975
|
||||
(JKM 2010/9/16)
|
||||
- Make h5repack be able to convert a layout to COMPACT for small size
|
||||
dataset as default. bug#1896 (JKM 2010/09/15)
|
||||
- Change h5ls not to manipulate special characters in object name or
|
||||
|
@ -416,7 +416,7 @@ main (int argc, const char *argv[])
|
||||
if(verbose)
|
||||
linkinfo.opt.msg_mode = 1;
|
||||
|
||||
li_ret = H5tools_get_link_info(fid_src, oname_src, &linkinfo, 1);
|
||||
li_ret = H5tools_get_symlink_info(fid_src, oname_src, &linkinfo, 1);
|
||||
if (li_ret == 0) /* dangling link */
|
||||
{
|
||||
if(H5Lcopy(fid_src, oname_src,
|
||||
|
@ -294,17 +294,17 @@ COPY_OBJECTS()
|
||||
TOOLTEST -i $TESTFILE -o $FILEOUT -v -s /grp_dsets/simple -d /grp_dsets/simple_group
|
||||
|
||||
echo "Test copying & renaming group"
|
||||
TOOLTEST_FAIL -i $TESTFILE -o $FILEOUT -v -s grp_dsets -d grp_rename
|
||||
TOOLTEST -i $TESTFILE -o $FILEOUT -v -s grp_dsets -d grp_rename
|
||||
|
||||
echo "Test copying 'full' group hierarchy into group in destination file"
|
||||
TOOLTEST_FAIL -i $TESTFILE -o $FILEOUT -v -s grp_dsets -d /grp_rename/grp_dsets
|
||||
TOOLTEST -i $TESTFILE -o $FILEOUT -v -s grp_dsets -d /grp_rename/grp_dsets
|
||||
|
||||
echo "Test copying objects into group hier. that doesn't exist yet in destination file"
|
||||
TOOLTEST -i $TESTFILE -o $FILEOUT -vp -s simple -d /A/B1/simple
|
||||
TOOLTEST -i $TESTFILE -o $FILEOUT -vp -s simple -d /A/B2/simple2
|
||||
TOOLTEST -i $TESTFILE -o $FILEOUT -vp -s /grp_dsets/simple -d /C/D/simple
|
||||
TOOLTEST_FAIL -i $TESTFILE -o $FILEOUT -vp -s /grp_dsets -d /E/F/grp_dsets
|
||||
TOOLTEST_FAIL -i $TESTFILE -o $FILEOUT -vp -s /grp_nested -d /G/H/grp_nested
|
||||
TOOLTEST -i $TESTFILE -o $FILEOUT -vp -s /grp_dsets -d /E/F/grp_dsets
|
||||
TOOLTEST -i $TESTFILE -o $FILEOUT -vp -s /grp_nested -d /G/H/grp_nested
|
||||
|
||||
# Verify that the file created above is correct
|
||||
H5LSTEST $FILEOUT
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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");
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
@ -1828,6 +1833,464 @@ out:
|
||||
return status;
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* 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
|
||||
*
|
||||
|
@ -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.*/
|
||||
|
@ -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
|
||||
|
@ -1,3 +1,8 @@
|
||||
|
||||
group1 group2
|
||||
---------------------------------------
|
||||
x x
|
||||
|
||||
group : </g1> and </g1>
|
||||
0 differences found
|
||||
EXIT CODE: 0
|
||||
|
@ -1,3 +1,8 @@
|
||||
|
||||
group1 group2
|
||||
---------------------------------------
|
||||
x x
|
||||
|
||||
group : </g1> and </g2>
|
||||
1 differences found
|
||||
EXIT CODE: 1
|
||||
0 differences found
|
||||
EXIT CODE: 0
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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>
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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>
|
||||
|
@ -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.
|
||||
|
72
tools/h5diff/testfiles/h5diff_500.txt
Normal file
72
tools/h5diff/testfiles/h5diff_500.txt
Normal file
@ -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
|
188
tools/h5diff/testfiles/h5diff_501.txt
Normal file
188
tools/h5diff/testfiles/h5diff_501.txt
Normal file
@ -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
|
36
tools/h5diff/testfiles/h5diff_502.txt
Normal file
36
tools/h5diff/testfiles/h5diff_502.txt
Normal file
@ -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
|
32
tools/h5diff/testfiles/h5diff_503.txt
Normal file
32
tools/h5diff/testfiles/h5diff_503.txt
Normal file
@ -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
|
19
tools/h5diff/testfiles/h5diff_504.txt
Normal file
19
tools/h5diff/testfiles/h5diff_504.txt
Normal file
@ -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
|
6
tools/h5diff/testfiles/h5diff_505.txt
Normal file
6
tools/h5diff/testfiles/h5diff_505.txt
Normal file
@ -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
|
26
tools/h5diff/testfiles/h5diff_506.txt
Normal file
26
tools/h5diff/testfiles/h5diff_506.txt
Normal file
@ -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
|
6
tools/h5diff/testfiles/h5diff_507.txt
Normal file
6
tools/h5diff/testfiles/h5diff_507.txt
Normal file
@ -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
|
32
tools/h5diff/testfiles/h5diff_508.txt
Normal file
32
tools/h5diff/testfiles/h5diff_508.txt
Normal file
@ -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
|
6
tools/h5diff/testfiles/h5diff_509.txt
Normal file
6
tools/h5diff/testfiles/h5diff_509.txt
Normal file
@ -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
|
32
tools/h5diff/testfiles/h5diff_510.txt
Normal file
32
tools/h5diff/testfiles/h5diff_510.txt
Normal file
@ -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
|
24
tools/h5diff/testfiles/h5diff_511.txt
Normal file
24
tools/h5diff/testfiles/h5diff_511.txt
Normal file
@ -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
|
53
tools/h5diff/testfiles/h5diff_512.txt
Normal file
53
tools/h5diff/testfiles/h5diff_512.txt
Normal file
@ -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
|
3
tools/h5diff/testfiles/h5diff_513.txt
Normal file
3
tools/h5diff/testfiles/h5diff_513.txt
Normal file
@ -0,0 +1,3 @@
|
||||
link : </slink_grp10> and </slink_grp11>
|
||||
1 differences found
|
||||
EXIT CODE: 1
|
53
tools/h5diff/testfiles/h5diff_514.txt
Normal file
53
tools/h5diff/testfiles/h5diff_514.txt
Normal file
@ -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
|
@ -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
|
||||
|
2
tools/h5diff/testfiles/h5diff_601.txt
Normal file
2
tools/h5diff/testfiles/h5diff_601.txt
Normal file
@ -0,0 +1,2 @@
|
||||
Object </nono_obj> could not be found in <h5diff_basic1.h5>
|
||||
EXIT CODE: 2
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
BIN
tools/h5diff/testfiles/h5diff_grp_recurse1.h5
Normal file
BIN
tools/h5diff/testfiles/h5diff_grp_recurse1.h5
Normal file
Binary file not shown.
BIN
tools/h5diff/testfiles/h5diff_grp_recurse2.h5
Normal file
BIN
tools/h5diff/testfiles/h5diff_grp_recurse2.h5
Normal file
Binary file not shown.
@ -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
|
||||
@ -687,6 +691,44 @@ TOOLTEST h5diff_458.txt --follow-symlinks -v --no-dangling-links $FILE15 $FILE
|
||||
TOOLTEST h5diff_459.txt --follow-symlinks -v --no-dangling-links $FILE15 $FILE15 /ext_link_noexist1 /ext_link_noexist2
|
||||
|
||||
|
||||
# ##############################################################################
|
||||
# # 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
|
||||
# ##############################################################################
|
||||
|
@ -34,18 +34,6 @@
|
||||
|
||||
#define NAME_BUF_SIZE 2048
|
||||
|
||||
/* Struct to keep track of symbolic link targets visited */
|
||||
typedef struct symlink_trav_t {
|
||||
size_t nalloc;
|
||||
size_t nused;
|
||||
struct {
|
||||
H5L_type_t type;
|
||||
char *file;
|
||||
char *path;
|
||||
} *objs;
|
||||
hbool_t dangle_link;
|
||||
} symlink_trav_t;
|
||||
|
||||
/* Struct to pass through to visitors */
|
||||
typedef struct {
|
||||
const char *fname; /* Filename */
|
||||
@ -1842,120 +1830,6 @@ done:
|
||||
return 0;
|
||||
} /* end list_obj() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: symlink_visit_add
|
||||
*
|
||||
* Purpose: Add an symbolic link to visited data structure
|
||||
*
|
||||
* Return: 0 on success, -1 on failure
|
||||
*
|
||||
* Programmer: Neil Fortner, nfortne2@hdfgroup.org
|
||||
* Adapted from trav_addr_add in h5trav.c by Quincey Koziol
|
||||
*
|
||||
* Date: September 5, 2008
|
||||
*
|
||||
* Modified:
|
||||
* Jonathan Kim
|
||||
* - Renamed from elink_trav_add to symlink_visit_add for both soft and
|
||||
* external links. (May 25, 2010)
|
||||
* - Add type parameter to distingush between soft and external link for
|
||||
* sure, which prevent from mixing up visited link when the target names
|
||||
* are same between the soft and external link, as code marks with the
|
||||
* target name. (May 25,2010)
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
symlink_visit_add(symlink_trav_t *visited, H5L_type_t type, const char *file, const char *path)
|
||||
{
|
||||
size_t idx; /* Index of address to use */
|
||||
void *tmp_ptr;
|
||||
|
||||
/* Allocate space if necessary */
|
||||
if(visited->nused == visited->nalloc)
|
||||
{
|
||||
visited->nalloc = MAX(1, visited->nalloc * 2);
|
||||
if(NULL == (tmp_ptr = HDrealloc(visited->objs, visited->nalloc * sizeof(visited->objs[0]))))
|
||||
return -1;
|
||||
visited->objs = tmp_ptr;
|
||||
} /* end if */
|
||||
|
||||
/* Append it */
|
||||
idx = visited->nused++;
|
||||
|
||||
visited->objs[idx].type = type;
|
||||
visited->objs[idx].file = NULL;
|
||||
visited->objs[idx].path = NULL;
|
||||
|
||||
if (type == H5L_TYPE_EXTERNAL)
|
||||
{
|
||||
if(NULL == (visited->objs[idx].file = HDstrdup(file)))
|
||||
{
|
||||
visited->nused--;
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
if(NULL == (visited->objs[idx].path = HDstrdup(path)))
|
||||
{
|
||||
visited->nused--;
|
||||
if (visited->objs[idx].file)
|
||||
HDfree (visited->objs[idx].file);
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
} /* end symlink_visit_add() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: symlink_is_visited
|
||||
*
|
||||
* Purpose: Check if an symbolic link has already been visited
|
||||
*
|
||||
* Return: TRUE/FALSE
|
||||
*
|
||||
* Programmer: Neil Fortner, nfortne2@hdfgroup.org
|
||||
* Adapted from trav_addr_visited in h5trav.c by Quincey Koziol
|
||||
*
|
||||
* Date: September 5, 2008
|
||||
*
|
||||
* Modified:
|
||||
* Jonathan Kim
|
||||
* - Renamed from elink_trav_visited to symlink_is_visited for both soft and
|
||||
* external links. (May 25, 2010)
|
||||
* - Add type parameter to distingush between soft and external link for
|
||||
* sure, which prevent from mixing up visited link when the target names
|
||||
* are same between the soft and external link, as code marks with the
|
||||
* target name. (May 25,2010)
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static hbool_t
|
||||
symlink_is_visited(symlink_trav_t *visited, H5L_type_t type, const char *file, const char *path)
|
||||
{
|
||||
size_t u; /* Local index variable */
|
||||
|
||||
/* Look for symlink */
|
||||
for(u = 0; u < visited->nused; u++)
|
||||
{
|
||||
/* Check for symlink values already in array */
|
||||
/* check type and path pair to distingush between symbolic links */
|
||||
if ((visited->objs[u].type == type) && !HDstrcmp(visited->objs[u].path, path))
|
||||
{
|
||||
/* if external link, file need to be matched as well */
|
||||
if (visited->objs[u].type == H5L_TYPE_EXTERNAL)
|
||||
{
|
||||
if (!HDstrcmp(visited->objs[u].file, file))
|
||||
return (TRUE);
|
||||
}
|
||||
return (TRUE);
|
||||
}
|
||||
}
|
||||
/* Didn't find symlink */
|
||||
return(FALSE);
|
||||
} /* end symlink_is_visited() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
@ -1983,7 +1857,7 @@ list_lnk(const char *name, const H5L_info_t *linfo, void *_iter)
|
||||
/* init linkinfo struct */
|
||||
memset(&lnk_info, 0, sizeof(h5tool_link_info_t));
|
||||
|
||||
/* if verbose, make H5tools_get_link_info() display more */
|
||||
/* if verbose, make H5tools_get_symlink_info() display more */
|
||||
if (verbose_g)
|
||||
lnk_info.opt.msg_mode=1;
|
||||
|
||||
@ -1992,8 +1866,8 @@ list_lnk(const char *name, const H5L_info_t *linfo, void *_iter)
|
||||
|
||||
switch(linfo->type) {
|
||||
case H5L_TYPE_SOFT:
|
||||
ret = H5tools_get_link_info(iter->fid, name, &lnk_info, follow_symlink_g);
|
||||
/* lnk_info.trg_path is malloced in H5tools_get_link_info()
|
||||
ret = H5tools_get_symlink_info(iter->fid, name, &lnk_info, follow_symlink_g);
|
||||
/* lnk_info.trg_path is malloced in H5tools_get_symlink_info()
|
||||
* so it will be freed via buf later */
|
||||
buf = lnk_info.trg_path;
|
||||
/* error */
|
||||
@ -2050,8 +1924,8 @@ list_lnk(const char *name, const H5L_info_t *linfo, void *_iter)
|
||||
const char *path;
|
||||
hbool_t follow_link = follow_symlink_g || follow_elink_g;
|
||||
|
||||
ret = H5tools_get_link_info(iter->fid, name, &lnk_info, follow_link);
|
||||
/* lnk_info.trg_path is malloced in H5tools_get_link_info()
|
||||
ret = H5tools_get_symlink_info(iter->fid, name, &lnk_info, follow_link);
|
||||
/* lnk_info.trg_path is malloced in H5tools_get_symlink_info()
|
||||
* so it will be freed via buf later */
|
||||
buf = lnk_info.trg_path;
|
||||
/* error */
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -19,6 +19,8 @@
|
||||
#include "hdf5.h"
|
||||
#include "h5trav.h"
|
||||
|
||||
#define MAX_FILENAME 1024
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* command line options
|
||||
*-------------------------------------------------------------------------
|
||||
@ -107,11 +109,9 @@ hsize_t diff_compare( hid_t file1_id,
|
||||
trav_info_t *info2,
|
||||
diff_opt_t *options );
|
||||
|
||||
hsize_t diff_match( hid_t file1_id,
|
||||
trav_info_t *info1,
|
||||
hid_t file2_id,
|
||||
trav_info_t *info2,
|
||||
diff_opt_t *options );
|
||||
hsize_t diff_match( hid_t file1_id, const char *grp1, trav_info_t *info1,
|
||||
hid_t file2_id, const char *grp2, trav_info_t *info2,
|
||||
trav_table_t *table, diff_opt_t *options );
|
||||
|
||||
hsize_t diff_array( void *_mem1,
|
||||
void *_mem2,
|
||||
|
@ -702,9 +702,9 @@ tmpfile(void)
|
||||
#endif
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5tools_get_link_info
|
||||
* Function: H5tools_get_symlink_info
|
||||
*
|
||||
* Purpose: Get link (soft, external) info and its target object type
|
||||
* Purpose: Get symbolic link (soft, external) info and its target object type
|
||||
(dataset, group, named datatype) and path, if exist
|
||||
*
|
||||
* Patameters:
|
||||
@ -726,7 +726,7 @@ tmpfile(void)
|
||||
* Date: Feb 8, 2010
|
||||
*-------------------------------------------------------------------------*/
|
||||
int
|
||||
H5tools_get_link_info(hid_t file_id, const char * linkpath, h5tool_link_info_t *link_info,
|
||||
H5tools_get_symlink_info(hid_t file_id, const char * linkpath, h5tool_link_info_t *link_info,
|
||||
hbool_t get_obj_type)
|
||||
{
|
||||
htri_t l_ret;
|
||||
@ -738,6 +738,14 @@ H5tools_get_link_info(hid_t file_id, const char * linkpath, h5tool_link_info_t *
|
||||
/* init */
|
||||
link_info->trg_type = H5O_TYPE_UNKNOWN;
|
||||
|
||||
/* if path is root, return group type */
|
||||
if(!HDstrcmp(linkpath,"/"))
|
||||
{
|
||||
link_info->trg_type = H5O_TYPE_GROUP;
|
||||
ret = 2;
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* check if link itself exist */
|
||||
if(H5Lexists(file_id, linkpath, H5P_DEFAULT) <= 0) {
|
||||
if(link_info->opt.msg_mode == 1)
|
||||
@ -827,7 +835,7 @@ out:
|
||||
H5Pclose(lapl);
|
||||
|
||||
return ret;
|
||||
} /* end H5tools_get_link_info() */
|
||||
} /* end H5tools_get_symlink_info() */
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Audience: Public
|
||||
|
@ -145,18 +145,18 @@ typedef struct {
|
||||
int msg_mode;
|
||||
} h5tool_opt_t;
|
||||
|
||||
/* obtain link info from H5tools_get_link_info() */
|
||||
/* obtain link info from H5tools_get_symlink_info() */
|
||||
typedef struct {
|
||||
H5O_type_t trg_type; /* OUT: target type */
|
||||
const char *trg_path; /* OUT: target obj path. This must be freed
|
||||
* when used with H5tools_get_link_info() */
|
||||
* when used with H5tools_get_symlink_info() */
|
||||
H5L_info_t linfo; /* OUT: link info */
|
||||
h5tool_opt_t opt; /* IN: options */
|
||||
} h5tool_link_info_t;
|
||||
|
||||
|
||||
/* Definitions of routines */
|
||||
H5TOOLS_DLL int H5tools_get_link_info(hid_t file_id, const char * linkpath,
|
||||
H5TOOLS_DLL int H5tools_get_symlink_info(hid_t file_id, const char * linkpath,
|
||||
h5tool_link_info_t *link_info, hbool_t get_obj_type);
|
||||
H5TOOLS_DLL const char *h5tools_getprogname(void);
|
||||
H5TOOLS_DLL void h5tools_setprogname(const char*progname);
|
||||
|
@ -292,7 +292,7 @@ traverse(hid_t file_id, const char *grp_name, hbool_t visit_start,
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static void
|
||||
void
|
||||
trav_info_add(trav_info_t *info, const char *path, h5trav_type_t obj_type)
|
||||
{
|
||||
size_t idx; /* Index of address to use */
|
||||
@ -323,7 +323,7 @@ trav_info_add(trav_info_t *info, const char *path, h5trav_type_t obj_type)
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static int
|
||||
int
|
||||
trav_info_visit_obj(const char *path, const H5O_info_t *oinfo,
|
||||
const char UNUSED *already_visited, void *udata)
|
||||
{
|
||||
@ -348,7 +348,7 @@ trav_info_visit_obj(const char *path, const H5O_info_t *oinfo,
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static int
|
||||
int
|
||||
trav_info_visit_lnk(const char *path, const H5L_info_t *linfo, void *udata)
|
||||
{
|
||||
/* Add the link to the 'info' struct */
|
||||
@ -438,14 +438,21 @@ h5trav_getindex(const trav_info_t *info, const char *obj)
|
||||
*/
|
||||
|
||||
void
|
||||
trav_info_init(trav_info_t **_info)
|
||||
trav_info_init(const char *filename, hid_t fileid, trav_info_t **_info)
|
||||
{
|
||||
trav_info_t *info = (trav_info_t *)HDmalloc(sizeof(trav_info_t));
|
||||
|
||||
/* Init info structure */
|
||||
info->nused = info->nalloc = 0;
|
||||
info->paths = NULL;
|
||||
info->fname = filename;
|
||||
info->fid = fileid;
|
||||
|
||||
/* Initialize list of visited symbolic links */
|
||||
info->symlink_visited.nused = 0;
|
||||
info->symlink_visited.nalloc = 0;
|
||||
info->symlink_visited.objs = NULL;
|
||||
info->symlink_visited.dangle_link = FALSE;
|
||||
*_info = info;
|
||||
} /* end trav_info_init() */
|
||||
|
||||
@ -464,6 +471,16 @@ trav_info_free(trav_info_t *info)
|
||||
size_t u; /* Local index variable */
|
||||
|
||||
if(info) {
|
||||
/* Free visited symbolic links path and file (if alloc) */
|
||||
for(u=0; u < info->symlink_visited.nused; u++)
|
||||
{
|
||||
if (info->symlink_visited.objs[u].file)
|
||||
HDfree(info->symlink_visited.objs[u].file);
|
||||
|
||||
HDfree(info->symlink_visited.objs[u].path);
|
||||
}
|
||||
HDfree(info->symlink_visited.objs);
|
||||
|
||||
/* Free path names */
|
||||
for(u = 0; u < info->nused; u++)
|
||||
HDfree(info->paths[u].path);
|
||||
@ -973,3 +990,119 @@ h5trav_visit(hid_t fid, const char *grp_name, hbool_t visit_start,
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: symlink_visit_add
|
||||
*
|
||||
* Purpose: Add an symbolic link to visited data structure
|
||||
*
|
||||
* Return: 0 on success, -1 on failure
|
||||
*
|
||||
* Programmer: Neil Fortner, nfortne2@hdfgroup.org
|
||||
* Adapted from trav_addr_add in h5trav.c by Quincey Koziol
|
||||
*
|
||||
* Date: September 5, 2008
|
||||
*
|
||||
* Modified:
|
||||
* Jonathan Kim
|
||||
* - Moved from h5ls.c to share among tools. (Sep 16, 2010)
|
||||
* - Renamed from elink_trav_add to symlink_visit_add for both soft and
|
||||
* external links. (May 25, 2010)
|
||||
* - Add type parameter to distingush between soft and external link for
|
||||
* sure, which prevent from mixing up visited link when the target names
|
||||
* are same between the soft and external link, as code marks with the
|
||||
* target name. (May 25,2010)
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
symlink_visit_add(symlink_trav_t *visited, H5L_type_t type, const char *file, const char *path)
|
||||
{
|
||||
size_t idx; /* Index of address to use */
|
||||
void *tmp_ptr;
|
||||
|
||||
/* Allocate space if necessary */
|
||||
if(visited->nused == visited->nalloc)
|
||||
{
|
||||
visited->nalloc = MAX(1, visited->nalloc * 2);
|
||||
if(NULL == (tmp_ptr = HDrealloc(visited->objs, visited->nalloc * sizeof(visited->objs[0]))))
|
||||
return -1;
|
||||
visited->objs = tmp_ptr;
|
||||
} /* end if */
|
||||
|
||||
/* Append it */
|
||||
idx = visited->nused++;
|
||||
|
||||
visited->objs[idx].type = type;
|
||||
visited->objs[idx].file = NULL;
|
||||
visited->objs[idx].path = NULL;
|
||||
|
||||
if (type == H5L_TYPE_EXTERNAL)
|
||||
{
|
||||
if(NULL == (visited->objs[idx].file = HDstrdup(file)))
|
||||
{
|
||||
visited->nused--;
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
if(NULL == (visited->objs[idx].path = HDstrdup(path)))
|
||||
{
|
||||
visited->nused--;
|
||||
if (visited->objs[idx].file)
|
||||
HDfree (visited->objs[idx].file);
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
} /* end symlink_visit_add() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: symlink_is_visited
|
||||
*
|
||||
* Purpose: Check if an symbolic link has already been visited
|
||||
*
|
||||
* Return: TRUE/FALSE
|
||||
*
|
||||
* Programmer: Neil Fortner, nfortne2@hdfgroup.org
|
||||
* Adapted from trav_addr_visited in h5trav.c by Quincey Koziol
|
||||
*
|
||||
* Date: September 5, 2008
|
||||
*
|
||||
* Modified:
|
||||
* Jonathan Kim
|
||||
* - Moved from h5ls.c to share among tools. (Sep 16, 2010)
|
||||
* - Renamed from elink_trav_visited to symlink_is_visited for both soft and
|
||||
* external links. (May 25, 2010)
|
||||
* - Add type parameter to distingush between soft and external link for
|
||||
* sure, which prevent from mixing up visited link when the target names
|
||||
* are same between the soft and external link, as code marks with the
|
||||
* target name. (May 25,2010)
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
hbool_t
|
||||
symlink_is_visited(symlink_trav_t *visited, H5L_type_t type, const char *file, const char *path)
|
||||
{
|
||||
size_t u; /* Local index variable */
|
||||
|
||||
/* Look for symlink */
|
||||
for(u = 0; u < visited->nused; u++)
|
||||
{
|
||||
/* Check for symlink values already in array */
|
||||
/* check type and path pair to distingush between symbolic links */
|
||||
if ((visited->objs[u].type == type) && !HDstrcmp(visited->objs[u].path, path))
|
||||
{
|
||||
/* if external link, file need to be matched as well */
|
||||
if (visited->objs[u].type == H5L_TYPE_EXTERNAL)
|
||||
{
|
||||
if (!HDstrcmp(visited->objs[u].file, file))
|
||||
return (TRUE);
|
||||
}
|
||||
return (TRUE);
|
||||
}
|
||||
}
|
||||
/* Didn't find symlink */
|
||||
return(FALSE);
|
||||
} /* end symlink_is_visited() */
|
||||
|
||||
|
@ -36,7 +36,7 @@ typedef herr_t (*h5trav_lnk_func_t)(const char *path_name, const H5L_info_t *lin
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
typedef enum {
|
||||
H5TRAV_TYPE_UNKNOWN = -1, /* Unknown object type */
|
||||
H5TRAV_TYPE_UNKNOWN = -1, /* Unknown object type */
|
||||
H5TRAV_TYPE_GROUP, /* Object is a group */
|
||||
H5TRAV_TYPE_DATASET, /* Object is a dataset */
|
||||
H5TRAV_TYPE_NAMED_DATATYPE, /* Object is a named datatype */
|
||||
@ -48,6 +48,20 @@ typedef enum {
|
||||
* public struct to store name and type of an object
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
/* Struct to keep track of symbolic link targets visited.
|
||||
* Functions: symlink_visit_add() and symlink_is_visited()
|
||||
*/
|
||||
typedef struct symlink_trav_t {
|
||||
size_t nalloc;
|
||||
size_t nused;
|
||||
struct {
|
||||
H5L_type_t type;
|
||||
char *file;
|
||||
char *path;
|
||||
} *objs;
|
||||
hbool_t dangle_link;
|
||||
} symlink_trav_t;
|
||||
|
||||
typedef struct trav_path_t {
|
||||
char *path;
|
||||
h5trav_type_t type;
|
||||
@ -56,7 +70,11 @@ typedef struct trav_path_t {
|
||||
typedef struct trav_info_t {
|
||||
size_t nalloc;
|
||||
size_t nused;
|
||||
const char *fname;
|
||||
hid_t fid; /* File ID */
|
||||
trav_path_t *paths;
|
||||
symlink_trav_t symlink_visited; /* already visited symbolic links */
|
||||
void * opts; /* optional data passing */
|
||||
} trav_info_t;
|
||||
|
||||
|
||||
@ -110,9 +128,11 @@ extern "C" {
|
||||
* "h5trav general" public functions
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
H5TOOLS_DLL int h5trav_visit(hid_t file_id, const char *grp_name, hbool_t visit_start,
|
||||
hbool_t recurse, h5trav_obj_func_t visit_obj, h5trav_lnk_func_t visit_lnk,
|
||||
void *udata);
|
||||
H5TOOLS_DLL int h5trav_visit(hid_t file_id, const char *grp_name,
|
||||
hbool_t visit_start, hbool_t recurse, h5trav_obj_func_t visit_obj,
|
||||
h5trav_lnk_func_t visit_lnk, void *udata);
|
||||
H5TOOLS_DLL herr_t symlink_visit_add(symlink_trav_t *visited, H5L_type_t type, const char *file, const char *path);
|
||||
H5TOOLS_DLL hbool_t symlink_is_visited(symlink_trav_t *visited, H5L_type_t type, const char *file, const char *path);
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* "h5trav info" public functions
|
||||
@ -120,6 +140,8 @@ H5TOOLS_DLL int h5trav_visit(hid_t file_id, const char *grp_name, hbool_t visit_
|
||||
*/
|
||||
H5TOOLS_DLL int h5trav_getinfo(hid_t file_id, trav_info_t *info);
|
||||
H5TOOLS_DLL ssize_t h5trav_getindex(const trav_info_t *info, const char *obj);
|
||||
H5TOOLS_DLL int trav_info_visit_obj (const char *path, const H5O_info_t *oinfo, const char *already_visited, void *udata);
|
||||
H5TOOLS_DLL int trav_info_visit_lnk (const char *path, const H5L_info_t *linfo, void *udata);
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* "h5trav table" public functions
|
||||
@ -144,10 +166,12 @@ H5TOOLS_DLL int h5trav_print(hid_t fid);
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
H5TOOLS_DLL void trav_info_init(trav_info_t **info);
|
||||
H5TOOLS_DLL void trav_info_init(const char *filename, hid_t fileid, trav_info_t **info);
|
||||
|
||||
H5TOOLS_DLL void trav_info_free(trav_info_t *info);
|
||||
|
||||
H5TOOLS_DLL void trav_info_add(trav_info_t *info, const char *path, h5trav_type_t obj_type);
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* table private functions
|
||||
*-------------------------------------------------------------------------
|
||||
|
@ -38,7 +38,8 @@ extern FILE * overflow_file;
|
||||
|
||||
struct diff_args
|
||||
{
|
||||
char name[256];
|
||||
char name1[256];
|
||||
char name2[256];
|
||||
h5trav_type_t type;
|
||||
diff_opt_t options;
|
||||
};
|
||||
|
@ -48,6 +48,8 @@ set srcfile17=h5diff_ext2softlink_src.h5
|
||||
set srcfile18=h5diff_ext2softlink_trg.h5
|
||||
set srclnkfile1=h5diff_danglelinks1.h5
|
||||
set srclnkfile2=h5diff_danglelinks2.h5
|
||||
set src_grp_recurse1=h5diff_grp_recurse1.h5
|
||||
set src_grp_recurse2=h5diff_grp_recurse2.h5
|
||||
|
||||
set file1=%indir%\h5diff_basic1.h5
|
||||
set file2=%indir%\h5diff_basic2.h5
|
||||
@ -69,6 +71,8 @@ set file17=%indir%\h5diff_ext2softlink_src.h5
|
||||
set file18=%indir%\h5diff_ext2softlink_trg.h5
|
||||
set lnkfile1=%indir%\h5diff_danglelinks1.h5
|
||||
set lnkfile2=%indir%\h5diff_danglelinks2.h5
|
||||
set grp_recurse1=%indir%\h5diff_grp_recurse1.h5
|
||||
set grp_recurse2=%indir%\h5diff_grp_recurse2.h5
|
||||
|
||||
|
||||
rem The tool name
|
||||
@ -222,7 +226,7 @@ rem The tests
|
||||
rem To avoid the printing of the complete full path of the test file, that hides
|
||||
rem all the other parameters for long paths, the printing of the command line
|
||||
rem is done first in
|
||||
rem TESTING with the name only of the test file $TOOL, not its full path $TESTFILErem ############################################################################
|
||||
rem TESTING with the name only of the test file $TOOL, not its full path $TESTFILE
|
||||
rem ############################################################################
|
||||
|
||||
rem ############################################################################
|
||||
@ -282,9 +286,9 @@ rem ############################################################################
|
||||
call :testing %h5diff% -q %srcfile1% %srcfile2%
|
||||
call :tooltest h5diff_18.txt -q %file1% %file2%
|
||||
|
||||
rem ##############################################################################
|
||||
rem ########################################################################
|
||||
rem # not comparable types
|
||||
rem ##############################################################################
|
||||
rem ########################################################################
|
||||
|
||||
rem 2.0
|
||||
call :testing %h5diff% -v %srcfile3% %srcfile3% dset g1
|
||||
@ -298,9 +302,9 @@ rem ############################################################################
|
||||
call :testing %h5diff% -v %srcfile3% %srcfile3% dset t1
|
||||
call :tooltest h5diff_22.txt -v %file3% %file3% dset t1
|
||||
|
||||
rem ##############################################################################
|
||||
rem #######################################################################
|
||||
rem # compare groups, types, links (no differences and differences)
|
||||
rem ##############################################################################
|
||||
rem #######################################################################
|
||||
|
||||
rem 2.3
|
||||
call :testing %h5diff% -v %srcfile3% %srcfile3% g1 g1
|
||||
@ -328,9 +332,9 @@ rem ############################################################################
|
||||
|
||||
|
||||
|
||||
rem ##############################################################################
|
||||
rem ########################################################################
|
||||
rem # Dataset datatypes
|
||||
rem ##############################################################################
|
||||
rem ########################################################################
|
||||
|
||||
rem 5.0
|
||||
call :testing %h5diff% -v %srcfile4% %srcfile4% dset0a dset0b
|
||||
@ -368,19 +372,23 @@ rem ############################################################################
|
||||
call :testing %h5diff% -v %srcfile7% %srcfile8% refreg
|
||||
call :tooltest h5diff_58.txt -v %file7% %file8% refreg
|
||||
|
||||
rem ##############################################################################
|
||||
rem ########################################################################
|
||||
rem # Error messages
|
||||
rem ##############################################################################
|
||||
rem ########################################################################
|
||||
|
||||
|
||||
rem 6.0: Check if the command line number of arguments is less than 3
|
||||
call :testing %h5diff% %srcfile1%
|
||||
call :tooltest h5diff_600.txt %file1%
|
||||
|
||||
rem 6.1: Check if non-exist object name is specified
|
||||
call :testing %h5diff% %srcfile1% %srcfile1% nono_obj
|
||||
call :tooltest h5diff_601.txt %file1% %file1% nono_obj
|
||||
|
||||
rem ##############################################################################
|
||||
|
||||
rem ########################################################################
|
||||
rem # -d
|
||||
rem ##############################################################################
|
||||
rem ########################################################################
|
||||
|
||||
|
||||
rem 6.3: negative value
|
||||
@ -416,9 +424,9 @@ rem ############################################################################
|
||||
call :tooltest h5diff_610.txt -d 1 %file1% %file2% g1/dset3 g1/dset4
|
||||
|
||||
|
||||
rem ##############################################################################
|
||||
rem ########################################################################
|
||||
rem # -p
|
||||
rem ##############################################################################
|
||||
rem ########################################################################
|
||||
|
||||
|
||||
|
||||
@ -455,9 +463,9 @@ rem ############################################################################
|
||||
call :tooltest h5diff_619.txt -p 0.005 %file1% %file2% g1/dset3 g1/dset4
|
||||
|
||||
|
||||
rem ##############################################################################
|
||||
rem ########################################################################
|
||||
rem # -n
|
||||
rem ##############################################################################
|
||||
rem ########################################################################
|
||||
|
||||
rem 6.21: negative value
|
||||
call :testing %h5diff% -n -4 %srcfile1% %srcfile2% g1/dset3 g1/dset4
|
||||
@ -496,15 +504,15 @@ rem ############################################################################
|
||||
call :testing %h5diff% file1.h6 file2.h6
|
||||
call :tooltest h5diff_629.txt file1.h6 file2.h6
|
||||
|
||||
rem ##############################################################################
|
||||
rem ########################################################################
|
||||
rem 7. attributes
|
||||
rem ##############################################################################
|
||||
rem ########################################################################
|
||||
call :testing %h5diff% -v %srcfile5% %srcfile6%
|
||||
call :tooltest h5diff_70.txt -v %file5% %file6%
|
||||
|
||||
rem ##############################################################################
|
||||
rem #######################################################################
|
||||
rem 8. all dataset datatypes
|
||||
rem ##############################################################################
|
||||
rem #######################################################################
|
||||
call :testing %h5diff% -v %srcfile7% %srcfile8%
|
||||
call :tooltest h5diff_80.txt -v %file7% %file8%
|
||||
|
||||
@ -513,13 +521,13 @@ rem ############################################################################
|
||||
call :tooltest h5diff_90.txt -v %file2% %file2%
|
||||
|
||||
rem 10. read by hyperslab, print indexes
|
||||
rem ##############################################################################
|
||||
rem #######################################################################
|
||||
rem Not skipped on windows as this has not been a problem - ADB 1/22/2009
|
||||
rem if test -n "$pmode" -a "$mydomainname" = hdfgroup.uiuc.edu; then
|
||||
rem # skip this test which sometimes hangs in some THG machines
|
||||
rem SKIP -v $SRCFILE9 $SRCFILE10
|
||||
rem else
|
||||
rem ##############################################################################
|
||||
rem #######################################################################
|
||||
call :testing %h5diff% -v %srcfile9% %srcfile10%
|
||||
call :tooltest h5diff_100.txt -v %file9% %file10%
|
||||
rem fi
|
||||
@ -563,16 +571,16 @@ rem ############################################################################
|
||||
call :testing %h5diff% -c %srcfile2% %srcfile2% g2/dset8 g2/dset9
|
||||
call :tooltest h5diff_207.txt -c %file2% %file2% g2/dset8 g2/dset9
|
||||
|
||||
rem ##############################################################################
|
||||
rem #######################################################################
|
||||
rem # Links compare without --follow-symlinks nor --no-dangling-links
|
||||
rem ##############################################################################
|
||||
rem #######################################################################
|
||||
rem test for bug1749
|
||||
call :testing %h5diff% -v %srcfile12% %srcfile12% /link_g1 /link_g2
|
||||
call :tooltest h5diff_300.txt -v %file12% %file12% /link_g1 /link_g2
|
||||
|
||||
rem ##############################################################################
|
||||
rem #######################################################################
|
||||
rem # Links compare with --follow-symlinks Only
|
||||
rem ##############################################################################
|
||||
rem #######################################################################
|
||||
rem soft links file to file
|
||||
call :testing %h5diff% --follow-symlinks -v %srcfile13% %srcfile13%
|
||||
call :tooltest h5diff_400.txt --follow-symlinks -v %file13% %file13%
|
||||
@ -678,9 +686,9 @@ rem ############################################################################
|
||||
call :tooltest h5diff_425.txt --follow-symlinks -v %file17% %file17% /ext_link_to_slink1 /ext_link_to_slink2
|
||||
|
||||
|
||||
rem ##############################################################################
|
||||
rem #######################################################################
|
||||
rem # Dangling links compare (--follow-symlinks and --no-dangling-links)
|
||||
rem ##############################################################################
|
||||
rem #######################################################################
|
||||
rem dangling links --follow-symlinks (FILE to FILE)
|
||||
call :testing %h5diff% --follow-symlinks -v %srclnkfile1% %srclnkfile2%
|
||||
call :tooltest h5diff_450.txt --follow-symlinks -v %lnkfile1% %lnkfile2%
|
||||
@ -721,10 +729,66 @@ rem ############################################################################
|
||||
call :testing %h5diff% --follow-symlinks -v --no-dangling-links %srcfile15% %srcfile15% /ext_link_noexist1 /ext_link_noexist2
|
||||
call :tooltest h5diff_459.txt --follow-symlinks -v --no-dangling-links %file15% %file15% /ext_link_noexist1 /ext_link_noexist2
|
||||
|
||||
rem ########################################################################
|
||||
rem # test for group diff recursivly
|
||||
rem ########################################################################
|
||||
rem root
|
||||
call :testing %h5diff% -v %src_grp_recurse1% %src_grp_recurse2% / /
|
||||
call :tooltest h5diff_500.txt -v %grp_recurse1% %grp_recurse2% / /
|
||||
|
||||
call :testing %h5diff% -v --follow-symlinks %src_grp_recurse1% %src_grp_recurse2% / /
|
||||
call :tooltest h5diff_501.txt -v --follow-symlinks %grp_recurse1% %grp_recurse2% / /
|
||||
|
||||
rem root vs group
|
||||
call :testing %h5diff% -v %src_grp_recurse1% %src_grp_recurse2% / /grp1/grp2/grp3
|
||||
call :tooltest h5diff_502.txt -v %grp_recurse1% %grp_recurse2% / /grp1/grp2/grp3
|
||||
|
||||
rem group vs group (same name and structure)
|
||||
call :testing %h5diff% -v %src_grp_recurse1% %src_grp_recurse2% /grp1 /grp1
|
||||
call :tooltest h5diff_503.txt -v %grp_recurse1% %grp_recurse2% /grp1 /grp1
|
||||
|
||||
rem group vs group (different name and structure)
|
||||
call :testing %h5diff% -v %src_grp_recurse1% %src_grp_recurse2% /grp1/grp2 /grp1/grp2/grp3
|
||||
call :tooltest h5diff_504.txt -v %grp_recurse1% %grp_recurse2% /grp1/grp2 /grp1/grp2/grp3
|
||||
|
||||
rem groups vs soft-link
|
||||
call :testing %h5diff%
|
||||
call :tooltest h5diff_505.txt -v %grp_recurse1% %grp_recurse2% /grp1 /slink_grp1
|
||||
|
||||
call :testing %h5diff% -v --follow-symlinks %src_grp_recurse1% %src_grp_recurse2% /grp1/grp2 /slink_grp2
|
||||
call :tooltest h5diff_506.txt -v --follow-symlinks %grp_recurse1% %grp_recurse2% /grp1/grp2 /slink_grp2
|
||||
|
||||
rem groups vs ext-link
|
||||
call :testing %h5diff% -v %src_grp_recurse1% %src_grp_recurse2% /grp1 /elink_grp1
|
||||
call :tooltest h5diff_507.txt -v %grp_recurse1% %grp_recurse2% /grp1 /elink_grp1
|
||||
|
||||
call :testing %h5diff% -v --follow-symlinks %src_grp_recurse1% %src_grp_recurse2% /grp1 /elink_grp1
|
||||
call :tooltest h5diff_508.txt -v --follow-symlinks %grp_recurse1% %grp_recurse2% /grp1 /elink_grp1
|
||||
|
||||
rem soft-link vs ext-link
|
||||
call :testing %h5diff% -v %src_grp_recurse1% %src_grp_recurse2% /slink_grp1 /elink_grp1
|
||||
call :tooltest h5diff_509.txt -v %grp_recurse1% %grp_recurse2% /slink_grp1 /elink_grp1
|
||||
|
||||
call :testing %h5diff% -v --follow-symlinks %src_grp_recurse1% %src_grp_recurse2% /slink_grp1 /elink_grp1
|
||||
call :tooltest h5diff_510.txt -v --follow-symlinks %grp_recurse1% %grp_recurse2% /slink_grp1 /elink_grp1
|
||||
|
||||
rem circled ext links
|
||||
call :testing %h5diff% -v %src_grp_recurse1% %src_grp_recurse2% /grp10 /grp11
|
||||
call :tooltest h5diff_511.txt -v %grp_recurse1% %grp_recurse2% /grp10 /grp11
|
||||
|
||||
call :testing %h5diff% -v --follow-symlinks %src_grp_recurse1% %src_grp_recurse2% /grp10 /grp11
|
||||
call :tooltest h5diff_512.txt -v --follow-symlinks %grp_recurse1% %grp_recurse2% /grp10 /grp11
|
||||
|
||||
rem circled soft2ext-link vs soft2ext-link
|
||||
call :testing %h5diff% -v %src_grp_recurse1% %src_grp_recurse2% /slink_grp10 /slink_grp11
|
||||
call :tooltest h5diff_513.txt -v %grp_recurse1% %grp_recurse2% /slink_grp10 /slink_grp11
|
||||
|
||||
call :testing %h5diff% -v --follow-symlinks %src_grp_recurse1% %src_grp_recurse2% /slink_grp10 /slink_grp11
|
||||
call :tooltest h5diff_514.txt -v --follow-symlinks %grp_recurse1% %grp_recurse2% /slink_grp10 /slink_grp11
|
||||
|
||||
rem ##############################################################################
|
||||
rem #######################################################################
|
||||
rem # END
|
||||
rem ##############################################################################
|
||||
rem #######################################################################
|
||||
|
||||
if %nerrors% equ 0 (
|
||||
echo.All %h5diff% tests passed.
|
||||
|
Loading…
Reference in New Issue
Block a user