Skip to content

Commit f32c4d2

Browse files
committed
Test step-based iteration layout
1 parent 35c8644 commit f32c4d2

File tree

1 file changed

+113
-0
lines changed

1 file changed

+113
-0
lines changed

test/SerialIOTest.cpp

Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3304,6 +3304,119 @@ TEST_CASE( "serial_iterator", "[serial][adios2]" )
33043304
}
33053305
}
33063306

3307+
void
3308+
stepBasedSingleIteration( std::string const & file )
3309+
{
3310+
std::string config = R"END(
3311+
{
3312+
"adios2":
3313+
{
3314+
"new_attribute_layout": true,
3315+
"engine":
3316+
{
3317+
"usesteps": true
3318+
}
3319+
}
3320+
})END";
3321+
constexpr Extent::value_type extent = 1000;
3322+
{
3323+
Series writeSeries( file, Access::CREATE, config );
3324+
writeSeries.setIterationEncoding( IterationEncoding::stepBased );
3325+
auto iterations = writeSeries.writeIterations();
3326+
auto iteration = writeSeries.iterations[ 0 ];
3327+
auto E_x = iteration.meshes[ "E" ][ "x" ];
3328+
E_x.resetDataset(
3329+
openPMD::Dataset( openPMD::Datatype::INT, { 1000 } ) );
3330+
std::vector< int > data( 1000, 0 );
3331+
std::iota( data.begin(), data.end(), 0 );
3332+
E_x.storeChunk( data, { 0 }, { 1000 } );
3333+
writeSeries.flush();
3334+
}
3335+
3336+
{
3337+
Series readSeries( file, Access::READ_ONLY, config );
3338+
3339+
auto E_x = readSeries.iterations[ 0 ].meshes[ "E" ][ "x" ];
3340+
REQUIRE( E_x.getDimensionality() == 1 );
3341+
REQUIRE( E_x.getExtent()[ 0 ] == extent );
3342+
auto chunk = E_x.loadChunk< int >( { 0 }, { extent } );
3343+
readSeries.flush();
3344+
for( size_t i = 0; i < extent; ++i )
3345+
{
3346+
REQUIRE( chunk.get()[ i ] == i );
3347+
}
3348+
}
3349+
}
3350+
3351+
TEST_CASE( "stepBasedSingleIteration", "[serial][adios2]" )
3352+
{
3353+
for( auto const & t : testedFileExtensions() )
3354+
{
3355+
stepBasedSingleIteration( "../samples/stepBasedSingleIteration." + t );
3356+
}
3357+
}
3358+
3359+
#if openPMD_HAVE_ADIOS2
3360+
void
3361+
stepBasedSeries( std::string const & file )
3362+
{
3363+
std::string config = R"END(
3364+
{
3365+
"adios2":
3366+
{
3367+
"new_attribute_layout": true,
3368+
"engine":
3369+
{
3370+
"usesteps": true
3371+
}
3372+
}
3373+
})END";
3374+
constexpr Extent::value_type extent = 1000;
3375+
{
3376+
Series writeSeries( file, Access::CREATE, config );
3377+
if( writeSeries.backend() == "ADIOS1" )
3378+
{
3379+
return;
3380+
}
3381+
writeSeries.setIterationEncoding( IterationEncoding::stepBased );
3382+
auto iterations = writeSeries.writeIterations();
3383+
for( size_t i = 0; i < 10; ++i )
3384+
{
3385+
auto iteration = iterations[ i ];
3386+
auto E_x = iteration.meshes[ "E" ][ "x" ];
3387+
E_x.resetDataset(
3388+
openPMD::Dataset( openPMD::Datatype::INT, { 1000 } ) );
3389+
std::vector< int > data( 1000, i );
3390+
E_x.storeChunk( data, { 0 }, { 1000 } );
3391+
iteration.close();
3392+
}
3393+
}
3394+
3395+
Series readSeries( file, Access::READ_ONLY, config );
3396+
3397+
size_t last_iteration_index = 0;
3398+
for( auto iteration : readSeries.readIterations() )
3399+
{
3400+
auto E_x = iteration.meshes[ "E" ][ "x" ];
3401+
REQUIRE( E_x.getDimensionality() == 1 );
3402+
REQUIRE( E_x.getExtent()[ 0 ] == extent );
3403+
auto chunk = E_x.loadChunk< int >( { 0 }, { extent } );
3404+
iteration.close();
3405+
for( size_t i = 0; i < extent; ++i )
3406+
{
3407+
REQUIRE( chunk.get()[ i ] == iteration.iterationIndex );
3408+
}
3409+
last_iteration_index = iteration.iterationIndex;
3410+
}
3411+
REQUIRE( last_iteration_index == 9 );
3412+
}
3413+
3414+
TEST_CASE( "stepBasedSeries", "[serial][adios2]" )
3415+
{
3416+
stepBasedSeries( "../samples/stepBasedSeries.bp" );
3417+
}
3418+
#endif
3419+
33073420
void
33083421
iterate_nonstreaming_series( std::string const & file )
33093422
{

0 commit comments

Comments
 (0)