From 770faa9b99fdd2263afdef52ee138af3b443fba3 Mon Sep 17 00:00:00 2001
From: Chuck Atkins <chuck.atkins@kitware.com>
Date: Mon, 24 Apr 2017 10:50:14 -0400
Subject: [PATCH] Added more tests for engines

---
 .../adios2/engine/EngineWriteReadTestBase.cpp | 106 +++++++++++
 .../adios2/engine/EngineWriteReadTestBase.h   |  62 +++++++
 testing/adios2/engine/adios1/CMakeLists.txt   |   7 +
 .../engine/adios1/TestADIOS1WriteRead.cpp     |  47 +++++
 testing/adios2/engine/bp/CMakeLists.txt       |   5 +-
 testing/adios2/engine/bp/TestBPWriteRead.cpp  | 171 +++---------------
 testing/adios2/engine/hdf5/CMakeLists.txt     |   7 +
 .../adios2/engine/hdf5/TestHDF5WriteRead.cpp  |  47 +++++
 8 files changed, 304 insertions(+), 148 deletions(-)
 create mode 100644 testing/adios2/engine/EngineWriteReadTestBase.cpp
 create mode 100644 testing/adios2/engine/EngineWriteReadTestBase.h
 create mode 100644 testing/adios2/engine/adios1/TestADIOS1WriteRead.cpp
 create mode 100644 testing/adios2/engine/hdf5/TestHDF5WriteRead.cpp

