Skip to content

Commit 2d0c2e9

Browse files
Natasha Yogananda Jeppudanielsn
Natasha Yogananda Jeppu
authored andcommitted
Add utility to collect clauses and display the clause set in json output for write-solver-stats-to
Clauses are stored as a sorted vector of integers.
1 parent eeb52fe commit 2d0c2e9

File tree

2 files changed

+35
-1
lines changed

2 files changed

+35
-1
lines changed

regression/solver-hardness/solver-hardness-simple/test.desc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ main.c
55
^SIGNAL=0$
66
^\[main.assertion.\d+\] line \d+ assertion a \+ b \< 10: FAILURE$
77
^VERIFICATION FAILED$
8-
\"SAT_hardness\":\{(\"Clauses\":\d+|\"Variables\":\d+|\"Literals\":\d+),(\"Clauses\":\d+|\"Variables\":\d+|\"Literals\":\d+),(\"Clauses\":\d+|\"Variables\":\d+|\"Literals\":\d+)\}
8+
^Valid JSON File$
9+
\"SAT_hardness\": \{(\"ClauseSet\": \[.*\]|\"Clauses\": \d+|\"Variables\": \d+|\"Literals\": \d+), (\"ClauseSet\": \[.*\]|\"Clauses\": \d+|\"Variables\": \d+|\"Literals\": \d+), (\"ClauseSet\": \[.*\]|\"Clauses\": \d+|\"Variables\": \d+|\"Literals\": \d+), (\"ClauseSet\": \[.*\]|\"Clauses\": \d+|\"Variables\": \d+|\"Literals\": \d+)\}
910
--
1011
^warning: ignoring

src/solvers/solver_hardness.cpp

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ operator+=(const solver_hardnesst::sat_hardnesst &other)
2626
clauses += other.clauses;
2727
literals += other.literals;
2828
variables.insert(other.variables.begin(), other.variables.end());
29+
clause_set.insert(clause_set.end(),
30+
other.clause_set.begin(), other.clause_set.end());
2931
return *this;
3032
}
3133

@@ -91,10 +93,20 @@ void solver_hardnesst::register_clause(const bvt &bv)
9193
{
9294
current_hardness.clauses++;
9395
current_hardness.literals += bv.size();
96+
std::vector<int> clause;
97+
9498
for(const auto &literal : bv)
9599
{
96100
current_hardness.variables.insert(literal.var_no());
101+
102+
int signed_literal = literal.var_no();
103+
if(literal.sign())
104+
signed_literal = -signed_literal;
105+
clause.push_back(signed_literal);
97106
}
107+
clause.push_back(0);
108+
std::sort(clause.begin(), clause.end());
109+
current_hardness.clause_set.push_back(clause);
98110
}
99111

100112
void solver_hardnesst::set_outfile(const std::string &file_name)
@@ -151,6 +163,16 @@ void solver_hardnesst::produce_report()
151163
sat_hardness_json["Variables"] =
152164
json_numbert{std::to_string(hardness.variables.size())};
153165

166+
json_arrayt sat_hardness_clause_set_json;
167+
for(auto const &clause : hardness.clause_set)
168+
{
169+
json_arrayt clause_json;
170+
for(auto const &lit : clause)
171+
clause_json.push_back(json_numbert{std::to_string(lit)});
172+
sat_hardness_clause_set_json.push_back(clause_json);
173+
}
174+
sat_hardness_json["ClauseSet"] = sat_hardness_clause_set_json;
175+
154176
hardness_stats_json["SAT_hardness"] = sat_hardness_json;
155177

156178
json_stream_array.push_back(hardness_stats_json);
@@ -183,6 +205,17 @@ void solver_hardnesst::produce_report()
183205
assertion_hardness_json["Variables"] = json_numbert{
184206
std::to_string(assertion_stats.sat_hardness.variables.size())};
185207

208+
json_arrayt assertion_sat_hardness_clause_set_json;
209+
for(auto const &clause : assertion_stats.sat_hardness.clause_set)
210+
{
211+
json_arrayt clause_json;
212+
for(auto const &lit : clause)
213+
clause_json.push_back(json_numbert{std::to_string(lit)});
214+
assertion_sat_hardness_clause_set_json.push_back(clause_json);
215+
}
216+
assertion_hardness_json["ClauseSet"] =
217+
assertion_sat_hardness_clause_set_json;
218+
186219
assertion_stats_json["SAT_hardness"] = assertion_hardness_json;
187220

188221
json_stream_array.push_back(assertion_stats_json);

0 commit comments

Comments
 (0)