diff options
author | Jonathan Kim <jkm@hdfgroup.org> | 2011-07-26 15:20:51 (GMT) |
---|---|---|
committer | Jonathan Kim <jkm@hdfgroup.org> | 2011-07-26 15:20:51 (GMT) |
commit | 0069b4b190cb654706d325487caa91a6ad93dc31 (patch) | |
tree | b3c0c8cfcaae4757116133589b323bf8a37bb514 /tools/lib/h5diff_array.c | |
parent | e71268c120e361e8eff4670610d49da417c7925a (diff) | |
download | hdf5-0069b4b190cb654706d325487caa91a6ad93dc31.zip hdf5-0069b4b190cb654706d325487caa91a6ad93dc31.tar.gz hdf5-0069b4b190cb654706d325487caa91a6ad93dc31.tar.bz2 |
[svn-r21151] Description:
Merged from HDF5 trunk r21105
Fixed two bugs:
- h5repack: h5repack failed to copy dataset if the layout is changed from c
hunked with unlimited dims to contiguous. (PC -- 2011/07/15)
- h5diff: "--delta" option considers two NaN of the same type are different
, which is wrong based on http://www.hdfgroup.org/HDF5/doc/RM/Tools.html#Tools-Diff. (PC -- 2011/07/15)
Tested:
jam (linux32-LE), koala (linux64-LE), heiwa (linuxppc64-BE), tejeda (mac32-LE), linew (solaris-BE)
Diffstat (limited to 'tools/lib/h5diff_array.c')
-rw-r--r-- | tools/lib/h5diff_array.c | 132 |
1 files changed, 80 insertions, 52 deletions
diff --git a/tools/lib/h5diff_array.c b/tools/lib/h5diff_array.c index 6c5744f..ecfc238 100644 --- a/tools/lib/h5diff_array.c +++ b/tools/lib/h5diff_array.c @@ -234,11 +234,11 @@ hsize_t diff_array( void *_mem1, size = H5Tget_size( m_type ); type_class = H5Tget_class(m_type); - /* Fast comparison first for atomic type by memcmp(). + /* Fast comparison first for atomic type by memcmp(). * It is OK not to list non-atomic type here because it will not be caught - * by the confition, but it gives more clarity for code planning + * by the condition, but it gives more clarity for code planning */ - if (type_class != H5T_REFERENCE && + if (type_class != H5T_REFERENCE && type_class != H5T_COMPOUND && type_class != H5T_STRING && type_class != H5T_VLEN && @@ -269,7 +269,6 @@ hsize_t diff_array( void *_mem1, */ case H5T_FLOAT: - if (H5Tequal(m_type, H5T_NATIVE_FLOAT)) nfound=diff_float(mem1,mem2,nelmts,hyper_start,rank,dims,acc,pos,options,name1,name2,&ph); else if (H5Tequal(m_type, H5T_NATIVE_DOUBLE)) @@ -427,11 +426,11 @@ hsize_t diff_datum(void *_mem1, type_size = H5Tget_size( m_type ); type_class = H5Tget_class(m_type); - /* Fast comparison first for atomic type by memcmp(). + /* Fast comparison first for atomic type by memcmp(). * It is OK not to list non-atomic type here because it will not be caught - * by the confition, but it gives more clarity for code planning + * by the confition, but it gives more clarity for code planning */ - if (type_class != H5T_REFERENCE && + if (type_class != H5T_REFERENCE && type_class != H5T_COMPOUND && type_class != H5T_STRING && type_class != H5T_VLEN && @@ -513,10 +512,10 @@ hsize_t diff_datum(void *_mem1, size2 = H5Tget_size(m_type); } - /* + /* * compare for shorter string - * TODO: this code need to be improved to handle the difference - * of length of strings. + * TODO: this code need to be improved to handle the difference + * of length of strings. * For now mimic the previous way. */ if(size1 < size2) @@ -622,7 +621,7 @@ hsize_t diff_datum(void *_mem1, char enum_name2[1024]; herr_t err1; - herr_t err2; + herr_t err2; /* disable error reporting */ H5E_BEGIN_TRY { @@ -1946,8 +1945,8 @@ hsize_t diff_datum(void *_mem1, } } - /* one is NaN, assume difference */ - else if ( isnan1==1 || isnan2==1) + /* only one is NaN, assume difference */ + else if (isnan1==1 && isnan2==0 || isnan1==0 && isnan2==1) { if ( print_data(options) ) { @@ -2009,8 +2008,8 @@ hsize_t diff_datum(void *_mem1, } } - /* one is NaN, assume difference */ - else if ( isnan1==1 || isnan2==1) + /* only one is NaN, assume difference */ + else if (isnan1==1 && isnan2==0 || isnan1==0 && isnan2==1) { if ( print_data(options) ) { @@ -2075,8 +2074,8 @@ hsize_t diff_datum(void *_mem1, } } - /* one is NaN, assume difference */ - else if ( isnan1==1 || isnan2==1) + /* only one is NaN, assume difference */ + else if (isnan1==1 && isnan2==0 || isnan1==0 && isnan2==1) { if ( print_data(options) ) { @@ -2131,7 +2130,6 @@ hsize_t diff_datum(void *_mem1, */ if (options->d && !options->p) { - /*------------------------------------------------------------------------- * detect NaNs *------------------------------------------------------------------------- @@ -2158,8 +2156,8 @@ hsize_t diff_datum(void *_mem1, } } - /* one is NaN, assume difference */ - else if ( isnan1==1 || isnan2==1) + /* only one is NaN, assume difference */ + else if (isnan1==1 && isnan2==0 || isnan1==0 && isnan2==1) { if ( print_data(options) ) { @@ -2223,8 +2221,8 @@ hsize_t diff_datum(void *_mem1, } } - /* one is NaN, assume difference */ - else if ( isnan1==1 || isnan2==1) + /* only one is NaN, assume difference */ + else if (isnan1==1 && isnan2==0 || isnan1==0 && isnan2==1) { if ( print_data(options) ) { @@ -2289,8 +2287,8 @@ hsize_t diff_datum(void *_mem1, } } - /* one is NaN, assume difference */ - else if ( isnan1==1 || isnan2==1) + /* only one is NaN, assume difference */ + else if (isnan1==1 && isnan2==0 || isnan1==0 && isnan2==1) { if ( print_data(options) ) { @@ -2299,7 +2297,6 @@ hsize_t diff_datum(void *_mem1, parallel_print(F_FORMAT,temp1_double,temp2_double,ABS(temp1_double-temp2_double)); } nfound++; - } } @@ -2373,8 +2370,18 @@ hsize_t diff_datum(void *_mem1, } nfound++; } - } /* NaN */ + /* only one is NaN, assume difference */ + else if (isnan1==1 && isnan2==0 || isnan1==0 && isnan2==1) + { + if ( print_data(options) ) + { + print_pos(ph,0,i,acc,pos,rank,dims,obj1,obj2); + parallel_print(SPACES); + parallel_print(F_FORMAT,temp1_double,temp2_double,ABS(temp1_double-temp2_double)); + } + nfound++; + } } /*------------------------------------------------------------------------- @@ -2428,7 +2435,18 @@ hsize_t diff_datum(void *_mem1, } } /* NaN */ - } + /* only one is NaN, assume difference */ + else if (isnan1==1 && isnan2==0 || isnan1==0 && isnan2==1) + { + if ( print_data(options) ) + { + print_pos(ph,0,i,acc,pos,rank,dims,obj1,obj2); + parallel_print(SPACES); + parallel_print(F_FORMAT,temp1_double,temp2_double,ABS(temp1_double-temp2_double)); + } + nfound++; + } + } /*------------------------------------------------------------------------- * -d and -p @@ -2482,6 +2500,17 @@ hsize_t diff_datum(void *_mem1, } } /* NaN */ + /* only one is NaN, assume difference */ + else if (isnan1==1 && isnan2==0 || isnan1==0 && isnan2==1) + { + if ( print_data(options) ) + { + print_pos(ph,0,i,acc,pos,rank,dims,obj1,obj2); + parallel_print(SPACES); + parallel_print(F_FORMAT,temp1_double,temp2_double,ABS(temp1_double-temp2_double)); + } + nfound++; + } } /*------------------------------------------------------------------------- @@ -2973,8 +3002,8 @@ hsize_t diff_float(unsigned char *mem1, nfound++; } } - /* one is NaN, assume difference */ - else if ( isnan1==1 || isnan2==1) + /* only one is NaN, assume difference */ + else if (isnan1==1 && isnan2==0 || isnan1==0 && isnan2==1) { if ( print_data(options) ) { @@ -3045,8 +3074,8 @@ hsize_t diff_float(unsigned char *mem1, nfound++; } } - /* one is NaN, assume difference */ - else if ( isnan1==1 || isnan2==1) + /* only one is NaN, assume difference */ + else if (isnan1==1 && isnan2==0 || isnan1==0 && isnan2==1) { if ( print_data(options) ) { @@ -3120,8 +3149,8 @@ hsize_t diff_float(unsigned char *mem1, } } - /* one is NaN, assume difference */ - else if ( isnan1==1 || isnan2==1) + /* only one is NaN, assume difference */ + else if (isnan1==1 && isnan2==0 || isnan1==0 && isnan2==1) { if ( print_data(options) ) { @@ -3210,7 +3239,6 @@ hsize_t diff_double(unsigned char *mem1, int isnan1=0; int isnan2=0; - /*------------------------------------------------------------------------- * -d and !-p *------------------------------------------------------------------------- @@ -3247,8 +3275,8 @@ hsize_t diff_double(unsigned char *mem1, nfound++; } } - /* one is NaN, assume difference */ - else if ( isnan1==1 || isnan2==1) + /* only one is NaN, assume difference */ + else if (isnan1==1 && isnan2==0 || isnan1==0 && isnan2==1) { if ( print_data(options) ) { @@ -3319,8 +3347,8 @@ hsize_t diff_double(unsigned char *mem1, nfound++; } } - /* one is NaN, assume difference */ - else if ( isnan1==1 || isnan2==1) + /* only one is NaN, assume difference */ + else if (isnan1==1 && isnan2==0 || isnan1==0 && isnan2==1) { if ( print_data(options) ) { @@ -3394,8 +3422,8 @@ hsize_t diff_double(unsigned char *mem1, } } - /* one is NaN, assume difference */ - else if ( isnan1==1 || isnan2==1) + /* only one is NaN, assume difference */ + else if (isnan1==1 && isnan2==0 || isnan1==0 && isnan2==1) { if ( print_data(options) ) { @@ -3530,8 +3558,8 @@ hsize_t diff_ldouble(unsigned char *mem1, nfound++; } } - /* one is NaN, assume difference */ - else if ( isnan1==1 || isnan2==1) + /* only one is NaN, assume difference */ + else if (isnan1==1 && isnan2==0 || isnan1==0 && isnan2==1) { if ( print_data(options) ) { @@ -3602,8 +3630,8 @@ hsize_t diff_ldouble(unsigned char *mem1, nfound++; } } - /* one is NaN, assume difference */ - else if ( isnan1==1 || isnan2==1) + /* only one is NaN, assume difference */ + else if (isnan1==1 && isnan2==0 || isnan1==0 && isnan2==1) { if ( print_data(options) ) { @@ -3677,8 +3705,8 @@ hsize_t diff_ldouble(unsigned char *mem1, } } - /* one is NaN, assume difference */ - else if ( isnan1==1 || isnan2==1) + /* only one is NaN, assume difference */ + else if (isnan1==1 && isnan2==0 || isnan1==0 && isnan2==1) { if ( print_data(options) ) { @@ -6107,13 +6135,13 @@ static void set_comp_members(hid_t tid, mcomp_t *members) members->flags = HDcalloc(members->n, sizeof(unsigned char)); members->offsets = HDcalloc(members->n, sizeof(size_t)); members->m = HDcalloc(members->n, sizeof(mcomp_t *)); - - for (i=0; i< members->n; i++) + + for (i=0; i< members->n; i++) { members->ids[i] = H5Tget_member_type( tid, i ); members->flags[i] = H5Tis_variable_str( members->ids[i] ); members->offsets[i] = H5Tget_member_offset( tid, i ); - if (H5Tget_class( members->ids[i])==H5T_COMPOUND) + if (H5Tget_class( members->ids[i])==H5T_COMPOUND) { members->m[i] = (mcomp_t *)HDmalloc(sizeof(mcomp_t)); set_comp_members(members->ids[i], members->m[i]); @@ -6126,16 +6154,16 @@ static void set_comp_members(hid_t tid, mcomp_t *members) * added to improve performance for compound datasets * clean and close compound members. */ -static void free_comp_members(mcomp_t *members) +static void free_comp_members(mcomp_t *members) { int i; if (!members || members->n<=0 || !members->ids) return; - for (i=0; i<members->n; i++) + for (i=0; i<members->n; i++) { - if (members->m[i]) + if (members->m[i]) { free_comp_members(members->m[i]); HDfree(members->m[i]); |