summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
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) {