Skip to content

Commit 3e8b9d9

Browse files
author
Daniel Kroening
committed
use apply in cover_util
This avoids the case split over the instruction type.
1 parent 12f1571 commit 3e8b9d9

File tree

5 files changed

+27
-84
lines changed

5 files changed

+27
-84
lines changed

regression/cbmc-cover/mcdc1/test.desc

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@ main.c
33
--cover mcdc
44
^EXIT=0$
55
^SIGNAL=0$
6-
^\[main.coverage.1\] file main.c line 14 function main MC/DC independence condition `C && D && !E && A && !B.*: SATISFIED$
7-
^\[main.coverage.2\] file main.c line 14 function main MC/DC independence condition `C && !D && E && A && !B.*: SATISFIED$
8-
^\[main.coverage.3\] file main.c line 14 function main MC/DC independence condition `!C && D && E && A && !B.*: SATISFIED$
9-
^\[main.coverage.4\] file main.c line 14 function main MC/DC independence condition `C && D && E && A && !B.*: SATISFIED$
10-
^\[main.coverage.5\] file main.c line 14 function main MC/DC independence condition `C && D && E && !A && B.*: SATISFIED$
11-
^\[main.coverage.6\] file main.c line 14 function main MC/DC independence condition `C && D && E && !A && !B.*: SATISFIED$
6+
^\[main.coverage.\d+\] file main.c line 14 function main MC/DC independence condition `C && D && !E && A && !B.*: SATISFIED$
7+
^\[main.coverage.\d+\] file main.c line 14 function main MC/DC independence condition `C && !D && E && A && !B.*: SATISFIED$
8+
^\[main.coverage.\d+\] file main.c line 14 function main MC/DC independence condition `!C && D && E && A && !B.*: SATISFIED$
9+
^\[main.coverage.\d+\] file main.c line 14 function main MC/DC independence condition `C && D && E && A && !B.*: SATISFIED$
10+
^\[main.coverage.\d+\] file main.c line 14 function main MC/DC independence condition `C && D && E && !A && B.*: SATISFIED$
11+
^\[main.coverage.\d+\] file main.c line 14 function main MC/DC independence condition `C && D && E && !A && !B.*: SATISFIED$
1212
^\*\* .* of .* covered \(100.0%\)$
1313
--
1414
^warning: ignoring

regression/cbmc-cover/mcdc2/test.desc

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@ main.c
33
--cover mcdc
44
^EXIT=0$
55
^SIGNAL=0$
6-
^\[main.coverage.1\] file main.c line 10 function main MC/DC independence condition `A && !B && !C.*: SATISFIED$
7-
^\[main.coverage.2\] file main.c line 10 function main MC/DC independence condition `!A && B && !C.*: SATISFIED$
8-
^\[main.coverage.3\] file main.c line 10 function main MC/DC independence condition `!A && !B && C.*: SATISFIED$
9-
^\[main.coverage.4\] file main.c line 10 function main MC/DC independence condition `!A && !B && !C.*: SATISFIED$
6+
^\[main.coverage.\d+\] file main.c line 10 function main MC/DC independence condition `A && !B && !C.*: SATISFIED$
7+
^\[main.coverage.\d+\] file main.c line 10 function main MC/DC independence condition `!A && B && !C.*: SATISFIED$
8+
^\[main.coverage.\d+\] file main.c line 10 function main MC/DC independence condition `!A && !B && C.*: SATISFIED$
9+
^\[main.coverage.\d+\] file main.c line 10 function main MC/DC independence condition `!A && !B && !C.*: SATISFIED$
1010
^\*\* .* of .* covered \(100.0%\)$
1111
--
1212
^warning: ignoring

regression/cbmc-cover/mcdc4/test.desc

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@ main.c
33
--cover mcdc
44
^EXIT=0$
55
^SIGNAL=0$
6-
^\[main.coverage.1\] file main.c line 11 function main MC/DC independence condition `A && B && C && !D.*: SATISFIED$
7-
^\[main.coverage.2\] file main.c line 11 function main MC/DC independence condition `A && !B && C && D.*: SATISFIED$
8-
^\[main.coverage.3\] file main.c line 11 function main MC/DC independence condition `A && !B && C && !D.*: SATISFIED$
9-
^\[main.coverage.4\] file main.c line 11 function main MC/DC independence condition `!C && D && A && !B.*: SATISFIED$
10-
^\[main.coverage.5\] file main.c line 11 function main MC/DC independence condition `!A && B && C && !D.*: SATISFIED$
6+
^\[main.coverage.\d+\] file main.c line 11 function main MC/DC independence condition `A && B && C && !D.*: SATISFIED$
7+
^\[main.coverage.\d+\] file main.c line 11 function main MC/DC independence condition `A && !B && C && D.*: SATISFIED$
8+
^\[main.coverage.\d+\] file main.c line 11 function main MC/DC independence condition `A && !B && C && !D.*: SATISFIED$
9+
^\[main.coverage.\d+\] file main.c line 11 function main MC/DC independence condition `!C && D && A && !B.*: SATISFIED$
10+
^\[main.coverage.\d+\] file main.c line 11 function main MC/DC independence condition `!A && B && C && !D.*: SATISFIED$
1111
^\*\* .* of .* covered \(100.0%\)$
1212
--
1313
^warning: ignoring

