Commit 56c56b45 authored by gbalduzz's avatar gbalduzz
Browse files

Merge branch 'hdf5_cleanup' into write_checkpoints

parents 8d641acb 1342834d
Loading
Loading
Loading
Loading
+5 −11
Original line number Diff line number Diff line
@@ -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 {
@@ -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) {
+4 −4
Original line number Diff line number Diff line
@@ -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();
+18 −0
Original line number Diff line number Diff line
@@ -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>;