Loading src/io/hdf5/hdf5_reader.cpp +5 −11 Original line number Diff line number Diff line Loading @@ -82,7 +82,6 @@ bool HDF5Reader::execute(std::string name, bool HDF5Reader::execute(std::string name, std::vector<std::string>& value) { open_group(name); open_group("data"); bool success = true; try { Loading @@ -91,18 +90,13 @@ bool HDF5Reader::execute(std::string name, std::vector<std::string>& value) { value.resize(size); for (size_t l = 0; l < value.size(); l++) { std::stringstream ss; ss << get_path() << "/" << l; H5::DataSet dataset = my_file->openDataSet(ss.str().c_str()); value[l].resize(dataset.getInMemDataSize(), 'a'); open_group("data"); H5::DataSpace dataspace = dataset.getSpace(); for (size_t l = 0; l < value.size(); l++) { open_group(std::to_string(l)); execute(std::to_string(l), value[l]); H5Dread(dataset.getId(), HDF5_TYPE<char>::get(), dataspace.getId(), H5S_ALL, H5P_DEFAULT, &value[l][0]); close_group(); } } catch (const H5::FileIException& err) { Loading src/io/hdf5/hdf5_writer.cpp +4 −4 Original line number Diff line number Diff line Loading @@ -93,14 +93,14 @@ void HDF5Writer::execute(const std::string& name, { if (value.size() > 0) { open_group(name); execute("size", value.size()); execute("size", static_cast<int>(value.size())); open_group("data"); const auto path = get_path(); for (int i = 0; i < value.size(); ++i) { execute(get_path() + "/" + std::to_string(i), value[i]); open_group(std::to_string(i)); execute(std::to_string(i), value[i]); close_group(); } close_group(); Loading test/unit/io/hdf5_reader_writer_test.cpp +18 −0 Original line number Diff line number Diff line Loading @@ -95,6 +95,24 @@ TEST(HDF5ReaderWriterTest, VectorReadWrite) { reader.close_file(); } TEST(HDF5ReaderWriterTest, VectorOfStringsReadWrite) { std::vector<std::string> s1{"foo", "bar", "baz"}; // Create test file. dca::io::HDF5Writer writer; writer.open_file("test.hdf5"); writer.execute("strings", s1); writer.close_file(); // Read test file. dca::io::HDF5Reader reader; reader.open_file("test.hdf5"); std::vector<std::string> s2; reader.execute("strings", s2); EXPECT_EQ(s1, s2); } template <typename Scalar> class HDF5ReaderWriterTest : public ::testing::Test {}; using TestTypes = ::testing::Types<std::complex<double>, float>; Loading Loading
src/io/hdf5/hdf5_reader.cpp +5 −11 Original line number Diff line number Diff line Loading @@ -82,7 +82,6 @@ bool HDF5Reader::execute(std::string name, bool HDF5Reader::execute(std::string name, std::vector<std::string>& value) { open_group(name); open_group("data"); bool success = true; try { Loading @@ -91,18 +90,13 @@ bool HDF5Reader::execute(std::string name, std::vector<std::string>& value) { value.resize(size); for (size_t l = 0; l < value.size(); l++) { std::stringstream ss; ss << get_path() << "/" << l; H5::DataSet dataset = my_file->openDataSet(ss.str().c_str()); value[l].resize(dataset.getInMemDataSize(), 'a'); open_group("data"); H5::DataSpace dataspace = dataset.getSpace(); for (size_t l = 0; l < value.size(); l++) { open_group(std::to_string(l)); execute(std::to_string(l), value[l]); H5Dread(dataset.getId(), HDF5_TYPE<char>::get(), dataspace.getId(), H5S_ALL, H5P_DEFAULT, &value[l][0]); close_group(); } } catch (const H5::FileIException& err) { Loading
src/io/hdf5/hdf5_writer.cpp +4 −4 Original line number Diff line number Diff line Loading @@ -93,14 +93,14 @@ void HDF5Writer::execute(const std::string& name, { if (value.size() > 0) { open_group(name); execute("size", value.size()); execute("size", static_cast<int>(value.size())); open_group("data"); const auto path = get_path(); for (int i = 0; i < value.size(); ++i) { execute(get_path() + "/" + std::to_string(i), value[i]); open_group(std::to_string(i)); execute(std::to_string(i), value[i]); close_group(); } close_group(); Loading
test/unit/io/hdf5_reader_writer_test.cpp +18 −0 Original line number Diff line number Diff line Loading @@ -95,6 +95,24 @@ TEST(HDF5ReaderWriterTest, VectorReadWrite) { reader.close_file(); } TEST(HDF5ReaderWriterTest, VectorOfStringsReadWrite) { std::vector<std::string> s1{"foo", "bar", "baz"}; // Create test file. dca::io::HDF5Writer writer; writer.open_file("test.hdf5"); writer.execute("strings", s1); writer.close_file(); // Read test file. dca::io::HDF5Reader reader; reader.open_file("test.hdf5"); std::vector<std::string> s2; reader.execute("strings", s2); EXPECT_EQ(s1, s2); } template <typename Scalar> class HDF5ReaderWriterTest : public ::testing::Test {}; using TestTypes = ::testing::Types<std::complex<double>, float>; Loading