regression/cbmc-cover/mcdc5/test.desc

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@ main.c
33
--cover mcdc
44
^EXIT=0$
55
^SIGNAL=0$
6-
^\[main.coverage.1\] file main.c line 10 function main MC/DC independence condition `A && !B && C && !D.*: SATISFIED$
7-
^\[main.coverage.2\] file main.c line 10 function main MC/DC independence condition `!C && D && A && !B.*: SATISFIED$
8-
^\[main.coverage.3\] file main.c line 10 function main MC/DC independence condition `!C && !D && A && !B.*: SATISFIED$
9-
^\[main.coverage.4\] file main.c line 10 function main MC/DC independence condition `!A && B && C && !D.*: SATISFIED$
10-
^\[main.coverage.5\] file main.c line 10 function main MC/DC independence condition `!A && !B && C && !D.*: SATISFIED$
6+
^\[main.coverage.\d+\] file main.c line 10 function main MC/DC independence condition `A && !B && C && !D.*: SATISFIED$
7+
^\[main.coverage.\d+\] file main.c line 10 function main MC/DC independence condition `!C && D && A && !B.*: SATISFIED$
8+
^\[main.coverage.\d+\] file main.c line 10 function main MC/DC independence condition `!C && !D && A && !B.*: SATISFIED$
9+
^\[main.coverage.\d+\] file main.c line 10 function main MC/DC independence condition `!A && B && C && !D.*: SATISFIED$
10+
^\[main.coverage.\d+\] file main.c line 10 function main MC/DC independence condition `!A && !B && C && !D.*: SATISFIED$
1111
^\*\* .* of .* covered \(100.0%\)$
1212
--
1313
^warning: ignoring

src/goto-instrument/cover_util.cpp

Lines changed: 7 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -48,36 +48,11 @@ std::set<exprt> collect_conditions(const exprt &src)
4848

4949
std::set<exprt> collect_conditions(const goto_programt::const_targett t)
5050
{
51-
switch(t->type)
52-
{
53-
case GOTO:
54-
case ASSERT:
55-
return collect_conditions(t->guard);
56-
57-
case ASSIGN:
58-
case FUNCTION_CALL:
59-
return collect_conditions(t->code);
60-
61-
case CATCH:
62-
case THROW:
63-
case DEAD:
64-
case DECL:
65-
case RETURN:
66-
case ATOMIC_BEGIN:
67-
case ATOMIC_END:
68-
case START_THREAD:
69-
case END_THREAD:
70-
case END_FUNCTION:
71-
case LOCATION:
72-
case OTHER:
73-
case SKIP:
74-
case ASSUME:
75-
case INCOMPLETE_GOTO:
76-
case NO_INSTRUCTION_TYPE:
77-
break;
78-
}
51+
std::set<exprt> result;
52+
53+
t->apply([&result](const exprt &e) { collect_conditions_rec(e, result); });
7954

80-
return std::set<exprt>();
55+
return result;
8156
}
8257

8358
void collect_operands(const exprt &src, std::vector<exprt> &dest)
@@ -120,43 +95,11 @@ void collect_decisions_rec(const exprt &src, std::set<exprt> &dest)
12095
}
12196
}
12297

123-
std::set<exprt> collect_decisions(const exprt &src)
98+
std::set<exprt> collect_decisions(const goto_programt::const_targett t)
12499
{
125100
std::set<exprt> result;
126-
collect_decisions_rec(src, result);
127-
return result;
128-
}
129101

130-
std::set<exprt> collect_decisions(const goto_programt::const_targett t)
131-
{
132-
switch(t->type)
133-
{
134-
case GOTO:
135-
case ASSERT:
136-
return collect_decisions(t->guard);
137-
138-
case ASSIGN:
139-
case FUNCTION_CALL:
140-
return collect_decisions(t->code);
141-
142-
case CATCH:
143-
case THROW:
144-
case DEAD:
145-
case DECL:
146-
case RETURN:
147-
case ATOMIC_BEGIN:
148-
case ATOMIC_END:
149-
case START_THREAD:
150-
case END_THREAD:
151-
case END_FUNCTION:
152-
case LOCATION:
153-
case OTHER:
154-
case SKIP:
155-
case ASSUME:
156-
case INCOMPLETE_GOTO:
157-
case NO_INSTRUCTION_TYPE:
158-
break;
159-
}
102+
t->apply([&result](const exprt &e) { collect_decisions_rec(e, result); });
160103

161-
return std::set<exprt>();
104+
return result;
162105
}

0 commit comments

Comments
 (0)