diff --git a/testing/adios2/engine/EngineWriteReadTestBase.cpp b/testing/adios2/engine/EngineWriteReadTestBase.cpp
new file mode 100644
index 000000000..7e9f61329
--- /dev/null
+++ b/testing/adios2/engine/EngineWriteReadTestBase.cpp
@@ -0,0 +1,106 @@
+#include "EngineWriteReadTestBase.h"
+
+#include <cstdint>
+
+#include <array>
+#include <iostream>
+#include <stdexcept>
+
+#include <adios2.h>
+
+#include <gtest/gtest.h>
+
+EngineWriteReadTestBase::EngineWriteReadTestBase()
+: m_adios(adios::Verbose::WARN, true)
+{
+}
+
+void EngineWriteReadTestBase::Declare1D_8()
+{
+    auto &var_i8 = m_adios.DefineVariable<char>("i8", adios::Dims{8});
+    auto &var_i16 = m_adios.DefineVariable<short>("i16", adios::Dims{8});
+    auto &var_i32 = m_adios.DefineVariable<int>("i32", adios::Dims{8});
+    auto &var_i64 = m_adios.DefineVariable<long>("i64", adios::Dims{8});
+    auto &var_u8 = m_adios.DefineVariable<unsigned char>("u8", adios::Dims{8});
+    auto &var_u16 =
+        m_adios.DefineVariable<unsigned short>("u16", adios::Dims{8});
+    auto &var_u32 = m_adios.DefineVariable<unsigned int>("u32", adios::Dims{8});
+    auto &var_u64 =
+        m_adios.DefineVariable<unsigned long>("u64", adios::Dims{8});
+    auto &var_r32 = m_adios.DefineVariable<float>("r32", adios::Dims{8});
+    auto &var_r64 = m_adios.DefineVariable<double>("r64", adios::Dims{8});
+}
+
+void EngineWriteReadTestBase::Declare2D_2x4()
+{
+    auto &var_i8 = m_adios.DefineVariable<char>("i8", adios::Dims{2, 4});
+    auto &var_i16 = m_adios.DefineVariable<short>("i16", adios::Dims{2, 4});
+    auto &var_i32 = m_adios.DefineVariable<int>("i32", adios::Dims{2, 4});
+    auto &var_i64 = m_adios.DefineVariable<long>("i64", adios::Dims{2, 4});
+    auto &var_u8 =
+        m_adios.DefineVariable<unsigned char>("u8", adios::Dims{2, 4});
+    auto &var_u16 =
+        m_adios.DefineVariable<unsigned short>("u16", adios::Dims{2, 4});
+    auto &var_u32 =
+        m_adios.DefineVariable<unsigned int>("u32", adios::Dims{2, 4});
+    auto &var_u64 =
+        m_adios.DefineVariable<unsigned long>("u64", adios::Dims{2, 4});
+    auto &var_r32 = m_adios.DefineVariable<float>("r32", adios::Dims{2, 4});
+    auto &var_r64 = m_adios.DefineVariable<double>("r64", adios::Dims{2, 4});
+}
+
+void EngineWriteReadTestBase::Declare2D_4x2()
+{
+    auto &var_i8 = m_adios.DefineVariable<char>("i8", adios::Dims{4, 2});
+    auto &var_i16 = m_adios.DefineVariable<short>("i16", adios::Dims{4, 2});
+    auto &var_i32 = m_adios.DefineVariable<int>("i32", adios::Dims{4, 2});
+    auto &var_i64 = m_adios.DefineVariable<long>("i64", adios::Dims{4, 2});
+    auto &var_u8 =
+        m_adios.DefineVariable<unsigned char>("u8", adios::Dims{4, 2});
+    auto &var_u16 =
+        m_adios.DefineVariable<unsigned short>("u16", adios::Dims{4, 2});
+    auto &var_u32 =
+        m_adios.DefineVariable<unsigned int>("u32", adios::Dims{4, 2});
+    auto &var_u64 =
+        m_adios.DefineVariable<unsigned long>("u64", adios::Dims{4, 2});
+    auto &var_r32 = m_adios.DefineVariable<float>("r32", adios::Dims{4, 2});
+    auto &var_r64 = m_adios.DefineVariable<double>("r64", adios::Dims{4, 2});
+}
+
+void EngineWriteReadTestBase::WriteStep(size_t step)
+{
+    auto &var_i8 = m_adios.GetVariable<char>("i8");
+    auto &var_i16 = m_adios.GetVariable<short>("i16");
+    auto &var_i32 = m_adios.GetVariable<int>("i32");
+    auto &var_i64 = m_adios.GetVariable<long>("i64");
+    auto &var_u8 = m_adios.GetVariable<unsigned char>("u8");
+    auto &var_u16 = m_adios.GetVariable<unsigned short>("u16");
+    auto &var_u32 = m_adios.GetVariable<unsigned int>("u32");
+    auto &var_u64 = m_adios.GetVariable<unsigned long>("u64");
+    auto &var_r32 = m_adios.GetVariable<float>("r32");
+    auto &var_r64 = m_adios.GetVariable<double>("r64");
+
+    m_Engine->Write(var_i8, m_DataI8.cbegin() + step);
+    m_Engine->Write(var_i16, m_DataI16.cbegin() + step);
+    m_Engine->Write(var_i32, m_DataI32.cbegin() + step);
+    m_Engine->Write(var_i64, m_DataI64.cbegin() + step);
+    m_Engine->Write(var_u8, m_DataU8.cbegin() + step);
+    m_Engine->Write(var_u16, m_DataU16.cbegin() + step);
+    m_Engine->Write(var_u32, m_DataU32.cbegin() + step);
+    m_Engine->Write(var_u64, m_DataU64.cbegin() + step);
+    m_Engine->Write(var_r32, m_DataR32.cbegin() + step);
+    m_Engine->Write(var_r64, m_DataR64.cbegin() + step);
+}
+
+void EngineWriteReadTestBase::OpenWriteClose(std::string fname)
+{
+    OpenWrite(fname);
+
+    for (size_t t = 0; t < 3; ++t)
+    {
+        EngineWriteReadTestBase::WriteStep(t);
+        m_Engine->Advance();
+    }
+
+    m_Engine->Close();
+}
diff --git a/testing/adios2/engine/EngineWriteReadTestBase.h b/testing/adios2/engine/EngineWriteReadTestBase.h
new file mode 100644
index 000000000..bca33b8a3
--- /dev/null
+++ b/testing/adios2/engine/EngineWriteReadTestBase.h
@@ -0,0 +1,62 @@
+#include <cstdint>
+
+#include <array>
+#include <iostream>
+#include <stdexcept>
+
+#include <adios2.h>
+
+#include <gtest/gtest.h>
+
+class EngineWriteReadTestBase : public ::testing::Test
+{
+public:
+    EngineWriteReadTestBase();
+
+protected:
+    adios::ADIOS m_adios;
+
+    // To be created by child class SetUp()
+    std::shared_ptr<adios::Engine> m_Engine;
+
+    // Shared test functions
+    void Declare1D_8();
+    void Declare2D_2x4();
+    void Declare2D_4x2();
+
+    virtual void OpenWrite(std::string fname) = 0;
+
+    void WriteStep(size_t step);
+
+    void OpenWriteClose(std::string fname);
+
+    //*************************************************************************
+    // Test Data
+    //*************************************************************************
+
+    // Test data for each type.  Make sure our values exceed the range of the
+    // previous size to make sure we all bytes for each element
+    std::array<char, 10> m_DataI8 = {0, 1, -2, 3, -4, 5, -6, 7, -8, 9};
+    std::array<int16_t, 10> m_DataI16 = {512, 513,  -510, 515,  -508,
+                                         517, -506, 519,  -504, 521};
+    std::array<int32_t, 10> m_DataI32 = {131072,  131073, -131070, 131075,
+                                         -131068, 131077, -131066, 131079,
+                                         -131064, 131081};
+    std::array<int64_t, 10> m_DataI64 = {
+        8589934592, 8589934593,  -8589934590, 8589934595,  -8589934588,
+        8589934597, -8589934586, 8589934599,  -8589934584, 8589934601};
+    std::array<unsigned char, 10> m_DataU8 = {128, 129, 130, 131, 132,
+                                              133, 134, 135, 136, 137};
+    std::array<uint16_t, 10> m_DataU16 = {32768, 32769, 32770, 32771, 32772,
+                                          32773, 32774, 32775, 32776, 32777};
+    std::array<uint32_t, 10> m_DataU32 = {
+        2147483648, 2147483649, 2147483650, 2147483651, 2147483652,
+        2147483653, 2147483654, 2147483655, 2147483656, 2147483657};
+    std::array<uint64_t, 10> m_DataU64 = {
+        9223372036854775808UL, 9223372036854775809UL, 9223372036854775810UL,
+        9223372036854775811UL, 9223372036854775812UL, 9223372036854775813UL,
+        9223372036854775814UL, 9223372036854775815UL, 9223372036854775816UL,
+        9223372036854775817UL};
+    std::array<float, 10> m_DataR32 = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
+    std::array<double, 10> m_DataR64 = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
+};
diff --git a/testing/adios2/engine/adios1/CMakeLists.txt b/testing/adios2/engine/adios1/CMakeLists.txt
index bfecd4ddc..b1d41d163 100644
--- a/testing/adios2/engine/adios1/CMakeLists.txt
+++ b/testing/adios2/engine/adios1/CMakeLists.txt
@@ -2,3 +2,10 @@
 # Distributed under the OSI-approved Apache License, Version 2.0.  See
 # accompanying file Copyright.txt for details.
 #------------------------------------------------------------------------------#
