summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--c++/src/H5ArrayType.cpp171
-rw-r--r--c++/src/H5ArrayType.h57
-rw-r--r--c++/src/H5VarLenType.cpp83
-rw-r--r--c++/src/H5VarLenType.h47
-rw-r--r--src/H5Dtest.c116
-rw-r--r--test/gen_old_layout.c95
-rw-r--r--test/tlayouto.h5bin0 -> 1576 bytes
-rw-r--r--tools/testfiles/file7.h5bin0 -> 20584 bytes
-rw-r--r--tools/testfiles/file8.h5bin0 -> 20584 bytes
9 files changed, 569 insertions, 0 deletions
diff --git a/c++/src/H5ArrayType.cpp b/c++/src/H5ArrayType.cpp
new file mode 100644
index 0000000..041108c
--- /dev/null
+++ b/c++/src/H5ArrayType.cpp
@@ -0,0 +1,171 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by the Board of Trustees of the University of Illinois. *
+ * All rights reserved. *
+ * *
+ * This file is part of HDF5. The full HDF5 copyright notice, including *
+ * terms governing use, modification, and redistribution, is contained in *
+ * the files COPYING and Copyright.html. COPYING can be found at the root *
+ * of the source code distribution tree; Copyright.html can be found at the *
+ * root level of an installed copy of the electronic HDF5 document set and *
+ * is linked from the top-level documents page. It can also be found at *
+ * http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html. If you do not have *
+ * access to either file, you may request a copy from hdfhelp@ncsa.uiuc.edu. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include <string>
+
+#include "H5Include.h"
+#include "H5RefCounter.h"
+#include "H5Exception.h"
+#include "H5IdComponent.h"
+#include "H5PropList.h"
+#include "H5Object.h"
+#include "H5DataType.h"
+#include "H5ArrayType.h"
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+
+//--------------------------------------------------------------------------
+// Function: ArrayType default constructor
+///\brief Default constructor: Creates a stub ArrayType
+// Programmer Binh-Minh Ribler - May 2004
+//--------------------------------------------------------------------------
+ArrayType::ArrayType() : DataType()
+{
+ // Initialize members
+ rank = -1;
+ dimensions = NULL;
+}
+
+//--------------------------------------------------------------------------
+// Function: ArrayType overloaded constructor
+///\brief Creates an ArrayType object using an existing id.
+///\param existing_id - IN: Id of an existing datatype
+///\exception H5::DataTypeIException
+// Programmer Binh-Minh Ribler - May 2004
+//--------------------------------------------------------------------------
+ArrayType::ArrayType( const hid_t existing_id ) : DataType( existing_id )
+{
+ // Get the rank of the existing array and store it in this array
+ rank = H5Tget_array_ndims(existing_id);
+ if (rank < 0)
+ {
+ throw DataTypeIException("ArrayType overloaded constructor", "H5Tget_array_ndims failed");
+ }
+
+ // Get the dimensions of the existing array and store it in this array
+ dimensions = new hsize_t[rank];
+ //hsize_t rdims2[H5S_MAX_RANK];
+ int ret_value = H5Tget_array_dims(id, dimensions, NULL);
+ if (ret_value < 0)
+ {
+ throw DataTypeIException("ArrayType::getArrayDims", "H5Tget_array_dims failed");
+ }
+}
+
+//--------------------------------------------------------------------------
+// Function: ArrayType copy constructor
+///\brief Copy constructor: makes a copy of the original ArrayType object.
+// Programmer Binh-Minh Ribler - May 2004
+//--------------------------------------------------------------------------
+ArrayType::ArrayType( const ArrayType& original ) : DataType( original )
+{
+ rank = original.rank;
+ dimensions = new hsize_t[rank];
+ for (int i = 0; i < rank; i++)
+ dimensions[i] = original.dimensions[i];
+}
+
+//--------------------------------------------------------------------------
+// Function: ArrayType overloaded constructor
+///\brief Creates a new array data type based on the specified
+/// \a base_type.
+///\param base_type - IN: Existing datatype
+///\param ndims - IN: Rank of the array, [0..H5S_MAX_RANK]
+///\param dims - IN: Size of each array dimension
+///\exception H5::DataTypeIException
+// Programmer Binh-Minh Ribler - May 2004
+//--------------------------------------------------------------------------
+ArrayType::ArrayType(const DataType& base_type, int ndims, const hsize_t* dims) : DataType()
+{
+ hid_t new_type_id = H5Tarray_create(base_type.getId(), ndims, dims, NULL);
+ if (new_type_id <= 0)
+ {
+ throw DataTypeIException("ArrayType constructor", "H5Tarray_create failed");
+ }
+ id = new_type_id;
+ rank = ndims;
+ dimensions = new hsize_t[rank];
+ for (int i = 0; i < rank; i++)
+ dimensions[i] = dims[i];
+}
+
+//--------------------------------------------------------------------------
+// Function: ArrayType::getArrayNDims
+///\brief Returns the number of dimensions for an array datatype.
+///\return Number of dimensions
+///\exception H5::DataTypeIException
+// Programmer Binh-Minh Ribler - May 2004
+//--------------------------------------------------------------------------
+int ArrayType::getArrayNDims()
+{
+ // If the array's rank has not been stored, i.e. rank is init to -1,
+ // retrieve it via the C API
+ if (rank < 0)
+ {
+ rank = H5Tget_array_ndims(id);
+ if (rank < 0)
+ {
+ throw DataTypeIException("ArrayType::getArrayNDims", "H5Tget_array_ndims failed");
+ }
+ }
+ return(rank);
+}
+
+//--------------------------------------------------------------------------
+// Function: ArrayType::getArrayDims
+///\brief Retrieves the size of all dimensions of an array datatype.
+///\param dims - OUT: Sizes of dimensions
+///\return Number of dimensions
+///\exception H5::DataTypeIException
+// Programmer Binh-Minh Ribler - May 2004
+//--------------------------------------------------------------------------
+int ArrayType::getArrayDims(hsize_t* dims)
+{
+ // if the array's dimensions have not been stored, retrieve them via C API
+ if (dimensions == NULL)
+ {
+ int ndims = H5Tget_array_dims(id, dims, NULL);
+ if (ndims < 0)
+ {
+ throw DataTypeIException("ArrayType::getArrayDims", "H5Tget_array_dims failed");
+ }
+ // store the array's info in memory
+ rank = ndims;
+ dimensions = new hsize_t[rank];
+ for (int i = 0; i < rank; i++)
+ dimensions[i] = dims[i];
+ }
+ // otherwise, simply copy what's in 'dimensions' to 'dims'
+ for (int i = 0; i < rank; i++)
+ dims[i] = dimensions[i];
+ return(rank);
+}
+
+//--------------------------------------------------------------------------
+// Function: ArrayType destructor
+///\brief Properly terminates access to this array datatype.
+// Programmer Binh-Minh Ribler - May 2004
+//--------------------------------------------------------------------------
+ArrayType::~ArrayType()
+{
+ // Free allocated memory
+ if (dimensions != NULL)
+ delete [] dimensions;
+}
+
+#ifndef H5_NO_NAMESPACE
+} // end namespace
+#endif
diff --git a/c++/src/H5ArrayType.h b/c++/src/H5ArrayType.h
new file mode 100644
index 0000000..d98488e
--- /dev/null
+++ b/c++/src/H5ArrayType.h
@@ -0,0 +1,57 @@
+// C++ informative line for the emacs editor: -*- C++ -*-
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by the Board of Trustees of the University of Illinois. *
+ * All rights reserved. *
+ * *
+ * This file is part of HDF5. The full HDF5 copyright notice, including *
+ * terms governing use, modification, and redistribution, is contained in *
+ * the files COPYING and Copyright.html. COPYING can be found at the root *
+ * of the source code distribution tree; Copyright.html can be found at the *
+ * root level of an installed copy of the electronic HDF5 document set and *
+ * is linked from the top-level documents page. It can also be found at *
+ * http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html. If you do not have *
+ * access to either file, you may request a copy from hdfhelp@ncsa.uiuc.edu. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+// Class ArrayType inherits from DataType and provides wrappers for the
+// HDF5 C's Array Datatypes.
+
+#ifndef _H5ArrayType_H
+#define _H5ArrayType_H
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+class H5_DLLCPP ArrayType : public DataType {
+ public:
+ // Constructor that creates a new array data type based on the
+ // specified base type.
+ ArrayType(const DataType& base_type, int ndims, const hsize_t* dims);
+
+ // Returns the number of dimensions of this array datatype.
+ int getArrayNDims();
+
+ // Returns the sizes of dimensions of this array datatype.
+ int getArrayDims(hsize_t* dims);
+
+ // Copy constructor - makes copy of the original object
+ ArrayType( const ArrayType& original );
+
+ // Default destructor
+ virtual ~ArrayType();
+
+ protected:
+ // Default constructor
+ ArrayType();
+
+ // Constructor that takes an existing id
+ ArrayType( const hid_t existing_id );
+
+ private:
+ int rank; // Rank of the array
+ hsize_t* dimensions; // Sizes of the array dimensions
+};
+#ifndef H5_NO_NAMESPACE
+}
+#endif
+#endif
diff --git a/c++/src/H5VarLenType.cpp b/c++/src/H5VarLenType.cpp
new file mode 100644
index 0000000..45524f0
--- /dev/null
+++ b/c++/src/H5VarLenType.cpp
@@ -0,0 +1,83 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by the Board of Trustees of the University of Illinois. *
+ * All rights reserved. *
+ * *
+ * This file is part of HDF5. The full HDF5 copyright notice, including *
+ * terms governing use, modification, and redistribution, is contained in *
+ * the files COPYING and Copyright.html. COPYING can be found at the root *
+ * of the source code distribution tree; Copyright.html can be found at the *
+ * root level of an installed copy of the electronic HDF5 document set and *
+ * is linked from the top-level documents page. It can also be found at *
+ * http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html. If you do not have *
+ * access to either file, you may request a copy from hdfhelp@ncsa.uiuc.edu. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include <string>
+
+#include "H5Include.h"
+#include "H5RefCounter.h"
+#include "H5Exception.h"
+#include "H5IdComponent.h"
+#include "H5PropList.h"
+#include "H5Object.h"
+#include "H5DataType.h"
+#include "H5VarLenType.h"
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+
+
+//--------------------------------------------------------------------------
+// Function: VarLenType default constructor
+///\brief Default constructor: Creates a stub variable-length datatype.
+//--------------------------------------------------------------------------
+VarLenType::VarLenType() : DataType() {}
+
+//--------------------------------------------------------------------------
+// Function: VarLenType overloaded constructor
+///\brief Creates an VarLenType object using an existing id.
+///\param existing_id - IN: Id of an existing datatype
+///\exception H5::DataTypeIException
+// Programmer Binh-Minh Ribler - May, 2004
+//--------------------------------------------------------------------------
+VarLenType::VarLenType(const hid_t existing_id) : DataType(existing_id) {}
+
+//--------------------------------------------------------------------------
+// Function: VarLenType copy constructor
+///\brief Copy constructor: makes a copy of the original VarLenType object.
+// Programmer Binh-Minh Ribler - May, 2004
+//--------------------------------------------------------------------------
+VarLenType::VarLenType(const VarLenType& original) : DataType(original) {}
+
+//--------------------------------------------------------------------------
+// Function: VarLenType overloaded constructor
+///\brief Creates a new variable-length datatype based on the specified
+/// \a base_type.
+///\param base_type - IN: Pointer to existing datatype
+///\exception H5::DataTypeIException
+// Description
+// DataType passed by pointer to avoid clashing with copy
+// constructor.
+// Programmer Binh-Minh Ribler - May, 2004
+//--------------------------------------------------------------------------
+VarLenType::VarLenType(const DataType* base_type) : DataType()
+{
+ id = H5Tvlen_create(base_type->getId());
+ if (id <= 0)
+ {
+ throw DataTypeIException("VarLenType constructor",
+ "H5Tvlen_create returns negative value");
+ }
+}
+
+//--------------------------------------------------------------------------
+// Function: VarLenType destructor
+///\brief Properly terminates access to this datatype.
+// Programmer Binh-Minh Ribler - May, 2004
+//--------------------------------------------------------------------------
+VarLenType::~VarLenType() {}
+
+#ifndef H5_NO_NAMESPACE
+} // end namespace
+#endif
diff --git a/c++/src/H5VarLenType.h b/c++/src/H5VarLenType.h
new file mode 100644
index 0000000..8a2572b
--- /dev/null
+++ b/c++/src/H5VarLenType.h
@@ -0,0 +1,47 @@
+// C++ informative line for the emacs editor: -*- C++ -*-
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by the Board of Trustees of the University of Illinois. *
+ * All rights reserved. *
+ * *
+ * This file is part of HDF5. The full HDF5 copyright notice, including *
+ * terms governing use, modification, and redistribution, is contained in *
+ * the files COPYING and Copyright.html. COPYING can be found at the root *
+ * of the source code distribution tree; Copyright.html can be found at the *
+ * root level of an installed copy of the electronic HDF5 document set and *
+ * is linked from the top-level documents page. It can also be found at *
+ * http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html. If you do not have *
+ * access to either file, you may request a copy from hdfhelp@ncsa.uiuc.edu. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+// Class VarLenType inherits from DataType and provides wrappers for
+// the HDF5 C's Variable-length Datatypes.
+
+#ifndef _H5VarLenType_H
+#define _H5VarLenType_H
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+class H5_DLLCPP VarLenType : public DataType {
+ public:
+ // Constructor that creates a variable-length datatype based
+ // on the specified base type.
+ VarLenType(const DataType* base_type);
+
+ // Copy constructor - makes copy of the original object
+ VarLenType( const VarLenType& original );
+
+ // Default destructor
+ virtual ~VarLenType();
+
+ protected:
+ // Default constructor
+ VarLenType();
+
+ // Constructor that takes an existing id
+ VarLenType( const hid_t existing_id );
+};
+#ifndef H5_NO_NAMESPACE
+}
+#endif
+#endif
diff --git a/src/H5Dtest.c b/src/H5Dtest.c
new file mode 100644
index 0000000..d3339df
--- /dev/null
+++ b/src/H5Dtest.c
@@ -0,0 +1,116 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by the Board of Trustees of the University of Illinois. *
+ * All rights reserved. *
+ * *
+ * This file is part of HDF5. The full HDF5 copyright notice, including *
+ * terms governing use, modification, and redistribution, is contained in *
+ * the files COPYING and Copyright.html. COPYING can be found at the root *
+ * of the source code distribution tree; Copyright.html can be found at the *
+ * root level of an installed copy of the electronic HDF5 document set and *
+ * is linked from the top-level documents page. It can also be found at *
+ * http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html. If you do not have *
+ * access to either file, you may request a copy from hdfhelp@ncsa.uiuc.edu. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/* Programmer: Quincey Koziol <koziol@ncsa.uiuc.edu>
+ * Thusdayr, May 27, 2004
+ *
+ * Purpose: Dataset testing functions.
+ */
+
+#define H5D_PACKAGE /*suppress error about including H5Dpkg */
+#define H5D_TESTING /*suppress warning about H5D testing funcs*/
+
+/* Pablo information */
+/* (Put before include files to avoid problems with inline functions) */
+#define PABLO_MASK H5Dtest_mask
+
+#include "H5private.h" /* Generic Functions */
+#include "H5Dpkg.h" /* Datasets */
+#include "H5Eprivate.h" /* Error handling */
+#include "H5Iprivate.h" /* ID Functions */
+
+/* Interface initialization */
+#define INTERFACE_INIT NULL
+static int interface_initialize_g = 0;
+
+
+/*--------------------------------------------------------------------------
+ NAME
+ H5D_layout_version_test
+ PURPOSE
+ Determine the storage layout version for a dataset's layout information
+ USAGE
+ herr_t H5D_layout_version_test(did, version)
+ hid_t did; IN: Dataset to query
+ unsigned *version; OUT: Pointer to location to place version info
+ RETURNS
+ Non-negative on success, negative on failure
+ DESCRIPTION
+ Checks the version of the storage layout information for a dataset.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ DO NOT USE THIS FUNCTION FOR ANYTHING EXCEPT TESTING
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5D_layout_version_test(hid_t did, unsigned *version)
+{
+ H5D_t *dset; /* Pointer to dataset to query */
+ herr_t ret_value=SUCCEED; /* return value */
+
+ FUNC_ENTER_NOAPI(H5D_layout_version_test, FAIL);
+
+ /* Check args */
+ if (NULL==(dset=H5I_object_verify(did, H5I_DATASET)))
+ HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset")
+
+ if(version)
+ *version=dset->layout.version;
+
+done:
+ FUNC_LEAVE_NOAPI(ret_value);
+} /* H5D_layout_version_test() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+ H5D_layout_contig_size_test
+ PURPOSE
+ Determine the size of a contiguous layout for a dataset's layout information
+ USAGE
+ herr_t H5D_layout_contig_size_test(did, size)
+ hid_t did; IN: Dataset to query
+ hsize_t *size; OUT: Pointer to location to place size info
+ RETURNS
+ Non-negative on success, negative on failure
+ DESCRIPTION
+ Checks the size of a contiguous dataset's storage.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ DO NOT USE THIS FUNCTION FOR ANYTHING EXCEPT TESTING
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5D_layout_contig_size_test(hid_t did, hsize_t *size)
+{
+ H5D_t *dset; /* Pointer to dataset to query */
+ herr_t ret_value=SUCCEED; /* return value */
+
+ FUNC_ENTER_NOAPI(H5D_layout_contig_size_test, FAIL);
+
+ /* Check args */
+ if (NULL==(dset=H5I_object_verify(did, H5I_DATASET)))
+ HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset")
+
+ if(size) {
+ assert(dset->layout.type==H5D_CONTIGUOUS);
+ *size=dset->layout.u.contig.size;
+ } /* end if */
+
+done:
+ FUNC_LEAVE_NOAPI(ret_value);
+} /* H5D_layout_contig_size_test() */
+
diff --git a/test/gen_old_layout.c b/test/gen_old_layout.c
new file mode 100644
index 0000000..473b3d3
--- /dev/null
+++ b/test/gen_old_layout.c
@@ -0,0 +1,95 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by the Board of Trustees of the University of Illinois. *
+ * All rights reserved. *
+ * *
+ * This file is part of HDF5. The full HDF5 copyright notice, including *
+ * terms governing use, modification, and redistribution, is contained in *
+ * the files COPYING and Copyright.html. COPYING can be found at the root *
+ * of the source code distribution tree; Copyright.html can be found at the *
+ * root level of an installed copy of the electronic HDF5 document set and *
+ * is linked from the top-level documents page. It can also be found at *
+ * http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html. If you do not have *
+ * access to either file, you may request a copy from hdfhelp@ncsa.uiuc.edu. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer: Quincey Koziol <koziol@ncsa.uiuc.edu>
+ * Thursday, May 27, 2004
+ *
+ * Purpose: Create two datasets (one for version 1 and one for version 2 of
+ * the layout message), which should have dimensions too large to
+ * represent in version 1 & 2 of the storage layout message.
+ * This program is used to create the test file `tlayouto.h5' which
+ * has truncated dimension information and can be used to verify that the
+ * library has fixed up the storage size correctly.
+ * To build the test file, this program MUST be compiled and linked
+ * with version hdf5-1.6.2 or _earlier_ libraries and the generated test
+ * file must be put into the 'test' directory in the 1.7+ (or 1.6+) branch
+ * of the library.
+ */
+
+#include "hdf5.h"
+
+#define TESTFILE "tlayouto.h5"
+#define SPACE_RANK 2
+#define SPACE_DIM0 (8*1024*1024*1024ULL)
+#define SPACE_DIM1 ((4*1024*1024*1024ULL)+1ULL)
+
+
+/*-------------------------------------------------------------------------
+ * Function: main
+ *
+ * Purpose:
+ *
+ * Return: Success:
+ *
+ * Failure:
+ *
+ * Programmer: Quincey Koziol
+ * Friday, January 3, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+main(void)
+{
+ hid_t file, space, dset, dcpl;
+ herr_t ret;
+ unsigned rank=SPACE_RANK; /* Rank of dataspace */
+ hsize_t big_dims[SPACE_RANK]={SPACE_DIM0,SPACE_DIM1}; /* Large dimensions */
+
+ /* Create the file */
+ file = H5Fcreate(TESTFILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+ if(file<0)
+ printf("file<0!\n");
+
+ /* Create the dataspace (for dataset) */
+ space = H5Screate_simple(rank,big_dims,NULL);
+ if(space<0)
+ printf("space<0!\n");
+
+ /* Create a dataset creation property list */
+ dcpl = H5Pcreate(H5P_DATASET_CREATE);
+ if(dcpl<0)
+ printf("dcpl<0!\n");
+
+ /* Make certain that the dataset's storage doesn't get allocated :-) */
+ ret = H5Pset_alloc_time(dcpl,H5D_ALLOC_TIME_LATE);
+ if(ret<0)
+ printf("H5Pset_alloc_time() failed!\n");
+
+ /* Create the dataset with deferred storage allocation */
+ dset = H5Dcreate(file, "Dataset", H5T_NATIVE_INT, space, dcpl);
+ if(dset<0)
+ printf("dset<0!\n");
+
+ H5Dclose(dset);
+ H5Sclose(space);
+ H5Pclose(dcpl);
+ H5Fclose(file);
+
+ return 0;
+}
+
diff --git a/test/tlayouto.h5 b/test/tlayouto.h5
new file mode 100644
index 0000000..5dba556
--- /dev/null
+++ b/test/tlayouto.h5
Binary files differ
diff --git a/tools/testfiles/file7.h5 b/tools/testfiles/file7.h5
new file mode 100644
index 0000000..3f891d9
--- /dev/null
+++ b/tools/testfiles/file7.h5
Binary files differ
diff --git a/tools/testfiles/file8.h5 b/tools/testfiles/file8.h5
new file mode 100644
index 0000000..2590a1b
--- /dev/null
+++ b/tools/testfiles/file8.h5
Binary files differ