summaryrefslogtreecommitdiffstats
path: root/tools/h5diff/h5diff.c
diff options
context:
space:
mode:
authorPedro Vicente Nunes <pvn@hdfgroup.org>2003-05-07 22:28:09 (GMT)
committerPedro Vicente Nunes <pvn@hdfgroup.org>2003-05-07 22:28:09 (GMT)
commit401c1bc31813f5b44d575823a2c28175bb4e86a0 (patch)
tree6437baab4e6474b4585ea5f10bac3b801a800104 /tools/h5diff/h5diff.c
parent1c37e0ba3d2707b10595616f4cf5324791550f3e (diff)
downloadhdf5-401c1bc31813f5b44d575823a2c28175bb4e86a0.zip
hdf5-401c1bc31813f5b44d575823a2c28175bb4e86a0.tar.gz
hdf5-401c1bc31813f5b44d575823a2c28175bb4e86a0.tar.bz2
[svn-r6827] Purpose:
added new test files for h5diff bug fix Description: the criteria for determining the correct switch case cast to void* to type* was the data size read from disk. this was causing problems on Cray T3E, where all integer except char are 8 bytes long Solution: changed the criteria for using the memory size instead, which is determined by the same function that reads the data into memory the messages " using memory NATIVE_TYPE_X" were removed, because they might not coincid on different platforms. Platforms tested: Linux 2.4 (rockaway) SunOS 5.7 (arabica) IRIX 6.5 (modi4) Misc. update:
Diffstat (limited to 'tools/h5diff/h5diff.c')
-rw-r--r--tools/h5diff/h5diff.c46
1 files changed, 31 insertions, 15 deletions
diff --git a/tools/h5diff/h5diff.c b/tools/h5diff/h5diff.c
index eb848d6..374f2c3 100644
--- a/tools/h5diff/h5diff.c
+++ b/tools/h5diff/h5diff.c
@@ -46,7 +46,8 @@ typedef struct options_t
int diff_dataset( hid_t file1_id, hid_t file2_id, const char *obj1_name,
const char *obj2_name, options_t options );
int array_diff( void *buf1, void *buf2, hsize_t tot_cnt, hid_t type_id, int rank,
- hsize_t *dims, options_t options, const char *obj1, const char *obj2 );
+ hsize_t *dims, options_t options, const char *obj1, const char *obj2,
+ size_t size_mem);
void print_class( H5T_class_t tclass, char *sclass );
void list( const char *filename, int nobjects, info_t *info );
void diff( hid_t file1_id, const char *obj1_name, hid_t file2_id, const char *obj2_name,
@@ -104,7 +105,7 @@ void usage(void)
printf("[-n count] Print difference up to count number for each variable\n");
printf("[-d delta] Print difference when it is greater than limit delta\n");
printf("[-p relative] Print differences which are within a relative error value\n");
- printf("[-m ] Print differences on a sequencial match iteration\n");
+ printf("[-m ] Print differences on a sequential match iteration\n");
}
@@ -158,7 +159,6 @@ int main(int argc, const char *argv[])
const char *obj1_name = NULL;
const char *obj2_name = NULL;
-
/*-------------------------------------------------------------------------
* print the command line options
*-------------------------------------------------------------------------
@@ -797,6 +797,7 @@ int diff_dataset( hid_t file1_id, hid_t file2_id, const char *obj1_name,
char sclass2[20];
int nfound;
hid_t type_mem =-1; /* read to memory type */
+ size_t size_mem; /* size of type in memory */
void *edata;
hid_t (*func)(void*);
htri_t is1, is2;
@@ -1043,6 +1044,9 @@ int diff_dataset( hid_t file1_id, hid_t file2_id, const char *obj1_name,
*/
type_mem = fixtype( type1_id );
+ /* Get the size. */
+ size_mem = H5Tget_size( type_mem );
+
/*-------------------------------------------------------------------------
* read
@@ -1060,7 +1064,8 @@ int diff_dataset( hid_t file1_id, hid_t file2_id, const char *obj1_name,
else
tot_cnt = tot_cnt1;
- nfound = array_diff(buf1,buf2,tot_cnt,type1_id,rank1,dims1,options,obj1_name,obj2_name);
+ nfound = array_diff(buf1,buf2,tot_cnt,type1_id,rank1,dims1,options,
+ obj1_name,obj2_name,size_mem);
printf("%d differences found\n", nfound );
@@ -1105,7 +1110,8 @@ out:
*/
int array_diff( void *buf1, void *buf2, hsize_t tot_cnt, hid_t type_id, int rank,
- hsize_t *dims, options_t options, const char *obj1, const char *obj2 )
+ hsize_t *dims, options_t options, const char *obj1, const char *obj2,
+ size_t size_mem )
{
char *i1ptr1, *i1ptr2;
short *i2ptr1, *i2ptr2;
@@ -1116,6 +1122,7 @@ int array_diff( void *buf1, void *buf2, hsize_t tot_cnt, hid_t type_id, int rank
int nfound=0; /* number of differences found */
int ph=1; /* print header */
int i8diff;
+ int v=0;
/* accumulator and matrix position */
int acc[32];
@@ -1137,6 +1144,12 @@ int array_diff( void *buf1, void *buf2, hsize_t tot_cnt, hid_t type_id, int rank
/* Get the size. */
type_size = H5Tget_size( type_id );
+ if (v && size_mem!=type_size)
+ {
+ printf("memory type size is %d\n", size_mem);
+ printf("disk type size is %d\n", type_size);
+ }
+
switch(type_class)
{
@@ -1146,7 +1159,7 @@ int array_diff( void *buf1, void *buf2, hsize_t tot_cnt, hid_t type_id, int rank
case H5T_INTEGER:
- switch(type_size)
+ switch(size_mem)
{
/*-------------------------------------------------------------------------
@@ -1515,7 +1528,7 @@ int array_diff( void *buf1, void *buf2, hsize_t tot_cnt, hid_t type_id, int rank
case H5T_FLOAT:
- switch(type_size)
+ switch(size_mem)
{
/*-------------------------------------------------------------------------
@@ -1841,6 +1854,7 @@ hid_t fixtype(hid_t f_type)
{
hid_t m_type = -1;
size_t size;
+ int v=0;
size = H5Tget_size(f_type);
@@ -1857,19 +1871,19 @@ hid_t fixtype(hid_t f_type)
*/
if (size <= sizeof(char)) {
m_type = H5Tcopy(H5T_NATIVE_SCHAR);
- printf("using memory type H5T_NATIVE_SCHAR\n");
+ if (v) printf("using memory type H5T_NATIVE_SCHAR\n");
} else if (size <= sizeof(short)) {
m_type = H5Tcopy(H5T_NATIVE_SHORT);
- printf("using memory type H5T_NATIVE_SHORT\n");
+ if (v) printf("using memory type H5T_NATIVE_SHORT\n");
} else if (size <= sizeof(int)) {
m_type = H5Tcopy(H5T_NATIVE_INT);
- printf("using memory type H5T_NATIVE_INT\n");
+ if (v) printf("using memory type H5T_NATIVE_INT\n");
} else if (size <= sizeof(long)) {
m_type = H5Tcopy(H5T_NATIVE_LONG);
- printf("using memory type H5T_NATIVE_LONG\n");
+ if (v) printf("using memory type H5T_NATIVE_LONG\n");
} else {
m_type = H5Tcopy(H5T_NATIVE_LLONG);
- printf("using memory type H5T_NATIVE_LLONG\n");
+ if (v) printf("using memory type H5T_NATIVE_LLONG\n");
}
H5Tset_sign(m_type, H5Tget_sign(f_type));
@@ -1883,13 +1897,13 @@ hid_t fixtype(hid_t f_type)
*/
if (size <= sizeof(float)) {
m_type = H5Tcopy(H5T_NATIVE_FLOAT);
- printf("using memory type H5T_NATIVE_FLOAT\n");
+ if (v) printf("using memory type H5T_NATIVE_FLOAT\n");
} else if (size <= sizeof(double)) {
m_type = H5Tcopy(H5T_NATIVE_DOUBLE);
- printf("using memory type H5T_NATIVE_DOUBLE\n");
+ if (v) printf("using memory type H5T_NATIVE_DOUBLE\n");
} else {
m_type = H5Tcopy(H5T_NATIVE_LDOUBLE);
- printf("using memory type H5T_NATIVE_LDOUBLE\n");
+ if (v) printf("using memory type H5T_NATIVE_LDOUBLE\n");
}
break;
@@ -2006,3 +2020,5 @@ void print_datatype(hid_t type)
+
+