Skip to content

Commit e82660b

Browse files
committed
More useful output on path strategy unit tests
The path strategy unit tests now emit an index showing which result in the expected list of results was the one that failed.
1 parent 3d49579 commit e82660b

File tree

2 files changed

+26
-11
lines changed

2 files changed

+26
-11
lines changed

unit/path_strategies.cpp

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -269,12 +269,14 @@ SCENARIO("path strategies")
269269

270270
void symex_eventt::validate_result(
271271
listt &events,
272-
const safety_checkert::resultt result)
272+
const safety_checkert::resultt result,
273+
std::size_t &counter)
273274
{
274275
INFO(
275276
"Expecting result to be '"
276277
<< (result == safety_checkert::resultt::SAFE ? "success" : "failure")
277-
<< "'");
278+
<< "' (item at index [" << counter << "] in expected results list");
279+
++counter;
278280

279281
REQUIRE(result != safety_checkert::resultt::ERROR);
280282

@@ -294,25 +296,33 @@ void symex_eventt::validate_result(
294296

295297
void symex_eventt::validate_resume(
296298
listt &events,
297-
const goto_symex_statet &state)
299+
const goto_symex_statet &state,
300+
std::size_t &counter)
298301
{
299302
REQUIRE(!events.empty());
300303

301304
int dst = std::stoi(state.saved_target->source_location.get_line().c_str());
302305

303306
if(state.has_saved_jump_target)
304307
{
305-
INFO("Expecting resume to be 'jump' to line " << dst);
308+
INFO(
309+
"Expecting resume to be 'jump' to line "
310+
<< dst << " (item at index [" << counter
311+
<< "] in expected resumes list)");
306312
REQUIRE(events.front().first == symex_eventt::enumt::JUMP);
307313
}
308314
else if(state.has_saved_next_instruction)
309315
{
310-
INFO("Expecting resume to be 'next' to line " << dst);
316+
INFO(
317+
"Expecting resume to be 'next' to line "
318+
<< dst << " (item at index [" << counter
319+
<< "] in expected resumes list)");
311320
REQUIRE(events.front().first == symex_eventt::enumt::NEXT);
312321
}
313322
else
314323
REQUIRE(false);
315324

325+
++counter;
316326
REQUIRE(events.front().second == dst);
317327

318328
events.pop_front();
@@ -369,7 +379,9 @@ void _check_with_strategy(
369379

370380
bmct bmc(opts, gm.get_symbol_table(), mh, pc, *worklist, callback);
371381
safety_checkert::resultt result = bmc.run(gm);
372-
symex_eventt::validate_result(events, result);
382+
383+
std::size_t expected_results_cnt = 0;
384+
symex_eventt::validate_result(events, result, expected_results_cnt);
373385

374386
if(
375387
result == safety_checkert::resultt::UNSAFE &&
@@ -385,7 +397,7 @@ void _check_with_strategy(
385397
prop_convt &pc = cbmc_solver->prop_conv();
386398
path_storaget::patht &resume = worklist->peek();
387399

388-
symex_eventt::validate_resume(events, resume.state);
400+
symex_eventt::validate_resume(events, resume.state, expected_results_cnt);
389401

390402
path_explorert pe(
391403
opts,
@@ -398,7 +410,7 @@ void _check_with_strategy(
398410
callback);
399411
result = pe.run(gm);
400412

401-
symex_eventt::validate_result(events, result);
413+
symex_eventt::validate_result(events, result, expected_results_cnt);
402414
worklist->pop();
403415

404416
if(

unit/path_strategies.h

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,13 @@ struct symex_eventt
3636
return pairt(kind, -1);
3737
}
3838

39-
static void
40-
validate_result(listt &events, const safety_checkert::resultt result);
39+
static void validate_result(
40+
listt &events,
41+
const safety_checkert::resultt result,
42+
std::size_t &);
4143

42-
static void validate_resume(listt &events, const goto_symex_statet &state);
44+
static void
45+
validate_resume(listt &events, const goto_symex_statet &state, std::size_t &);
4346
};
4447

4548
void _check_with_strategy(

0 commit comments

Comments
 (0)