summaryrefslogtreecommitdiffstats
path: root/tools/h5repack
diff options
context:
space:
mode:
Diffstat (limited to 'tools/h5repack')
-rwxr-xr-xtools/h5repack/h5repack.sh.in38
-rw-r--r--tools/h5repack/h5repack_filters.c12
-rw-r--r--tools/h5repack/h5repack_verify.c32
-rw-r--r--tools/h5repack/h5repacktst.c17
4 files changed, 79 insertions, 20 deletions
diff --git a/tools/h5repack/h5repack.sh.in b/tools/h5repack/h5repack.sh.in
index a09e8b9..01c33ef 100755
--- a/tools/h5repack/h5repack.sh.in
+++ b/tools/h5repack/h5repack.sh.in
@@ -54,6 +54,7 @@ FILE13=h5repack_soffset.h5
FILE14=h5repack_layouto.h5 # A file with an older version of the layout message
# (copy of test/tlayouto.h5)
FILE15=h5repack_named_dtypes.h5
+FILE16=tfamily%05d.h5 # located in common testfiles folder
nerrors=0
@@ -140,6 +141,8 @@ TOOLTEST()
rm -f $outfile
}
+# same as TOOLTEST, but it uses the old syntax -i input_file -o output_file
+#
TOOLTEST0()
{
# Run test.
@@ -168,6 +171,38 @@ TOOLTEST0()
rm -f $outfile
}
+
+# same as TOOLTEST, but it uses the common testfiles at $srcdir/../testfiles/
+# used to test the family driver, where these files reside
+#
+TOOLTEST1()
+{
+ # Run test.
+ # Tflops interprets "$@" as "" when no parameter is given (e.g., the
+ # case of missing file name). Changed it to use $@ till Tflops fixes it.
+ TESTING $H5REPACK $@
+
+ infile=$srcdir/../testfiles/$1
+ path=`pwd`
+ outfile=$path/out.$1
+ shift
+ if [ "`uname -s`" = "TFLOPS O/S" ]; then
+ $RUNSERIAL $H5REPACK_BIN $@ $infile $outfile
+ else
+ $RUNSERIAL $H5REPACK_BIN "$@" $infile $outfile
+ fi
+
+ RET=$?
+ if [ $RET != 0 ] ; then
+ echo "*FAILED*"
+ nerrors="`expr $nerrors + 1`"
+ else
+ echo " PASSED"
+ DIFFTEST $infile $outfile
+ fi
+ rm -f $outfile
+}
+
#
# The tests
# We use the files generated by h5repacktst
@@ -514,6 +549,9 @@ TOOLTEST $FILE1 -f GZIP=1
# Check repacking file with committed datatypes in odd configurations
TOOLTEST $FILE15
+# tests family driver (file is located in common testfiles folder, uses TOOLTEST1
+TOOLTEST1 $FILE16
+
if test $nerrors -eq 0 ; then
echo "All $H5REPACK tests passed."
fi
diff --git a/tools/h5repack/h5repack_filters.c b/tools/h5repack/h5repack_filters.c
index 00d7c66..6b08a2f 100644
--- a/tools/h5repack/h5repack_filters.c
+++ b/tools/h5repack/h5repack_filters.c
@@ -445,14 +445,22 @@ int apply_filters(const char* name, /* object name from traverse list */
if (H5Pset_layout(dcpl_id, obj.layout)<0)
return -1;
- if (H5D_CHUNKED==obj.layout) { /* set up chunk */
+ if (H5D_CHUNKED == obj.layout)
+ {
if(H5Pset_chunk(dcpl_id, obj.chunk.rank, obj.chunk.chunk_lengths)<0)
return -1;
}
- else if (H5D_COMPACT==obj.layout) {
+ else if (H5D_COMPACT == obj.layout)
+ {
if (H5Pset_alloc_time(dcpl_id, H5D_ALLOC_TIME_EARLY)<0)
return -1;
}
+ /* remove filters for the H5D_CONTIGUOUS case */
+ else if (H5D_CONTIGUOUS == obj.layout)
+ {
+ if (H5Premove_filter(dcpl_id,H5Z_FILTER_ALL)<0)
+ return -1;
+ }
}
diff --git a/tools/h5repack/h5repack_verify.c b/tools/h5repack/h5repack_verify.c
index 92d758e..69df02c 100644
--- a/tools/h5repack/h5repack_verify.c
+++ b/tools/h5repack/h5repack_verify.c
@@ -18,8 +18,8 @@
#include "h5tools_utils.h"
extern char *progname;
-static int has_layout(hid_t pid, pack_info_t *obj);
-static int has_filters(hid_t pid, hid_t tid, int nfilters, filter_info_t *filter);
+static int verify_layout(hid_t pid, pack_info_t *obj);
+static int verify_filters(hid_t pid, hid_t tid, int nfilters, filter_info_t *filter);
/*-------------------------------------------------------------------------
@@ -82,7 +82,7 @@ int h5repack_verify(const char *fname,
* filter check
*-------------------------------------------------------------------------
*/
- if(has_filters(pid, tid, obj->nfilters, obj->filter) <= 0)
+ if(verify_filters(pid, tid, obj->nfilters, obj->filter) <= 0)
ok = 0;
@@ -90,7 +90,7 @@ int h5repack_verify(const char *fname,
* layout check
*-------------------------------------------------------------------------
*/
- if((obj->layout != -1) && (has_layout(pid, obj) == 0))
+ if((obj->layout != -1) && (verify_layout(pid, obj) == 0))
ok = 0;
/*-------------------------------------------------------------------------
@@ -151,7 +151,7 @@ int h5repack_verify(const char *fname,
if(options->all_filter == 1)
{
- if(has_filters(pid, tid, options->n_filter_g, options->filter_g) <= 0)
+ if(verify_filters(pid, tid, options->n_filter_g, options->filter_g) <= 0)
ok = 0;
}
@@ -165,7 +165,7 @@ int h5repack_verify(const char *fname,
init_packobject(&pack);
pack.layout = options->layout_g;
pack.chunk = options->chunk_g;
- if(has_layout(pid, &pack) == 0)
+ if(verify_layout(pid, &pack) == 0)
ok = 0;
}
@@ -215,13 +215,13 @@ error:
/*-------------------------------------------------------------------------
- * Function: has_layout
+ * Function: verify_layout
*
* Purpose: verify which layout is present in the property list DCPL_ID
*
* H5D_COMPACT = 0
* H5D_CONTIGUOUS = 1
- * H5D_CHUNKED = 2
+ * H5D_CHUNKED = 2
*
* Return: 1 has, 0 does not, -1 error
*
@@ -232,8 +232,8 @@ error:
*-------------------------------------------------------------------------
*/
-int has_layout(hid_t pid,
- pack_info_t *obj)
+int verify_layout(hid_t pid,
+ pack_info_t *obj)
{
hsize_t chsize[64]; /* chunk size in elements */
H5D_layout_t layout; /* layout */
@@ -241,17 +241,13 @@ int has_layout(hid_t pid,
int rank; /* rank */
int i; /* index */
- /* if no information about the input layout is requested return exit */
- if (obj==NULL)
- return 1;
-
/* check if we have filters in the input object */
if ((nfilters = H5Pget_nfilters(pid)) < 0)
return -1;
- /* a non chunked layout was requested on a filtered object; avoid the test */
+ /* a non chunked layout was requested on a filtered object */
if (nfilters && obj->layout!=H5D_CHUNKED)
- return 1;
+ return 0;
/* get layout */
if ((layout = H5Pget_layout(pid)) < 0)
@@ -458,7 +454,7 @@ error:
/*-------------------------------------------------------------------------
- * Function: has_filters
+ * Function: verify_filters
*
* Purpose: verify if all requested filters in the array FILTER obtained
* from user input are present in the property list PID obtained from
@@ -477,7 +473,7 @@ error:
*/
static
-int has_filters(hid_t pid, hid_t tid, int nfilters, filter_info_t *filter)
+int verify_filters(hid_t pid, hid_t tid, int nfilters, filter_info_t *filter)
{
int nfilters_dcpl; /* number of filters in DCPL*/
unsigned filt_flags; /* filter flags */
diff --git a/tools/h5repack/h5repacktst.c b/tools/h5repack/h5repacktst.c
index af4d671..b36afde 100644
--- a/tools/h5repack/h5repacktst.c
+++ b/tools/h5repack/h5repacktst.c
@@ -659,6 +659,23 @@ int main (void)
if (h5repack_end (&pack_options) < 0)
GOERROR;
+ /*-------------------------------------------------------------------------
+ * do the same test for a file with filters (chunked)
+ *-------------------------------------------------------------------------
+ */
+ if (h5repack_init (&pack_options, 0) < 0)
+ GOERROR;
+ if (h5repack_addlayout("CONTI",&pack_options) < 0)
+ GOERROR;
+ if (h5repack(FNAME8,FNAME8OUT,&pack_options) < 0)
+ GOERROR;
+ if (h5diff(FNAME8,FNAME8OUT,NULL,NULL,&diff_options) >0)
+ GOERROR;
+ if (h5repack_verify(FNAME8OUT,&pack_options)<=0)
+ GOERROR;
+ if (h5repack_end (&pack_options) < 0)
+ GOERROR;
+
PASSED();
TESTING(" adding layout compact");