Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
#include "EngineWriteReadTest.h"
#include <cstdint>
#include <array>
#include <iostream>
#include <stdexcept>
#include <adios2.h>
#include <gtest/gtest.h>
EngineWriteReadTestBase::EngineWriteReadTestBase(std::string engineName,
std::string fileName)
: m_EngineName(engineName), m_FileName(fileName), m_Method(nullptr)
{
}
void EngineWriteReadTestBase::SetUp()
{
m_adios = std::unique_ptr<adios::ADIOS>(
new adios::ADIOS(adios::Verbose::WARN, true));
}
void EngineWriteReadTestBase::TearDown() { m_adios.reset(); }
void EngineWriteReadTestBase::SetUpWrite()
{
m_Method = &m_adios->DeclareMethod("TestMethod");
m_Method->SetEngine(m_EngineName);
m_Method->AddTransport("File");
m_Engine = m_adios->Open(m_FileName, "w", *m_Method);
ASSERT_NE(m_Engine, nullptr);
}
void EngineWriteReadTestBase::TearDownWrite()
{
m_Method = nullptr;
m_Engine->Close();
m_Engine.reset();
}
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::Write3Steps()
{
for (size_t t = 0; t < 3; ++t)
{
WriteStep(t);
m_Engine->Advance();
}
}
void EngineWriteReadTestBase::WriteRead()
{
Declare();
SetUpWrite();
Write3Steps();
TearDownWrite();
}
//******************************************************************************
// 1D test data
//******************************************************************************
void EngineWriteRead1DTest::Declare()
{
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});
}
//******************************************************************************
// 2D 2x4 test data
//******************************************************************************
void EngineWriteRead2D2x4Test::Declare()
{
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});
}
//******************************************************************************
// 2D 4x2 test data
//******************************************************************************
void EngineWriteRead2D4x2Test::Declare()
{
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});
}
//******************************************************************************
// main
//******************************************************************************
int main(int argc, char **argv)
{
#ifdef ADIOS2_HAVE_MPI
MPI_Init(nullptr, nullptr);
#endif
::testing::InitGoogleTest(&argc, argv);
int result = RUN_ALL_TESTS();
#ifdef ADIOS2_HAVE_MPI
MPI_Finalize();
#endif
return result;
}