summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorJonathan Kim <jkm@hdfgroup.org>2011-09-16 19:29:03 (GMT)
committerJonathan Kim <jkm@hdfgroup.org>2011-09-16 19:29:03 (GMT)
commit86faf0b30252ff752420010fce5a12b0498a2b04 (patch)
treee51f37c642e5402e2db78205d93930385857912e /tools
parent35d9b3462131ec2287fc7e74c07584ed0d771067 (diff)
downloadhdf5-86faf0b30252ff752420010fce5a12b0498a2b04.zip
hdf5-86faf0b30252ff752420010fce5a12b0498a2b04.tar.gz
hdf5-86faf0b30252ff752420010fce5a12b0498a2b04.tar.bz2
[svn-r21396] Purpose:
HDFFV-7693 - h5diff produces different behavior between versions: 1.8.3 and 1.8.6 Description: There were two issues on this. One was not displaying all the comparable objects if non-comparable object/attribute exist and compared before comparables ones. This issue occurred after 1.8.4 release. This is the issue from user. The other issue was not displaying all the comparable attributes, if non-comparable object/attribute exist and compared ahead. This issue were exist even before 1.8.4 release. So it's possible some attribute comparison may have not displayed correctly in the past, if non-comparable data were exist in common object. Fixed h5diff to display all the comparable object and attribute regardless of non-comparables. Tested: jam (linux32-LE), koala (linux64-LE), heiwa (linuxppc64-BE), tejeda (mac32-LE), linew (solaris-BE), Cmake (jam, Windows)
Diffstat (limited to 'tools')
-rw-r--r--tools/h5diff/CMakeLists.txt23
-rw-r--r--tools/h5diff/h5diff_common.c5
-rw-r--r--tools/h5diff/h5diffgentest.c193
-rw-r--r--tools/h5diff/testfiles/h5diff_20.txt2
-rw-r--r--tools/h5diff/testfiles/h5diff_202.txt1
-rw-r--r--tools/h5diff/testfiles/h5diff_205.txt1
-rw-r--r--tools/h5diff/testfiles/h5diff_21.txt2
-rw-r--r--tools/h5diff/testfiles/h5diff_22.txt2
-rw-r--r--tools/h5diff/testfiles/h5diff_220.txt8
-rw-r--r--tools/h5diff/testfiles/h5diff_221.txt8
-rw-r--r--tools/h5diff/testfiles/h5diff_222.txt15
-rw-r--r--tools/h5diff/testfiles/h5diff_505.txt2
-rw-r--r--tools/h5diff/testfiles/h5diff_507.txt2
-rw-r--r--tools/h5diff/testfiles/h5diff_509.txt2
-rw-r--r--tools/h5diff/testfiles/h5diff_57.txt2
-rw-r--r--tools/h5diff/testfiles/h5diff_70.txt2
-rw-r--r--tools/h5diff/testfiles/h5diff_700.txt2
-rw-r--r--tools/h5diff/testfiles/h5diff_701.txt2
-rw-r--r--tools/h5diff/testfiles/h5diff_702.txt2
-rw-r--r--tools/h5diff/testfiles/h5diff_703.txt2
-rw-r--r--tools/h5diff/testfiles/h5diff_80.txt2
-rw-r--r--tools/h5diff/testfiles/non_comparables1.h5bin0 -> 6408 bytes
-rw-r--r--tools/h5diff/testfiles/non_comparables2.h5bin0 -> 6408 bytes
-rwxr-xr-xtools/h5diff/testh5diff.sh17
-rw-r--r--tools/lib/h5diff.c4
-rw-r--r--tools/lib/h5diff_attr.c9
-rw-r--r--tools/lib/h5diff_dset.c36
27 files changed, 306 insertions, 40 deletions
diff --git a/tools/h5diff/CMakeLists.txt b/tools/h5diff/CMakeLists.txt
index 12dc388..9f45d6a 100644
--- a/tools/h5diff/CMakeLists.txt
+++ b/tools/h5diff/CMakeLists.txt
@@ -79,6 +79,9 @@ IF (BUILD_TESTING)
h5diff_206.txt
h5diff_207.txt
h5diff_208.txt
+ h5diff_220.txt
+ h5diff_221.txt
+ h5diff_222.txt
h5diff_21.txt
h5diff_22.txt
h5diff_23.txt
@@ -248,6 +251,8 @@ IF (BUILD_TESTING)
h5diff_attr_v_level2.h5
compounds_array_vlen1.h5
compounds_array_vlen2.h5
+ non_comparables1.h5
+ non_comparables2.h5
)
FOREACH (txt_file ${HDF5_REFERENCE_FILES})
@@ -551,6 +556,12 @@ IF (BUILD_TESTING)
h5diff_207.out.err
h5diff_208.out
h5diff_208.out.err
+ h5diff_220.out
+ h5diff_220.out.err
+ h5diff_221.out
+ h5diff_221.out.err
+ h5diff_222.out
+ h5diff_222.out.err
h5diff_21.out
h5diff_21.out.err
h5diff_22.out
@@ -1115,6 +1126,18 @@ ADD_H5_TEST (h5diff_207 0 -c ${FILE2} ${FILE2} g2/dset8 g2/dset9)
# not comparable in dataspace of zero dimension size
ADD_H5_TEST (h5diff_208 0 -c ${FILE19} ${FILE20})
+# non-comparable dataset with comparable attribute, and other comparable datasets.
+# All the rest comparables should display differences.
+ADD_H5_TEST (h5diff_220 1 -c non_comparables1.h5 non_comparables2.h5 /g1)
+
+# comparable dataset with non-comparable attribute and other comparable attributes.
+# All the rest comparables should display differences.
+ADD_H5_TEST (h5diff_221 1 -c non_comparables1.h5 non_comparables2.h5 /g2)
+
+# entire file
+# All the rest comparables should display differences
+ADD_H5_TEST (h5diff_222 1 -c non_comparables1.h5 non_comparables2.h5)
+
# ##############################################################################
# # Links compare without --follow-symlinks nor --no-dangling-links
# ##############################################################################
diff --git a/tools/h5diff/h5diff_common.c b/tools/h5diff/h5diff_common.c
index 3427fbc..f7532f2 100644
--- a/tools/h5diff/h5diff_common.c
+++ b/tools/h5diff/h5diff_common.c
@@ -321,7 +321,10 @@ void parse_command_line(int argc,
printf("--------------------------------\n");
printf("Some objects are not comparable\n");
printf("--------------------------------\n");
- printf("Use -c for a list of objects.\n");
+ if (options->m_verbose)
+ printf("Use -c for a list of objects without details of differences.\n");
+ else
+ printf("Use -c for a list of objects.\n");
}
diff --git a/tools/h5diff/h5diffgentest.c b/tools/h5diff/h5diffgentest.c
index 562c579..206dca0 100644
--- a/tools/h5diff/h5diffgentest.c
+++ b/tools/h5diff/h5diffgentest.c
@@ -80,6 +80,9 @@
/* file with container types (array,vlen) with multiple compounds */
#define COMPS_COMPLEX1 "compounds_array_vlen1.h5"
#define COMPS_COMPLEX2 "compounds_array_vlen2.h5"
+/* non-comparable dataset and attribute */
+#define NON_COMPARBLES1 "non_comparables1.h5"
+#define NON_COMPARBLES2 "non_comparables2.h5"
#define UIMAX 4294967295u /*Maximum value for a variable of type unsigned int */
#define STR_SIZE 3
@@ -141,6 +144,7 @@ static void test_comps_array (const char *fname, const char *dset, const char *a
static void test_comps_vlen (const char *fname, const char *dset,const char *attr, int diff, int is_file_new);
static void test_comps_array_vlen (const char *fname, const char *dset, const char *attr, int diff, int is_file_new);
static void test_comps_vlen_arry (const char *fname, const char *dset,const char *attr, int diff, int is_file_new);
+static void test_non_comparables (const char *fname, int diff);
/* 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);
@@ -229,6 +233,14 @@ int main(void)
test_comps_array_vlen(COMPS_COMPLEX2,"dset3", "attr3", 5, 0);
test_comps_vlen_arry(COMPS_COMPLEX2,"dset4", "attr4", 5, 0);
+ /*-------------------------------------------------
+ * Create test files with non-comparable dataset and attributes with
+ * comparable datasets and attributes. All the comparables should display
+ * differences.
+ */
+ test_non_comparables(NON_COMPARBLES1,0);
+ test_non_comparables(NON_COMPARBLES2,5);
+
return 0;
}
@@ -4669,6 +4681,187 @@ static void test_comps_vlen_arry (const char * fname, const char *dset, const ch
/*-------------------------------------------------------------------------
+* Function: test_non_comparables
+*
+* Purpose:
+* Create test files with non-comparable dataset and attributes with
+* comparable datasets and attributes. All the comparables should display
+* differences.
+*
+*-------------------------------------------------------------------------*/
+#define DIM_ARRY 3
+static void test_non_comparables (const char * fname, int make_diffs)
+{
+ hid_t fid=0;
+ hid_t gid1=0;
+ hid_t gid2=0;
+ hid_t did1=0;
+ hid_t did2=0;
+ hid_t sid1=0;
+ hid_t tid_dset1=0;
+ hid_t tid_attr1=0;
+ hsize_t dims1[1] = {DIM_ARRY};
+ int data1[DIM_ARRY] = {0,0,0};
+ int data2[DIM_ARRY] = {1,1,1};
+ char data1_str[DIM_ARRY][STR_SIZE]= {"ab","cd","ef"};
+ herr_t status = SUCCEED;
+ int i;
+ void *dset_data_ptr1=NULL;
+ void *dset_data_ptr2=NULL;
+ void *dset_data_ptr3=NULL;
+ void *attr_data_ptr1=NULL;
+ void *attr_data_ptr2=NULL;
+ void *attr_data_ptr3=NULL;
+
+ /* init */
+ tid_dset1=H5Tcopy(H5T_NATIVE_INT);
+ dset_data_ptr1=(int*)&data1;
+ dset_data_ptr2=(int*)&data1;
+ dset_data_ptr3=(int*)&data1;
+ tid_attr1=H5Tcopy(H5T_NATIVE_INT);
+ attr_data_ptr1=(int*)&data1;
+ attr_data_ptr3=(int*)&data1;
+
+ if (make_diffs)
+ {
+ /* ------------
+ * group1 */
+ tid_dset1=H5Tcopy(H5T_C_S1);
+ H5Tset_size(tid_dset1, (size_t)STR_SIZE);
+ dset_data_ptr1=(char*)&data1_str;
+ dset_data_ptr2=(int*)&data2;
+ attr_data_ptr1=(int*)&data2;
+
+ /* -----------
+ * group2
+ */
+ dset_data_ptr3=(int*)&data2;
+ /* attr1 */
+ tid_attr1=H5Tcopy(H5T_C_S1);
+ H5Tset_size(tid_attr1, (size_t)STR_SIZE);
+ attr_data_ptr2=(char*)&data1_str;
+ /* attr2 */
+ attr_data_ptr3=(int*)&data2;
+ }
+
+
+ /*-----------------------------------------------------------------------
+ * Create file(s)
+ *------------------------------------------------------------------------*/
+ fid = H5Fcreate (fname, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+ if (fid < 0)
+ {
+ fprintf(stderr, "Error: %s> H5Fcreate failed.\n", fname);
+ status = FAIL;
+ goto out;
+ }
+
+ /*-----------------------------------------------------------------------
+ * Groups
+ *------------------------------------------------------------------------*/
+ gid1 = H5Gcreate2(fid, "g1", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+ if (gid1 < 0)
+ {
+ fprintf(stderr, "Error: %s> H5Gcreate2 failed.\n", fname);
+ status = FAIL;
+ goto out;
+ }
+
+ gid2 = H5Gcreate2(fid, "g2", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+ if (gid2 < 0)
+ {
+ fprintf(stderr, "Error: %s> H5Gcreate2 failed.\n", fname);
+ status = FAIL;
+ goto out;
+ }
+
+ /*-----------------------------------------------------------------------
+ * Datasets in /g1
+ *------------------------------------------------------------------------*/
+ if((sid1 = H5Screate_simple(1, dims1, NULL)) < 0)
+ goto out;
+
+ /* dset1 */
+ if((did1 = H5Dcreate2(gid1, "dset1", tid_dset1, sid1, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0)
+ {
+ fprintf(stderr, "Error: %s> H5Dcreate2 failed.\n", "dset1");
+ status = FAIL;
+ goto out;
+ }
+
+ if(H5Dwrite(did1, tid_dset1, H5S_ALL, H5S_ALL, H5P_DEFAULT, dset_data_ptr1) < 0)
+ {
+ fprintf(stderr, "Error: %s> H5Dwrite failed.\n", "dset1");
+ status = FAIL;
+ goto out;
+ }
+ write_attr(did1,1,dims1,"attr", H5T_NATIVE_INT, attr_data_ptr1);
+
+ /* dset2 */
+ status = write_dset(gid1, 1, dims1,"dset2", H5T_NATIVE_INT, dset_data_ptr2);
+ if (status == FAIL)
+ {
+ fprintf(stderr, "Error: %s> write_dset failed\n", fname);
+ goto out;
+ }
+
+ /*-----------------------------------------------------------------------
+ * Datasets in /g2
+ *------------------------------------------------------------------------*/
+ /* dset1 */
+ if((did2 = H5Dcreate2(gid2, "dset1", H5T_NATIVE_INT, sid1, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0)
+ {
+ fprintf(stderr, "Error: %s> H5Dcreate2 failed.\n", "dset1");
+ status = FAIL;
+ goto out;
+ }
+
+ if(H5Dwrite(did2, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, dset_data_ptr3) < 0)
+ {
+ fprintf(stderr, "Error: %s> H5Dwrite failed.\n", "dset1");
+ status = FAIL;
+ goto out;
+ }
+ /* attr1 */
+ write_attr(did2,1,dims1,"attr1", tid_attr1, attr_data_ptr2);
+
+ /* attr2 */
+ write_attr(did2,1,dims1,"attr2", H5T_NATIVE_INT, attr_data_ptr3);
+
+ /* dset2 */
+ status = write_dset(gid2, 1, dims1,"dset2", H5T_NATIVE_INT, dset_data_ptr3);
+ if (status == FAIL)
+ {
+ fprintf(stderr, "Error: %s> write_dset failed\n", fname);
+ goto out;
+ }
+
+
+
+out:
+
+ /*-----------------------------------------------------------------------
+ * Close IDs
+ *-----------------------------------------------------------------------*/
+ if(fid)
+ H5Fclose(fid);
+ if(gid1)
+ H5Gclose(gid1);
+ if(gid2)
+ H5Gclose(gid2);
+ if(did1)
+ H5Dclose(did1);
+ if(did2)
+ H5Dclose(did2);
+ if(sid1)
+ H5Sclose(sid1);
+ if(tid_dset1)
+ H5Tclose(tid_dset1);
+ if(tid_attr1)
+ H5Tclose(tid_attr1);
+}
+
+/*-------------------------------------------------------------------------
* Function: write_attr_in
*
* Purpose: write attributes in LOC_ID (dataset, group, named datatype)
diff --git a/tools/h5diff/testfiles/h5diff_20.txt b/tools/h5diff/testfiles/h5diff_20.txt
index 6eba851..3edb543 100644
--- a/tools/h5diff/testfiles/h5diff_20.txt
+++ b/tools/h5diff/testfiles/h5diff_20.txt
@@ -2,5 +2,5 @@
--------------------------------
Some objects are not comparable
--------------------------------
-Use -c for a list of objects.
+Use -c for a list of objects without details of differences.
EXIT CODE: 0
diff --git a/tools/h5diff/testfiles/h5diff_202.txt b/tools/h5diff/testfiles/h5diff_202.txt
index 53657d3..95ef1da 100644
--- a/tools/h5diff/testfiles/h5diff_202.txt
+++ b/tools/h5diff/testfiles/h5diff_202.txt
@@ -1,3 +1,2 @@
Not comparable: </g2/dset2> is of class H5T_FLOAT and </g2/dset3> is of class H5T_INTEGER
-Not comparable: </g2/dset2> has sign H5T_SGN_ERROR and </g2/dset3> has sign H5T_SGN_2
EXIT CODE: 0
diff --git a/tools/h5diff/testfiles/h5diff_205.txt b/tools/h5diff/testfiles/h5diff_205.txt
index d72797b..bf5650f 100644
--- a/tools/h5diff/testfiles/h5diff_205.txt
+++ b/tools/h5diff/testfiles/h5diff_205.txt
@@ -1,4 +1,3 @@
Not comparable: </g2/dset5> has rank 2, dimensions [2x2], max dimensions [2x2]
and </g2/dset6> has rank 2, dimensions [3x2], max dimensions [3x2]
-Not comparable: </g2/dset5> has sign H5T_SGN_2 and </g2/dset6> has sign H5T_SGN_NONE
EXIT CODE: 0
diff --git a/tools/h5diff/testfiles/h5diff_21.txt b/tools/h5diff/testfiles/h5diff_21.txt
index 238c8b8..1479457 100644
--- a/tools/h5diff/testfiles/h5diff_21.txt
+++ b/tools/h5diff/testfiles/h5diff_21.txt
@@ -2,5 +2,5 @@
--------------------------------
Some objects are not comparable
--------------------------------
-Use -c for a list of objects.
+Use -c for a list of objects without details of differences.
EXIT CODE: 0
diff --git a/tools/h5diff/testfiles/h5diff_22.txt b/tools/h5diff/testfiles/h5diff_22.txt
index 33c3a3d..3ccb06b 100644
--- a/tools/h5diff/testfiles/h5diff_22.txt
+++ b/tools/h5diff/testfiles/h5diff_22.txt
@@ -2,5 +2,5 @@
--------------------------------
Some objects are not comparable
--------------------------------
-Use -c for a list of objects.
+Use -c for a list of objects without details of differences.
EXIT CODE: 0
diff --git a/tools/h5diff/testfiles/h5diff_220.txt b/tools/h5diff/testfiles/h5diff_220.txt
new file mode 100644
index 0000000..cadbb6d
--- /dev/null
+++ b/tools/h5diff/testfiles/h5diff_220.txt
@@ -0,0 +1,8 @@
+Not comparable: </g1/dset1> is of class H5T_INTEGER and </g1/dset1> is of class H5T_STRING
+attribute: <attr of </g1/dset1>> and <attr of </g1/dset1>>
+3 differences found
+dataset: </g1/dset1> and </g1/dset1>
+3 differences found
+dataset: </g1/dset2> and </g1/dset2>
+3 differences found
+EXIT CODE: 1
diff --git a/tools/h5diff/testfiles/h5diff_221.txt b/tools/h5diff/testfiles/h5diff_221.txt
new file mode 100644
index 0000000..8f90300
--- /dev/null
+++ b/tools/h5diff/testfiles/h5diff_221.txt
@@ -0,0 +1,8 @@
+Not comparable: <attr1> is of class H5T_INTEGER and <attr1> is of class H5T_STRING
+attribute: <attr2 of </g2/dset1>> and <attr2 of </g2/dset1>>
+3 differences found
+dataset: </g2/dset1> and </g2/dset1>
+6 differences found
+dataset: </g2/dset2> and </g2/dset2>
+3 differences found
+EXIT CODE: 1
diff --git a/tools/h5diff/testfiles/h5diff_222.txt b/tools/h5diff/testfiles/h5diff_222.txt
new file mode 100644
index 0000000..6e1bbd4
--- /dev/null
+++ b/tools/h5diff/testfiles/h5diff_222.txt
@@ -0,0 +1,15 @@
+Not comparable: </g1/dset1> is of class H5T_INTEGER and </g1/dset1> is of class H5T_STRING
+attribute: <attr of </g1/dset1>> and <attr of </g1/dset1>>
+3 differences found
+dataset: </g1/dset1> and </g1/dset1>
+3 differences found
+dataset: </g1/dset2> and </g1/dset2>
+3 differences found
+Not comparable: <attr1> is of class H5T_INTEGER and <attr1> is of class H5T_STRING
+attribute: <attr2 of </g2/dset1>> and <attr2 of </g2/dset1>>
+3 differences found
+dataset: </g2/dset1> and </g2/dset1>
+6 differences found
+dataset: </g2/dset2> and </g2/dset2>
+3 differences found
+EXIT CODE: 1
diff --git a/tools/h5diff/testfiles/h5diff_505.txt b/tools/h5diff/testfiles/h5diff_505.txt
index 28640b7..a220730 100644
--- a/tools/h5diff/testfiles/h5diff_505.txt
+++ b/tools/h5diff/testfiles/h5diff_505.txt
@@ -2,5 +2,5 @@
--------------------------------
Some objects are not comparable
--------------------------------
-Use -c for a list of objects.
+Use -c for a list of objects without details of differences.
EXIT CODE: 0
diff --git a/tools/h5diff/testfiles/h5diff_507.txt b/tools/h5diff/testfiles/h5diff_507.txt
index ed2b799..6176f3f 100644
--- a/tools/h5diff/testfiles/h5diff_507.txt
+++ b/tools/h5diff/testfiles/h5diff_507.txt
@@ -2,5 +2,5 @@
--------------------------------
Some objects are not comparable
--------------------------------
-Use -c for a list of objects.
+Use -c for a list of objects without details of differences.
EXIT CODE: 0
diff --git a/tools/h5diff/testfiles/h5diff_509.txt b/tools/h5diff/testfiles/h5diff_509.txt
index 145cd9d..a51ab35 100644
--- a/tools/h5diff/testfiles/h5diff_509.txt
+++ b/tools/h5diff/testfiles/h5diff_509.txt
@@ -2,5 +2,5 @@
--------------------------------
Some objects are not comparable
--------------------------------
-Use -c for a list of objects.
+Use -c for a list of objects without details of differences.
EXIT CODE: 0
diff --git a/tools/h5diff/testfiles/h5diff_57.txt b/tools/h5diff/testfiles/h5diff_57.txt
index 61aaa57..d5125fe 100644
--- a/tools/h5diff/testfiles/h5diff_57.txt
+++ b/tools/h5diff/testfiles/h5diff_57.txt
@@ -7,5 +7,5 @@ Not comparable: </dset7a> has sign H5T_SGN_2 and </dset7b> has sign H5T_SGN_NONE
--------------------------------
Some objects are not comparable
--------------------------------
-Use -c for a list of objects.
+Use -c for a list of objects without details of differences.
EXIT CODE: 0
diff --git a/tools/h5diff/testfiles/h5diff_70.txt b/tools/h5diff/testfiles/h5diff_70.txt
index c6aeb68..47b057c 100644
--- a/tools/h5diff/testfiles/h5diff_70.txt
+++ b/tools/h5diff/testfiles/h5diff_70.txt
@@ -2028,5 +2028,5 @@ position vlen3D of </g1> vlen3D of </g1> difference
--------------------------------
Some objects are not comparable
--------------------------------
-Use -c for a list of objects.
+Use -c for a list of objects without details of differences.
EXIT CODE: 1
diff --git a/tools/h5diff/testfiles/h5diff_700.txt b/tools/h5diff/testfiles/h5diff_700.txt
index 99398a9..00c5b07 100644
--- a/tools/h5diff/testfiles/h5diff_700.txt
+++ b/tools/h5diff/testfiles/h5diff_700.txt
@@ -2034,5 +2034,5 @@ position vlen3D of </g1> vlen3D of </g1> difference
--------------------------------
Some objects are not comparable
--------------------------------
-Use -c for a list of objects.
+Use -c for a list of objects without details of differences.
EXIT CODE: 1
diff --git a/tools/h5diff/testfiles/h5diff_701.txt b/tools/h5diff/testfiles/h5diff_701.txt
index 3b3e5b6..a4b436f 100644
--- a/tools/h5diff/testfiles/h5diff_701.txt
+++ b/tools/h5diff/testfiles/h5diff_701.txt
@@ -2133,5 +2133,5 @@ position vlen3D of </g1> vlen3D of </g1> difference
--------------------------------
Some objects are not comparable
--------------------------------
-Use -c for a list of objects.
+Use -c for a list of objects without details of differences.
EXIT CODE: 1
diff --git a/tools/h5diff/testfiles/h5diff_702.txt b/tools/h5diff/testfiles/h5diff_702.txt
index 99398a9..00c5b07 100644
--- a/tools/h5diff/testfiles/h5diff_702.txt
+++ b/tools/h5diff/testfiles/h5diff_702.txt
@@ -2034,5 +2034,5 @@ position vlen3D of </g1> vlen3D of </g1> difference
--------------------------------
Some objects are not comparable
--------------------------------
-Use -c for a list of objects.
+Use -c for a list of objects without details of differences.
EXIT CODE: 1
diff --git a/tools/h5diff/testfiles/h5diff_703.txt b/tools/h5diff/testfiles/h5diff_703.txt
index 3b3e5b6..a4b436f 100644
--- a/tools/h5diff/testfiles/h5diff_703.txt
+++ b/tools/h5diff/testfiles/h5diff_703.txt
@@ -2133,5 +2133,5 @@ position vlen3D of </g1> vlen3D of </g1> difference
--------------------------------
Some objects are not comparable
--------------------------------
-Use -c for a list of objects.
+Use -c for a list of objects without details of differences.
EXIT CODE: 1
diff --git a/tools/h5diff/testfiles/h5diff_80.txt b/tools/h5diff/testfiles/h5diff_80.txt
index 1c55b1a..5957d72 100644
--- a/tools/h5diff/testfiles/h5diff_80.txt
+++ b/tools/h5diff/testfiles/h5diff_80.txt
@@ -877,5 +877,5 @@ point #4 (2,8) (1,7)
--------------------------------
Some objects are not comparable
--------------------------------
-Use -c for a list of objects.
+Use -c for a list of objects without details of differences.
EXIT CODE: 1
diff --git a/tools/h5diff/testfiles/non_comparables1.h5 b/tools/h5diff/testfiles/non_comparables1.h5
new file mode 100644
index 0000000..3aa5199
--- /dev/null
+++ b/tools/h5diff/testfiles/non_comparables1.h5
Binary files differ
diff --git a/tools/h5diff/testfiles/non_comparables2.h5 b/tools/h5diff/testfiles/non_comparables2.h5
new file mode 100644
index 0000000..d860625
--- /dev/null
+++ b/tools/h5diff/testfiles/non_comparables2.h5
Binary files differ
diff --git a/tools/h5diff/testh5diff.sh b/tools/h5diff/testh5diff.sh
index e318a15..585a8ff 100755
--- a/tools/h5diff/testh5diff.sh
+++ b/tools/h5diff/testh5diff.sh
@@ -117,6 +117,8 @@ $SRC_H5DIFF_TESTFILES/compounds_array_vlen2.h5
$SRC_H5DIFF_TESTFILES/h5diff_attr_v_level1.h5
$SRC_H5DIFF_TESTFILES/h5diff_attr_v_level2.h5
$SRC_H5DIFF_TESTFILES/h5diff_enum_invalid_values.h5
+$SRC_H5DIFF_TESTFILES/non_comparables1.h5
+$SRC_H5DIFF_TESTFILES/non_comparables2.h5
"
LIST_OTHER_TEST_FILES="
@@ -149,6 +151,9 @@ $SRC_H5DIFF_TESTFILES/h5diff_205.txt
$SRC_H5DIFF_TESTFILES/h5diff_206.txt
$SRC_H5DIFF_TESTFILES/h5diff_207.txt
$SRC_H5DIFF_TESTFILES/h5diff_208.txt
+$SRC_H5DIFF_TESTFILES/h5diff_220.txt
+$SRC_H5DIFF_TESTFILES/h5diff_221.txt
+$SRC_H5DIFF_TESTFILES/h5diff_222.txt
$SRC_H5DIFF_TESTFILES/h5diff_21.txt
$SRC_H5DIFF_TESTFILES/h5diff_22.txt
$SRC_H5DIFF_TESTFILES/h5diff_23.txt
@@ -794,6 +799,18 @@ TOOLTEST h5diff_207.txt -c h5diff_basic2.h5 h5diff_basic2.h5 g2/dset8 g2/dset9
# not comparable in dataspace of zero dimension size
TOOLTEST h5diff_208.txt -c h5diff_dset_zero_dim_size1.h5 h5diff_dset_zero_dim_size2.h5
+# non-comparable dataset with comparable attribute, and other comparable datasets.
+# All the comparables should display differences.
+TOOLTEST h5diff_220.txt -c non_comparables1.h5 non_comparables2.h5 /g1
+
+# comparable dataset with non-comparable attribute and other comparable attributes.
+# All the comparables should display differences.
+TOOLTEST h5diff_221.txt -c non_comparables1.h5 non_comparables2.h5 /g2
+
+# entire file
+# All the comparables should display differences.
+TOOLTEST h5diff_222.txt -c non_comparables1.h5 non_comparables2.h5
+
# ##############################################################################
# # Links compare without --follow-symlinks nor --no-dangling-links
# ##############################################################################
diff --git a/tools/lib/h5diff.c b/tools/lib/h5diff.c
index bbf9b39..6e9fee8 100644
--- a/tools/lib/h5diff.c
+++ b/tools/lib/h5diff.c
@@ -1952,8 +1952,8 @@ hsize_t diff(hid_t file1_id,
else
{
nfound = diff_dataset(file1_id, file2_id, path1, path2, options);
- /* print info if compatible and difference found */
- if (!options->not_cmp && nfound)
+ /* print info if difference found */
+ if (nfound)
{
do_print_objname("dataset", path1, path2, options);
print_found(nfound);
diff --git a/tools/lib/h5diff_attr.c b/tools/lib/h5diff_attr.c
index e5c5965..d9132e9 100644
--- a/tools/lib/h5diff_attr.c
+++ b/tools/lib/h5diff_attr.c
@@ -380,9 +380,8 @@ hsize_t diff_attr(hid_t loc1_id,
*----------------------------------------------------------------------
*/
- if(msize1 != msize2 ||
- diff_can_type(ftype1_id, ftype2_id, rank1, rank2, dims1,
- dims2, NULL, NULL, name1, name2, options, 0) != 1)
+ if( diff_can_type(ftype1_id, ftype2_id, rank1, rank2, dims1, dims2,
+ NULL, NULL, name1, name2, options, 0) != 1 )
{
if(H5Tclose(ftype1_id) < 0)
goto error;
@@ -452,8 +451,8 @@ hsize_t diff_attr(hid_t loc1_id,
nfound = diff_array(buf1, buf2, nelmts1, (hsize_t)0, rank1, dims1,
options, np1, np2, mtype1_id, attr1_id, attr2_id);
- /* not comparable, no display the different number */
- if(!options->not_cmp && nfound) {
+ /* print info if compatible and difference found */
+ if(nfound) {
do_print_attrname("attribute", np1, np2);
print_found(nfound);
} /* end if */
diff --git a/tools/lib/h5diff_dset.c b/tools/lib/h5diff_dset.c
index c26c766..03ec067 100644
--- a/tools/lib/h5diff_dset.c
+++ b/tools/lib/h5diff_dset.c
@@ -313,19 +313,21 @@ hsize_t diff_datasetid( hid_t did1,
* check for different signed/unsigned types
*-------------------------------------------------------------------------
*/
-
- sign1=H5Tget_sign(m_tid1);
- sign2=H5Tget_sign(m_tid2);
- if ( sign1 != sign2 )
+ if (can_compare)
{
- if ((options->m_verbose||options->m_list_not_cmp) && obj1_name && obj2_name)
+ sign1=H5Tget_sign(m_tid1);
+ sign2=H5Tget_sign(m_tid2);
+ if ( sign1 != sign2 )
{
- parallel_print("Not comparable: <%s> has sign %s ", obj1_name, get_sign(sign1));
- parallel_print("and <%s> has sign %s\n", obj2_name, get_sign(sign2));
+ if ((options->m_verbose||options->m_list_not_cmp) && obj1_name && obj2_name)
+ {
+ parallel_print("Not comparable: <%s> has sign %s ", obj1_name, get_sign(sign1));
+ parallel_print("and <%s> has sign %s\n", obj2_name, get_sign(sign2));
+ }
+
+ can_compare=0;
+ options->not_cmp=1;
}
-
- can_compare=0;
- options->not_cmp=1;
}
/* Check if type is either VLEN-data or VLEN-string to reclaim any
@@ -333,16 +335,16 @@ hsize_t diff_datasetid( hid_t did1,
if( TRUE == h5tools_detect_vlen(m_tid1) )
vl_data = TRUE;
- /*-------------------------------------------------------------------------
+ /*------------------------------------------------------------------------
* only attempt to compare if possible
*-------------------------------------------------------------------------
*/
if(can_compare) /* it is possible to compare */
{
- /*-------------------------------------------------------------------------
+ /*-----------------------------------------------------------------
* get number of elements
- *-------------------------------------------------------------------------
+ *------------------------------------------------------------------
*/
nelmts1 = 1;
for(i = 0; i < rank1; i++)
@@ -354,9 +356,9 @@ hsize_t diff_datasetid( hid_t did1,
HDassert(nelmts1 == nelmts2);
- /*-------------------------------------------------------------------------
+ /*-----------------------------------------------------------------
* "upgrade" the smaller memory size
- *-------------------------------------------------------------------------
+ *------------------------------------------------------------------
*/
if(m_size1 != m_size2) {
@@ -386,9 +388,9 @@ hsize_t diff_datasetid( hid_t did1,
name2 = diff_basename(obj2_name);
- /*-------------------------------------------------------------------------
+ /*----------------------------------------------------------------
* read/compare
- *-------------------------------------------------------------------------
+ *-----------------------------------------------------------------
*/
need = (size_t)(nelmts1 * m_size1); /* bytes needed */
if(need < H5TOOLS_MALLOCSIZE) {