[cig-commits] r18493 - in short/3D/PyLith/trunk: libsrc/pylith/meshio unittests/libtests/meshio
brad at geodynamics.org
brad at geodynamics.org
Mon May 30 14:40:35 PDT 2011
Author: brad
Date: 2011-05-30 14:40:35 -0700 (Mon, 30 May 2011)
New Revision: 18493
Modified:
short/3D/PyLith/trunk/libsrc/pylith/meshio/DataWriterHDF5Ext.cc
short/3D/PyLith/trunk/libsrc/pylith/meshio/HDF5.cc
short/3D/PyLith/trunk/unittests/libtests/meshio/TestHDF5.cc
short/3D/PyLith/trunk/unittests/libtests/meshio/TestHDF5.hh
Log:
Added more HDF5 unit tests. Improved HDF5 chunking.
Modified: short/3D/PyLith/trunk/libsrc/pylith/meshio/DataWriterHDF5Ext.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/pylith/meshio/DataWriterHDF5Ext.cc 2011-05-30 21:03:22 UTC (rev 18492)
+++ short/3D/PyLith/trunk/libsrc/pylith/meshio/DataWriterHDF5Ext.cc 2011-05-30 21:40:35 UTC (rev 18493)
@@ -598,7 +598,7 @@
// Create dataset
// Dataset has unknown size.
hsize_t dims[3];
- dims[0] = H5S_UNLIMITED;
+ dims[0] = 1;
dims[1] = 1;
dims[2] = 1;
_h5->createDataset("/", "time", dims, dimsChunk, ndims,
Modified: short/3D/PyLith/trunk/libsrc/pylith/meshio/HDF5.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/pylith/meshio/HDF5.cc 2011-05-30 21:03:22 UTC (rev 18492)
+++ short/3D/PyLith/trunk/libsrc/pylith/meshio/HDF5.cc 2011-05-30 21:40:35 UTC (rev 18493)
@@ -706,7 +706,13 @@
throw std::runtime_error("Could not open group.");
// Create the dataspace
- hid_t dataspace = H5Screate_simple(ndims, dimsChunk, dims);
+ hsize_t *maxDims = (ndims > 0) ? new hsize_t[ndims] : 0;
+ if (ndims > 0)
+ maxDims[0] = H5S_UNLIMITED;
+ for (int i=1; i < ndims; ++i)
+ maxDims[i] = dims[i];
+ hid_t dataspace = H5Screate_simple(ndims, dims, maxDims);
+ delete[] maxDims; maxDims = 0;
if (dataspace < 0)
throw std::runtime_error("Could not create dataspace.");
@@ -1011,10 +1017,12 @@
// Create the dataspace
hsize_t* maxDims = (ndims > 0) ? new hsize_t[ndims] : 0;
- maxDims[0] = H5S_UNLIMITED;
+ if (ndims > 0)
+ maxDims[0] = H5S_UNLIMITED;
for (int i=1; i < ndims; ++i)
maxDims[i] = dims[i];
hid_t dataspace = H5Screate_simple(ndims, dims, maxDims);
+ delete[] maxDims; maxDims = 0;
if (dataspace < 0)
throw std::runtime_error("Could not create dataspace.");
Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/TestHDF5.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/TestHDF5.cc 2011-05-30 21:03:22 UTC (rev 18492)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/TestHDF5.cc 2011-05-30 21:40:35 UTC (rev 18493)
@@ -104,6 +104,61 @@
} // testHasDataset
// ----------------------------------------------------------------------
+// Test getDatasetDims().
+void
+pylith::meshio::TestHDF5::testGetDatasetDims(void)
+{ // testGetDatasetDims
+ HDF5 h5("test.h5", H5F_ACC_TRUNC);
+
+ const int ndimsE = 2;
+ const hsize_t dimsE[ndimsE] = { 3, 2 };
+ const hsize_t dimsChunkE[ndimsE] = { 1, 2 };
+ h5.createDataset("/", "data", dimsE, dimsChunkE, ndimsE, H5T_NATIVE_INT);
+ h5.close();
+
+ h5.open("test.h5", H5F_ACC_RDONLY);
+ hsize_t* dims = 0;
+ int ndims = 0;
+ h5.getDatasetDims(&dims, &ndims, "/", "data");
+ h5.close();
+ CPPUNIT_ASSERT_EQUAL(ndimsE, ndims);
+
+ for (int i=0; i < ndimsE; ++i)
+ CPPUNIT_ASSERT_EQUAL(dimsE[i], dims[i]);
+} // testGetDatasetDims
+
+// ----------------------------------------------------------------------
+// Test getGroupDatasets().
+void
+pylith::meshio::TestHDF5::testGetGroupDatasets(void)
+{ // testGetGroupDatasets
+ const int ngroupsE = 3;
+ const char* namesE[3] = { "dataA",
+ "dataB",
+ "dataC" };
+ const hsize_t ndims = 2;
+ const hsize_t dims[ndims] = { 3, 2 };
+ const hsize_t dimsChunk[ndims] = { 1, 2 };
+
+ HDF5 h5("test.h5", H5F_ACC_TRUNC);
+ h5.createGroup("/mygroup");
+ for (int i=0; i < ngroupsE; ++i)
+ h5.createDataset("/mygroup", namesE[i], dims, dimsChunk, ndims,
+ H5T_NATIVE_INT);
+ h5.close();
+
+ string_vector names;
+ h5.open("test.h5", H5F_ACC_RDONLY);
+ h5.getGroupDatasets(&names, "/mygroup");
+ h5.close();
+
+ const int ngroups = names.size();
+ CPPUNIT_ASSERT_EQUAL(ngroupsE, ngroups);
+ for (int i=0; i < ngroups; ++i)
+ CPPUNIT_ASSERT_EQUAL(std::string(namesE[i]), names[i]);
+} // testGetGroupDatasets
+
+// ----------------------------------------------------------------------
// Test createGroup()
void
pylith::meshio::TestHDF5::testCreateGroup(void)
Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/TestHDF5.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/TestHDF5.hh 2011-05-30 21:03:22 UTC (rev 18492)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/TestHDF5.hh 2011-05-30 21:40:35 UTC (rev 18493)
@@ -47,6 +47,8 @@
CPPUNIT_TEST( testOpenClose );
CPPUNIT_TEST( testHasGroup );
CPPUNIT_TEST( testHasDataset );
+ CPPUNIT_TEST( testGetDatasetDims );
+ CPPUNIT_TEST( testGetGroupDatasets );
CPPUNIT_TEST( testCreateGroup );
CPPUNIT_TEST( testAttributeScalar );
CPPUNIT_TEST( testAttributeString );
@@ -71,6 +73,12 @@
/// Test hasDataset().
void testHasDataset(void);
+ /// Test getDatasetDims().
+ void testGetDatasetDims(void);
+
+ /// Test getGroupDatasets().
+ void testGetGroupDatasets(void);
+
/// Test createGroup()
void testCreateGroup(void);
More information about the CIG-COMMITS
mailing list