+
+add_executable(TestADIOS1WriteRead
+  TestADIOS1WriteRead.cpp
+  ../EngineWriteReadTestBase.cpp
+)
+target_link_libraries(TestADIOS1WriteRead adios2 gtest gtest_main)
+add_test(NAME adios2::engine::adios1::write_read COMMAND TestADIOS1WriteRead)
diff --git a/testing/adios2/engine/adios1/TestADIOS1WriteRead.cpp b/testing/adios2/engine/adios1/TestADIOS1WriteRead.cpp
new file mode 100644
index 000000000..235b4d6d7
--- /dev/null
+++ b/testing/adios2/engine/adios1/TestADIOS1WriteRead.cpp
@@ -0,0 +1,47 @@
+#include <cstdint>
+
+#include <iostream>
+#include <stdexcept>
+
+#include <adios2.h>
+
+#include <gtest/gtest.h>
+
+#include "../EngineWriteReadTestBase.h"
+
+class ADIOS1WriteReadTest : public EngineWriteReadTestBase
+{
+public:
+    ADIOS1WriteReadTest() : EngineWriteReadTestBase() {}
+
+protected:
+    void OpenWrite(std::string fname)
+    {
+        auto &m_EngineSettings = m_adios.DeclareMethod("TestMethod");
+        m_EngineSettings.SetEngine("ADIOS1Writer");
+        m_EngineSettings.SetParameters("profile_units=mus");
+        m_EngineSettings.AddTransport("File", "profile_units=mus",
+                                      "have_metadata_file=no");
+
+        m_Engine = m_adios.Open(fname, "w", m_EngineSettings);
+        ASSERT_NE(m_Engine, nullptr);
+    }
+};
+
+TEST_F(ADIOS1WriteReadTest, WriteRead_1D_8)
+{
+    EngineWriteReadTestBase::Declare1D_8();
+    EngineWriteReadTestBase::OpenWriteClose("ADIOS1WriteReadTest_1D_8.bp");
+}
+
+TEST_F(ADIOS1WriteReadTest, WriteRead_2D_2x4)
+{
+    EngineWriteReadTestBase::Declare2D_2x4();
+    EngineWriteReadTestBase::OpenWriteClose("ADIOS1WriteReadTest_2D_2x4.bp");
+}
+
+TEST_F(ADIOS1WriteReadTest, WriteRead_2D_4x2)
+{
+    EngineWriteReadTestBase::Declare2D_4x2();
+    EngineWriteReadTestBase::OpenWriteClose("ADIOS1WriteReadTest_2D_4x2.bp");
+}
diff --git a/testing/adios2/engine/bp/CMakeLists.txt b/testing/adios2/engine/bp/CMakeLists.txt
index 6042b3630..8188a4caf 100644
--- a/testing/adios2/engine/bp/CMakeLists.txt
+++ b/testing/adios2/engine/bp/CMakeLists.txt
@@ -3,6 +3,9 @@
 # accompanying file Copyright.txt for details.
 #------------------------------------------------------------------------------#
 
