summaryrefslogtreecommitdiff
path: root/test/unit/prop/cnf_stream_black.h
diff options
context:
space:
mode:
authorChristopher L. Conway <christopherleeconway@gmail.com>2010-05-26 22:10:10 +0000
committerChristopher L. Conway <christopherleeconway@gmail.com>2010-05-26 22:10:10 +0000
commit4e410b38715248f4c74539ecf51dcc01f405105c (patch)
treec6c4a6d0b926d3485caa0a15f3531e6c9dcc0f66 /test/unit/prop/cnf_stream_black.h
parent6d09eb1dfebf076e69bb982482744cea9c22ab09 (diff)
Adding CnfStreamBlack tests for all Boolean connectives
Diffstat (limited to 'test/unit/prop/cnf_stream_black.h')
-rw-r--r--test/unit/prop/cnf_stream_black.h103
1 files changed, 98 insertions, 5 deletions
diff --git a/test/unit/prop/cnf_stream_black.h b/test/unit/prop/cnf_stream_black.h
index 25a7cce6c..9c8560783 100644
--- a/test/unit/prop/cnf_stream_black.h
+++ b/test/unit/prop/cnf_stream_black.h
@@ -93,14 +93,63 @@ public:
/* [chris 5/26/2010] In the tests below, we don't attempt to delve into the
* deep structure of the CNF conversion. Firstly, we just want to make sure
- * that the conversion doesn't choke on any boolean Exprs. In some cases,
- * we'll check to make sure a certain number of assertions are generated.
+ * that the conversion doesn't choke on any boolean Exprs. We'll also check
+ * that addClause got called. We won't check that it gets called a particular
+ * number of times, or with what.
*/
-void testTrue() {
+void testAnd() {
NodeManagerScope nms(d_nodeManager);
- d_satSolver->reset();
- d_cnfStream->convertAndAssert( d_nodeManager->mkConst(true) );
+ Node a = d_nodeManager->mkVar(d_nodeManager->booleanType());
+ Node b = d_nodeManager->mkVar(d_nodeManager->booleanType());
+ Node c = d_nodeManager->mkVar(d_nodeManager->booleanType());
+ d_cnfStream->convertAndAssert(
+ d_nodeManager->mkNode(kind::AND, a, b, c) );
+ TS_ASSERT( d_satSolver->addClauseCalled() );
+}
+
+void testComplexExpr() {
+ NodeManagerScope nms(d_nodeManager);
+ Node a = d_nodeManager->mkVar(d_nodeManager->booleanType());
+ Node b = d_nodeManager->mkVar(d_nodeManager->booleanType());
+ Node c = d_nodeManager->mkVar(d_nodeManager->booleanType());
+ Node d = d_nodeManager->mkVar(d_nodeManager->booleanType());
+ Node e = d_nodeManager->mkVar(d_nodeManager->booleanType());
+ Node f = d_nodeManager->mkVar(d_nodeManager->booleanType());
+ d_cnfStream->convertAndAssert(
+ d_nodeManager->mkNode(
+ kind::IMPLIES,
+ d_nodeManager->mkNode(kind::AND, a, b),
+ d_nodeManager->mkNode(
+ kind::IFF,
+ d_nodeManager->mkNode(kind::OR, c, d),
+ d_nodeManager->mkNode(
+ kind::NOT,
+ d_nodeManager->mkNode(kind::XOR, e, f)))) );
+ TS_ASSERT( d_satSolver->addClauseCalled() );
+}
+
+void testFalse() {
+ NodeManagerScope nms(d_nodeManager);
+ d_cnfStream->convertAndAssert( d_nodeManager->mkConst(false) );
+ TS_ASSERT( d_satSolver->addClauseCalled() );
+}
+
+void testIff() {
+ NodeManagerScope nms(d_nodeManager);
+ Node a = d_nodeManager->mkVar(d_nodeManager->booleanType());
+ Node b = d_nodeManager->mkVar(d_nodeManager->booleanType());
+ d_cnfStream->convertAndAssert(
+ d_nodeManager->mkNode(kind::IFF, a, b) );
+ TS_ASSERT( d_satSolver->addClauseCalled() );
+}
+
+void testImplies() {
+ NodeManagerScope nms(d_nodeManager);
+ Node a = d_nodeManager->mkVar(d_nodeManager->booleanType());
+ Node b = d_nodeManager->mkVar(d_nodeManager->booleanType());
+ d_cnfStream->convertAndAssert(
+ d_nodeManager->mkNode(kind::IMPLIES, a, b) );
TS_ASSERT( d_satSolver->addClauseCalled() );
}
@@ -119,4 +168,48 @@ void testIte() {
));
}
+
+void testNot() {
+ NodeManagerScope nms(d_nodeManager);
+ Node a = d_nodeManager->mkVar(d_nodeManager->booleanType());
+ d_cnfStream->convertAndAssert(
+ d_nodeManager->mkNode(kind::NOT, a) );
+ TS_ASSERT( d_satSolver->addClauseCalled() );
+}
+
+void testOr() {
+ NodeManagerScope nms(d_nodeManager);
+ Node a = d_nodeManager->mkVar(d_nodeManager->booleanType());
+ Node b = d_nodeManager->mkVar(d_nodeManager->booleanType());
+ Node c = d_nodeManager->mkVar(d_nodeManager->booleanType());
+ d_cnfStream->convertAndAssert(
+ d_nodeManager->mkNode(kind::OR, a, b, c) );
+ TS_ASSERT( d_satSolver->addClauseCalled() );
+}
+
+void testTrue() {
+ NodeManagerScope nms(d_nodeManager);
+ d_cnfStream->convertAndAssert( d_nodeManager->mkConst(true) );
+ TS_ASSERT( d_satSolver->addClauseCalled() );
+}
+
+void testVar() {
+ NodeManagerScope nms(d_nodeManager);
+ Node a = d_nodeManager->mkVar(d_nodeManager->booleanType());
+ Node b = d_nodeManager->mkVar(d_nodeManager->booleanType());
+ d_cnfStream->convertAndAssert(a);
+ TS_ASSERT( d_satSolver->addClauseCalled() );
+ d_satSolver->reset();
+ d_cnfStream->convertAndAssert(b);
+ TS_ASSERT( d_satSolver->addClauseCalled() );
+}
+
+void testXor() {
+ NodeManagerScope nms(d_nodeManager);
+ Node a = d_nodeManager->mkVar(d_nodeManager->booleanType());
+ Node b = d_nodeManager->mkVar(d_nodeManager->booleanType());
+ d_cnfStream->convertAndAssert(
+ d_nodeManager->mkNode(kind::XOR, a, b) );
+ TS_ASSERT( d_satSolver->addClauseCalled() );
+}
};
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback