5
5
#include < solvers/smt2_incremental/smt2_incremental_decision_procedure.h>
6
6
#include < solvers/smt2_incremental/smt_commands.h>
7
7
#include < solvers/smt2_incremental/smt_core_theory.h>
8
+ #include < solvers/smt2_incremental/smt_responses.h>
8
9
#include < solvers/smt2_incremental/smt_solver_process.h>
9
10
#include < solvers/smt2_incremental/smt_sorts.h>
10
11
#include < solvers/smt2_incremental/smt_terms.h>
20
21
// appropriate overload of `operator<<` where it exists.
21
22
#include < solvers/smt2_incremental/smt_to_smt2_string.h>
22
23
24
+ #include < deque>
25
+
23
26
class smt_mock_solver_processt : public smt_base_solver_processt
24
27
{
25
28
public:
@@ -33,9 +36,15 @@ class smt_mock_solver_processt : public smt_base_solver_processt
33
36
sent_commands.push_back (smt_command);
34
37
}
35
38
39
+ std::deque<smt_responset> responses;
40
+
36
41
smt_responset receive_response () override
37
42
{
38
- UNREACHABLE;
43
+ INVARIANT (
44
+ !responses.empty (), " There must be responses remaining for test." );
45
+ smt_responset response = responses.front ();
46
+ responses.pop_front ();
47
+ return response;
39
48
}
40
49
41
50
std::vector<smt_commandt> sent_commands;
@@ -218,8 +227,15 @@ TEST_CASE(
218
227
symbol_tablet symbol_table;
219
228
namespacet ns{symbol_table};
220
229
auto mock_process = util_make_unique<smt_mock_solver_processt>();
230
+ auto &responses = mock_process->responses ;
221
231
null_message_handlert message_handler;
222
232
smt2_incremental_decision_proceduret procedure{
223
233
ns, std::move (mock_process), message_handler};
224
234
REQUIRE (procedure.get_number_of_solver_calls () == 0 );
235
+ responses.push_back (smt_check_sat_responset{smt_unsat_responset{}});
236
+ procedure ();
237
+ REQUIRE (procedure.get_number_of_solver_calls () == 1 );
238
+ responses.push_back (smt_check_sat_responset{smt_unsat_responset{}});
239
+ procedure ();
240
+ REQUIRE (procedure.get_number_of_solver_calls () == 2 );
225
241
}
0 commit comments