Skip to content

Commit 1531f0e

Browse files
author
Lukasz A.J. Wrona
committed
static debug_model
1 parent f5c1b29 commit 1531f0e

File tree

2 files changed

+42
-32
lines changed

2 files changed

+42
-32
lines changed

src/solvers/refinement/string_refinement.cpp

+42-28
Original file line numberDiff line numberDiff line change
@@ -1011,7 +1011,7 @@ static exprt get_array(
10111011
/// should only be used for debugging.
10121012
/// \par parameters: a constant array expression and a integer expression
10131013
/// \return a string
1014-
std::string string_refinementt::string_of_array(const array_exprt &arr)
1014+
static std::string string_of_array(const array_exprt &arr)
10151015
{
10161016
unsigned n;
10171017
if(arr.type().id()!=ID_array)
@@ -1025,39 +1025,44 @@ std::string string_refinementt::string_of_array(const array_exprt &arr)
10251025

10261026
/// Display part of the current model by mapping the variables created by the
10271027
/// solver to constant expressions given by the current model
1028-
void string_refinementt::debug_model()
1028+
void debug_model(
1029+
const replace_mapt &symbol_resolve,
1030+
messaget::mstreamt &stream,
1031+
const namespacet &ns,
1032+
std::size_t max_string_length,
1033+
std::function<exprt(const exprt&)> super_get,
1034+
const std::vector<symbol_exprt> &boolean_symbols,
1035+
const std::vector<symbol_exprt> &index_symbols)
10291036
{
1030-
const auto super_get = [this](const exprt& expr) {
1031-
return supert::get(expr);
1032-
};
1037+
const auto eom = messaget::eom;
10331038
const std::string indent(" ");
10341039
for(auto it : symbol_resolve)
10351040
{
10361041
if(const auto refined=expr_cast<string_exprt>(it.second))
10371042
{
1038-
debug() << "- " << from_expr(ns, "", to_symbol_expr(it.first)) << ":\n";
1039-
debug() << indent << indent << "in_map: "
1040-
<< from_expr(ns, "", *refined) << eom;
1041-
debug() << indent << indent << "resolved: "
1042-
<< from_expr(ns, "", *refined) << eom;
1043+
stream << "- " << from_expr(ns, "", to_symbol_expr(it.first)) << ":\n";
1044+
stream << indent << indent << "in_map: "
1045+
<< from_expr(ns, "", *refined) << eom;
1046+
stream << indent << indent << "resolved: "
1047+
<< from_expr(ns, "", *refined) << eom;
10431048
const exprt &econtent=refined->content();
10441049
const exprt &elength=refined->length();
10451050

1046-
exprt len=supert::get(elength);
1051+
exprt len=super_get(elength);
10471052
len=simplify_expr(len, ns);
10481053
const exprt arr=get_array(
10491054
super_get,
10501055
ns,
1051-
generator.max_string_length,
1056+
max_string_length,
10521057
econtent, len);
10531058
if(arr.id()==ID_array)
1054-
debug() << indent << indent << "as_string: \""
1055-
<< string_of_array(to_array_expr(arr)) << "\"\n";
1059+
stream << indent << indent << "as_string: \""
1060+
<< string_of_array(to_array_expr(arr)) << "\"\n";
10561061
else
1057-
debug() << indent << indent << "as_char_array: "
1058-
<< from_expr(ns, "", arr) << "\n";
1062+
stream << indent << indent << "as_char_array: "
1063+
<< from_expr(ns, "", arr) << "\n";
10591064

1060-
debug() << indent << indent << "size: " << from_expr(ns, "", len) << eom;
1065+
stream << indent << indent << "size: " << from_expr(ns, "", len) << eom;
10611066
}
10621067
else
10631068
{
@@ -1068,25 +1073,25 @@ void string_refinementt::debug_model()
10681073
"handled"));
10691074
exprt arr=it.second;
10701075
replace_expr(symbol_resolve, arr);
1071-
debug() << "- " << from_expr(ns, "", to_symbol_expr(it.first)) << ":\n";
1072-
debug() << indent << indent << "resolved: "
1076+
stream << "- " << from_expr(ns, "", to_symbol_expr(it.first)) << ":\n";
1077+
stream << indent << indent << "resolved: "
10731078
<< from_expr(ns, "", arr) << "\n";
10741079
exprt arr_model=get_array(super_get, arr);
1075-
debug() << indent << indent << "char_array: "
1076-
<< from_expr(ns, "", arr_model) << eom;
1080+
stream << indent << indent << "char_array: "
1081+
<< from_expr(ns, "", arr_model) << eom;
10771082
}
10781083
}
10791084

1080-
for(const auto it : generator.get_boolean_symbols())
1085+
for(const auto it : boolean_symbols)
10811086
{
1082-
debug() << " - " << it.get_identifier() << ": "
1083-
<< from_expr(ns, "", supert::get(it)) << eom;
1087+
stream << " - " << it.get_identifier() << ": "
1088+
<< from_expr(ns, "", super_get(it)) << eom;
10841089
}
10851090

1086-
for(const auto it : generator.get_index_symbols())
1091+
for(const auto it : index_symbols)
10871092
{
1088-
debug() << " - " << it.get_identifier() << ": "
1089-
<< from_expr(ns, "", supert::get(it)) << eom;
1093+
stream << " - " << it.get_identifier() << ": "
1094+
<< from_expr(ns, "", super_get(it)) << eom;
10901095
}
10911096
}
10921097

@@ -1382,7 +1387,16 @@ static std::pair<bool, std::vector<exprt>> check_axioms(
13821387
{
13831388
const auto eom = messaget::eom;
13841389
stream << "string_refinementt::check_axioms:" << eom;
1385-
// debug_model();
1390+
1391+
#if 0
1392+
debug_model(symbol_resolve,
1393+
stream,
1394+
ns,
1395+
max_string_length,
1396+
get,
1397+
generator.get_boolean_symbols(),
1398+
generator.get_index_symbols());
1399+
#endif
13861400

13871401
// Maps from indexes of violated universal axiom to a witness of violation
13881402
std::map<size_t, exprt> violated;

src/solvers/refinement/string_refinement.h

-4
Original file line numberDiff line numberDiff line change
@@ -99,9 +99,5 @@ class string_refinementt final: public bv_refinementt
9999
bool add_to_index_set=true);
100100

101101
bool add_axioms_for_string_assigns(const exprt &lhs, const exprt &rhs);
102-
103-
void debug_model();
104-
105-
std::string string_of_array(const array_exprt &arr);
106102
};
107103
#endif

0 commit comments

Comments
 (0)