Skip to content

Commit 9734cfe

Browse files
committed
Test step-based iteration layout
1 parent bd1ef94 commit 9734cfe

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
@@ -3293,6 +3293,119 @@ TEST_CASE( "serial_iterator", "[serial][adios2]" )
32933293
}
32943294
}
32953295

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

0 commit comments

Comments
 (0)