-add_executable(TestBPWriteRead TestBPWriteRead.cpp)
+add_executable(TestBPWriteRead
+  TestBPWriteRead.cpp
+  ../EngineWriteReadTestBase.cpp
+)
 target_link_libraries(TestBPWriteRead adios2 gtest gtest_main)
 add_test(NAME adios2::engine::bp::write_read COMMAND TestBPWriteRead)
diff --git a/testing/adios2/engine/bp/TestBPWriteRead.cpp b/testing/adios2/engine/bp/TestBPWriteRead.cpp
index a861fa7bc..e4b81122f 100644
--- a/testing/adios2/engine/bp/TestBPWriteRead.cpp
+++ b/testing/adios2/engine/bp/TestBPWriteRead.cpp
@@ -7,164 +7,41 @@
 
 #include <gtest/gtest.h>
 
-class BPWriteReadTest : public ::testing::Test
+#include "../EngineWriteReadTestBase.h"
+
+class BPWriteReadTest : public EngineWriteReadTestBase
 {
 public:
-    BPWriteReadTest() : adios(adios::Verbose::WARN, true) {}
+    BPWriteReadTest() : EngineWriteReadTestBase() {}
 
 protected:
-    virtual void SetUp() {}
-
-    virtual void TearDown() {}
-
-    adios::ADIOS adios;
-
-    // Test data for each type.  Make sure our values exceed the range of the
-    // previous size to make sure we all bytes for each element
-    std::vector<char> m_DataI8 = {0, 1, -2, 3, -4, 5, -6, 7, -8, 9};
-    std::vector<int16_t> m_DataI16 = {512, 513,  -510, 515,  -508,
-                                      517, -506, 519,  -504, 521};
-    std::vector<int32_t> m_DataI32 = {131072,  131073, -131070, 131075,
-                                      -131068, 131077, -131066, 131079,
-                                      -131064, 131081};
-    std::vector<int64_t> m_DataI64 = {
-        8589934592, 8589934593,  -8589934590, 8589934595,  -8589934588,
-        8589934597, -8589934586, 8589934599,  -8589934584, 8589934601};
-    std::vector<unsigned char> m_DataU8 = {128, 129, 130, 131, 132,
-                                           133, 134, 135, 136, 137};
-    std::vector<uint16_t> m_DataU16 = {32768, 32769, 32770, 32771, 32772,
-                                       32773, 32774, 32775, 32776, 32777};
-    std::vector<uint32_t> m_DataU32 = {
-        2147483648, 2147483649, 2147483650, 2147483651, 2147483652,
-        2147483653, 2147483654, 2147483655, 2147483656, 2147483657};
-    std::vector<uint64_t> m_DataU64 = {
-        9223372036854775808UL, 9223372036854775809UL, 9223372036854775810UL,
-        9223372036854775811UL, 9223372036854775812UL, 9223372036854775813UL,
-        9223372036854775814UL, 9223372036854775815UL, 9223372036854775816UL,
-        9223372036854775817UL};
-    std::vector<float> m_DataR32 = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
-    std::vector<double> m_DataR64 = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
-};
-
-TEST_F(BPWriteReadTest, Write1D)
-{
-    auto &var_i8 = adios.DefineVariable<char>("i8", adios::Dims{8});
-    auto &var_i16 = adios.DefineVariable<short>("i16", adios::Dims{8});
-    auto &var_i32 = adios.DefineVariable<int>("i32", adios::Dims{8});
-    auto &var_i64 = adios.DefineVariable<long>("i64", adios::Dims{8});
-    auto &var_u8 = adios.DefineVariable<unsigned char>("u8", adios::Dims{8});
-    auto &var_u16 = adios.DefineVariable<unsigned short>("u16", adios::Dims{8});
-    auto &var_u32 = adios.DefineVariable<unsigned int>("u32", adios::Dims{8});
-    auto &var_u64 = adios.DefineVariable<unsigned long>("u64", adios::Dims{8});
-    auto &var_r32 = adios.DefineVariable<float>("r32", adios::Dims{8});
-    auto &var_r64 = adios.DefineVariable<double>("r64", adios::Dims{8});
-
-    auto &bpWriterSettings = adios.DeclareMethod("SingleFile");
-    bpWriterSettings.SetParameters("profile_units=mus");
-    bpWriterSettings.AddTransport("File", "profile_units=mus",
-                                  "have_metadata_file=no");
-
-    auto bpWriter = adios.Open("BPWriteReadTest1D.bp", "w", bpWriterSettings);
-    ASSERT_NE(bpWriter, nullptr);
-
-    for (size_t t = 0; t < 3; ++t)
+    virtual void OpenWrite(std::string fname)
     {
-        bpWriter->Write(var_i8, m_DataI8.data() + t);
-        bpWriter->Write(var_i16, m_DataI16.data() + t);
-        bpWriter->Write(var_i32, m_DataI32.data() + t);
-        bpWriter->Write(var_i64, m_DataI64.data() + t);
-        bpWriter->Write(var_u8, m_DataU8.data() + t);
-        bpWriter->Write(var_u16, m_DataU16.data() + t);
-        bpWriter->Write(var_u32, m_DataU32.data() + t);
-        bpWriter->Write(var_u64, m_DataU64.data() + t);
-        bpWriter->Write(var_r32, m_DataR32.data() + t);
-        bpWriter->Write(var_r64, m_DataR64.data() + t);
-        bpWriter->Advance();
+        auto &m_EngineSettings = m_adios.DeclareMethod("TestMethod");
+        m_EngineSettings.SetEngine("BPFileWriter");
+        m_EngineSettings.SetParameters("profile_units=mus");
+        m_EngineSettings.AddTransport("File", "profile_units=mus",
+                                      "have_metadata_file=no");
+
+        m_Engine = m_adios.Open(fname, "w", m_EngineSettings);
+        ASSERT_NE(m_Engine, nullptr);
     }
+};
 
