diff options
author | Pedro Vicente Nunes <pvn@hdfgroup.org> | 2009-02-11 16:37:46 (GMT) |
---|---|---|
committer | Pedro Vicente Nunes <pvn@hdfgroup.org> | 2009-02-11 16:37:46 (GMT) |
commit | 8fd5f783b4305485cb1293a90eaaf526e7882e78 (patch) | |
tree | d04301f9c221d6762170fd585518f526c46fa7a3 /tools/lib/h5diff_dset.c | |
parent | c4a18e8ac7c3338281cc5e00fe6a63855838f00a (diff) | |
download | hdf5-8fd5f783b4305485cb1293a90eaaf526e7882e78.zip hdf5-8fd5f783b4305485cb1293a90eaaf526e7882e78.tar.gz hdf5-8fd5f783b4305485cb1293a90eaaf526e7882e78.tar.bz2 |
[svn-r16463] merge from trunk
Bug fix: for compound types, the not comparable test for members was not done
Solution: for compound types, recursively apply that check
Two new cases are added
1) the compound type has a different number of members. Message printed is
<obj1> has X members <obj2> has Y members
Where X and Y are the number of members of each compound type being compared
2) the compound type has not comparable types (for example a double and an int at the same index)
In this case the message
Comparison not possible: object1 is of class1 and object2 is of class2
Is replaced with
Comparison not possible: object1 has a class1 and object2 has a class2
Modified the test generator program to have these 2 cases
Added a shell run for these 2 cases
Tested: h5committest
Diffstat (limited to 'tools/lib/h5diff_dset.c')
-rw-r--r-- | tools/lib/h5diff_dset.c | 100 |
1 files changed, 95 insertions, 5 deletions
diff --git a/tools/lib/h5diff_dset.c b/tools/lib/h5diff_dset.c index 9710419..4826a7f 100644 --- a/tools/lib/h5diff_dset.c +++ b/tools/lib/h5diff_dset.c @@ -287,7 +287,8 @@ hsize_t diff_datasetid( hid_t did1, maxdim2, obj1_name, obj2_name, - options)!=1) + options, + 0)!=1) { can_compare=0; } @@ -661,7 +662,8 @@ int diff_can_type( hid_t f_tid1, /* file data type */ hsize_t *maxdim2, const char *obj1_name, const char *obj2_name, - diff_opt_t *options ) + diff_opt_t *options, + int is_compound) { @@ -685,12 +687,32 @@ int diff_can_type( hid_t f_tid1, /* file data type */ if ( tclass1 != tclass2 ) { + if ( (options->m_verbose||options->m_list_not_cmp) && obj1_name && obj2_name) { - parallel_print("<%s> is of class %s and <%s> is of class %s\n", - obj1_name, get_class(tclass1), - obj2_name, get_class(tclass2) ); + + if ( is_compound ) + { + + parallel_print("<%s> has a class %s and <%s> has a class %s\n", + obj1_name, get_class(tclass1), + obj2_name, get_class(tclass2) ); + + } + + else + + { + + parallel_print("<%s> is of class %s and <%s> is of class %s\n", + obj1_name, get_class(tclass1), + obj2_name, get_class(tclass2) ); + + } + } + + can_compare = 0; options->not_cmp = 1; return can_compare; @@ -850,6 +872,74 @@ int diff_can_type( hid_t f_tid1, /* file data type */ parallel_print("\n"); } } + + + if ( tclass1 == H5T_COMPOUND ) + { + + int nmembs1; + int nmembs2; + int j; + hid_t memb_type1; + hid_t memb_type2; + + nmembs1 = H5Tget_nmembers(f_tid1); + nmembs2 = H5Tget_nmembers(f_tid2); + + if ( nmembs1 != nmembs2 ) + { + + if ( (options->m_verbose||options->m_list_not_cmp) && obj1_name && obj2_name) + { + parallel_print("<%s> has %d members ", obj1_name, nmembs1); + parallel_print("<%s> has %d members ", obj2_name, nmembs2); + parallel_print("\n"); + } + + can_compare = 0; + options->not_cmp = 1; + return can_compare; + } + + for (j = 0; j < nmembs1; j++) + { + memb_type1 = H5Tget_member_type(f_tid1, (unsigned)j); + memb_type2 = H5Tget_member_type(f_tid2, (unsigned)j); + + if (diff_can_type(memb_type1, + memb_type2, + rank1, + rank2, + dims1, + dims2, + maxdim1, + maxdim2, + obj1_name, + obj2_name, + options, + 1)!=1) + { + can_compare = 0; + options->not_cmp = 1; + H5Tclose(memb_type1); + H5Tclose(memb_type2); + return can_compare; + } + + H5Tclose(memb_type1); + H5Tclose(memb_type2); + + } + + + + + + } + + + + return can_compare; } |