CBMC
cover_filter.h
Go to the documentation of this file.
1 /*******************************************************************\
2 
3 Module: Coverage Instrumentation
4 
5 Author: Daniel Kroening
6 
7 \*******************************************************************/
8 
11 
12 #ifndef CPROVER_GOTO_INSTRUMENT_COVER_FILTER_H
13 #define CPROVER_GOTO_INSTRUMENT_COVER_FILTER_H
14 
15 #include <regex>
16 #include <memory>
17 
19 
22 {
23 public:
25  {
26  }
27 
29  virtual bool operator()(
30  const symbolt &identifier,
31  const goto_functionst::goto_functiont &goto_function) const = 0;
32 
35  virtual void report_anomalies() const
36  {
37  // do nothing by default
38  }
39 };
40 
43 {
44 public:
46  {
47  }
48 
50  virtual bool operator()(const source_locationt &) const = 0;
51 
54  virtual void report_anomalies() const
55  {
56  // do nothing by default
57  }
58 };
59 
62 {
63 public:
66  void add(std::unique_ptr<function_filter_baset> filter)
67  {
68  filters.push_back(std::move(filter));
69  }
70 
74  bool operator()(
75  const symbolt &identifier,
76  const goto_functionst::goto_functiont &goto_function) const
77  {
78  for(const auto &filter : filters)
79  if(!(*filter)(identifier, goto_function))
80  return false;
81 
82  return true;
83  }
84 
87  void report_anomalies() const
88  {
89  for(const auto &filter : filters)
90  filter->report_anomalies();
91  }
92 
93 private:
94  std::vector<std::unique_ptr<function_filter_baset>> filters;
95 };
96 
99 {
100 public:
103  void add(std::unique_ptr<goal_filter_baset> filter)
104  {
105  filters.push_back(std::move(filter));
106  }
107 
110  bool operator()(const source_locationt &source_location) const
111  {
112  for(const auto &filter : filters)
113  if(!(*filter)(source_location))
114  return false;
115 
116  return true;
117  }
118 
121  void report_anomalies() const
122  {
123  for(const auto &filter : filters)
124  filter->report_anomalies();
125  }
126 
127 private:
128  std::vector<std::unique_ptr<goal_filter_baset>> filters;
129 };
130 
133 {
134 public:
135  bool operator()(
136  const symbolt &identifier,
137  const goto_functionst::goto_functiont &goto_function) const override;
138 };
139 
141 {
142 public:
144  {
145  }
146 
147  bool operator()(
148  const symbolt &identifier,
149  const goto_functionst::goto_functiont &goto_function) const override;
150 
151 private:
153 };
154 
156 {
157 public:
160  {
161  }
162 
163  bool operator()(
164  const symbolt &identifier,
165  const goto_functionst::goto_functiont &goto_function) const override;
166 
167 private:
169 };
170 
173 {
174 public:
175  explicit include_pattern_filtert(const std::string &cover_include_pattern)
176  : regex_matcher(cover_include_pattern)
177  {
178  }
179 
180  bool operator()(
181  const symbolt &identifier,
182  const goto_functionst::goto_functiont &goto_function) const override;
183 
184 private:
185  std::regex regex_matcher;
186 };
187 
190 {
191 public:
192  bool operator()(
193  const symbolt &identifier,
194  const goto_functionst::goto_functiont &goto_function) const override;
195 };
196 
199 {
200 public:
201  bool operator()(const source_locationt &) const override;
202 };
203 
204 #endif // CPROVER_GOTO_INSTRUMENT_COVER_FILTER_H
function_filter_baset::operator()
virtual bool operator()(const symbolt &identifier, const goto_functionst::goto_functiont &goto_function) const =0
Returns true if the function passes the filter criteria.
dstringt
dstringt has one field, an unsigned integer no which is an index into a static table of strings.
Definition: dstring.h:36
goal_filterst::operator()
bool operator()(const source_locationt &source_location) const
Applies the filters to the given source location.
Definition: cover_filter.h:110
single_function_filtert::operator()
bool operator()(const symbolt &identifier, const goto_functionst::goto_functiont &goto_function) const override
Filter out all functions except for one particular function given in the constructor.
Definition: cover_filter.cpp:69
function_filterst::report_anomalies
void report_anomalies() const
Can be called after final filter application to report on unexpected situations encountered.
Definition: cover_filter.h:87
goal_filterst::filters
std::vector< std::unique_ptr< goal_filter_baset > > filters
Definition: cover_filter.h:128
include_pattern_filtert::regex_matcher
std::regex regex_matcher
Definition: cover_filter.h:185
function_filterst::operator()
bool operator()(const symbolt &identifier, const goto_functionst::goto_functiont &goto_function) const
Applies the filters to the given function.
Definition: cover_filter.h:74
single_function_filtert::function_id
irep_idt function_id
Definition: cover_filter.h:168
goal_filterst::add
void add(std::unique_ptr< goal_filter_baset > filter)
Adds a function filter.
Definition: cover_filter.h:103
trivial_functions_filtert::operator()
bool operator()(const symbolt &identifier, const goto_functionst::goto_functiont &goto_function) const override
Call a goto_program non-trivial if it has:
Definition: cover_filter.cpp:100
single_function_filtert::single_function_filtert
single_function_filtert(const irep_idt &function_id)
Definition: cover_filter.h:158
function_filter_baset::~function_filter_baset
virtual ~function_filter_baset()
Definition: cover_filter.h:24
goal_filter_baset::report_anomalies
virtual void report_anomalies() const
Can be called after final filter application to report on unexpected situations encountered.
Definition: cover_filter.h:54
goal_filterst::report_anomalies
void report_anomalies() const
Can be called after final filter application to report on unexpected situations encountered.
Definition: cover_filter.h:121
internal_goals_filtert
Filters out goals with source locations considered internal.
Definition: cover_filter.h:198
single_function_filtert
Definition: cover_filter.h:155
goal_filter_baset::operator()
virtual bool operator()(const source_locationt &) const =0
Returns true if the goal passes the filter criteria.
file_filtert::operator()
bool operator()(const symbolt &identifier, const goto_functionst::goto_functiont &goto_function) const override
Filter out all functions except those defined in the file that is given in the constructor.
Definition: cover_filter.cpp:55
function_filter_baset
Base class for filtering functions.
Definition: cover_filter.h:21
goal_filter_baset
Base class for filtering goals.
Definition: cover_filter.h:42
goal_filterst
A collection of goal filters to be applied in conjunction.
Definition: cover_filter.h:98
internal_functions_filtert
Filters out CPROVER internal functions.
Definition: cover_filter.h:132
include_pattern_filtert
Filters functions that match the provided pattern.
Definition: cover_filter.h:172
file_filtert
Definition: cover_filter.h:140
source_locationt
Definition: source_location.h:18
goto_functionst::goto_functiont
::goto_functiont goto_functiont
Definition: goto_functions.h:27
trivial_functions_filtert
Filters out trivial functions.
Definition: cover_filter.h:189
include_pattern_filtert::operator()
bool operator()(const symbolt &identifier, const goto_functionst::goto_functiont &goto_function) const override
Filter functions whose name matches the regex.
Definition: cover_filter.cpp:81
file_filtert::file_id
irep_idt file_id
Definition: cover_filter.h:152
symbolt
Symbol table entry.
Definition: symbol.h:27
function_filterst::filters
std::vector< std::unique_ptr< function_filter_baset > > filters
Definition: cover_filter.h:94
goal_filter_baset::~goal_filter_baset
virtual ~goal_filter_baset()
Definition: cover_filter.h:45
goto_functions.h
internal_goals_filtert::operator()
bool operator()(const source_locationt &) const override
Filter goals at source locations considered internal.
Definition: cover_filter.cpp:129
file_filtert::file_filtert
file_filtert(const irep_idt &file_id)
Definition: cover_filter.h:143
function_filterst
A collection of function filters to be applied in conjunction.
Definition: cover_filter.h:61
internal_functions_filtert::operator()
bool operator()(const symbolt &identifier, const goto_functionst::goto_functiont &goto_function) const override
Filter out functions that are not considered provided by the user.
Definition: cover_filter.cpp:23
function_filterst::add
void add(std::unique_ptr< function_filter_baset > filter)
Adds a function filter.
Definition: cover_filter.h:66
function_filter_baset::report_anomalies
virtual void report_anomalies() const
Can be called after final filter application to report on unexpected situations encountered.
Definition: cover_filter.h:35
include_pattern_filtert::include_pattern_filtert
include_pattern_filtert(const std::string &cover_include_pattern)
Definition: cover_filter.h:175