-    bpWriter->Close();
+TEST_F(BPWriteReadTest, WriteRead_1D_8)
+{
+    EngineWriteReadTestBase::Declare1D_8();
+    EngineWriteReadTestBase::OpenWriteClose("BPWriteReadTest_1D_8.bp");
 }
 
-TEST_F(BPWriteReadTest, Write2D_2x4)
+TEST_F(BPWriteReadTest, WriteRead_2D_2x4)
 {
-    auto &var_i8 = adios.DefineVariable<char>("i8", adios::Dims{2, 4});
-    auto &var_i16 = adios.DefineVariable<short>("i16", adios::Dims{2, 4});
-    auto &var_i32 = adios.DefineVariable<int>("i32", adios::Dims{2, 4});
-    auto &var_i64 = adios.DefineVariable<long>("i64", adios::Dims{2, 4});
-    auto &var_u8 = adios.DefineVariable<unsigned char>("u8", adios::Dims{2, 4});
-    auto &var_u16 =
-        adios.DefineVariable<unsigned short>("u16", adios::Dims{2, 4});
-    auto &var_u32 =
-        adios.DefineVariable<unsigned int>("u32", adios::Dims{2, 4});
-    auto &var_u64 =
-        adios.DefineVariable<unsigned long>("u64", adios::Dims{2, 4});
-    auto &var_r32 = adios.DefineVariable<float>("r32", adios::Dims{2, 4});
-    auto &var_r64 = adios.DefineVariable<double>("r64", adios::Dims{2, 4});
-
-    auto &bpWriterSettings = adios.DeclareMethod("SingleFile");
-    bpWriterSettings.SetParameters("profile_units=mus");
-    bpWriterSettings.AddTransport("File", "profile_units=mus",
-                                  "have_metadata_file=no");
-
-    auto bpWriter = adios.Open("BPWriteReadTest1D.bp", "w", bpWriterSettings);
-    ASSERT_NE(bpWriter, nullptr);
-
-    for (size_t t = 0; t < 3; ++t)
-    {
-        bpWriter->Write(var_i8, m_DataI8.data() + t);
-        bpWriter->Write(var_i16, m_DataI16.data() + t);
-        bpWriter->Write(var_i32, m_DataI32.data() + t);
-        bpWriter->Write(var_i64, m_DataI64.data() + t);
-        bpWriter->Write(var_u8, m_DataU8.data() + t);
-        bpWriter->Write(var_u16, m_DataU16.data() + t);
-        bpWriter->Write(var_u32, m_DataU32.data() + t);
-        bpWriter->Write(var_u64, m_DataU64.data() + t);
-        bpWriter->Write(var_r32, m_DataR32.data() + t);
-        bpWriter->Write(var_r64, m_DataR64.data() + t);
-        bpWriter->Advance();
-    }
-
-    bpWriter->Close();
+    EngineWriteReadTestBase::Declare2D_2x4();
+    EngineWriteReadTestBase::OpenWriteClose("BPWriteReadTest_2D_2x4.bp");
 }
 
