summaryrefslogtreecommitdiffstats
path: root/tools/h5diff
diff options
context:
space:
mode:
Diffstat (limited to 'tools/h5diff')
-rw-r--r--tools/h5diff/h5diff.c302
-rw-r--r--tools/h5diff/h5difftst.c357
-rwxr-xr-xtools/h5diff/testh5diff.sh211
3 files changed, 676 insertions, 194 deletions
diff --git a/tools/h5diff/h5diff.c b/tools/h5diff/h5diff.c
index ca05a59..4031b88 100644
--- a/tools/h5diff/h5diff.c
+++ b/tools/h5diff/h5diff.c
@@ -78,6 +78,14 @@ void leave();
+/* diff tst*/
+int do_test_files(void);
+int write_dataset( hid_t file_id, int rank, hsize_t *dims, const char *dset_name,
+ hid_t type_id, void *data );
+
+
+
+
/*-------------------------------------------------------------------------
* Function: usage
*
@@ -158,6 +166,9 @@ int main(int argc, const char *argv[])
const char *file2_name;
const char *obj1_name = NULL;
const char *obj2_name = NULL;
+
+ /*do_test_files();*/
+
/*-------------------------------------------------------------------------
* print the command line options
@@ -440,6 +451,10 @@ int check_f_input( const char *str )
unsigned i;
char c;
+ /* '0' values not allowed */
+ if ( strlen(str)==1 && str[0]=='0' )
+ return -1;
+
for ( i = 0; i < strlen(str); i++)
{
c = str[i];
@@ -486,8 +501,11 @@ void list( const char *filename, int nobjects, info_t *info )
case H5G_TYPE:
printf("%s %20s\n", info[i].name, "datatype" );
break;
+ case H5G_LINK:
+ printf("%s %20s\n", info[i].name, "link" );
+ break;
default:
- printf("non supported object\n" );
+ printf("%s %20s\n", info[i].name, "User defined object" );
break;
}
}
@@ -619,33 +637,26 @@ void diff( hid_t file1_id, const char *obj1_name, hid_t file2_id, const char *ob
switch ( type )
{
-
-/*-------------------------------------------------------------------------
- * H5G_GROUP
- *-------------------------------------------------------------------------
- */
-
- case H5G_GROUP:
- printf( "<%s> and <%s> are of type H5G_GROUP\n", obj1_name, obj2_name );
- break;
-
- /*-------------------------------------------------------------------------
- * H5G_DATASET
- *-------------------------------------------------------------------------
- */
-
+
case H5G_DATASET:
diff_dataset(file1_id,file2_id,obj1_name,obj2_name,options);
break;
-
- /*-------------------------------------------------------------------------
- * H5G_TYPE
- *-------------------------------------------------------------------------
- */
-
+
+ case H5G_GROUP:
+ printf( "<%s> and <%s> are of type H5G_GROUP\n", obj1_name, obj2_name );
+ break;
+
case H5G_TYPE:
printf( "<%s> and <%s> are of type H5G_TYPE\n", obj1_name, obj2_name );
break;
+
+ case H5G_LINK:
+ printf( "<%s> and <%s> are of type H5G_LINK\n", obj1_name, obj2_name );
+ break;
+
+ default:
+ printf( "<%s> and <%s> are user defined types\n", obj1_name, obj2_name );
+ break;
} /* switch */
@@ -1186,35 +1197,41 @@ int array_diff( void *buf1, void *buf2, hsize_t tot_cnt, hid_t type_id, int rank
/* percentage but not delta */
else if ( !options.d_ && options.p_ )
{
- if ( abs(1 - *i1ptr2 / *i1ptr1) > options.p_relative )
+ if (*i1ptr1!=0)
{
- if ( options.n_ && nfound>=options.n_number_count)
- return nfound;
- if ( options.r_==0 )
+ if ( abs(1 - *i1ptr2 / *i1ptr1) > options.p_relative )
{
- print_pos( &ph, i, acc, pos, rank, obj1, obj2 );
- printf(SPACES);
- printf(IFORMAT, *i1ptr1, *i1ptr2, abs(*i1ptr1 - *i1ptr2));
+ if ( options.n_ && nfound>=options.n_number_count)
+ return nfound;
+ if ( options.r_==0 )
+ {
+ print_pos( &ph, i, acc, pos, rank, obj1, obj2 );
+ printf(SPACES);
+ printf(IFORMAT, *i1ptr1, *i1ptr2, abs(*i1ptr1 - *i1ptr2));
+ }
+ nfound++;
}
- nfound++;
}
}
/* percentage and delta */
else if ( options.d_ && options.p_ )
{
- if ( abs(1 - *i1ptr2 / *i1ptr1) > options.p_relative &&
- abs(*i1ptr1 - *i1ptr2) > options.d_delta )
+ if (*i1ptr1!=0)
{
- if ( options.n_ && nfound>=options.n_number_count)
- return nfound;
- if ( options.r_==0 )
+ if ( abs(1 - *i1ptr2 / *i1ptr1) > options.p_relative &&
+ abs(*i1ptr1 - *i1ptr2) > options.d_delta )
{
- print_pos( &ph, i, acc, pos, rank, obj1, obj2 );
- printf(SPACES);
- printf(IFORMAT, *i1ptr1, *i1ptr2, abs(*i1ptr1 - *i1ptr2));
+ if ( options.n_ && nfound>=options.n_number_count)
+ return nfound;
+ if ( options.r_==0 )
+ {
+ print_pos( &ph, i, acc, pos, rank, obj1, obj2 );
+ printf(SPACES);
+ printf(IFORMAT, *i1ptr1, *i1ptr2, abs(*i1ptr1 - *i1ptr2));
+ }
+ nfound++;
}
- nfound++;
}
}
@@ -1268,35 +1285,41 @@ int array_diff( void *buf1, void *buf2, hsize_t tot_cnt, hid_t type_id, int rank
/* percentage but not delta */
else if ( !options.d_ && options.p_ )
{
- if ( abs(1 - *i2ptr2 / *i2ptr1) > options.p_relative )
+ if (*i2ptr1!=0)
{
- if ( options.n_ && nfound>=options.n_number_count)
- return nfound;
- if ( options.r_==0 )
+ if ( abs(1 - *i2ptr2 / *i2ptr1) > options.p_relative )
{
- print_pos( &ph, i, acc, pos, rank, obj1, obj2 );
- printf(SPACES);
- printf(IFORMAT, *i2ptr1, *i2ptr2, abs(*i2ptr1 - *i2ptr2));
- }
- nfound++;
+ if ( options.n_ && nfound>=options.n_number_count)
+ return nfound;
+ if ( options.r_==0 )
+ {
+ print_pos( &ph, i, acc, pos, rank, obj1, obj2 );
+ printf(SPACES);
+ printf(IFORMAT, *i2ptr1, *i2ptr2, abs(*i2ptr1 - *i2ptr2));
+ }
+ nfound++;
}
+ }
}
/* percentage and delta */
else if ( options.d_ && options.p_ )
{
- if ( abs(1 - *i2ptr2 / *i2ptr1) > options.p_relative &&
- abs(*i2ptr1 - *i2ptr2) > options.d_delta )
+ if (*i2ptr1!=0)
{
- if ( options.n_ && nfound>=options.n_number_count)
- return nfound;
- if ( options.r_==0 )
+ if ( abs(1 - *i2ptr2 / *i2ptr1) > options.p_relative &&
+ abs(*i2ptr1 - *i2ptr2) > options.d_delta )
{
- print_pos( &ph, i, acc, pos, rank, obj1, obj2 );
- printf(SPACES);
- printf(IFORMAT, *i2ptr1, *i2ptr2, abs(*i2ptr1 - *i2ptr2));
+ if ( options.n_ && nfound>=options.n_number_count)
+ return nfound;
+ if ( options.r_==0 )
+ {
+ print_pos( &ph, i, acc, pos, rank, obj1, obj2 );
+ printf(SPACES);
+ printf(IFORMAT, *i2ptr1, *i2ptr2, abs(*i2ptr1 - *i2ptr2));
+ }
+ nfound++;
}
- nfound++;
}
}
@@ -1351,35 +1374,41 @@ int array_diff( void *buf1, void *buf2, hsize_t tot_cnt, hid_t type_id, int rank
/* percentage but not delta */
else if ( !options.d_ && options.p_ )
{
- if ( abs(1 - *i4ptr2 / *i4ptr1) > options.p_relative )
+ if (*i4ptr1!=0)
{
- if ( options.n_ && nfound>=options.n_number_count)
- return nfound;
- if ( options.r_==0 )
+ if ( abs(1 - *i4ptr2 / *i4ptr1) > options.p_relative )
{
- print_pos( &ph, i, acc, pos, rank, obj1, obj2 );
- printf(SPACES);
- printf(IFORMAT, *i4ptr1, *i4ptr2, abs(*i4ptr1 - *i4ptr2));
+ if ( options.n_ && nfound>=options.n_number_count)
+ return nfound;
+ if ( options.r_==0 )
+ {
+ print_pos( &ph, i, acc, pos, rank, obj1, obj2 );
+ printf(SPACES);
+ printf(IFORMAT, *i4ptr1, *i4ptr2, abs(*i4ptr1 - *i4ptr2));
+ }
+ nfound++;
}
- nfound++;
}
}
/* percentage and delta */
else if ( options.d_ && options.p_ )
{
- if ( abs(1 - *i4ptr2 / *i4ptr1) > options.p_relative &&
- abs(*i4ptr1 - *i4ptr2) > options.d_delta )
+ if (*i4ptr1!=0)
{
- if ( options.n_ && nfound>=options.n_number_count)
- return nfound;
- if ( options.r_==0 )
+ if ( abs(1 - *i4ptr2 / *i4ptr1) > options.p_relative &&
+ abs(*i4ptr1 - *i4ptr2) > options.d_delta )
{
- print_pos( &ph, i, acc, pos, rank, obj1, obj2 );
- printf(SPACES);
- printf(IFORMAT, *i4ptr1, *i4ptr2, abs(*i4ptr1 - *i4ptr2));
+ if ( options.n_ && nfound>=options.n_number_count)
+ return nfound;
+ if ( options.r_==0 )
+ {
+ print_pos( &ph, i, acc, pos, rank, obj1, obj2 );
+ printf(SPACES);
+ printf(IFORMAT, *i4ptr1, *i4ptr2, abs(*i4ptr1 - *i4ptr2));
+ }
+ nfound++;
}
- nfound++;
}
}
@@ -1435,35 +1464,41 @@ int array_diff( void *buf1, void *buf2, hsize_t tot_cnt, hid_t type_id, int rank
/* percentage but not delta */
else if ( !options.d_ && options.p_ )
{
- if ( abs((int)(1 - *i8ptr2 / *i8ptr1)) > options.p_relative )
+ if (*i8ptr1!=0)
{
- if ( options.n_ && nfound>=options.n_number_count)
- return nfound;
- if ( options.r_==0 )
+ if ( abs((int)(1 - *i8ptr2 / *i8ptr1)) > options.p_relative )
{
- print_pos( &ph, i, acc, pos, rank, obj1, obj2 );
- printf(SPACES);
- printf(LIFORMAT, *i8ptr1, *i8ptr2, i8diff);
+ if ( options.n_ && nfound>=options.n_number_count)
+ return nfound;
+ if ( options.r_==0 )
+ {
+ print_pos( &ph, i, acc, pos, rank, obj1, obj2 );
+ printf(SPACES);
+ printf(LIFORMAT, *i8ptr1, *i8ptr2, i8diff);
+ }
+ nfound++;
}
- nfound++;
}
}
/* percentage and delta */
else if ( options.d_ && options.p_ )
{
- if ( abs((int)(1 - *i8ptr2 / *i8ptr1)) > options.p_relative &&
- abs(i8diff) > options.d_delta )
+ if (*i8ptr1!=0)
{
- if ( options.n_ && nfound>=options.n_number_count)
- return nfound;
- if ( options.r_==0 )
+ if ( abs((int)(1 - *i8ptr2 / *i8ptr1)) > options.p_relative &&
+ abs(i8diff) > options.d_delta )
{
- print_pos( &ph, i, acc, pos, rank, obj1, obj2 );
- printf(SPACES);
- printf(LIFORMAT, *i8ptr1, *i8ptr2, i8diff);
+ if ( options.n_ && nfound>=options.n_number_count)
+ return nfound;
+ if ( options.r_==0 )
+ {
+ print_pos( &ph, i, acc, pos, rank, obj1, obj2 );
+ printf(SPACES);
+ printf(LIFORMAT, *i8ptr1, *i8ptr2, i8diff);
+ }
+ nfound++;
}
- nfound++;
}
}
@@ -1530,35 +1565,41 @@ int array_diff( void *buf1, void *buf2, hsize_t tot_cnt, hid_t type_id, int rank
/* percentage but not delta */
else if ( !options.d_ && options.p_ )
{
- if ( fabs(1 - *fptr2 / *fptr1) > options.p_relative )
+ if (*fptr1!=0)
{
- if ( options.n_ && nfound>=options.n_number_count)
- return nfound;
- if ( options.r_==0 )
+ if ( fabs(1 - *fptr2 / *fptr1) > options.p_relative )
{
- print_pos( &ph, i, acc, pos, rank, obj1, obj2 );
- printf(SPACES);
- printf(FFORMAT, *fptr1, *fptr2, fabs(*fptr1 - *fptr2));
- }
- nfound++;
+ if ( options.n_ && nfound>=options.n_number_count)
+ return nfound;
+ if ( options.r_==0 )
+ {
+ print_pos( &ph, i, acc, pos, rank, obj1, obj2 );
+ printf(SPACES);
+ printf(FFORMAT, *fptr1, *fptr2, fabs(*fptr1 - *fptr2));
+ }
+ nfound++;
}
+ }
}
/* percentage and delta */
else if ( options.d_ && options.p_ )
{
- if ( fabs(1 - *fptr2 / *fptr1) > options.p_relative &&
- fabs(*fptr1 - *fptr2) > options.d_delta )
+ if (*fptr1!=0)
{
- if ( options.n_ && nfound>=options.n_number_count)
- return nfound;
- if ( options.r_==0 )
+ if ( fabs(1 - *fptr2 / *fptr1) > options.p_relative &&
+ fabs(*fptr1 - *fptr2) > options.d_delta )
{
- print_pos( &ph, i, acc, pos, rank, obj1, obj2 );
- printf(SPACES);
- printf(FFORMAT, *fptr1, *fptr2, fabs(*fptr1 - *fptr2));
+ if ( options.n_ && nfound>=options.n_number_count)
+ return nfound;
+ if ( options.r_==0 )
+ {
+ print_pos( &ph, i, acc, pos, rank, obj1, obj2 );
+ printf(SPACES);
+ printf(FFORMAT, *fptr1, *fptr2, fabs(*fptr1 - *fptr2));
+ }
+ nfound++;
}
- nfound++;
}
}
@@ -1611,35 +1652,41 @@ int array_diff( void *buf1, void *buf2, hsize_t tot_cnt, hid_t type_id, int rank
/* percentage but not delta */
else if ( !options.d_ && options.p_ )
{
- if ( fabs(1 - *dptr2 / *dptr1) > options.p_relative )
+ if (*dptr1!=0)
{
- if ( options.n_ && nfound>=options.n_number_count)
- return nfound;
- if ( options.r_==0 )
+ if ( fabs(1 - *dptr2 / *dptr1) > options.p_relative )
{
- print_pos( &ph, i, acc, pos, rank, obj1, obj2 );
- printf(SPACES);
- printf(FFORMAT, *dptr1, *dptr2, fabs(*dptr1 - *dptr2));
+ if ( options.n_ && nfound>=options.n_number_count)
+ return nfound;
+ if ( options.r_==0 )
+ {
+ print_pos( &ph, i, acc, pos, rank, obj1, obj2 );
+ printf(SPACES);
+ printf(FFORMAT, *dptr1, *dptr2, fabs(*dptr1 - *dptr2));
+ }
+ nfound++;
}
- nfound++;
}
}
/* percentage and delta */
else if ( options.d_ && options.p_ )
{
- if ( fabs(1 - *dptr2 / *dptr1) > options.p_relative &&
- fabs(*dptr1 - *dptr2) > options.d_delta )
+ if (*dptr1!=0)
{
- if ( options.n_ && nfound>=options.n_number_count)
- return nfound;
- if ( options.r_==0 )
+ if ( fabs(1 - *dptr2 / *dptr1) > options.p_relative &&
+ fabs(*dptr1 - *dptr2) > options.d_delta )
{
- print_pos( &ph, i, acc, pos, rank, obj1, obj2 );
- printf(SPACES);
- printf(FFORMAT, *dptr1, *dptr2, fabs(*dptr1 - *dptr2));
+ if ( options.n_ && nfound>=options.n_number_count)
+ return nfound;
+ if ( options.r_==0 )
+ {
+ print_pos( &ph, i, acc, pos, rank, obj1, obj2 );
+ printf(SPACES);
+ printf(FFORMAT, *dptr1, *dptr2, fabs(*dptr1 - *dptr2));
+ }
+ nfound++;
}
- nfound++;
}
}
@@ -1973,3 +2020,6 @@ void print_datatype(hid_t type)
}/*switch*/
}
+
+
+
diff --git a/tools/h5diff/h5difftst.c b/tools/h5diff/h5difftst.c
index bbb5a1c..912ec33 100644
--- a/tools/h5diff/h5difftst.c
+++ b/tools/h5diff/h5difftst.c
@@ -18,7 +18,6 @@
#include "hdf5.h"
-
/* diff tst*/
int do_test_files(void);
int write_dataset( hid_t file_id, int rank, hsize_t *dims, const char *dset_name,
@@ -35,39 +34,230 @@ int main(int argc, const char *argv[])
-
-
/*-------------------------------------------------------------------------
* these command line options are tested in ./testh5diff.sh
*-------------------------------------------------------------------------
*/
/*
-# test 1.1
+
+##############################################################################
+# tests 0., Check for individual options
+##############################################################################
+
+# test 0.1: Check if the command line number of arguments is less than 3
+h5diff_test1.h5
+
+# test 0.2: Check for invalid options
+-x h5diff_test1.h5 h5diff_test2.h5
+
+# test 0.3.1: Check for -h option
+-h h5diff_test1.h5 h5diff_test2.h5
+
+# test 0.3.2: Check for -l option
+-l h5diff_test1.h5 h5diff_test2.h5
+
+# test 0.3.3: Check for -r option
+-r h5diff_test1.h5 h5diff_test2.h5
+
+##############################################################################
+# Test -d option
+##############################################################################
+
+
+# test 0.4.1: no value
+-d h5diff_test1.h5 h5diff_test2.h5
+
+# test 0.4.2: negative value
+-d -4 h5diff_test1.h5 h5diff_test2.h5
+
+# test 0.4.3: zero
+-d 0 h5diff_test1.h5 h5diff_test2.h5
+
+# test 0.4.4: non number
+-d u h5diff_test1.h5 h5diff_test2.h5
+
+# test 0.4.5: hexadecimal
+-d 0x1 h5diff_test1.h5 h5diff_test2.h5
+
+# test 0.4.6: string which is a number
+-d "1" h5diff_test1.h5 h5diff_test2.h5
+
+# test 0.4.7: repeated value
+-d 1 -d 2 h5diff_test1.h5 h5diff_test2.h5
+
+# test 0.4.8: number larger than biggest difference
+dset2.1a dset2.1b -d 7 h5diff_test1.h5 h5diff_test2.h5
+
+# test 0.4.9: number smaller than smallest difference
+dset2.1a dset2.1b -d 1 h5diff_test1.h5 h5diff_test2.h5
+
+# test 0.4.10: non-integer
+dset2.1a dset2.1b -d 2.3 h5diff_test1.h5 h5diff_test2.h5
+
+
+##############################################################################
+# Test -p option
+##############################################################################
+
+
+# test 0.5.1: no value
+-p h5diff_test1.h5 h5diff_test2.h5
+
+# test 0.5.2: negative value
+-p -4 h5diff_test1.h5 h5diff_test2.h5
+
+# test 0.5.3: zero
+-p 0 h5diff_test1.h5 h5diff_test2.h5
+
+# test 0.5.4: non number
+-p u h5diff_test1.h5 h5diff_test2.h5
+
+# test 0.5.5: hexadecimal
+-p 0x1 h5diff_test1.h5 h5diff_test2.h5
+
+# test 0.5.6: string
+-p "1" h5diff_test1.h5 h5diff_test2.h5
+
+# test 0.5.7: repeated value
+-p 1 -p 2 h5diff_test1.h5 h5diff_test2.h5
+
+# test 0.5.8: number larger than biggest difference
+dset2.1a dset2.1b -p 7 h5diff_test1.h5 h5diff_test2.h5
+
+# test 0.5.9: number smaller than smallest difference
+dset2.1a dset2.1b -p 1 h5diff_test1.h5 h5diff_test2.h5
+
+# test 0.5.10: non-integer
+dset2.1a dset2.1b -p 2.3 h5diff_test1.h5 h5diff_test2.h5
+
+##############################################################################
+# Test -n option
+##############################################################################
+
+
+# test 0.6.1: no value
+-n h5diff_test1.h5 h5diff_test2.h5
+
+# test 0.6.2: negative value
+-n -4 h5diff_test1.h5 h5diff_test2.h5
+
+# test 0.6.3: zero
+-n 0 h5diff_test1.h5 h5diff_test2.h5
+
+# test 0.6.4: non number
+-n u h5diff_test1.h5 h5diff_test2.h5
+
+# test 0.6.5: hexadecimal
+-n 0x1 h5diff_test1.h5 h5diff_test2.h5
+
+# test 0.6.6: string
+-n "1" h5diff_test1.h5 h5diff_test2.h5
+
+# test 0.6.7: repeated value
+-n 1 -n 2 h5diff_test1.h5 h5diff_test2.h5
+
+# test 0.6.8: number larger than biggest difference
+dset2.1a dset2.1b -n 7 h5diff_test1.h5 h5diff_test2.h5
+
+# test 0.6.9: number smaller than smallest difference
+dset2.1a dset2.1b -n 1 h5diff_test1.h5 h5diff_test2.h5
+
+# test 0.6.10: non-integer
+dset2.1a dset2.1b -n 2.3 h5diff_test1.h5 h5diff_test2.h5
+
+##############################################################################
+# Test valid files
+##############################################################################
+
+# test 0.7: Check if the file names supplied are valid files
+h5diff_test1.h6 h5diff_test2.h6
+
+
+##############################################################################
+# Check for not comparable issues
+##############################################################################
+
+##############################################################################
+# Different types
+##############################################################################
+
+# test 1.1.1: Compare a dataset with a group
dset1.1 g1.1 h5diff_test1.h5 h5diff_test2.h5
+
+# test 1.1.2 Dataset vs Link
+dset1.1 soft h5diff_test1.h5 h5diff_test1.h5
+
+# test 1.1.3 Dataset vs Named type
+dset1.1 compound h5diff_test1.h5 h5diff_test1.h5
+
+##############################################################################
+# not comparable types
+##############################################################################
+
+# test 1.2.1: Group vs Group
g1.1 g1.1 h5diff_test1.h5 h5diff_test2.h5
-# test 1.2
+
+# test 1.2.2: Type vs Type
compound h5diff_test1.h5 h5diff_test2.h5
-enum h5diff_test1.h5 h5diff_test2.h5
-# test 1.3
-dset1.3 h5diff_test1.h5 h5diff_test2.h5
-# test 1.4
+
+# test 1.2.3: Link vs Link
+soft soft h5diff_test1.h5 h5diff_test1.h5
+
+
+##############################################################################
+# Class issues
+##############################################################################
+
+# test 1.3.1: H5T_STRING
+dset1.3.1 h5diff_test1.h5 h5diff_test1.h5
+
+# test 1.3.2: H5T_BITFIELD
+dset1.3.2 h5diff_test1.h5 h5diff_test1.h5
+
+# test 1.3.3: H5T_OPAQUE
+dset1.3.3 h5diff_test1.h5 h5diff_test1.h5
+
+# test 1.3.4: H5T_COMPOUND
+dset1.3.4 h5diff_test1.h5 h5diff_test1.h5
+
+# test 1.3.5: H5T_REFERENCE
+dset1.3.5 h5diff_test1.h5 h5diff_test1.h5
+
+# test 1.3.6: H5T_ENUM
+dset1.3.6 h5diff_test1.h5 h5diff_test1.h5
+
+# test 1.3.7: H5T_VLEN
+dset1.3.7 h5diff_test1.h5 h5diff_test1.h5
+
+# test 1.3.8: H5T_ARRAY
+dset1.3.8 h5diff_test1.h5 h5diff_test1.h5
+
+
+# test 1.4: Compare integer with float
dset1.1 dset1.4 h5diff_test1.h5 h5diff_test2.h5
-# test 1.5
+
+# test 1.5 : Check for the same rank, for datasets
dset1.1 dset1.5 h5diff_test1.h5 h5diff_test2.h5
-# test 1.6
+
+# test 1.6: Check for the same current dimensions. Only compare if they are the same.
dset1.1 dset1.6 h5diff_test1.h5 h5diff_test2.h5
-# test 1.7
+# test 1.7: Check for the same maximum dimensions. Give a warning if they are different.
dset1.7 dset1.7 h5diff_test1.h5 h5diff_test2.h5
-# test 1.8
+
+# test 1.8: Check for the same storage datatype. Give a warning if they are different.
dset1.8 dset1.8 h5diff_test1.h5 h5diff_test2.h5
-# test 1.9
-dset1.9 dset1.9 h5diff_test1.h5 h5diff_test2.h5
+
#######################################################
# Different datatype sizes and different mix of options
#######################################################
+
+##############################################################################
+# H5T_INTEGER size 1 
+##############################################################################
+
# test 2.1.0
dset2.1a dset2.1b h5diff_test1.h5 h5diff_test2.h5
# test 2.1.1
@@ -76,7 +266,11 @@ dset2.1a dset2.1b -n 2 h5diff_test1.h5 h5diff_test2.h5
dset2.1a dset2.1b -d 3 h5diff_test1.h5 h5diff_test2.h5
# test 2.1.3
dset2.1a dset2.1b -p 3 h5diff_test1.h5 h5diff_test2.h5
-#######################################################
+
+##############################################################################
+# H5T_INTEGER size 2
+##############################################################################
+
# test 2.2.0
dset2.2a dset2.2b h5diff_test1.h5 h5diff_test2.h5
# test 2.2.1
@@ -85,7 +279,11 @@ dset2.2a dset2.2b -n 2 h5diff_test1.h5 h5diff_test2.h5
dset2.2a dset2.2b -d 3 h5diff_test1.h5 h5diff_test2.h5
# test 2.2.3
dset2.2a dset2.2b -p 3 h5diff_test1.h5 h5diff_test2.h5
-#######################################################
+
+##############################################################################
+# H5T_INTEGER size 4
+##############################################################################
+
# test 2.3.0
dset2.3a dset2.3b h5diff_test1.h5 h5diff_test2.h5
# test 2.3.1
@@ -94,7 +292,11 @@ dset2.3a dset2.3b -n 2 h5diff_test1.h5 h5diff_test2.h5
dset2.3a dset2.3b -d 3 h5diff_test1.h5 h5diff_test2.h5
# test 2.3.3
dset2.3a dset2.3b -p 3 h5diff_test1.h5 h5diff_test2.h5
-#######################################################
+
+##############################################################################
+# H5T_INTEGER size 8
+##############################################################################
+
# test 2.4.0
dset2.4a dset2.4b h5diff_test1.h5 h5diff_test2.h5
# test 2.4.1
@@ -103,7 +305,11 @@ dset2.4a dset2.4b -n 2 h5diff_test1.h5 h5diff_test2.h5
dset2.4a dset2.4b -d 3 h5diff_test1.h5 h5diff_test2.h5
# test 2.4.3
dset2.4a dset2.4b -p 3 h5diff_test1.h5 h5diff_test2.h5
-#######################################################
+
+##############################################################################
+# H5T_FLOAT size 4
+##############################################################################
+
# test 2.5.0
dset2.5a dset2.5b h5diff_test1.h5 h5diff_test2.h5
# test 2.5.1
@@ -112,7 +318,11 @@ dset2.5a dset2.5b -n 2 h5diff_test1.h5 h5diff_test2.h5
dset2.5a dset2.5b -d 3 h5diff_test1.h5 h5diff_test2.h5
# test 2.5.3
dset2.5a dset2.5b -p 3 h5diff_test1.h5 h5diff_test2.h5
-#######################################################
+
+##############################################################################
+# H5T_FLOAT size 8
+##############################################################################
+
# test 2.6.0
dset2.6a dset2.6b h5diff_test1.h5 h5diff_test2.h5
# test 2.6.1
@@ -163,6 +373,7 @@ int do_test_files(void)
hsize_t dims0 [1] = { 1 };
hsize_t dims2 [2] = { 3,2 };
char data1_3[] = {"A string"};
+ unsigned char data1_3_2[7] = {1,2,3,4,5,6,7};
float data1_4[7] = {1,1,3,4,5,6,7};
/* Compound datatype */
@@ -268,7 +479,16 @@ int do_test_files(void)
H5Tclose(type2_id);
/*-------------------------------------------------------------------------
- * Test 1.3
+ * Test 1.2.3
+ * Links
+ *-------------------------------------------------------------------------
+ */
+
+ /* Create a symbolic link */
+ status = H5Glink(file1_id, H5G_LINK_SOFT, "dset1.1", "soft");
+
+/*-------------------------------------------------------------------------
+ * Tests 1.3.
* Check for non supported classes. Supported classes are H5T_INTEGER and H5T_FLOAT
* Non supported classes are
* H5T_TIME, H5T_STRING, H5T_BITFIELD, H5T_OPAQUE, H5T_COMPOUND, H5T_REFERENCE,
@@ -277,7 +497,8 @@ int do_test_files(void)
*/
/*-------------------------------------------------------------------------
- * Write two string datatypes
+ * Test 1.3.1
+ * H5T_STRING
*-------------------------------------------------------------------------
*/
@@ -289,26 +510,95 @@ int do_test_files(void)
status = H5Tset_size (type_id, strlen(data1_3));
/* Create a dataset "dset1.3" on file 1 */
- dataset_id = H5Dcreate(file1_id,"dset1.3",type_id,space_id,H5P_DEFAULT);
+ dataset_id = H5Dcreate(file1_id,"dset1.3.1",type_id,space_id,H5P_DEFAULT);
/* Write the data */
status = H5Dwrite(dataset_id,type_id,H5S_ALL,H5S_ALL,H5P_DEFAULT,data1_3);
/* Close */
status = H5Dclose(dataset_id);
+ status = H5Sclose(space_id);
+ status = H5Tclose(type_id);
- /* Create a dataset "dset1.3" on file 2 */
- dataset_id = H5Dcreate(file2_id,"dset1.3",type_id,space_id,H5P_DEFAULT);
-
- /* Write the data */
- status = H5Dwrite(dataset_id,type_id,H5S_ALL,H5S_ALL,H5P_DEFAULT,data1_3);
+/*-------------------------------------------------------------------------
+ * Test 1.3.2
+ * H5T_BITFIELD
+ *-------------------------------------------------------------------------
+ */
- /* Close */
- status = H5Dclose(dataset_id);
- status = H5Sclose(space_id);
+ type_id = H5Tcopy(H5T_STD_B8LE);
+ write_dataset(file1_id,1,dims1,"dset1.3.2",type_id,data1_3_2);
+ status = H5Tclose(type_id);
+
+
+/*-------------------------------------------------------------------------
+ * Test 1.3.3
+ * H5T_OPAQUE
+ *-------------------------------------------------------------------------
+ */
+
+ type_id = H5Tcreate(H5T_OPAQUE, 1);
+ status = H5Tset_tag(type_id, "1-byte opaque type"); /* must set this */
+ write_dataset(file1_id,1,dims1,"dset1.3.3",type_id,data1_3_2);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * Test 1.3.4
+ * H5T_COMPOUND
+ *-------------------------------------------------------------------------
+ */
+
+ type_id = H5Tcreate (H5T_COMPOUND, sizeof(s_t));
+ H5Tinsert(type_id, "a", HOFFSET(s_t, a), H5T_NATIVE_INT);
+ H5Tinsert(type_id, "b", HOFFSET(s_t, b), H5T_NATIVE_FLOAT);
+ write_dataset(file1_id,1,dims1,"dset1.3.4",type_id,0);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * Test 1.3.5
+ * H5T_REFERENCE
+ *-------------------------------------------------------------------------
+ */
+
+ write_dataset(file1_id,1,dims1,"dset1.3.5",H5T_STD_REF_OBJ,0);
+
+
+/*-------------------------------------------------------------------------
+ * Test 1.3.6
+ * H5T_ENUM
+ *-------------------------------------------------------------------------
+ */
+
+ type_id = H5Tcreate(H5T_ENUM, sizeof(e_t));
+ H5Tenum_insert(type_id, "RED", (val = 0, &val));
+ H5Tenum_insert(type_id, "GREEN", (val = 1, &val));
+ write_dataset(file1_id,1,dims1,"dset1.3.6",type_id,0);
status = H5Tclose(type_id);
/*-------------------------------------------------------------------------
+ * Test 1.3.7
+ * H5T_VLEN
+ *-------------------------------------------------------------------------
+ */
+
+ type_id = H5Tvlen_create(H5T_NATIVE_INT);
+ write_dataset(file1_id,1,dims1,"dset1.3.7",type_id,0);
+ status = H5Tclose(type_id);
+
+
+/*-------------------------------------------------------------------------
+ * Test 1.3.8
+ * H5T_ARRAY
+ *-------------------------------------------------------------------------
+ */
+
+ type_id = H5Tarray_create(H5T_NATIVE_INT,1,dims1,NULL);
+ write_dataset(file1_id,1,dims1,"dset1.3.8",type_id,0);
+ status = H5Tclose(type_id);
+
+
+
+/*-------------------------------------------------------------------------
* Test 1.4
* Datasets are not the same class type
* Write a float dataset and compare with integer "dset1.1"
@@ -513,3 +803,8 @@ int write_dataset( hid_t file_id, int rank, hsize_t *dims, const char *dset_name
+
+
+
+
+
diff --git a/tools/h5diff/testh5diff.sh b/tools/h5diff/testh5diff.sh
index ceaaddb..8ce28d3 100755
--- a/tools/h5diff/testh5diff.sh
+++ b/tools/h5diff/testh5diff.sh
@@ -79,9 +79,9 @@ TOOLTEST() {
fi
# Clean up output file
- if test -z "$HDF5_NOCLEANUP"; then
- rm -f $actual $actual_err
- fi
+ if test -z "$HDF5_NOCLEANUP"; then
+ rm -f $actual $actual_err
+ fi
}
##############################################################################
@@ -91,7 +91,7 @@ TOOLTEST() {
##############################################################################
##############################################################################
-# tests 0., check for bad input values
+# tests 0., Check for individual options
##############################################################################
# test 0.1: Check if the command line number of arguments is less than 3
@@ -100,66 +100,203 @@ TOOLTEST h5diff_01.txt h5diff_test1.h5
# test 0.2: Check for invalid options
TOOLTEST h5diff_02.txt -x h5diff_test1.h5 h5diff_test2.h5
-# test 0.3: Check for -h option
-TOOLTEST h5diff_03.txt -h h5diff_test1.h5 h5diff_test2.h5
+# test 0.3.1: Check for -h option
+TOOLTEST h5diff_031.txt -h h5diff_test1.h5 h5diff_test2.h5
-# test 0.4: Check for invalid -d options
-TOOLTEST h5diff_04.txt -d h5diff_test1.h5 h5diff_test2.h5
+# test 0.3.2: Check for -l option
+TOOLTEST h5diff_032.txt -l h5diff_test1.h5 h5diff_test2.h5
-# test 0.5: Check for invalid -d options
-TOOLTEST h5diff_05.txt -d -4 h5diff_test1.h5 h5diff_test2.h5
+# test 0.3.3: Check for -r option
+TOOLTEST h5diff_033.txt -r h5diff_test1.h5 h5diff_test2.h5
+
+##############################################################################
+# Test -d option
+##############################################################################
+
+
+# test 0.4.1: no value
+TOOLTEST h5diff_041.txt -d h5diff_test1.h5 h5diff_test2.h5
+
+# test 0.4.2: negative value
+TOOLTEST h5diff_042.txt -d -4 h5diff_test1.h5 h5diff_test2.h5
+
+# test 0.4.3: zero
+TOOLTEST h5diff_043.txt -d 0 h5diff_test1.h5 h5diff_test2.h5
+
+# test 0.4.4: non number
+TOOLTEST h5diff_044.txt -d u h5diff_test1.h5 h5diff_test2.h5
+
+# test 0.4.5: hexadecimal
+TOOLTEST h5diff_045.txt -d 0x1 h5diff_test1.h5 h5diff_test2.h5
+
+# test 0.4.6: string
+TOOLTEST h5diff_046.txt -d "1" h5diff_test1.h5 h5diff_test2.h5
+
+# test 0.4.7: repeated value
+TOOLTEST h5diff_047.txt -d 1 -d 2 h5diff_test1.h5 h5diff_test2.h5
+
+# test 0.4.8: number larger than biggest difference
+TOOLTEST h5diff_048.txt dset2.1a dset2.1b -d 7 h5diff_test1.h5 h5diff_test2.h5
+
+# test 0.4.9: number smaller than smallest difference
+TOOLTEST h5diff_049.txt dset2.1a dset2.1b -d 1 h5diff_test1.h5 h5diff_test2.h5
+
+# test 0.4.10: non-integer
+TOOLTEST h5diff_0410.txt dset2.1a dset2.1b -d 2.3 h5diff_test1.h5 h5diff_test2.h5
+
+##############################################################################
+# Test -p option
+##############################################################################
+
+
+# test 0.5.1: no value
+TOOLTEST h5diff_051.txt -p h5diff_test1.h5 h5diff_test2.h5
+
+# test 0.5.2: negative value
+TOOLTEST h5diff_052.txt -p -4 h5diff_test1.h5 h5diff_test2.h5
+
+# test 0.5.3: zero
+TOOLTEST h5diff_053.txt -p 0 h5diff_test1.h5 h5diff_test2.h5
+
+# test 0.5.4: non number
+TOOLTEST h5diff_054.txt -p u h5diff_test1.h5 h5diff_test2.h5
+
+# test 0.5.5: hexadecimal
+TOOLTEST h5diff_055.txt -p 0x1 h5diff_test1.h5 h5diff_test2.h5
+
+# test 0.5.6: string
+TOOLTEST h5diff_056.txt -p "1" h5diff_test1.h5 h5diff_test2.h5
+
+# test 0.5.7: repeated value
+TOOLTEST h5diff_057.txt -p 1 -p 2 h5diff_test1.h5 h5diff_test2.h5
+
+# test 0.5.8: number larger than biggest difference
+TOOLTEST h5diff_058.txt dset2.1a dset2.1b -p 7 h5diff_test1.h5 h5diff_test2.h5
+
+# test 0.5.9: number smaller than smallest difference
+TOOLTEST h5diff_059.txt dset2.1a dset2.1b -p 1 h5diff_test1.h5 h5diff_test2.h5
+
+# test 0.5.10: non-integer
+TOOLTEST h5diff_0510.txt dset2.1a dset2.1b -p 2.3 h5diff_test1.h5 h5diff_test2.h5
+
+##############################################################################
+# Test -n option
+##############################################################################
-# test 0.6: Check for invalid -p options
-TOOLTEST h5diff_06.txt -p h5diff_test1.h5 h5diff_test2.h5
-# test 0.7: Check for invalid -p options
-TOOLTEST h5diff_07.txt -p -4 h5diff_test1.h5 h5diff_test2.h5
+# test 0.6.1: no value
+TOOLTEST h5diff_061.txt -n h5diff_test1.h5 h5diff_test2.h5
-# test 0.8: Check for invalid -n options
-TOOLTEST h5diff_08.txt -n h5diff_test1.h5 h5diff_test2.h5
+# test 0.6.2: negative value
+TOOLTEST h5diff_062.txt -n -4 h5diff_test1.h5 h5diff_test2.h5
-# test 0.9: Check for invalid -n options
-TOOLTEST h5diff_09.txt -n 0 h5diff_test1.h5 h5diff_test2.h5
+# test 0.6.3: zero
+TOOLTEST h5diff_063.txt -n 0 h5diff_test1.h5 h5diff_test2.h5
-# test 0.10: Check if the file names supplied are valid files
-TOOLTEST h5diff_010.txt h5diff_test1.h6 h5diff_test2.h6
+# test 0.6.4: non number
+TOOLTEST h5diff_064.txt -n u h5diff_test1.h5 h5diff_test2.h5
+# test 0.6.5: hexadecimal
+TOOLTEST h5diff_065.txt -n 0x1 h5diff_test1.h5 h5diff_test2.h5
+
+# test 0.6.6: string
+TOOLTEST h5diff_066.txt -n "1" h5diff_test1.h5 h5diff_test2.h5
+
+# test 0.6.7: repeated value
+TOOLTEST h5diff_067.txt -n 1 -n 2 h5diff_test1.h5 h5diff_test2.h5
+
+# test 0.6.8: number larger than biggest difference
+TOOLTEST h5diff_068.txt dset2.1a dset2.1b -n 7 h5diff_test1.h5 h5diff_test2.h5
+
+# test 0.6.9: number smaller than smallest difference
+TOOLTEST h5diff_069.txt dset2.1a dset2.1b -n 1 h5diff_test1.h5 h5diff_test2.h5
+
+# test 0.6.10: non-integer
+TOOLTEST h5diff_0610.txt dset2.1a dset2.1b -n 2.3 h5diff_test1.h5 h5diff_test2.h5
+
+##############################################################################
+# Test valid files
+##############################################################################
+
+# test 0.7: Check if the file names supplied are valid files
+TOOLTEST h5diff_07.txt h5diff_test1.h6 h5diff_test2.h6
+
+
+##############################################################################
+# Check for not comparable issues
##############################################################################
-# tests 1., Check for not comparable issues
+
+##############################################################################
+# Different types
##############################################################################
-# test 1.1.1: Objects are not the same type (e.g try to compare a group with a dataset)
+# test 1.1.1: Compare a dataset with a group
TOOLTEST h5diff_111.txt dset1.1 g1.1 h5diff_test1.h5 h5diff_test2.h5
-# test 1.1.2: Objects are not the same type (e.g try to compare a group with a dataset)
-TOOLTEST h5diff_112.txt g1.1 g1.1 h5diff_test1.h5 h5diff_test2.h5
+# test 1.1.2 Dataset vs Link
+TOOLTEST h5diff_112.txt dset1.1 soft h5diff_test1.h5 h5diff_test1.h5
+
+# test 1.1.3 Dataset vs Named type
+TOOLTEST h5diff_113.txt dset1.1 compound h5diff_test1.h5 h5diff_test1.h5
+
+##############################################################################
+# not comparable types
+##############################################################################
+
+# test 1.2.1: Group vs Group
+TOOLTEST h5diff_121.txt g1.1 g1.1 h5diff_test1.h5 h5diff_test2.h5
+
+# test 1.2.2: Type vs Type
+TOOLTEST h5diff_122.txt compound h5diff_test1.h5 h5diff_test2.h5
+
+# test 1.2.3: Link vs Link
+TOOLTEST h5diff_123.txt soft soft h5diff_test1.h5 h5diff_test1.h5
+
+
+##############################################################################
+# Class issues
+##############################################################################
+
+# test 1.3.1: H5T_STRING
+TOOLTEST h5diff_131.txt dset1.3.1 h5diff_test1.h5 h5diff_test1.h5
+
+# test 1.3.2: H5T_BITFIELD
+TOOLTEST h5diff_132.txt dset1.3.2 h5diff_test1.h5 h5diff_test1.h5
+
+# test 1.3.3: H5T_OPAQUE
+TOOLTEST h5diff_133.txt dset1.3.3 h5diff_test1.h5 h5diff_test1.h5
+
+# test 1.3.4: H5T_COMPOUND
+TOOLTEST h5diff_134.txt dset1.3.4 h5diff_test1.h5 h5diff_test1.h5
+
+# test 1.3.5: H5T_REFERENCE
+TOOLTEST h5diff_135.txt dset1.3.5 h5diff_test1.h5 h5diff_test1.h5
+
+# test 1.3.6: H5T_ENUM
+TOOLTEST h5diff_136.txt dset1.3.6 h5diff_test1.h5 h5diff_test1.h5
-# test 1.2.1: Objects are of classes H5G_TYPE and H5G_GROUP and their name is supplied
-TOOLTEST h5diff_121.txt compound h5diff_test1.h5 h5diff_test2.h5
+# test 1.3.7: H5T_VLEN
+TOOLTEST h5diff_137.txt dset1.3.7 h5diff_test1.h5 h5diff_test1.h5
-# test 1.2.2: Objects are of classes H5G_TYPE and H5G_GROUP and their name is supplied
-TOOLTEST h5diff_122.txt enum h5diff_test1.h5 h5diff_test2.h5
+# test 1.3.8: H5T_ARRAY
+TOOLTEST h5diff_138.txt dset1.3.8 h5diff_test1.h5 h5diff_test1.h5
-# test 1.3: Check for non supported classes. Supported classes are H5T_INTEGER and H5T_FLOAT
-TOOLTEST h5diff_13.txt dset1.3 h5diff_test1.h5 h5diff_test2.h5
-# test 1.4: Objects are not the same dataset class type
+# test 1.4: Compare integer with float
TOOLTEST h5diff_14.txt dset1.1 dset1.4 h5diff_test1.h5 h5diff_test2.h5
-# test 1.5: Check for the same rank, for datasets
+# test 1.5 : Check for the same rank, for datasets
TOOLTEST h5diff_15.txt dset1.1 dset1.5 h5diff_test1.h5 h5diff_test2.h5
-# test 1.6: Check for the same current dimensions
+# test 1.6: Check for the same current dimensions. Only compare if they are the same.
TOOLTEST h5diff_16.txt dset1.1 dset1.6 h5diff_test1.h5 h5diff_test2.h5
-# test 1.7 Check for the same maximum dimensions
+# test 1.7: Check for the same maximum dimensions. Give a warning if they are different.
TOOLTEST h5diff_17.txt dset1.7 dset1.7 h5diff_test1.h5 h5diff_test2.h5
-# test 1.8 Check for different storage order
+# test 1.8: Check for the same storage datatype. Give a warning if they are different.
TOOLTEST h5diff_18.txt dset1.8 dset1.8 h5diff_test1.h5 h5diff_test2.h5
-# test 1.9 Check for H5S_SCALAR dataspace vs simple dataspace with 1 element
-TOOLTEST h5diff_19.txt dset1.9 dset1.9 h5diff_test1.h5 h5diff_test2.h5
##############################################################################
# tests 2., Different datatype sizes and different mix of options