209 {
210
211 SECTION( LABEL_CORRECTNESS ) {
212
213 const char* checkpointFn = "test_checkpoint.bp";
214
215
216
217
218
219
220
221 int legalNumNodes = 1;
222
223 auto testFunc = [&](
Qureg qureg) {
224
227
228
229 if (qureg.numNodes != legalNumNodes)
230 return;
231
233 REQUIRE_AGREE(qureg, newQureg);
234
236 };
237
238
239 SECTION( LABEL_STATEVEC ) { if (QUEST_COMPILE_ADIOS2) TEST_ON_CACHED_QUREGS(getCachedStatevecs(), testFunc); SUCCEED( ); }
240 SECTION( LABEL_DENSMATR ) { if (QUEST_COMPILE_ADIOS2) TEST_ON_CACHED_QUREGS(getCachedDensmatrs(), testFunc); SUCCEED( ); }
241
242 CAPTURE( checkpointFn );
243
244
245
246
249 std::filesystem::remove_all(checkpointFn);
251 }
252
253 SECTION( LABEL_VALIDATION ) {
254
255 SECTION( "adios2 not compiled" ) {
256
257 if (!QUEST_COMPILE_ADIOS2)
258 REQUIRE_THROWS_WITH(
createQuregFromFile(
"dummy.bp"), ContainsSubstring(
"compiled with ADIOS2") );
259
260 SUCCEED( );
261 }
262
263 SECTION( "bad name" ) {
264
265 if (QUEST_COMPILE_ADIOS2)
266 REQUIRE_THROWS_WITH(
createQuregFromFile(
"BAD_FILENAME"), ContainsSubstring(
"could not be opened") );
267
268 SUCCEED( );
269 }
270
271 SECTION( "differing distributions" ) {
272
273
274 if (QUEST_COMPILE_ADIOS2 &&
getQuESTEnv().numNodes > 1) {
275
276
277
279
280 CAPTURE( quregDistrib.numNodes );
281
282
283 const char* fn = "test_checkpoint.bp";
285 REQUIRE_THROWS_WITH(
createQuregFromFile(fn), ContainsSubstring(
"distributions must match") );
286
287
291 std::filesystem::remove_all(fn);
293 }
294
295 SUCCEED( );
296 }
297
298
299
300
301
302
303 }
304}
Qureg createQuregFromFile(const char *fn)
void saveQuregToFile(Qureg qureg, const char *fn)
void initRandomPureState(Qureg qureg)
Qureg createCustomQureg(int numQubits, int isDensMatr, int useDistrib, int useGpuAccel, int useMultithread)
void destroyQureg(Qureg qureg)