-TEST_F(BPWriteReadTest, Write2D_4x2)
+TEST_F(BPWriteReadTest, WriteRead_2D_4x2)
 {
-    auto &var_i8 = adios.DefineVariable<char>("i8", adios::Dims{4, 2});
-    auto &var_i16 = adios.DefineVariable<short>("i16", adios::Dims{4, 2});
-    auto &var_i32 = adios.DefineVariable<int>("i32", adios::Dims{4, 2});
-    auto &var_i64 = adios.DefineVariable<long>("i64", adios::Dims{4, 2});
-    auto &var_u8 = adios.DefineVariable<unsigned char>("u8", adios::Dims{4, 2});
-    auto &var_u16 =
-        adios.DefineVariable<unsigned short>("u16", adios::Dims{4, 2});
-    auto &var_u32 =
-        adios.DefineVariable<unsigned int>("u32", adios::Dims{4, 2});
-    auto &var_u64 =
-        adios.DefineVariable<unsigned long>("u64", adios::Dims{4, 2});
-    auto &var_r32 = adios.DefineVariable<float>("r32", adios::Dims{4, 2});
-    auto &var_r64 = adios.DefineVariable<double>("r64", adios::Dims{4, 2});
-
-    auto &bpWriterSettings = adios.DeclareMethod("SingleFile");
-    bpWriterSettings.SetParameters("profile_units=mus");
-    bpWriterSettings.AddTransport("File", "profile_units=mus",
-                                  "have_metadata_file=no");
-
-    auto bpWriter = adios.Open("BPWriteReadTest1D.bp", "w", bpWriterSettings);
-    ASSERT_NE(bpWriter, nullptr);
-
-    for (size_t t = 0; t < 3; ++t)
-    {
-        bpWriter->Write(var_i8, m_DataI8.data() + t);
-        bpWriter->Write(var_i16, m_DataI16.data() + t);
-        bpWriter->Write(var_i32, m_DataI32.data() + t);
-        bpWriter->Write(var_i64, m_DataI64.data() + t);
-        bpWriter->Write(var_u8, m_DataU8.data() + t);
-        bpWriter->Write(var_u16, m_DataU16.data() + t);
-        bpWriter->Write(var_u32, m_DataU32.data() + t);
-        bpWriter->Write(var_u64, m_DataU64.data() + t);
-        bpWriter->Write(var_r32, m_DataR32.data() + t);
-        bpWriter->Write(var_r64, m_DataR64.data() + t);
-        bpWriter->Advance();
-    }
-
-    bpWriter->Close();
+    EngineWriteReadTestBase::Declare2D_4x2();
+    EngineWriteReadTestBase::OpenWriteClose("BPWriteReadTest_2D_4x2.bp");
 }
