Skip to content

Commit ea327c4

Browse files
committed
Test step-based iteration layout
1 parent 3174d5b commit ea327c4

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
@@ -3249,6 +3249,119 @@ TEST_CASE( "serial_iterator", "[serial][adios2]" )
32493249
}
32503250
}
32513251

3252+
void
3253+
stepBasedSingleIteration( std::string const & file )
3254+
{
3255+
std::string config = R"END(
3256+
{
3257+
"adios2":
3258+
{
3259+
"new_attribute_layout": true,
3260+
"engine":
3261+
{
3262+
"usesteps": true
3263+
}
3264+
}
3265+
})END";
3266+
constexpr Extent::value_type extent = 1000;
3267+
{
3268+
Series writeSeries( file, Access::CREATE, config );
3269+
writeSeries.setIterationEncoding( IterationEncoding::stepBased );
3270+
auto iterations = writeSeries.writeIterations();
3271+
auto iteration = writeSeries.iterations[ 0 ];
3272+
auto E_x = iteration.meshes[ "E" ][ "x" ];
3273+
E_x.resetDataset(
3274+
openPMD::Dataset( openPMD::Datatype::INT, { 1000 } ) );
3275+
std::vector< int > data( 1000, 0 );
3276+
std::iota( data.begin(), data.end(), 0 );
3277+
E_x.storeChunk( data, { 0 }, { 1000 } );
3278+
writeSeries.flush();
3279+
}
3280+
3281+
{
3282+
Series readSeries( file, Access::READ_ONLY, config );
3283+
3284+
auto E_x = readSeries.iterations[ 0 ].meshes[ "E" ][ "x" ];
3285+
REQUIRE( E_x.getDimensionality() == 1 );
3286+
REQUIRE( E_x.getExtent()[ 0 ] == extent );
3287+
auto chunk = E_x.loadChunk< int >( { 0 }, { extent } );
3288+
readSeries.flush();
3289+
for( size_t i = 0; i < extent; ++i )
3290+
{
3291+
REQUIRE( chunk.get()[ i ] == i );
3292+
}
3293+
}
3294+
}
3295+
3296+
TEST_CASE( "stepBasedSingleIteration", "[serial][adios2]" )
3297+
{
3298+
for( auto const & t : testedFileExtensions() )
3299+
{
3300+
stepBasedSingleIteration( "../samples/stepBasedSingleIteration." + t );
3301+
}
3302+
}
3303+
3304+
#if openPMD_HAVE_ADIOS2
3305+
void
3306+
stepBasedSeries( std::string const & file )
3307+
{
3308+
std::string config = R"END(
3309+
{
3310+
"adios2":
3311+
{
3312+
"new_attribute_layout": true,
3313+
"engine":
3314+
{
3315+
"usesteps": true
3316+
}
3317+
}
3318+
})END";
3319+
constexpr Extent::value_type extent = 1000;
3320+
{
3321+
Series writeSeries( file, Access::CREATE, config );
3322+
if( writeSeries.backend() == "ADIOS1" )
3323+
{
3324+
return;
3325+
}
3326+
writeSeries.setIterationEncoding( IterationEncoding::stepBased );
3327+
auto iterations = writeSeries.writeIterations();
3328+
for( size_t i = 0; i < 10; ++i )
3329+
{
3330+
auto iteration = iterations[ i ];
3331+
auto E_x = iteration.meshes[ "E" ][ "x" ];
3332+
E_x.resetDataset(
3333+
openPMD::Dataset( openPMD::Datatype::INT, { 1000 } ) );
3334+
std::vector< int > data( 1000, i );
3335+
E_x.storeChunk( data, { 0 }, { 1000 } );
3336+
iteration.close();
3337+
}
3338+
}
3339+
3340+
Series readSeries( file, Access::READ_ONLY, config );
3341+
3342+
size_t last_iteration_index = 0;
3343+
for( auto iteration : readSeries.readIterations() )
3344+
{
3345+
auto E_x = iteration.meshes[ "E" ][ "x" ];
3346+
REQUIRE( E_x.getDimensionality() == 1 );
3347+
REQUIRE( E_x.getExtent()[ 0 ] == extent );
3348+
auto chunk = E_x.loadChunk< int >( { 0 }, { extent } );
3349+
iteration.close();
3350+
for( size_t i = 0; i < extent; ++i )
3351+
{
3352+
REQUIRE( chunk.get()[ i ] == iteration.iterationIndex );
3353+
}
3354+
last_iteration_index = iteration.iterationIndex;
3355+
}
3356+
REQUIRE( last_iteration_index == 9 );
3357+
}
3358+
3359+
TEST_CASE( "stepBasedSeries", "[serial][adios2]" )
3360+
{
3361+
stepBasedSeries( "../samples/stepBasedSeries.bp" );
3362+
}
3363+
#endif
3364+
32523365
void
32533366
iterate_nonstreaming_series( std::string const & file )
32543367
{

0 commit comments

Comments
 (0)