Skip to content

Commit c8eb7e0

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 992bd3a commit c8eb7e0

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
@@ -272,12 +272,14 @@ SCENARIO("path strategies")
272272

273273
void symex_eventt::validate_result(
274274
listt &events,
275-
const safety_checkert::resultt result)
275+
const safety_checkert::resultt result,
276+
std::size_t &counter)
276277
{
277278
INFO(
278279
"Expecting result to be '"
279280
<< (result == safety_checkert::resultt::SAFE ? "success" : "failure")
280-
<< "'");
281+
<< "' (item at index [" << counter << "] in expected results list");
282+
++counter;
281283

282284
REQUIRE(result != safety_checkert::resultt::ERROR);
283285

@@ -297,25 +299,33 @@ void symex_eventt::validate_result(
297299

298300
void symex_eventt::validate_resume(
299301
listt &events,
300-
const goto_symex_statet &state)
302+
const goto_symex_statet &state,
303+
std::size_t &counter)
301304
{
302305
REQUIRE(!events.empty());
303306

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

306309
if(state.has_saved_jump_target)
307310
{
308-
INFO("Expecting resume to be 'jump' to line " << dst);
311+
INFO(
312+
"Expecting resume to be 'jump' to line "
313+
<< dst << " (item at index [" << counter
314+
<< "] in expected resumes list)");
309315
REQUIRE(events.front().first == symex_eventt::enumt::JUMP);
310316
}
311317
else if(state.has_saved_next_instruction)
312318
{
313-
INFO("Expecting resume to be 'next' to line " << dst);
319+
INFO(
320+
"Expecting resume to be 'next' to line "
321+
<< dst << " (item at index [" << counter
322+
<< "] in expected resumes list)");
314323
REQUIRE(events.front().first == symex_eventt::enumt::NEXT);
315324
}
316325
else
317326
REQUIRE(false);
318327

328+
++counter;
319329
REQUIRE(events.front().second == dst);
320330

321331
events.pop_front();
@@ -372,7 +382,9 @@ void _check_with_strategy(
372382

373383
bmct bmc(opts, gm.get_symbol_table(), mh, pc, *worklist, callback);
374384
safety_checkert::resultt result = bmc.run(gm);
375-
symex_eventt::validate_result(events, result);
385+
386+
std::size_t expected_results_cnt = 0;
387+
symex_eventt::validate_result(events, result, expected_results_cnt);
376388

377389
if(
378390
result == safety_checkert::resultt::UNSAFE &&
@@ -388,7 +400,7 @@ void _check_with_strategy(
388400
prop_convt &pc = cbmc_solver->prop_conv();
389401
path_storaget::patht &resume = worklist->peek();
390402

391-
symex_eventt::validate_resume(events, resume.state);
403+
symex_eventt::validate_resume(events, resume.state, expected_results_cnt);
392404

393405
path_explorert pe(
394406
opts,
@@ -401,7 +413,7 @@ void _check_with_strategy(
401413
callback);
402414
result = pe.run(gm);
403415

404-
symex_eventt::validate_result(events, result);
416+
symex_eventt::validate_result(events, result, expected_results_cnt);
405417
worklist->pop();
406418

407419
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)