summaryrefslogtreecommitdiffstats
path: root/z3-solver/src
diff options
context:
space:
mode:
Diffstat (limited to 'z3-solver/src')
-rw-r--r--z3-solver/src/lib.rs14
1 files changed, 11 insertions, 3 deletions
diff --git a/z3-solver/src/lib.rs b/z3-solver/src/lib.rs
index 6ad7ffc..2085768 100644
--- a/z3-solver/src/lib.rs
+++ b/z3-solver/src/lib.rs
@@ -13,7 +13,7 @@ use std::collections::HashMap;
13#[derive(Debug)] 13#[derive(Debug)]
14pub struct Z3Context<'z3> { 14pub struct Z3Context<'z3> {
15 ctx: &'z3 z3::Context, 15 ctx: &'z3 z3::Context,
16 solver: z3::Solver<'z3>, 16 solver: z3::Optimize<'z3>,
17 17
18 floats: HashMap<VariableHandle, z3::ast::Real<'z3>>, 18 floats: HashMap<VariableHandle, z3::ast::Real<'z3>>,
19 max_float_id: u32, 19 max_float_id: u32,
@@ -57,7 +57,7 @@ impl<'z3> Z3Context<'z3> {
57 pub fn new(ctx: &'z3 z3::Context) -> Self { 57 pub fn new(ctx: &'z3 z3::Context) -> Self {
58 Self { 58 Self {
59 ctx, 59 ctx,
60 solver: z3::Solver::new(ctx), 60 solver: z3::Optimize::new(ctx),
61 floats: HashMap::new(), 61 floats: HashMap::new(),
62 max_float_id: 0, 62 max_float_id: 0,
63 bools: HashMap::new(), 63 bools: HashMap::new(),
@@ -115,7 +115,7 @@ impl<'z3> Z3Context<'z3> {
115 115
116impl<'z3> SolverContext for Z3Context<'z3> { 116impl<'z3> SolverContext for Z3Context<'z3> {
117 fn solve<'a>(&'a self) -> Box<dyn SolverModel + 'a> { 117 fn solve<'a>(&'a self) -> Box<dyn SolverModel + 'a> {
118 match self.solver.check() { 118 match self.solver.check(&[]) {
119 z3::SatResult::Unsat | z3::SatResult::Unknown => panic!("Failed solving"), 119 z3::SatResult::Unsat | z3::SatResult::Unknown => panic!("Failed solving"),
120 z3::SatResult::Sat => {} 120 z3::SatResult::Sat => {}
121 } 121 }
@@ -241,6 +241,14 @@ impl<'z3> SolverContext for Z3Context<'z3> {
241 self.anon_bool(result) 241 self.anon_bool(result)
242 } 242 }
243 243
244 fn float_maximize(&mut self, value: Float) {
245 self.solver.maximize(&self.float(value));
246 }
247
248 fn float_minimize(&mut self, value: Float) {
249 self.solver.minimize(&self.float(value));
250 }
251
244 // Bools 252 // Bools
245 253
246 fn new_free_bool(&mut self) -> Bool { 254 fn new_free_bool(&mut self) -> Bool {