summaryrefslogtreecommitdiff
path: root/test/unit/expr/node_black.h
diff options
context:
space:
mode:
authorAndrew Reynolds <andrew.j.reynolds@gmail.com>2020-07-07 18:18:54 -0500
committerGitHub <noreply@github.com>2020-07-07 18:18:54 -0500
commit6b673474218c300576cae43388b513c7fc8448f8 (patch)
tree693a7b7ccbcb7a5a20b45df4c3564cf93dc0f2d3 /test/unit/expr/node_black.h
parent55767b9620f18763b7b56ecefa954202d35fe2d3 (diff)
Transfer ownership of internal Options from NodeManager to SmtEngine (#4682)
This PR decouples Options from NodeManager. Instead, options now live in SmtEngine. The changes that were required for this PR include: The main internal options object is now owned by SmtEngine instead of ExprManager. The ownership resource manager is moved from NodeManager to SmtEngine. Node manager listeners are deleted, timeouts and resource limits are set during SmtEngine::finishInit. A temporary hack was added to make the last constructed SmtEngine to be the one in scope. This ensures that options are in scope whenever an SmtEngine is created. The methods for invoking "subsolvers" (theory/smt_engine_subsolver.h,cpp) was simplified, as versions of these calls that change options do not have to clone a new copy of the ExprManager anymore. Resource manager was removed from the smt2 parser. Minor refactoring was done in SmtEngine to copy "original options" so that options are restored to their state after parsing command line options on reset. Updates to unit tests to ensure conformance to new options scoping.
Diffstat (limited to 'test/unit/expr/node_black.h')
-rw-r--r--test/unit/expr/node_black.h54
1 files changed, 24 insertions, 30 deletions
diff --git a/test/unit/expr/node_black.h b/test/unit/expr/node_black.h
index 1b8a7c92f..91242322a 100644
--- a/test/unit/expr/node_black.h
+++ b/test/unit/expr/node_black.h
@@ -22,6 +22,8 @@
#include <string>
#include <vector>
+#include "api/cvc4cpp.h"
+#include "smt/smt_engine.h"
#include "expr/expr_manager.h"
#include "expr/node.h"
#include "expr/node_builder.h"
@@ -50,15 +52,13 @@ std::vector<Node> makeNSkolemNodes(NodeManager* nodeManager, int N,
class NodeBlack : public CxxTest::TestSuite {
private:
- Options opts;
NodeManager* d_nodeManager;
- NodeManagerScope* d_scope;
- TypeNode* d_booleanType;
- TypeNode* d_realType;
-
+ api::Solver* d_slv;
public:
void setUp() override
{
+ // setup a SMT engine so that options are in scope
+ Options opts;
char* argv[2];
argv[0] = strdup("");
argv[1] = strdup("--output-lang=ast");
@@ -66,18 +66,12 @@ class NodeBlack : public CxxTest::TestSuite {
free(argv[0]);
free(argv[1]);
- d_nodeManager = new NodeManager(NULL, opts);
- d_scope = new NodeManagerScope(d_nodeManager);
- d_booleanType = new TypeNode(d_nodeManager->booleanType());
- d_realType = new TypeNode(d_nodeManager->realType());
+ d_slv = new api::Solver(&opts);
+ d_nodeManager = d_slv->getSmtEngine()->getNodeManager();
}
- void tearDown() override
- {
- delete d_realType;
- delete d_booleanType;
- delete d_scope;
- delete d_nodeManager;
+ void tearDown() override {
+ delete d_slv;
}
bool imp(bool a, bool b) const { return (!a) || (b); }
@@ -114,12 +108,12 @@ class NodeBlack : public CxxTest::TestSuite {
void testOperatorEquals() {
Node a, b, c;
- b = d_nodeManager->mkSkolem("b", *d_booleanType);
+ b = d_nodeManager->mkSkolem("b", d_nodeManager->booleanType());
a = b;
c = a;
- Node d = d_nodeManager->mkSkolem("d", *d_booleanType);
+ Node d = d_nodeManager->mkSkolem("d", d_nodeManager->booleanType());
TS_ASSERT(a == a);
TS_ASSERT(a == b);
@@ -148,12 +142,12 @@ class NodeBlack : public CxxTest::TestSuite {
void testOperatorNotEquals() {
Node a, b, c;
- b = d_nodeManager->mkSkolem("b", *d_booleanType);
+ b = d_nodeManager->mkSkolem("b", d_nodeManager->booleanType());
a = b;
c = a;
- Node d = d_nodeManager->mkSkolem("d", *d_booleanType);
+ Node d = d_nodeManager->mkSkolem("d", d_nodeManager->booleanType());
/*structed assuming operator == works */
TS_ASSERT(iff(a != a, !(a == a)));
@@ -208,7 +202,7 @@ class NodeBlack : public CxxTest::TestSuite {
void testOperatorAssign() {
Node a, b;
Node c = d_nodeManager->mkNode(
- NOT, d_nodeManager->mkSkolem("c", *d_booleanType));
+ NOT, d_nodeManager->mkSkolem("c", d_nodeManager->booleanType()));
b = c;
TS_ASSERT(b == c);
@@ -324,8 +318,8 @@ class NodeBlack : public CxxTest::TestSuite {
void testIteNode() {
/*Node iteNode(const Node& thenpart, const Node& elsepart) const;*/
- Node a = d_nodeManager->mkSkolem("a", *d_booleanType);
- Node b = d_nodeManager->mkSkolem("b", *d_booleanType);
+ Node a = d_nodeManager->mkSkolem("a", d_nodeManager->booleanType());
+ Node b = d_nodeManager->mkSkolem("b", d_nodeManager->booleanType());
Node cnd = d_nodeManager->mkNode(OR, a, b);
Node thenBranch = d_nodeManager->mkConst(true);
@@ -383,8 +377,8 @@ class NodeBlack : public CxxTest::TestSuite {
void testGetKind() {
/*inline Kind getKind() const; */
- Node a = d_nodeManager->mkSkolem("a", *d_booleanType);
- Node b = d_nodeManager->mkSkolem("b", *d_booleanType);
+ Node a = d_nodeManager->mkSkolem("a", d_nodeManager->booleanType());
+ Node b = d_nodeManager->mkSkolem("b", d_nodeManager->booleanType());
Node n = d_nodeManager->mkNode(NOT, a);
TS_ASSERT(NOT == n.getKind());
@@ -392,8 +386,8 @@ class NodeBlack : public CxxTest::TestSuite {
n = d_nodeManager->mkNode(EQUAL, a, b);
TS_ASSERT(EQUAL == n.getKind());
- Node x = d_nodeManager->mkSkolem("x", *d_realType);
- Node y = d_nodeManager->mkSkolem("y", *d_realType);
+ Node x = d_nodeManager->mkSkolem("x", d_nodeManager->realType());
+ Node y = d_nodeManager->mkSkolem("y", d_nodeManager->realType());
n = d_nodeManager->mkNode(PLUS, x, y);
TS_ASSERT(PLUS == n.getKind());
@@ -470,9 +464,9 @@ class NodeBlack : public CxxTest::TestSuite {
// test iterators
void testIterator() {
NodeBuilder<> b;
- Node x = d_nodeManager->mkSkolem("x", *d_booleanType);
- Node y = d_nodeManager->mkSkolem("y", *d_booleanType);
- Node z = d_nodeManager->mkSkolem("z", *d_booleanType);
+ Node x = d_nodeManager->mkSkolem("x", d_nodeManager->booleanType());
+ Node y = d_nodeManager->mkSkolem("y", d_nodeManager->booleanType());
+ Node z = d_nodeManager->mkSkolem("z", d_nodeManager->booleanType());
Node n = b << x << y << z << kind::AND;
{ // iterator
@@ -717,7 +711,7 @@ class NodeBlack : public CxxTest::TestSuite {
// This is for demonstrating what a certain type of user error looks like.
// Node level0(){
// NodeBuilder<> nb(kind::AND);
- // Node x = d_nodeManager->mkSkolem("x", *d_booleanType);
+ // Node x = d_nodeManager->mkSkolem("x", d_nodeManager->booleanType());
// nb << x;
// nb << x;
// return Node(nb.constructNode());
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback