diff options
author | Andrew Reynolds <andrew.j.reynolds@gmail.com> | 2021-09-01 13:05:48 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-09-01 18:05:48 +0000 |
commit | 7a3aa7033719b14b34c0334d6956834b850fa9eb (patch) | |
tree | 53c2f3543a6314eaabd76eff9e38c2752a5c4afa /test/unit/api | |
parent | 24c4e9d5612fd7549a8ff7acaf76ce95acaca0d9 (diff) |
Print response to get-model using the API (#7084)
This changes our implementation of GetModelCommand so that we use the API to print the model.
It simplifies smt::Model so that this is a pretty printing utility, and not a layer on top of TheoryModel.
It adds getModel as an API method for returning the string representation of the model, analogous to our current support for getProof.
This eliminates the last call to getSmtEngine() from the command layer.
Diffstat (limited to 'test/unit/api')
-rw-r--r-- | test/unit/api/solver_black.cpp | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/test/unit/api/solver_black.cpp b/test/unit/api/solver_black.cpp index 1daa3fba4..5ca96f035 100644 --- a/test/unit/api/solver_black.cpp +++ b/test/unit/api/solver_black.cpp @@ -1571,6 +1571,47 @@ TEST_F(TestApiBlackSolver, isModelCoreSymbol) ASSERT_THROW(d_solver.isModelCoreSymbol(zero), CVC5ApiException); } +TEST_F(TestApiBlackSolver, getModel) +{ + d_solver.setOption("produce-models", "true"); + Sort uSort = d_solver.mkUninterpretedSort("u"); + Term x = d_solver.mkConst(uSort, "x"); + Term y = d_solver.mkConst(uSort, "y"); + Term z = d_solver.mkConst(uSort, "z"); + Term f = d_solver.mkTerm(NOT, d_solver.mkTerm(EQUAL, x, y)); + d_solver.assertFormula(f); + d_solver.checkSat(); + std::vector<Sort> sorts; + sorts.push_back(uSort); + std::vector<Term> terms; + terms.push_back(x); + terms.push_back(y); + ASSERT_NO_THROW(d_solver.getModel(sorts, terms)); + Term null; + terms.push_back(null); + ASSERT_THROW(d_solver.getModel(sorts, terms), CVC5ApiException); +} + +TEST_F(TestApiBlackSolver, getModel2) +{ + d_solver.setOption("produce-models", "true"); + std::vector<Sort> sorts; + std::vector<Term> terms; + ASSERT_THROW(d_solver.getModel(sorts, terms), CVC5ApiException); +} + +TEST_F(TestApiBlackSolver, getModel3) +{ + d_solver.setOption("produce-models", "true"); + std::vector<Sort> sorts; + std::vector<Term> terms; + d_solver.checkSat(); + ASSERT_NO_THROW(d_solver.getModel(sorts, terms)); + Sort integer = d_solver.getIntegerSort(); + sorts.push_back(integer); + ASSERT_THROW(d_solver.getModel(sorts, terms), CVC5ApiException); +} + TEST_F(TestApiBlackSolver, getQuantifierElimination) { Term x = d_solver.mkVar(d_solver.getBooleanSort(), "x"); |