@@ -4635,41 +4635,48 @@ TEST_CASE( "late_setting_of_iterationencoding", "[serial]" )
46354635 " ../samples/change_name_and_encoding_10.json" ) );
46364636}
46374637
4638- void append_mode ( std::string const & extension )
4638+ void append_mode (
4639+ std::string const & extension,
4640+ bool variableBased,
4641+ std::string jsonConfig = " {}" )
46394642{
4640- std::string jsonConfig = R"END(
4641- {
4642- "adios2":
4643- {
4644- "schema": 20210209,
4645- "engine":
4646- {
4647- "usesteps" : true
4648- }
4649- }
4650- })END" ;
4651- auto writeSomeIterations = []( WriteIterations && writeIterations,
4652- std::vector< uint64_t > indices )
4653- {
4643+
4644+ std::string filename = ( variableBased ? " ../samples/append_variablebased."
4645+ : " ../samples/append_groupbased." ) +
4646+ extension;
4647+ std::vector< int > data ( 10 , 0 );
4648+ auto writeSomeIterations = [ &data ](
4649+ WriteIterations && writeIterations,
4650+ std::vector< uint64_t > indices ) {
46544651 for ( auto index : indices )
46554652 {
46564653 auto it = writeIterations[ index ];
46574654 auto dataset = it.meshes [ " E" ][ " x" ];
4658- dataset.resetDataset ( { Datatype::INT , { 1 } } );
4659- dataset.makeConstant < int >( 0 );
4655+ dataset.resetDataset ( { Datatype::INT , { 10 } } );
4656+ dataset.storeChunk ( data, { 0 }, { 10 } );
46604657 // test that it works without closing too
46614658 it.close ();
46624659 }
46634660 };
46644661 {
4665- Series write (
4666- " ../samples/append." + extension, Access::CREATE , jsonConfig );
4662+ Series write ( filename, Access::CREATE , jsonConfig );
4663+ if ( variableBased )
4664+ {
4665+ if (write.backend () != " ADIOS2" )
4666+ {
4667+ return ;
4668+ }
4669+ write.setIterationEncoding ( IterationEncoding::variableBased );
4670+ }
46674671 writeSomeIterations (
46684672 write.writeIterations (), std::vector< uint64_t >{ 0 , 1 } );
46694673 }
46704674 {
4671- Series write (
4672- " ../samples/append." + extension, Access::APPEND , jsonConfig );
4675+ Series write ( filename, Access::APPEND , jsonConfig );
4676+ if ( variableBased )
4677+ {
4678+ write.setIterationEncoding ( IterationEncoding::variableBased );
4679+ }
46734680 if ( write.backend () == " ADIOS1" )
46744681 {
46754682 REQUIRE_THROWS_AS (
@@ -4683,8 +4690,11 @@ void append_mode( std::string const & extension )
46834690 write.flush ();
46844691 }
46854692 {
4686- Series write (
4687- " ../samples/append." + extension, Access::APPEND , jsonConfig );
4693+ Series write ( filename, Access::APPEND , jsonConfig );
4694+ if ( variableBased )
4695+ {
4696+ write.setIterationEncoding ( IterationEncoding::variableBased );
4697+ }
46884698 if ( write.backend () == " ADIOS1" )
46894699 {
46904700 REQUIRE_THROWS_AS (
@@ -4698,8 +4708,23 @@ void append_mode( std::string const & extension )
46984708 write.flush ();
46994709 }
47004710 {
4701- Series read ( " ../samples/append." + extension, Access::READ_ONLY );
4702- REQUIRE ( read.iterations .size () == 5 );
4711+ Series read ( filename, Access::READ_ONLY );
4712+ if ( variableBased )
4713+ {
4714+ // in variable-based encodings, iterations are not parsed ahead of
4715+ // time but as they go
4716+ unsigned counter = 0 ;
4717+ for ( auto iteration : read.readIterations () )
4718+ {
4719+ REQUIRE ( iteration.iterationIndex == counter );
4720+ ++counter;
4721+ }
4722+ REQUIRE ( counter == 5 );
4723+ }
4724+ else
4725+ {
4726+ REQUIRE ( read.iterations .size () == 5 );
4727+ }
47034728 /*
47044729 * Roadmap: for now, reading this should work by ignoring the last
47054730 * duplicate iteration.
@@ -4715,7 +4740,43 @@ TEST_CASE( "append_mode", "[serial]" )
47154740{
47164741 for ( auto const & t : testedFileExtensions () )
47174742 {
4718- append_mode ( t );
4743+ if ( t == " h5" )
4744+ {
4745+ continue ;
4746+ }
4747+ if ( t == " bp" )
4748+ {
4749+ std::string jsonConfigOld = R"END(
4750+ {
4751+ "adios2":
4752+ {
4753+ "schema": 0,
4754+ "engine":
4755+ {
4756+ "usesteps" : true
4757+ }
4758+ }
4759+ })END" ;
4760+ std::string jsonConfigNew = R"END(
4761+ {
4762+ "adios2":
4763+ {
4764+ "schema": 20210209,
4765+ "engine":
4766+ {
4767+ "usesteps" : true
4768+ }
4769+ }
4770+ })END" ;
4771+ append_mode ( t, false , jsonConfigOld );
4772+ append_mode ( t, false , jsonConfigNew );
4773+ append_mode ( t, true , jsonConfigOld );
4774+ append_mode ( t, true , jsonConfigNew );
4775+ }
4776+ else
4777+ {
4778+ append_mode ( t, false );
4779+ }
47194780 }
47204781}
47214782
0 commit comments