diff options
Diffstat (limited to 'test/unit/api')
-rw-r--r-- | test/unit/api/CMakeLists.txt | 1 | ||||
-rw-r--r-- | test/unit/api/result_black.h | 136 |
2 files changed, 137 insertions, 0 deletions
diff --git a/test/unit/api/CMakeLists.txt b/test/unit/api/CMakeLists.txt index 7566c432d..fc1461862 100644 --- a/test/unit/api/CMakeLists.txt +++ b/test/unit/api/CMakeLists.txt @@ -3,6 +3,7 @@ cvc4_add_unit_test_black(datatype_api_black api) cvc4_add_unit_test_black(op_black api) +cvc4_add_unit_test_black(result_black api) cvc4_add_unit_test_black(solver_black api) cvc4_add_unit_test_black(sort_black api) cvc4_add_unit_test_black(term_black api) diff --git a/test/unit/api/result_black.h b/test/unit/api/result_black.h new file mode 100644 index 000000000..ab5d65e72 --- /dev/null +++ b/test/unit/api/result_black.h @@ -0,0 +1,136 @@ +/********************* */ +/*! \file result_black.h + ** \verbatim + ** Top contributors (to current version): + ** Aina Niemetz + ** This file is part of the CVC4 project. + ** Copyright (c) 2009-2020 by the authors listed in the file AUTHORS + ** in the top-level source directory) and their institutional affiliations. + ** All rights reserved. See the file COPYING in the top-level source + ** directory for licensing information.\endverbatim + ** + ** \brief Black box testing of the Result class + **/ + +#include <cxxtest/TestSuite.h> + +#include "api/cvc4cpp.h" + +using namespace CVC4::api; + +class ResultBlack : public CxxTest::TestSuite +{ + public: + void setUp() { d_solver.reset(new Solver()); } + void tearDown() override {} + + void testIsNull(); + void testEq(); + void testIsSat(); + void testIsUnsat(); + void testIsSatUnknown(); + void testIsValid(); + void testIsInvalid(); + void testIsValidUnknown(); + + private: + std::unique_ptr<Solver> d_solver; +}; + +void ResultBlack::testIsNull() +{ + Result res_null; + TS_ASSERT(res_null.isNull()); + TS_ASSERT(!res_null.isSat()); + TS_ASSERT(!res_null.isUnsat()); + TS_ASSERT(!res_null.isSatUnknown()); + TS_ASSERT(!res_null.isValid()); + TS_ASSERT(!res_null.isInvalid()); + TS_ASSERT(!res_null.isValidUnknown()); + Sort u_sort = d_solver->mkUninterpretedSort("u"); + Term x = d_solver->mkVar(u_sort, "x"); + d_solver->assertFormula(x.eqTerm(x)); + Result res = d_solver->checkSat(); + TS_ASSERT(!res.isNull()); +} + +void ResultBlack::testEq() +{ + Sort u_sort = d_solver->mkUninterpretedSort("u"); + Term x = d_solver->mkVar(u_sort, "x"); + d_solver->assertFormula(x.eqTerm(x)); + Result res; + Result res2 = d_solver->checkSat(); + Result res3 = d_solver->checkSat(); + res = res2; + TS_ASSERT_EQUALS(res, res2); + TS_ASSERT_EQUALS(res3, res2); +} + +void ResultBlack::testIsSat() +{ + Sort u_sort = d_solver->mkUninterpretedSort("u"); + Term x = d_solver->mkVar(u_sort, "x"); + d_solver->assertFormula(x.eqTerm(x)); + Result res = d_solver->checkSat(); + TS_ASSERT(res.isSat()); + TS_ASSERT(!res.isSatUnknown()); +} + +void ResultBlack::testIsUnsat() +{ + Sort u_sort = d_solver->mkUninterpretedSort("u"); + Term x = d_solver->mkVar(u_sort, "x"); + d_solver->assertFormula(x.eqTerm(x).notTerm()); + Result res = d_solver->checkSat(); + TS_ASSERT(res.isUnsat()); + TS_ASSERT(!res.isSatUnknown()); +} + +void ResultBlack::testIsSatUnknown() +{ + d_solver->setLogic("QF_NIA"); + d_solver->setOption("incremental", "false"); + d_solver->setOption("solve-int-as-bv", "32"); + Sort int_sort = d_solver->getIntegerSort(); + Term x = d_solver->mkVar(int_sort, "x"); + d_solver->assertFormula(x.eqTerm(x).notTerm()); + Result res = d_solver->checkSat(); + TS_ASSERT(!res.isSat()); + TS_ASSERT(res.isSatUnknown()); +} + +void ResultBlack::testIsValid() +{ + Sort u_sort = d_solver->mkUninterpretedSort("u"); + Term x = d_solver->mkVar(u_sort, "x"); + d_solver->assertFormula(x.eqTerm(x).notTerm()); + Result res = d_solver->checkValid(); + TS_ASSERT(res.isValid()); + TS_ASSERT(!res.isValidUnknown()); +} + +void ResultBlack::testIsInvalid() +{ + Sort u_sort = d_solver->mkUninterpretedSort("u"); + Term x = d_solver->mkVar(u_sort, "x"); + d_solver->assertFormula(x.eqTerm(x)); + Result res = d_solver->checkValid(); + TS_ASSERT(res.isInvalid()); + TS_ASSERT(!res.isValidUnknown()); +} + +void ResultBlack::testIsValidUnknown() +{ + d_solver->setLogic("QF_NIA"); + d_solver->setOption("incremental", "false"); + d_solver->setOption("solve-int-as-bv", "32"); + Sort int_sort = d_solver->getIntegerSort(); + Term x = d_solver->mkVar(int_sort, "x"); + d_solver->assertFormula(x.eqTerm(x).notTerm()); + Result res = d_solver->checkValid(); + TS_ASSERT(!res.isValid()); + TS_ASSERT(res.isValidUnknown()); + TS_ASSERT_EQUALS(res.getUnknownExplanation(), "UNKNOWN_REASON"); +} + |