Skip to content

Commit

Permalink
Test step-based iteration layout
Browse files Browse the repository at this point in the history
  • Loading branch information
franzpoeschel committed Feb 8, 2021
1 parent 3174d5b commit ea327c4
Showing 1 changed file with 113 additions and 0 deletions.
113 changes: 113 additions & 0 deletions test/SerialIOTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3249,6 +3249,119 @@ TEST_CASE( "serial_iterator", "[serial][adios2]" )
}
}

void
stepBasedSingleIteration( std::string const & file )
{
std::string config = R"END(
{
"adios2":
{
"new_attribute_layout": true,
"engine":
{
"usesteps": true
}
}
})END";
constexpr Extent::value_type extent = 1000;
{
Series writeSeries( file, Access::CREATE, config );
writeSeries.setIterationEncoding( IterationEncoding::stepBased );
auto iterations = writeSeries.writeIterations();
auto iteration = writeSeries.iterations[ 0 ];
auto E_x = iteration.meshes[ "E" ][ "x" ];
E_x.resetDataset(
openPMD::Dataset( openPMD::Datatype::INT, { 1000 } ) );
std::vector< int > data( 1000, 0 );
std::iota( data.begin(), data.end(), 0 );
E_x.storeChunk( data, { 0 }, { 1000 } );
writeSeries.flush();
}

{
Series readSeries( file, Access::READ_ONLY, config );

auto E_x = readSeries.iterations[ 0 ].meshes[ "E" ][ "x" ];
REQUIRE( E_x.getDimensionality() == 1 );
REQUIRE( E_x.getExtent()[ 0 ] == extent );
auto chunk = E_x.loadChunk< int >( { 0 }, { extent } );
readSeries.flush();
for( size_t i = 0; i < extent; ++i )
{
REQUIRE( chunk.get()[ i ] == i );
}
}
}

TEST_CASE( "stepBasedSingleIteration", "[serial][adios2]" )
{
for( auto const & t : testedFileExtensions() )
{
stepBasedSingleIteration( "../samples/stepBasedSingleIteration." + t );
}
}

#if openPMD_HAVE_ADIOS2
void
stepBasedSeries( std::string const & file )
{
std::string config = R"END(
{
"adios2":
{
"new_attribute_layout": true,
"engine":
{
"usesteps": true
}
}
})END";
constexpr Extent::value_type extent = 1000;
{
Series writeSeries( file, Access::CREATE, config );
if( writeSeries.backend() == "ADIOS1" )
{
return;
}
writeSeries.setIterationEncoding( IterationEncoding::stepBased );
auto iterations = writeSeries.writeIterations();
for( size_t i = 0; i < 10; ++i )
{
auto iteration = iterations[ i ];
auto E_x = iteration.meshes[ "E" ][ "x" ];
E_x.resetDataset(
openPMD::Dataset( openPMD::Datatype::INT, { 1000 } ) );
std::vector< int > data( 1000, i );
E_x.storeChunk( data, { 0 }, { 1000 } );
iteration.close();
}
}

Series readSeries( file, Access::READ_ONLY, config );

size_t last_iteration_index = 0;
for( auto iteration : readSeries.readIterations() )
{
auto E_x = iteration.meshes[ "E" ][ "x" ];
REQUIRE( E_x.getDimensionality() == 1 );
REQUIRE( E_x.getExtent()[ 0 ] == extent );
auto chunk = E_x.loadChunk< int >( { 0 }, { extent } );
iteration.close();
for( size_t i = 0; i < extent; ++i )
{
REQUIRE( chunk.get()[ i ] == iteration.iterationIndex );
}
last_iteration_index = iteration.iterationIndex;
}
REQUIRE( last_iteration_index == 9 );
}

TEST_CASE( "stepBasedSeries", "[serial][adios2]" )
{
stepBasedSeries( "../samples/stepBasedSeries.bp" );
}
#endif

void
iterate_nonstreaming_series( std::string const & file )
{
Expand Down

0 comments on commit ea327c4

Please sign in to comment.