diff --git a/testing/adios2/engine/hdf5/CMakeLists.txt b/testing/adios2/engine/hdf5/CMakeLists.txt
index bfecd4ddc..51e979438 100644
--- a/testing/adios2/engine/hdf5/CMakeLists.txt
+++ b/testing/adios2/engine/hdf5/CMakeLists.txt
@@ -2,3 +2,10 @@
 # Distributed under the OSI-approved Apache License, Version 2.0.  See
 # accompanying file Copyright.txt for details.
 #------------------------------------------------------------------------------#
+
+add_executable(TestHDF5WriteRead
+  TestHDF5WriteRead.cpp
+  ../EngineWriteReadTestBase.cpp
+)
+target_link_libraries(TestHDF5WriteRead adios2 gtest gtest_main)
+add_test(NAME adios2::engine::hdf5::write_read COMMAND TestHDF5WriteRead)
diff --git a/testing/adios2/engine/hdf5/TestHDF5WriteRead.cpp b/testing/adios2/engine/hdf5/TestHDF5WriteRead.cpp
new file mode 100644
index 000000000..317c243ec
--- /dev/null
+++ b/testing/adios2/engine/hdf5/TestHDF5WriteRead.cpp
@@ -0,0 +1,47 @@
+#include <cstdint>
+
+#include <iostream>
+#include <stdexcept>
+
+#include <adios2.h>
+
+#include <gtest/gtest.h>
+
+#include "../EngineWriteReadTestBase.h"
+
+class HDF5WriteReadTest : public EngineWriteReadTestBase
+{
+public:
+    HDF5WriteReadTest() : EngineWriteReadTestBase() {}
+
+protected:
+    void OpenWrite(std::string fname)
+    {
+        auto &m_EngineSettings = m_adios.DeclareMethod("TestMethod");
+        m_EngineSettings.SetEngine("HDF5Writer");
+        m_EngineSettings.SetParameters("profile_units=mus");
+        m_EngineSettings.AddTransport("File", "profile_units=mus",
+                                      "have_metadata_file=no");
+
+        m_Engine = m_adios.Open(fname, "w", m_EngineSettings);
+        ASSERT_NE(m_Engine, nullptr);
+    }
+};
+
+TEST_F(HDF5WriteReadTest, WriteRead_1D_8)
+{
+    EngineWriteReadTestBase::Declare1D_8();
+    EngineWriteReadTestBase::OpenWriteClose("HDF5WriteReadTest_1D_8.h5");
+}
+
+TEST_F(HDF5WriteReadTest, WriteRead_2D_2x4)
+{
+    EngineWriteReadTestBase::Declare2D_2x4();
+    EngineWriteReadTestBase::OpenWriteClose("HDF5WriteReadTest_2D_2x4.h5");
+}
+
+TEST_F(HDF5WriteReadTest, WriteRead_2D_4x2)
+{
+    EngineWriteReadTestBase::Declare2D_4x2();
+    EngineWriteReadTestBase::OpenWriteClose("HDF5WriteReadTest_2D_4x2.h5");
+}
-- 
GitLab