summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/unit/Makefile.am1
-rw-r--r--test/unit/expr/attribute_black.h2
-rw-r--r--test/unit/expr/attribute_white.h565
-rw-r--r--test/unit/expr/node_black.h131
-rw-r--r--test/unit/expr/node_white.h513
-rw-r--r--test/unit/parser/parser_black.h7
6 files changed, 640 insertions, 579 deletions
diff --git a/test/unit/Makefile.am b/test/unit/Makefile.am
index 305731f5b..f78171dac 100644
--- a/test/unit/Makefile.am
+++ b/test/unit/Makefile.am
@@ -4,6 +4,7 @@ UNIT_TESTS = \
expr/node_black \
expr/kind_black \
expr/node_builder_black \
+ expr/attribute_white \
expr/attribute_black \
parser/parser_black \
context/context_black \
diff --git a/test/unit/expr/attribute_black.h b/test/unit/expr/attribute_black.h
index b5e897e89..12ecd347a 100644
--- a/test/unit/expr/attribute_black.h
+++ b/test/unit/expr/attribute_black.h
@@ -62,7 +62,7 @@ public:
struct MyDataAttributeId {};
struct MyDataCleanupFunction {
- static void cleanup(MyData*& myData){
+ static void cleanup(MyData* myData){
delete myData;
}
};
diff --git a/test/unit/expr/attribute_white.h b/test/unit/expr/attribute_white.h
new file mode 100644
index 000000000..7a0e538f6
--- /dev/null
+++ b/test/unit/expr/attribute_white.h
@@ -0,0 +1,565 @@
+/********************* */
+/** attribute_white.h
+ ** Original author: mdeters
+ ** Major contributors: none
+ ** Minor contributors (to current version): none
+ ** This file is part of the CVC4 prototype.
+ ** Copyright (c) 2009, 2010 The Analysis of Computer Systems Group (ACSys)
+ ** Courant Institute of Mathematical Sciences
+ ** New York University
+ ** See the file COPYING in the top-level source directory for licensing
+ ** information.
+ **
+ ** White box testing of Node attributes.
+ **/
+
+#include <cxxtest/TestSuite.h>
+
+#include <string>
+
+#include "expr/node_value.h"
+#include "expr/node_builder.h"
+#include "expr/node_manager.h"
+#include "expr/node.h"
+#include "expr/attribute.h"
+#include "context/context.h"
+#include "util/Assert.h"
+
+using namespace CVC4;
+using namespace CVC4::kind;
+using namespace CVC4::context;
+using namespace CVC4::expr;
+using namespace CVC4::expr::attr;
+using namespace std;
+
+struct Test1;
+struct Test2;
+struct Test3;
+struct Test4;
+struct Test5;
+
+typedef Attribute<Test1, std::string> TestStringAttr1;
+typedef Attribute<Test2, std::string> TestStringAttr2;
+
+// it would be nice to have CDAttribute<> for context-dependence
+typedef CDAttribute<Test1, bool> TestCDFlag;
+
+typedef Attribute<Test1, bool> TestFlag1;
+typedef Attribute<Test2, bool> TestFlag2;
+typedef Attribute<Test3, bool> TestFlag3;
+typedef Attribute<Test4, bool> TestFlag4;
+typedef Attribute<Test5, bool> TestFlag5;
+
+typedef CDAttribute<Test1, bool> TestFlag1cd;
+typedef CDAttribute<Test2, bool> TestFlag2cd;
+
+class AttributeWhite : public CxxTest::TestSuite {
+
+ Context* d_ctxt;
+ NodeManager* d_nm;
+ NodeManagerScope* d_scope;
+
+public:
+
+ void setUp() {
+ d_ctxt = new Context;
+ d_nm = new NodeManager(d_ctxt);
+ d_scope = new NodeManagerScope(d_nm);
+ }
+
+ void tearDown() {
+ delete d_scope;
+ delete d_nm;
+ delete d_ctxt;
+ }
+
+ void testAttributeIds() {
+ TS_ASSERT(VarNameAttr::s_id == 0);
+ TS_ASSERT(TestStringAttr1::s_id == 1);
+ TS_ASSERT(TestStringAttr2::s_id == 2);
+ TS_ASSERT((attr::LastAttributeId<string, false>::s_id == 3));
+
+ TS_ASSERT(TypeAttr::s_id == 0);
+ TS_ASSERT((attr::LastAttributeId<void*, false>::s_id == 1));
+
+ TS_ASSERT(TestFlag1::s_id == 0);
+ TS_ASSERT(TestFlag2::s_id == 1);
+ TS_ASSERT(TestFlag3::s_id == 2);
+ TS_ASSERT(TestFlag4::s_id == 3);
+ TS_ASSERT(TestFlag5::s_id == 4);
+ TS_ASSERT((attr::LastAttributeId<bool, false>::s_id == 5));
+
+ TS_ASSERT(TestFlag1cd::s_id == 0);
+ TS_ASSERT(TestFlag2cd::s_id == 1);
+ TS_ASSERT((attr::LastAttributeId<bool, true>::s_id == 2));
+ }
+
+ void testCDAttributes() {
+ AttributeManager& am = d_nm->d_attrManager;
+
+ //Debug.on("boolattr");
+
+ Node a = d_nm->mkVar();
+ Node b = d_nm->mkVar();
+ Node c = d_nm->mkVar();
+
+ Debug("boolattr", "get flag 1 on a (should be F)\n");
+ TS_ASSERT(! a.getAttribute(TestFlag1cd()));
+ Debug("boolattr", "get flag 1 on b (should be F)\n");
+ TS_ASSERT(! b.getAttribute(TestFlag1cd()));
+ Debug("boolattr", "get flag 1 on c (should be F)\n");
+ TS_ASSERT(! c.getAttribute(TestFlag1cd()));
+
+ d_ctxt->push(); // level 1
+
+ // test that all boolean flags are FALSE to start
+ Debug("boolattr", "get flag 1 on a (should be F)\n");
+ TS_ASSERT(! a.getAttribute(TestFlag1cd()));
+ Debug("boolattr", "get flag 1 on b (should be F)\n");
+ TS_ASSERT(! b.getAttribute(TestFlag1cd()));
+ Debug("boolattr", "get flag 1 on c (should be F)\n");
+ TS_ASSERT(! c.getAttribute(TestFlag1cd()));
+
+ // test that they all HAVE the boolean attributes
+ TS_ASSERT(a.hasAttribute(TestFlag1cd()));
+ TS_ASSERT(b.hasAttribute(TestFlag1cd()));
+ TS_ASSERT(c.hasAttribute(TestFlag1cd()));
+
+ // test two-arg version of hasAttribute()
+ bool bb;
+ Debug("boolattr", "get flag 1 on a (should be F)\n");
+ TS_ASSERT(a.hasAttribute(TestFlag1cd(), bb));
+ TS_ASSERT(! bb);
+ Debug("boolattr", "get flag 1 on b (should be F)\n");
+ TS_ASSERT(b.hasAttribute(TestFlag1cd(), bb));
+ TS_ASSERT(! bb);
+ Debug("boolattr", "get flag 1 on c (should be F)\n");
+ TS_ASSERT(c.hasAttribute(TestFlag1cd(), bb));
+ TS_ASSERT(! bb);
+
+ // setting boolean flags
+ Debug("boolattr", "set flag 1 on a to T\n");
+ a.setAttribute(TestFlag1cd(), true);
+ Debug("boolattr", "set flag 1 on b to F\n");
+ b.setAttribute(TestFlag1cd(), false);
+ Debug("boolattr", "set flag 1 on c to F\n");
+ c.setAttribute(TestFlag1cd(), false);
+
+ Debug("boolattr", "get flag 1 on a (should be T)\n");
+ TS_ASSERT(a.getAttribute(TestFlag1cd()));
+ Debug("boolattr", "get flag 1 on b (should be F)\n");
+ TS_ASSERT(! b.getAttribute(TestFlag1cd()));
+ Debug("boolattr", "get flag 1 on c (should be F)\n");
+ TS_ASSERT(! c.getAttribute(TestFlag1cd()));
+
+ d_ctxt->push(); // level 2
+
+ Debug("boolattr", "get flag 1 on a (should be T)\n");
+ TS_ASSERT(a.getAttribute(TestFlag1cd()));
+ Debug("boolattr", "get flag 1 on b (should be F)\n");
+ TS_ASSERT(! b.getAttribute(TestFlag1cd()));
+ Debug("boolattr", "get flag 1 on c (should be F)\n");
+ TS_ASSERT(! c.getAttribute(TestFlag1cd()));
+
+ Debug("boolattr", "set flag 1 on a to F\n");
+ a.setAttribute(TestFlag1cd(), false);
+ Debug("boolattr", "set flag 1 on b to T\n");
+ b.setAttribute(TestFlag1cd(), true);
+
+ Debug("boolattr", "get flag 1 on a (should be F)\n");
+ TS_ASSERT(! a.getAttribute(TestFlag1cd()));
+ Debug("boolattr", "get flag 1 on b (should be T)\n");
+ TS_ASSERT(b.getAttribute(TestFlag1cd()));
+ Debug("boolattr", "get flag 1 on c (should be F)\n");
+ TS_ASSERT(! c.getAttribute(TestFlag1cd()));
+
+ d_ctxt->push(); // level 3
+
+ Debug("boolattr", "get flag 1 on a (should be F)\n");
+ TS_ASSERT(! a.getAttribute(TestFlag1cd()));
+ Debug("boolattr", "get flag 1 on b (should be T)\n");
+ TS_ASSERT(b.getAttribute(TestFlag1cd()));
+ Debug("boolattr", "get flag 1 on c (should be F)\n");
+ TS_ASSERT(! c.getAttribute(TestFlag1cd()));
+
+ Debug("boolattr", "set flag 1 on c to T\n");
+ c.setAttribute(TestFlag1cd(), true);
+
+ Debug("boolattr", "get flag 1 on a (should be F)\n");
+ TS_ASSERT(! a.getAttribute(TestFlag1cd()));
+ Debug("boolattr", "get flag 1 on b (should be T)\n");
+ TS_ASSERT(b.getAttribute(TestFlag1cd()));
+ Debug("boolattr", "get flag 1 on c (should be T)\n");
+ TS_ASSERT(c.getAttribute(TestFlag1cd()));
+
+ d_ctxt->pop(); // level 2
+
+ Debug("boolattr", "get flag 1 on a (should be F)\n");
+ TS_ASSERT(! a.getAttribute(TestFlag1cd()));
+ Debug("boolattr", "get flag 1 on b (should be T)\n");
+ TS_ASSERT(b.getAttribute(TestFlag1cd()));
+ Debug("boolattr", "get flag 1 on c (should be F)\n");
+ TS_ASSERT(! c.getAttribute(TestFlag1cd()));
+
+ d_ctxt->pop(); // level 1
+
+ Debug("boolattr", "get flag 1 on a (should be T)\n");
+ TS_ASSERT(a.getAttribute(TestFlag1cd()));
+ Debug("boolattr", "get flag 1 on b (should be F)\n");
+ TS_ASSERT(! b.getAttribute(TestFlag1cd()));
+ Debug("boolattr", "get flag 1 on c (should be F)\n");
+ TS_ASSERT(! c.getAttribute(TestFlag1cd()));
+
+ d_ctxt->pop(); // level 0
+
+ Debug("boolattr", "get flag 1 on a (should be F)\n");
+ TS_ASSERT(! a.getAttribute(TestFlag1cd()));
+ Debug("boolattr", "get flag 1 on b (should be F)\n");
+ TS_ASSERT(! b.getAttribute(TestFlag1cd()));
+ Debug("boolattr", "get flag 1 on c (should be F)\n");
+ TS_ASSERT(! c.getAttribute(TestFlag1cd()));
+
+#ifdef CVC4_ASSERTIONS
+ TS_ASSERT_THROWS( d_ctxt->pop(), AssertionException );
+#endif /* CVC4_ASSERTIONS */
+ }
+
+ void testAttributes() {
+ AttributeManager& am = d_nm->d_attrManager;
+
+ //Debug.on("boolattr");
+
+ Node a = d_nm->mkVar();
+ Node b = d_nm->mkVar();
+ Node c = d_nm->mkVar();
+ Node unnamed = d_nm->mkVar();
+
+ a.setAttribute(VarNameAttr(), "a");
+ b.setAttribute(VarNameAttr(), "b");
+ c.setAttribute(VarNameAttr(), "c");
+
+ // test that all boolean flags are FALSE to start
+ Debug("boolattr", "get flag 1 on a (should be F)\n");
+ TS_ASSERT(! a.getAttribute(TestFlag1()));
+ Debug("boolattr", "get flag 1 on b (should be F)\n");
+ TS_ASSERT(! b.getAttribute(TestFlag1()));
+ Debug("boolattr", "get flag 1 on c (should be F)\n");
+ TS_ASSERT(! c.getAttribute(TestFlag1()));
+ Debug("boolattr", "get flag 1 on unnamed (should be F)\n");
+ TS_ASSERT(! unnamed.getAttribute(TestFlag1()));
+
+ Debug("boolattr", "get flag 2 on a (should be F)\n");
+ TS_ASSERT(! a.getAttribute(TestFlag2()));
+ Debug("boolattr", "get flag 2 on b (should be F)\n");
+ TS_ASSERT(! b.getAttribute(TestFlag2()));
+ Debug("boolattr", "get flag 2 on c (should be F)\n");
+ TS_ASSERT(! c.getAttribute(TestFlag2()));
+ Debug("boolattr", "get flag 2 on unnamed (should be F)\n");
+ TS_ASSERT(! unnamed.getAttribute(TestFlag2()));
+
+ Debug("boolattr", "get flag 3 on a (should be F)\n");
+ TS_ASSERT(! a.getAttribute(TestFlag3()));
+ Debug("boolattr", "get flag 3 on b (should be F)\n");
+ TS_ASSERT(! b.getAttribute(TestFlag3()));
+ Debug("boolattr", "get flag 3 on c (should be F)\n");
+ TS_ASSERT(! c.getAttribute(TestFlag3()));
+ Debug("boolattr", "get flag 3 on unnamed (should be F)\n");
+ TS_ASSERT(! unnamed.getAttribute(TestFlag3()));
+
+ Debug("boolattr", "get flag 4 on a (should be F)\n");
+ TS_ASSERT(! a.getAttribute(TestFlag4()));
+ Debug("boolattr", "get flag 4 on b (should be F)\n");
+ TS_ASSERT(! b.getAttribute(TestFlag4()));
+ Debug("boolattr", "get flag 4 on c (should be F)\n");
+ TS_ASSERT(! c.getAttribute(TestFlag4()));
+ Debug("boolattr", "get flag 4 on unnamed (should be F)\n");
+ TS_ASSERT(! unnamed.getAttribute(TestFlag4()));
+
+ Debug("boolattr", "get flag 5 on a (should be F)\n");
+ TS_ASSERT(! a.getAttribute(TestFlag5()));
+ Debug("boolattr", "get flag 5 on b (should be F)\n");
+ TS_ASSERT(! b.getAttribute(TestFlag5()));
+ Debug("boolattr", "get flag 5 on c (should be F)\n");
+ TS_ASSERT(! c.getAttribute(TestFlag5()));
+ Debug("boolattr", "get flag 5 on unnamed (should be F)\n");
+ TS_ASSERT(! unnamed.getAttribute(TestFlag5()));
+
+ // test that they all HAVE the boolean attributes
+ TS_ASSERT(a.hasAttribute(TestFlag1()));
+ TS_ASSERT(b.hasAttribute(TestFlag1()));
+ TS_ASSERT(c.hasAttribute(TestFlag1()));
+ TS_ASSERT(unnamed.hasAttribute(TestFlag1()));
+
+ TS_ASSERT(a.hasAttribute(TestFlag2()));
+ TS_ASSERT(b.hasAttribute(TestFlag2()));
+ TS_ASSERT(c.hasAttribute(TestFlag2()));
+ TS_ASSERT(unnamed.hasAttribute(TestFlag2()));
+
+ TS_ASSERT(a.hasAttribute(TestFlag3()));
+ TS_ASSERT(b.hasAttribute(TestFlag3()));
+ TS_ASSERT(c.hasAttribute(TestFlag3()));
+ TS_ASSERT(unnamed.hasAttribute(TestFlag3()));
+
+ TS_ASSERT(a.hasAttribute(TestFlag4()));
+ TS_ASSERT(b.hasAttribute(TestFlag4()));
+ TS_ASSERT(c.hasAttribute(TestFlag4()));
+ TS_ASSERT(unnamed.hasAttribute(TestFlag4()));
+
+ TS_ASSERT(a.hasAttribute(TestFlag5()));
+ TS_ASSERT(b.hasAttribute(TestFlag5()));
+ TS_ASSERT(c.hasAttribute(TestFlag5()));
+ TS_ASSERT(unnamed.hasAttribute(TestFlag5()));
+
+ // test two-arg version of hasAttribute()
+ bool bb;
+ Debug("boolattr", "get flag 1 on a (should be F)\n");
+ TS_ASSERT(a.hasAttribute(TestFlag1(), bb));
+ TS_ASSERT(! bb);
+ Debug("boolattr", "get flag 1 on b (should be F)\n");
+ TS_ASSERT(b.hasAttribute(TestFlag1(), bb));
+ TS_ASSERT(! bb);
+ Debug("boolattr", "get flag 1 on c (should be F)\n");
+ TS_ASSERT(c.hasAttribute(TestFlag1(), bb));
+ TS_ASSERT(! bb);
+ Debug("boolattr", "get flag 1 on unnamed (should be F)\n");
+ TS_ASSERT(unnamed.hasAttribute(TestFlag1(), bb));
+ TS_ASSERT(! bb);
+
+ Debug("boolattr", "get flag 2 on a (should be F)\n");
+ TS_ASSERT(a.hasAttribute(TestFlag2(), bb));
+ TS_ASSERT(! bb);
+ Debug("boolattr", "get flag 2 on b (should be F)\n");
+ TS_ASSERT(b.hasAttribute(TestFlag2(), bb));
+ TS_ASSERT(! bb);
+ Debug("boolattr", "get flag 2 on c (should be F)\n");
+ TS_ASSERT(c.hasAttribute(TestFlag2(), bb));
+ TS_ASSERT(! bb);
+ Debug("boolattr", "get flag 2 on unnamed (should be F)\n");
+ TS_ASSERT(unnamed.hasAttribute(TestFlag2(), bb));
+ TS_ASSERT(! bb);
+
+ Debug("boolattr", "get flag 3 on a (should be F)\n");
+ TS_ASSERT(a.hasAttribute(TestFlag3(), bb));
+ TS_ASSERT(! bb);
+ Debug("boolattr", "get flag 3 on b (should be F)\n");
+ TS_ASSERT(b.hasAttribute(TestFlag3(), bb));
+ TS_ASSERT(! bb);
+ Debug("boolattr", "get flag 3 on c (should be F)\n");
+ TS_ASSERT(c.hasAttribute(TestFlag3(), bb));
+ TS_ASSERT(! bb);
+ Debug("boolattr", "get flag 3 on unnamed (should be F)\n");
+ TS_ASSERT(unnamed.hasAttribute(TestFlag3(), bb));
+ TS_ASSERT(! bb);
+
+ Debug("boolattr", "get flag 4 on a (should be F)\n");
+ TS_ASSERT(a.hasAttribute(TestFlag4(), bb));
+ TS_ASSERT(! bb);
+ Debug("boolattr", "get flag 4 on b (should be F)\n");
+ TS_ASSERT(b.hasAttribute(TestFlag4(), bb));
+ TS_ASSERT(! bb);
+ Debug("boolattr", "get flag 4 on c (should be F)\n");
+ TS_ASSERT(c.hasAttribute(TestFlag4(), bb));
+ TS_ASSERT(! bb);
+ Debug("boolattr", "get flag 4 on unnamed (should be F)\n");
+ TS_ASSERT(unnamed.hasAttribute(TestFlag4(), bb));
+ TS_ASSERT(! bb);
+
+ Debug("boolattr", "get flag 5 on a (should be F)\n");
+ TS_ASSERT(a.hasAttribute(TestFlag5(), bb));
+ TS_ASSERT(! bb);
+ Debug("boolattr", "get flag 5 on b (should be F)\n");
+ TS_ASSERT(b.hasAttribute(TestFlag5(), bb));
+ TS_ASSERT(! bb);
+ Debug("boolattr", "get flag 5 on c (should be F)\n");
+ TS_ASSERT(c.hasAttribute(TestFlag5(), bb));
+ TS_ASSERT(! bb);
+ Debug("boolattr", "get flag 5 on unnamed (should be F)\n");
+ TS_ASSERT(unnamed.hasAttribute(TestFlag5(), bb));
+ TS_ASSERT(! bb);
+
+ // setting boolean flags
+ Debug("boolattr", "set flag 1 on a to T\n");
+ a.setAttribute(TestFlag1(), true);
+ Debug("boolattr", "set flag 1 on b to F\n");
+ b.setAttribute(TestFlag1(), false);
+ Debug("boolattr", "set flag 1 on c to F\n");
+ c.setAttribute(TestFlag1(), false);
+ Debug("boolattr", "set flag 1 on unnamed to T\n");
+ unnamed.setAttribute(TestFlag1(), true);
+
+ Debug("boolattr", "set flag 2 on a to F\n");
+ a.setAttribute(TestFlag2(), false);
+ Debug("boolattr", "set flag 2 on b to T\n");
+ b.setAttribute(TestFlag2(), true);
+ Debug("boolattr", "set flag 2 on c to T\n");
+ c.setAttribute(TestFlag2(), true);
+ Debug("boolattr", "set flag 2 on unnamed to F\n");
+ unnamed.setAttribute(TestFlag2(), false);
+
+ Debug("boolattr", "set flag 3 on a to T\n");
+ a.setAttribute(TestFlag3(), true);
+ Debug("boolattr", "set flag 3 on b to T\n");
+ b.setAttribute(TestFlag3(), true);
+ Debug("boolattr", "set flag 3 on c to T\n");
+ c.setAttribute(TestFlag3(), true);
+ Debug("boolattr", "set flag 3 on unnamed to T\n");
+ unnamed.setAttribute(TestFlag3(), true);
+
+ Debug("boolattr", "set flag 4 on a to T\n");
+ a.setAttribute(TestFlag4(), true);
+ Debug("boolattr", "set flag 4 on b to T\n");
+ b.setAttribute(TestFlag4(), true);
+ Debug("boolattr", "set flag 4 on c to T\n");
+ c.setAttribute(TestFlag4(), true);
+ Debug("boolattr", "set flag 4 on unnamed to T\n");
+ unnamed.setAttribute(TestFlag4(), true);
+
+ Debug("boolattr", "set flag 5 on a to T\n");
+ a.setAttribute(TestFlag5(), true);
+ Debug("boolattr", "set flag 5 on b to T\n");
+ b.setAttribute(TestFlag5(), true);
+ Debug("boolattr", "set flag 5 on c to F\n");
+ c.setAttribute(TestFlag5(), false);
+ Debug("boolattr", "set flag 5 on unnamed to T\n");
+ unnamed.setAttribute(TestFlag5(), true);
+
+ TS_ASSERT(a.getAttribute(VarNameAttr()) == "a");
+ TS_ASSERT(a.getAttribute(VarNameAttr()) != "b");
+ TS_ASSERT(a.getAttribute(VarNameAttr()) != "c");
+ TS_ASSERT(a.getAttribute(VarNameAttr()) != "");
+
+ TS_ASSERT(b.getAttribute(VarNameAttr()) != "a");
+ TS_ASSERT(b.getAttribute(VarNameAttr()) == "b");
+ TS_ASSERT(b.getAttribute(VarNameAttr()) != "c");
+ TS_ASSERT(b.getAttribute(VarNameAttr()) != "");
+
+ TS_ASSERT(c.getAttribute(VarNameAttr()) != "a");
+ TS_ASSERT(c.getAttribute(VarNameAttr()) != "b");
+ TS_ASSERT(c.getAttribute(VarNameAttr()) == "c");
+ TS_ASSERT(c.getAttribute(VarNameAttr()) != "");
+
+ TS_ASSERT(unnamed.getAttribute(VarNameAttr()) != "a");
+ TS_ASSERT(unnamed.getAttribute(VarNameAttr()) != "b");
+ TS_ASSERT(unnamed.getAttribute(VarNameAttr()) != "c");
+ TS_ASSERT(unnamed.getAttribute(VarNameAttr()) == "");
+
+ TS_ASSERT(! unnamed.hasAttribute(VarNameAttr()));
+
+ TS_ASSERT(! a.hasAttribute(TestStringAttr1()));
+ TS_ASSERT(! b.hasAttribute(TestStringAttr1()));
+ TS_ASSERT(! c.hasAttribute(TestStringAttr1()));
+ TS_ASSERT(! unnamed.hasAttribute(TestStringAttr1()));
+
+ TS_ASSERT(! a.hasAttribute(TestStringAttr2()));
+ TS_ASSERT(! b.hasAttribute(TestStringAttr2()));
+ TS_ASSERT(! c.hasAttribute(TestStringAttr2()));
+ TS_ASSERT(! unnamed.hasAttribute(TestStringAttr2()));
+
+ Debug("boolattr", "get flag 1 on a (should be T)\n");
+ TS_ASSERT(a.getAttribute(TestFlag1()));
+ Debug("boolattr", "get flag 1 on b (should be F)\n");
+ TS_ASSERT(! b.getAttribute(TestFlag1()));
+ Debug("boolattr", "get flag 1 on c (should be F)\n");
+ TS_ASSERT(! c.getAttribute(TestFlag1()));
+ Debug("boolattr", "get flag 1 on unnamed (should be T)\n");
+ TS_ASSERT(unnamed.getAttribute(TestFlag1()));
+
+ Debug("boolattr", "get flag 2 on a (should be F)\n");
+ TS_ASSERT(! a.getAttribute(TestFlag2()));
+ Debug("boolattr", "get flag 2 on b (should be T)\n");
+ TS_ASSERT(b.getAttribute(TestFlag2()));
+ Debug("boolattr", "get flag 2 on c (should be T)\n");
+ TS_ASSERT(c.getAttribute(TestFlag2()));
+ Debug("boolattr", "get flag 2 on unnamed (should be F)\n");
+ TS_ASSERT(! unnamed.getAttribute(TestFlag2()));
+
+ Debug("boolattr", "get flag 3 on a (should be T)\n");
+ TS_ASSERT(a.getAttribute(TestFlag3()));
+ Debug("boolattr", "get flag 3 on b (should be T)\n");
+ TS_ASSERT(b.getAttribute(TestFlag3()));
+ Debug("boolattr", "get flag 3 on c (should be T)\n");
+ TS_ASSERT(c.getAttribute(TestFlag3()));
+ Debug("boolattr", "get flag 3 on unnamed (should be T)\n");
+ TS_ASSERT(unnamed.getAttribute(TestFlag3()));
+
+ Debug("boolattr", "get flag 4 on a (should be T)\n");
+ TS_ASSERT(a.getAttribute(TestFlag4()));
+ Debug("boolattr", "get flag 4 on b (should be T)\n");
+ TS_ASSERT(b.getAttribute(TestFlag4()));
+ Debug("boolattr", "get flag 4 on c (should be T)\n");
+ TS_ASSERT(c.getAttribute(TestFlag4()));
+ Debug("boolattr", "get flag 4 on unnamed (should be T)\n");
+ TS_ASSERT(unnamed.getAttribute(TestFlag4()));
+
+ Debug("boolattr", "get flag 5 on a (should be T)\n");
+ TS_ASSERT(a.getAttribute(TestFlag5()));
+ Debug("boolattr", "get flag 5 on b (should be T)\n");
+ TS_ASSERT(b.getAttribute(TestFlag5()));
+ Debug("boolattr", "get flag 5 on c (should be F)\n");
+ TS_ASSERT(! c.getAttribute(TestFlag5()));
+ Debug("boolattr", "get flag 5 on unnamed (should be T)\n");
+ TS_ASSERT(unnamed.getAttribute(TestFlag5()));
+
+ a.setAttribute(TestStringAttr1(), "foo");
+ b.setAttribute(TestStringAttr1(), "bar");
+ c.setAttribute(TestStringAttr1(), "baz");
+
+ TS_ASSERT(a.getAttribute(VarNameAttr()) == "a");
+ TS_ASSERT(a.getAttribute(VarNameAttr()) != "b");
+ TS_ASSERT(a.getAttribute(VarNameAttr()) != "c");
+ TS_ASSERT(a.getAttribute(VarNameAttr()) != "");
+
+ TS_ASSERT(b.getAttribute(VarNameAttr()) != "a");
+ TS_ASSERT(b.getAttribute(VarNameAttr()) == "b");
+ TS_ASSERT(b.getAttribute(VarNameAttr()) != "c");
+ TS_ASSERT(b.getAttribute(VarNameAttr()) != "");
+
+ TS_ASSERT(c.getAttribute(VarNameAttr()) != "a");
+ TS_ASSERT(c.getAttribute(VarNameAttr()) != "b");
+ TS_ASSERT(c.getAttribute(VarNameAttr()) == "c");
+ TS_ASSERT(c.getAttribute(VarNameAttr()) != "");
+
+ TS_ASSERT(unnamed.getAttribute(VarNameAttr()) != "a");
+ TS_ASSERT(unnamed.getAttribute(VarNameAttr()) != "b");
+ TS_ASSERT(unnamed.getAttribute(VarNameAttr()) != "c");
+ TS_ASSERT(unnamed.getAttribute(VarNameAttr()) == "");
+
+ TS_ASSERT(! unnamed.hasAttribute(VarNameAttr()));
+
+ TS_ASSERT(a.hasAttribute(TestStringAttr1()));
+ TS_ASSERT(b.hasAttribute(TestStringAttr1()));
+ TS_ASSERT(c.hasAttribute(TestStringAttr1()));
+ TS_ASSERT(! unnamed.hasAttribute(TestStringAttr1()));
+
+ TS_ASSERT(! a.hasAttribute(TestStringAttr2()));
+ TS_ASSERT(! b.hasAttribute(TestStringAttr2()));
+ TS_ASSERT(! c.hasAttribute(TestStringAttr2()));
+ TS_ASSERT(! unnamed.hasAttribute(TestStringAttr2()));
+
+ a.setAttribute(VarNameAttr(), "b");
+ b.setAttribute(VarNameAttr(), "c");
+ c.setAttribute(VarNameAttr(), "a");
+
+ TS_ASSERT(c.getAttribute(VarNameAttr()) == "a");
+ TS_ASSERT(c.getAttribute(VarNameAttr()) != "b");
+ TS_ASSERT(c.getAttribute(VarNameAttr()) != "c");
+ TS_ASSERT(c.getAttribute(VarNameAttr()) != "");
+
+ TS_ASSERT(a.getAttribute(VarNameAttr()) != "a");
+ TS_ASSERT(a.getAttribute(VarNameAttr()) == "b");
+ TS_ASSERT(a.getAttribute(VarNameAttr()) != "c");
+ TS_ASSERT(a.getAttribute(VarNameAttr()) != "");
+
+ TS_ASSERT(b.getAttribute(VarNameAttr()) != "a");
+ TS_ASSERT(b.getAttribute(VarNameAttr()) != "b");
+ TS_ASSERT(b.getAttribute(VarNameAttr()) == "c");
+ TS_ASSERT(b.getAttribute(VarNameAttr()) != "");
+
+ TS_ASSERT(unnamed.getAttribute(VarNameAttr()) != "a");
+ TS_ASSERT(unnamed.getAttribute(VarNameAttr()) != "b");
+ TS_ASSERT(unnamed.getAttribute(VarNameAttr()) != "c");
+ TS_ASSERT(unnamed.getAttribute(VarNameAttr()) == "");
+
+ TS_ASSERT(! unnamed.hasAttribute(VarNameAttr()));
+ }
+};
diff --git a/test/unit/expr/node_black.h b/test/unit/expr/node_black.h
index c1ece1145..21c19a8f9 100644
--- a/test/unit/expr/node_black.h
+++ b/test/unit/expr/node_black.h
@@ -72,7 +72,7 @@ public:
TS_ASSERT(b.isNull());
Node c = b;
-
+
TS_ASSERT(c.isNull());
}
@@ -93,7 +93,7 @@ public:
/*tests: bool operator==(const Node& e) const */
void testOperatorEquals() {
Node a, b, c;
-
+
b = d_nodeManager->mkVar();
a = b;
@@ -113,7 +113,7 @@ public:
TS_ASSERT(c==a);
TS_ASSERT(c==b);
- TS_ASSERT(c==c);
+ TS_ASSERT(c==c);
TS_ASSERT(d==d);
@@ -133,7 +133,7 @@ public:
Node a, b, c;
-
+
b = d_nodeManager->mkVar();
a = b;
@@ -142,19 +142,19 @@ public:
Node d = d_nodeManager->mkVar();
/*structed assuming operator == works */
- TS_ASSERT(iff(a!=a,!(a==a)));
- TS_ASSERT(iff(a!=b,!(a==b)));
- TS_ASSERT(iff(a!=c,!(a==c)));
+ TS_ASSERT(iff(a!=a, !(a==a)));
+ TS_ASSERT(iff(a!=b, !(a==b)));
+ TS_ASSERT(iff(a!=c, !(a==c)));
- TS_ASSERT(iff(b!=a,!(b==a)));
- TS_ASSERT(iff(b!=b,!(b==b)));
- TS_ASSERT(iff(b!=c,!(b==c)));
+ TS_ASSERT(iff(b!=a, !(b==a)));
+ TS_ASSERT(iff(b!=b, !(b==b)));
+ TS_ASSERT(iff(b!=c, !(b==c)));
- TS_ASSERT(iff(c!=a,!(c==a)));
- TS_ASSERT(iff(c!=b,!(c==b)));
- TS_ASSERT(iff(c!=c,!(c==c)));
+ TS_ASSERT(iff(c!=a, !(c==a)));
+ TS_ASSERT(iff(c!=b, !(c==b)));
+ TS_ASSERT(iff(c!=c, !(c==c)));
TS_ASSERT(!(d!=d));
@@ -164,7 +164,7 @@ public:
}
- void testOperatorSquare() {
+ void testOperatorSquare() {
/*Node operator[](int i) const */
#ifdef CVC4_ASSERTIONS
@@ -177,7 +177,7 @@ public:
Node tb = d_nodeManager->mkNode(TRUE);
Node eb = d_nodeManager->mkNode(FALSE);
Node cnd = d_nodeManager->mkNode(XOR, tb, eb);
- Node ite = cnd.iteNode(tb,eb);
+ Node ite = cnd.iteNode(tb, eb);
TS_ASSERT(tb == cnd[0]);
TS_ASSERT(eb == cnd[1]);
@@ -188,8 +188,8 @@ public:
#ifdef CVC4_ASSERTIONS
//Bounds check on a node with children
- TS_ASSERT_THROWS(ite == ite[-1],AssertionException);
- TS_ASSERT_THROWS(ite == ite[4],AssertionException);
+ TS_ASSERT_THROWS(ite == ite[-1], AssertionException);
+ TS_ASSERT_THROWS(ite == ite[4], AssertionException);
#endif /* CVC4_ASSERTIONS */
}
@@ -197,23 +197,23 @@ public:
void testOperatorAssign() {
Node a, b;
Node c = d_nodeManager->mkNode(NOT);
-
+
b = c;
TS_ASSERT(b==c);
-
+
a = b = c;
TS_ASSERT(a==b);
TS_ASSERT(a==c);
}
-
+
void testOperatorLessThan() {
/* We don't have access to the ids so we can't test the implementation
- * in the black box tests.
+ * in the black box tests.
*/
-
+
Node a = d_nodeManager->mkVar();
Node b = d_nodeManager->mkVar();
@@ -225,14 +225,14 @@ public:
TS_ASSERT(!(c<d));
TS_ASSERT(!(d<c));
-
+
/* TODO:
* Less than has the rather difficult to test property that subexpressions
* are less than enclosing expressions.
*
* But what would be a convincing test of this property?
*/
-
+
//Simple test of descending descendant property
Node child = d_nodeManager->mkNode(TRUE);
Node parent = d_nodeManager->mkNode(NOT, child);
@@ -245,9 +245,9 @@ public:
Node curr = d_nodeManager->mkNode(NULL_EXPR);
for(int i=0;i<N;i++) {
chain.push_back(curr);
- curr = d_nodeManager->mkNode(AND,curr);
+ curr = d_nodeManager->mkNode(AND, curr);
}
-
+
for(int i=0;i<N;i++) {
for(int j=i+1;j<N;j++) {
Node chain_i = chain[i];
@@ -255,16 +255,16 @@ public:
TS_ASSERT(chain_i<chain_j);
}
}
-
+
}
void testEqNode() {
/*Node eqNode(const Node& right) const;*/
Node left = d_nodeManager->mkNode(TRUE);
- Node right = d_nodeManager->mkNode(NOT,(d_nodeManager->mkNode(FALSE)));
+ Node right = d_nodeManager->mkNode(NOT, (d_nodeManager->mkNode(FALSE)));
Node eq = left.eqNode(right);
-
+
TS_ASSERT(EQUAL == eq.getKind());
TS_ASSERT(2 == eq.getNumChildren());
@@ -283,31 +283,31 @@ public:
TS_ASSERT(1 == parent.getNumChildren());
TS_ASSERT(parent[0] == child);
-
+
}
void testAndNode() {
/*Node andNode(const Node& right) const;*/
-
+
Node left = d_nodeManager->mkNode(TRUE);
- Node right = d_nodeManager->mkNode(NOT,(d_nodeManager->mkNode(FALSE)));
+ Node right = d_nodeManager->mkNode(NOT, (d_nodeManager->mkNode(FALSE)));
Node eq = left.andNode(right);
-
+
TS_ASSERT(AND == eq.getKind());
TS_ASSERT(2 == eq.getNumChildren());
TS_ASSERT(*(eq.begin()) == left);
TS_ASSERT(*(++eq.begin()) == right);
-
+
}
void testOrNode() {
/*Node orNode(const Node& right) const;*/
-
+
Node left = d_nodeManager->mkNode(TRUE);
- Node right = d_nodeManager->mkNode(NOT,(d_nodeManager->mkNode(FALSE)));
+ Node right = d_nodeManager->mkNode(NOT, (d_nodeManager->mkNode(FALSE)));
Node eq = left.orNode(right);
-
+
TS_ASSERT(OR == eq.getKind());
TS_ASSERT(2 == eq.getNumChildren());
@@ -322,9 +322,9 @@ public:
Node cnd = d_nodeManager->mkNode(PLUS);
Node thenBranch = d_nodeManager->mkNode(TRUE);
- Node elseBranch = d_nodeManager->mkNode(NOT,(d_nodeManager->mkNode(FALSE)));
- Node ite = cnd.iteNode(thenBranch,elseBranch);
-
+ Node elseBranch = d_nodeManager->mkNode(NOT, (d_nodeManager->mkNode(FALSE)));
+ Node ite = cnd.iteNode(thenBranch, elseBranch);
+
TS_ASSERT(ITE == ite.getKind());
TS_ASSERT(3 == ite.getNumChildren());
@@ -336,11 +336,11 @@ public:
void testIffNode() {
/* Node iffNode(const Node& right) const; */
-
+
Node left = d_nodeManager->mkNode(TRUE);
- Node right = d_nodeManager->mkNode(NOT,(d_nodeManager->mkNode(FALSE)));
+ Node right = d_nodeManager->mkNode(NOT, (d_nodeManager->mkNode(FALSE)));
Node eq = left.iffNode(right);
-
+
TS_ASSERT(IFF == eq.getKind());
TS_ASSERT(2 == eq.getNumChildren());
@@ -349,13 +349,13 @@ public:
TS_ASSERT(*(++eq.begin()) == right);
}
-
+
void testImpNode() {
/* Node impNode(const Node& right) const; */
Node left = d_nodeManager->mkNode(TRUE);
- Node right = d_nodeManager->mkNode(NOT,(d_nodeManager->mkNode(FALSE)));
+ Node right = d_nodeManager->mkNode(NOT, (d_nodeManager->mkNode(FALSE)));
Node eq = left.impNode(right);
-
+
TS_ASSERT(IMPLIES == eq.getKind());
TS_ASSERT(2 == eq.getNumChildren());
@@ -367,9 +367,9 @@ public:
void testXorNode() {
/*Node xorNode(const Node& right) const;*/
Node left = d_nodeManager->mkNode(TRUE);
- Node right = d_nodeManager->mkNode(NOT,(d_nodeManager->mkNode(FALSE)));
+ Node right = d_nodeManager->mkNode(NOT, (d_nodeManager->mkNode(FALSE)));
Node eq = left.xorNode(right);
-
+
TS_ASSERT(XOR == eq.getKind());
TS_ASSERT(2 == eq.getNumChildren());
@@ -394,13 +394,13 @@ public:
void testGetOperator() {
- const Type* sort = d_nodeManager->mkSort("T");
- const Type* booleanType = d_nodeManager->booleanType();
- const Type* predType = d_nodeManager->mkFunctionType(sort,booleanType);
+ Type* sort = d_nodeManager->mkSort("T");
+ Type* booleanType = d_nodeManager->booleanType();
+ Type* predType = d_nodeManager->mkFunctionType(sort, booleanType);
Node f = d_nodeManager->mkVar(predType);
Node a = d_nodeManager->mkVar(booleanType);
- Node fa = d_nodeManager->mkNode(kind::APPLY,f,a);
+ Node fa = d_nodeManager->mkNode(kind::APPLY, f, a);
TS_ASSERT( fa.hasOperator() );
TS_ASSERT( !f.hasOperator() );
@@ -410,7 +410,7 @@ public:
TS_ASSERT_THROWS( f.getOperator(), AssertionException );
TS_ASSERT_THROWS( a.getOperator(), AssertionException );
}
-
+
void testNaryExpForSize(Kind k, int N){
NodeBuilder<> nbz(k);
for(int i=0;i<N;i++){
@@ -434,13 +434,13 @@ public:
//Bigger tests
- srand(0);
+ srand(0);
int trials = 500;
for(int i=0;i<trials; i++){
int N = rand() % 1000;
testNaryExpForSize(NOT, N);
}
-
+
}
void testIterator(){
@@ -469,10 +469,12 @@ public:
}
void testToString(){
- Node w = d_nodeManager->mkVar(NULL, "w");
- Node x = d_nodeManager->mkVar(NULL, "x");
- Node y = d_nodeManager->mkVar(NULL, "y");
- Node z = d_nodeManager->mkVar(NULL, "z");
+ Type* booleanType = d_nodeManager->booleanType();
+
+ Node w = d_nodeManager->mkVar(booleanType, "w");
+ Node x = d_nodeManager->mkVar(booleanType, "x");
+ Node y = d_nodeManager->mkVar(booleanType, "y");
+ Node z = d_nodeManager->mkVar(booleanType, "z");
Node m = NodeBuilder<>() << w << x << kind::OR;
Node n = NodeBuilder<>() << m << y << z << kind::AND;
@@ -480,11 +482,12 @@ public:
}
void testToStream(){
- NodeBuilder<> b;
- Node w = d_nodeManager->mkVar(NULL, "w");
- Node x = d_nodeManager->mkVar(NULL, "x");
- Node y = d_nodeManager->mkVar(NULL, "y");
- Node z = d_nodeManager->mkVar(NULL, "z");
+ Type* booleanType = d_nodeManager->booleanType();
+
+ Node w = d_nodeManager->mkVar(booleanType, "w");
+ Node x = d_nodeManager->mkVar(booleanType, "x");
+ Node y = d_nodeManager->mkVar(booleanType, "y");
+ Node z = d_nodeManager->mkVar(booleanType, "z");
Node m = NodeBuilder<>() << x << y << kind::OR;
Node n = NodeBuilder<>() << w << m << z << kind::AND;
diff --git a/test/unit/expr/node_white.h b/test/unit/expr/node_white.h
index 5b63557ba..28dbde933 100644
--- a/test/unit/expr/node_white.h
+++ b/test/unit/expr/node_white.h
@@ -21,7 +21,6 @@
#include "expr/node_builder.h"
#include "expr/node_manager.h"
#include "expr/node.h"
-#include "expr/attribute.h"
#include "context/context.h"
#include "util/Assert.h"
@@ -29,30 +28,8 @@ using namespace CVC4;
using namespace CVC4::kind;
using namespace CVC4::context;
using namespace CVC4::expr;
-using namespace CVC4::expr::attr;
using namespace std;
-struct Test1;
-struct Test2;
-struct Test3;
-struct Test4;
-struct Test5;
-
-typedef Attribute<Test1, std::string> TestStringAttr1;
-typedef Attribute<Test2, std::string> TestStringAttr2;
-
-// it would be nice to have CDAttribute<> for context-dependence
-typedef CDAttribute<Test1, bool> TestCDFlag;
-
-typedef Attribute<Test1, bool> TestFlag1;
-typedef Attribute<Test2, bool> TestFlag2;
-typedef Attribute<Test3, bool> TestFlag3;
-typedef Attribute<Test4, bool> TestFlag4;
-typedef Attribute<Test5, bool> TestFlag5;
-
-typedef CDAttribute<Test1, bool> TestFlag1cd;
-typedef CDAttribute<Test2, bool> TestFlag2cd;
-
class NodeWhite : public CxxTest::TestSuite {
Context* d_ctxt;
@@ -88,494 +65,4 @@ public:
TS_ASSERT(b.d_nv->getNumChildren() == 0);
/* etc. */
}
-
- void testAttributeIds() {
- TS_ASSERT(VarNameAttr::s_id == 0);
- TS_ASSERT(TestStringAttr1::s_id == 1);
- TS_ASSERT(TestStringAttr2::s_id == 2);
- TS_ASSERT((attr::LastAttributeId<string, false>::s_id == 3));
-
- TS_ASSERT(TypeAttr::s_id == 0);
- TS_ASSERT((attr::LastAttributeId<void*, false>::s_id == 1));
-
- TS_ASSERT(TestFlag1::s_id == 0);
- TS_ASSERT(TestFlag2::s_id == 1);
- TS_ASSERT(TestFlag3::s_id == 2);
- TS_ASSERT(TestFlag4::s_id == 3);
- TS_ASSERT(TestFlag5::s_id == 4);
- TS_ASSERT((attr::LastAttributeId<bool, false>::s_id == 5));
-
- TS_ASSERT(TestFlag1cd::s_id == 0);
- TS_ASSERT(TestFlag2cd::s_id == 1);
- TS_ASSERT((attr::LastAttributeId<bool, true>::s_id == 2));
- }
-
- void testCDAttributes() {
- AttributeManager& am = d_nm->d_attrManager;
-
- //Debug.on("boolattr");
-
- Node a = d_nm->mkVar();
- Node b = d_nm->mkVar();
- Node c = d_nm->mkVar();
-
- Debug("boolattr", "get flag 1 on a (should be F)\n");
- TS_ASSERT(! a.getAttribute(TestFlag1cd()));
- Debug("boolattr", "get flag 1 on b (should be F)\n");
- TS_ASSERT(! b.getAttribute(TestFlag1cd()));
- Debug("boolattr", "get flag 1 on c (should be F)\n");
- TS_ASSERT(! c.getAttribute(TestFlag1cd()));
-
- d_ctxt->push(); // level 1
-
- // test that all boolean flags are FALSE to start
- Debug("boolattr", "get flag 1 on a (should be F)\n");
- TS_ASSERT(! a.getAttribute(TestFlag1cd()));
- Debug("boolattr", "get flag 1 on b (should be F)\n");
- TS_ASSERT(! b.getAttribute(TestFlag1cd()));
- Debug("boolattr", "get flag 1 on c (should be F)\n");
- TS_ASSERT(! c.getAttribute(TestFlag1cd()));
-
- // test that they all HAVE the boolean attributes
- TS_ASSERT(a.hasAttribute(TestFlag1cd()));
- TS_ASSERT(b.hasAttribute(TestFlag1cd()));
- TS_ASSERT(c.hasAttribute(TestFlag1cd()));
-
- // test two-arg version of hasAttribute()
- bool bb;
- Debug("boolattr", "get flag 1 on a (should be F)\n");
- TS_ASSERT(a.hasAttribute(TestFlag1cd(), bb));
- TS_ASSERT(! bb);
- Debug("boolattr", "get flag 1 on b (should be F)\n");
- TS_ASSERT(b.hasAttribute(TestFlag1cd(), bb));
- TS_ASSERT(! bb);
- Debug("boolattr", "get flag 1 on c (should be F)\n");
- TS_ASSERT(c.hasAttribute(TestFlag1cd(), bb));
- TS_ASSERT(! bb);
-
- // setting boolean flags
- Debug("boolattr", "set flag 1 on a to T\n");
- a.setAttribute(TestFlag1cd(), true);
- Debug("boolattr", "set flag 1 on b to F\n");
- b.setAttribute(TestFlag1cd(), false);
- Debug("boolattr", "set flag 1 on c to F\n");
- c.setAttribute(TestFlag1cd(), false);
-
- Debug("boolattr", "get flag 1 on a (should be T)\n");
- TS_ASSERT(a.getAttribute(TestFlag1cd()));
- Debug("boolattr", "get flag 1 on b (should be F)\n");
- TS_ASSERT(! b.getAttribute(TestFlag1cd()));
- Debug("boolattr", "get flag 1 on c (should be F)\n");
- TS_ASSERT(! c.getAttribute(TestFlag1cd()));
-
- d_ctxt->push(); // level 2
-
- Debug("boolattr", "get flag 1 on a (should be T)\n");
- TS_ASSERT(a.getAttribute(TestFlag1cd()));
- Debug("boolattr", "get flag 1 on b (should be F)\n");
- TS_ASSERT(! b.getAttribute(TestFlag1cd()));
- Debug("boolattr", "get flag 1 on c (should be F)\n");
- TS_ASSERT(! c.getAttribute(TestFlag1cd()));
-
- Debug("boolattr", "set flag 1 on a to F\n");
- a.setAttribute(TestFlag1cd(), false);
- Debug("boolattr", "set flag 1 on b to T\n");
- b.setAttribute(TestFlag1cd(), true);
-
- Debug("boolattr", "get flag 1 on a (should be F)\n");
- TS_ASSERT(! a.getAttribute(TestFlag1cd()));
- Debug("boolattr", "get flag 1 on b (should be T)\n");
- TS_ASSERT(b.getAttribute(TestFlag1cd()));
- Debug("boolattr", "get flag 1 on c (should be F)\n");
- TS_ASSERT(! c.getAttribute(TestFlag1cd()));
-
- d_ctxt->push(); // level 3
-
- Debug("boolattr", "get flag 1 on a (should be F)\n");
- TS_ASSERT(! a.getAttribute(TestFlag1cd()));
- Debug("boolattr", "get flag 1 on b (should be T)\n");
- TS_ASSERT(b.getAttribute(TestFlag1cd()));
- Debug("boolattr", "get flag 1 on c (should be F)\n");
- TS_ASSERT(! c.getAttribute(TestFlag1cd()));
-
- Debug("boolattr", "set flag 1 on c to T\n");
- c.setAttribute(TestFlag1cd(), true);
-
- Debug("boolattr", "get flag 1 on a (should be F)\n");
- TS_ASSERT(! a.getAttribute(TestFlag1cd()));
- Debug("boolattr", "get flag 1 on b (should be T)\n");
- TS_ASSERT(b.getAttribute(TestFlag1cd()));
- Debug("boolattr", "get flag 1 on c (should be T)\n");
- TS_ASSERT(c.getAttribute(TestFlag1cd()));
-
- d_ctxt->pop(); // level 2
-
- Debug("boolattr", "get flag 1 on a (should be F)\n");
- TS_ASSERT(! a.getAttribute(TestFlag1cd()));
- Debug("boolattr", "get flag 1 on b (should be T)\n");
- TS_ASSERT(b.getAttribute(TestFlag1cd()));
- Debug("boolattr", "get flag 1 on c (should be F)\n");
- TS_ASSERT(! c.getAttribute(TestFlag1cd()));
-
- d_ctxt->pop(); // level 1
-
- Debug("boolattr", "get flag 1 on a (should be T)\n");
- TS_ASSERT(a.getAttribute(TestFlag1cd()));
- Debug("boolattr", "get flag 1 on b (should be F)\n");
- TS_ASSERT(! b.getAttribute(TestFlag1cd()));
- Debug("boolattr", "get flag 1 on c (should be F)\n");
- TS_ASSERT(! c.getAttribute(TestFlag1cd()));
-
- d_ctxt->pop(); // level 0
-
- Debug("boolattr", "get flag 1 on a (should be F)\n");
- TS_ASSERT(! a.getAttribute(TestFlag1cd()));
- Debug("boolattr", "get flag 1 on b (should be F)\n");
- TS_ASSERT(! b.getAttribute(TestFlag1cd()));
- Debug("boolattr", "get flag 1 on c (should be F)\n");
- TS_ASSERT(! c.getAttribute(TestFlag1cd()));
-
-#ifdef CVC4_ASSERTIONS
- TS_ASSERT_THROWS( d_ctxt->pop(), AssertionException );
-#endif /* CVC4_ASSERTIONS */
- }
-
- void testAttributes() {
- AttributeManager& am = d_nm->d_attrManager;
-
- //Debug.on("boolattr");
-
- Node a = d_nm->mkVar();
- Node b = d_nm->mkVar();
- Node c = d_nm->mkVar();
- Node unnamed = d_nm->mkVar();
-
- a.setAttribute(VarNameAttr(), "a");
- b.setAttribute(VarNameAttr(), "b");
- c.setAttribute(VarNameAttr(), "c");
-
- // test that all boolean flags are FALSE to start
- Debug("boolattr", "get flag 1 on a (should be F)\n");
- TS_ASSERT(! a.getAttribute(TestFlag1()));
- Debug("boolattr", "get flag 1 on b (should be F)\n");
- TS_ASSERT(! b.getAttribute(TestFlag1()));
- Debug("boolattr", "get flag 1 on c (should be F)\n");
- TS_ASSERT(! c.getAttribute(TestFlag1()));
- Debug("boolattr", "get flag 1 on unnamed (should be F)\n");
- TS_ASSERT(! unnamed.getAttribute(TestFlag1()));
-
- Debug("boolattr", "get flag 2 on a (should be F)\n");
- TS_ASSERT(! a.getAttribute(TestFlag2()));
- Debug("boolattr", "get flag 2 on b (should be F)\n");
- TS_ASSERT(! b.getAttribute(TestFlag2()));
- Debug("boolattr", "get flag 2 on c (should be F)\n");
- TS_ASSERT(! c.getAttribute(TestFlag2()));
- Debug("boolattr", "get flag 2 on unnamed (should be F)\n");
- TS_ASSERT(! unnamed.getAttribute(TestFlag2()));
-
- Debug("boolattr", "get flag 3 on a (should be F)\n");
- TS_ASSERT(! a.getAttribute(TestFlag3()));
- Debug("boolattr", "get flag 3 on b (should be F)\n");
- TS_ASSERT(! b.getAttribute(TestFlag3()));
- Debug("boolattr", "get flag 3 on c (should be F)\n");
- TS_ASSERT(! c.getAttribute(TestFlag3()));
- Debug("boolattr", "get flag 3 on unnamed (should be F)\n");
- TS_ASSERT(! unnamed.getAttribute(TestFlag3()));
-
- Debug("boolattr", "get flag 4 on a (should be F)\n");
- TS_ASSERT(! a.getAttribute(TestFlag4()));
- Debug("boolattr", "get flag 4 on b (should be F)\n");
- TS_ASSERT(! b.getAttribute(TestFlag4()));
- Debug("boolattr", "get flag 4 on c (should be F)\n");
- TS_ASSERT(! c.getAttribute(TestFlag4()));
- Debug("boolattr", "get flag 4 on unnamed (should be F)\n");
- TS_ASSERT(! unnamed.getAttribute(TestFlag4()));
-
- Debug("boolattr", "get flag 5 on a (should be F)\n");
- TS_ASSERT(! a.getAttribute(TestFlag5()));
- Debug("boolattr", "get flag 5 on b (should be F)\n");
- TS_ASSERT(! b.getAttribute(TestFlag5()));
- Debug("boolattr", "get flag 5 on c (should be F)\n");
- TS_ASSERT(! c.getAttribute(TestFlag5()));
- Debug("boolattr", "get flag 5 on unnamed (should be F)\n");
- TS_ASSERT(! unnamed.getAttribute(TestFlag5()));
-
- // test that they all HAVE the boolean attributes
- TS_ASSERT(a.hasAttribute(TestFlag1()));
- TS_ASSERT(b.hasAttribute(TestFlag1()));
- TS_ASSERT(c.hasAttribute(TestFlag1()));
- TS_ASSERT(unnamed.hasAttribute(TestFlag1()));
-
- TS_ASSERT(a.hasAttribute(TestFlag2()));
- TS_ASSERT(b.hasAttribute(TestFlag2()));
- TS_ASSERT(c.hasAttribute(TestFlag2()));
- TS_ASSERT(unnamed.hasAttribute(TestFlag2()));
-
- TS_ASSERT(a.hasAttribute(TestFlag3()));
- TS_ASSERT(b.hasAttribute(TestFlag3()));
- TS_ASSERT(c.hasAttribute(TestFlag3()));
- TS_ASSERT(unnamed.hasAttribute(TestFlag3()));
-
- TS_ASSERT(a.hasAttribute(TestFlag4()));
- TS_ASSERT(b.hasAttribute(TestFlag4()));
- TS_ASSERT(c.hasAttribute(TestFlag4()));
- TS_ASSERT(unnamed.hasAttribute(TestFlag4()));
-
- TS_ASSERT(a.hasAttribute(TestFlag5()));
- TS_ASSERT(b.hasAttribute(TestFlag5()));
- TS_ASSERT(c.hasAttribute(TestFlag5()));
- TS_ASSERT(unnamed.hasAttribute(TestFlag5()));
-
- // test two-arg version of hasAttribute()
- bool bb;
- Debug("boolattr", "get flag 1 on a (should be F)\n");
- TS_ASSERT(a.hasAttribute(TestFlag1(), bb));
- TS_ASSERT(! bb);
- Debug("boolattr", "get flag 1 on b (should be F)\n");
- TS_ASSERT(b.hasAttribute(TestFlag1(), bb));
- TS_ASSERT(! bb);
- Debug("boolattr", "get flag 1 on c (should be F)\n");
- TS_ASSERT(c.hasAttribute(TestFlag1(), bb));
- TS_ASSERT(! bb);
- Debug("boolattr", "get flag 1 on unnamed (should be F)\n");
- TS_ASSERT(unnamed.hasAttribute(TestFlag1(), bb));
- TS_ASSERT(! bb);
-
- Debug("boolattr", "get flag 2 on a (should be F)\n");
- TS_ASSERT(a.hasAttribute(TestFlag2(), bb));
- TS_ASSERT(! bb);
- Debug("boolattr", "get flag 2 on b (should be F)\n");
- TS_ASSERT(b.hasAttribute(TestFlag2(), bb));
- TS_ASSERT(! bb);
- Debug("boolattr", "get flag 2 on c (should be F)\n");
- TS_ASSERT(c.hasAttribute(TestFlag2(), bb));
- TS_ASSERT(! bb);
- Debug("boolattr", "get flag 2 on unnamed (should be F)\n");
- TS_ASSERT(unnamed.hasAttribute(TestFlag2(), bb));
- TS_ASSERT(! bb);
-
- Debug("boolattr", "get flag 3 on a (should be F)\n");
- TS_ASSERT(a.hasAttribute(TestFlag3(), bb));
- TS_ASSERT(! bb);
- Debug("boolattr", "get flag 3 on b (should be F)\n");
- TS_ASSERT(b.hasAttribute(TestFlag3(), bb));
- TS_ASSERT(! bb);
- Debug("boolattr", "get flag 3 on c (should be F)\n");
- TS_ASSERT(c.hasAttribute(TestFlag3(), bb));
- TS_ASSERT(! bb);
- Debug("boolattr", "get flag 3 on unnamed (should be F)\n");
- TS_ASSERT(unnamed.hasAttribute(TestFlag3(), bb));
- TS_ASSERT(! bb);
-
- Debug("boolattr", "get flag 4 on a (should be F)\n");
- TS_ASSERT(a.hasAttribute(TestFlag4(), bb));
- TS_ASSERT(! bb);
- Debug("boolattr", "get flag 4 on b (should be F)\n");
- TS_ASSERT(b.hasAttribute(TestFlag4(), bb));
- TS_ASSERT(! bb);
- Debug("boolattr", "get flag 4 on c (should be F)\n");
- TS_ASSERT(c.hasAttribute(TestFlag4(), bb));
- TS_ASSERT(! bb);
- Debug("boolattr", "get flag 4 on unnamed (should be F)\n");
- TS_ASSERT(unnamed.hasAttribute(TestFlag4(), bb));
- TS_ASSERT(! bb);
-
- Debug("boolattr", "get flag 5 on a (should be F)\n");
- TS_ASSERT(a.hasAttribute(TestFlag5(), bb));
- TS_ASSERT(! bb);
- Debug("boolattr", "get flag 5 on b (should be F)\n");
- TS_ASSERT(b.hasAttribute(TestFlag5(), bb));
- TS_ASSERT(! bb);
- Debug("boolattr", "get flag 5 on c (should be F)\n");
- TS_ASSERT(c.hasAttribute(TestFlag5(), bb));
- TS_ASSERT(! bb);
- Debug("boolattr", "get flag 5 on unnamed (should be F)\n");
- TS_ASSERT(unnamed.hasAttribute(TestFlag5(), bb));
- TS_ASSERT(! bb);
-
- // setting boolean flags
- Debug("boolattr", "set flag 1 on a to T\n");
- a.setAttribute(TestFlag1(), true);
- Debug("boolattr", "set flag 1 on b to F\n");
- b.setAttribute(TestFlag1(), false);
- Debug("boolattr", "set flag 1 on c to F\n");
- c.setAttribute(TestFlag1(), false);
- Debug("boolattr", "set flag 1 on unnamed to T\n");
- unnamed.setAttribute(TestFlag1(), true);
-
- Debug("boolattr", "set flag 2 on a to F\n");
- a.setAttribute(TestFlag2(), false);
- Debug("boolattr", "set flag 2 on b to T\n");
- b.setAttribute(TestFlag2(), true);
- Debug("boolattr", "set flag 2 on c to T\n");
- c.setAttribute(TestFlag2(), true);
- Debug("boolattr", "set flag 2 on unnamed to F\n");
- unnamed.setAttribute(TestFlag2(), false);
-
- Debug("boolattr", "set flag 3 on a to T\n");
- a.setAttribute(TestFlag3(), true);
- Debug("boolattr", "set flag 3 on b to T\n");
- b.setAttribute(TestFlag3(), true);
- Debug("boolattr", "set flag 3 on c to T\n");
- c.setAttribute(TestFlag3(), true);
- Debug("boolattr", "set flag 3 on unnamed to T\n");
- unnamed.setAttribute(TestFlag3(), true);
-
- Debug("boolattr", "set flag 4 on a to T\n");
- a.setAttribute(TestFlag4(), true);
- Debug("boolattr", "set flag 4 on b to T\n");
- b.setAttribute(TestFlag4(), true);
- Debug("boolattr", "set flag 4 on c to T\n");
- c.setAttribute(TestFlag4(), true);
- Debug("boolattr", "set flag 4 on unnamed to T\n");
- unnamed.setAttribute(TestFlag4(), true);
-
- Debug("boolattr", "set flag 5 on a to T\n");
- a.setAttribute(TestFlag5(), true);
- Debug("boolattr", "set flag 5 on b to T\n");
- b.setAttribute(TestFlag5(), true);
- Debug("boolattr", "set flag 5 on c to F\n");
- c.setAttribute(TestFlag5(), false);
- Debug("boolattr", "set flag 5 on unnamed to T\n");
- unnamed.setAttribute(TestFlag5(), true);
-
- TS_ASSERT(a.getAttribute(VarNameAttr()) == "a");
- TS_ASSERT(a.getAttribute(VarNameAttr()) != "b");
- TS_ASSERT(a.getAttribute(VarNameAttr()) != "c");
- TS_ASSERT(a.getAttribute(VarNameAttr()) != "");
-
- TS_ASSERT(b.getAttribute(VarNameAttr()) != "a");
- TS_ASSERT(b.getAttribute(VarNameAttr()) == "b");
- TS_ASSERT(b.getAttribute(VarNameAttr()) != "c");
- TS_ASSERT(b.getAttribute(VarNameAttr()) != "");
-
- TS_ASSERT(c.getAttribute(VarNameAttr()) != "a");
- TS_ASSERT(c.getAttribute(VarNameAttr()) != "b");
- TS_ASSERT(c.getAttribute(VarNameAttr()) == "c");
- TS_ASSERT(c.getAttribute(VarNameAttr()) != "");
-
- TS_ASSERT(unnamed.getAttribute(VarNameAttr()) != "a");
- TS_ASSERT(unnamed.getAttribute(VarNameAttr()) != "b");
- TS_ASSERT(unnamed.getAttribute(VarNameAttr()) != "c");
- TS_ASSERT(unnamed.getAttribute(VarNameAttr()) == "");
-
- TS_ASSERT(! unnamed.hasAttribute(VarNameAttr()));
-
- TS_ASSERT(! a.hasAttribute(TestStringAttr1()));
- TS_ASSERT(! b.hasAttribute(TestStringAttr1()));
- TS_ASSERT(! c.hasAttribute(TestStringAttr1()));
- TS_ASSERT(! unnamed.hasAttribute(TestStringAttr1()));
-
- TS_ASSERT(! a.hasAttribute(TestStringAttr2()));
- TS_ASSERT(! b.hasAttribute(TestStringAttr2()));
- TS_ASSERT(! c.hasAttribute(TestStringAttr2()));
- TS_ASSERT(! unnamed.hasAttribute(TestStringAttr2()));
-
- Debug("boolattr", "get flag 1 on a (should be T)\n");
- TS_ASSERT(a.getAttribute(TestFlag1()));
- Debug("boolattr", "get flag 1 on b (should be F)\n");
- TS_ASSERT(! b.getAttribute(TestFlag1()));
- Debug("boolattr", "get flag 1 on c (should be F)\n");
- TS_ASSERT(! c.getAttribute(TestFlag1()));
- Debug("boolattr", "get flag 1 on unnamed (should be T)\n");
- TS_ASSERT(unnamed.getAttribute(TestFlag1()));
-
- Debug("boolattr", "get flag 2 on a (should be F)\n");
- TS_ASSERT(! a.getAttribute(TestFlag2()));
- Debug("boolattr", "get flag 2 on b (should be T)\n");
- TS_ASSERT(b.getAttribute(TestFlag2()));
- Debug("boolattr", "get flag 2 on c (should be T)\n");
- TS_ASSERT(c.getAttribute(TestFlag2()));
- Debug("boolattr", "get flag 2 on unnamed (should be F)\n");
- TS_ASSERT(! unnamed.getAttribute(TestFlag2()));
-
- Debug("boolattr", "get flag 3 on a (should be T)\n");
- TS_ASSERT(a.getAttribute(TestFlag3()));
- Debug("boolattr", "get flag 3 on b (should be T)\n");
- TS_ASSERT(b.getAttribute(TestFlag3()));
- Debug("boolattr", "get flag 3 on c (should be T)\n");
- TS_ASSERT(c.getAttribute(TestFlag3()));
- Debug("boolattr", "get flag 3 on unnamed (should be T)\n");
- TS_ASSERT(unnamed.getAttribute(TestFlag3()));
-
- Debug("boolattr", "get flag 4 on a (should be T)\n");
- TS_ASSERT(a.getAttribute(TestFlag4()));
- Debug("boolattr", "get flag 4 on b (should be T)\n");
- TS_ASSERT(b.getAttribute(TestFlag4()));
- Debug("boolattr", "get flag 4 on c (should be T)\n");
- TS_ASSERT(c.getAttribute(TestFlag4()));
- Debug("boolattr", "get flag 4 on unnamed (should be T)\n");
- TS_ASSERT(unnamed.getAttribute(TestFlag4()));
-
- Debug("boolattr", "get flag 5 on a (should be T)\n");
- TS_ASSERT(a.getAttribute(TestFlag5()));
- Debug("boolattr", "get flag 5 on b (should be T)\n");
- TS_ASSERT(b.getAttribute(TestFlag5()));
- Debug("boolattr", "get flag 5 on c (should be F)\n");
- TS_ASSERT(! c.getAttribute(TestFlag5()));
- Debug("boolattr", "get flag 5 on unnamed (should be T)\n");
- TS_ASSERT(unnamed.getAttribute(TestFlag5()));
-
- a.setAttribute(TestStringAttr1(), "foo");
- b.setAttribute(TestStringAttr1(), "bar");
- c.setAttribute(TestStringAttr1(), "baz");
-
- TS_ASSERT(a.getAttribute(VarNameAttr()) == "a");
- TS_ASSERT(a.getAttribute(VarNameAttr()) != "b");
- TS_ASSERT(a.getAttribute(VarNameAttr()) != "c");
- TS_ASSERT(a.getAttribute(VarNameAttr()) != "");
-
- TS_ASSERT(b.getAttribute(VarNameAttr()) != "a");
- TS_ASSERT(b.getAttribute(VarNameAttr()) == "b");
- TS_ASSERT(b.getAttribute(VarNameAttr()) != "c");
- TS_ASSERT(b.getAttribute(VarNameAttr()) != "");
-
- TS_ASSERT(c.getAttribute(VarNameAttr()) != "a");
- TS_ASSERT(c.getAttribute(VarNameAttr()) != "b");
- TS_ASSERT(c.getAttribute(VarNameAttr()) == "c");
- TS_ASSERT(c.getAttribute(VarNameAttr()) != "");
-
- TS_ASSERT(unnamed.getAttribute(VarNameAttr()) != "a");
- TS_ASSERT(unnamed.getAttribute(VarNameAttr()) != "b");
- TS_ASSERT(unnamed.getAttribute(VarNameAttr()) != "c");
- TS_ASSERT(unnamed.getAttribute(VarNameAttr()) == "");
-
- TS_ASSERT(! unnamed.hasAttribute(VarNameAttr()));
-
- TS_ASSERT(a.hasAttribute(TestStringAttr1()));
- TS_ASSERT(b.hasAttribute(TestStringAttr1()));
- TS_ASSERT(c.hasAttribute(TestStringAttr1()));
- TS_ASSERT(! unnamed.hasAttribute(TestStringAttr1()));
-
- TS_ASSERT(! a.hasAttribute(TestStringAttr2()));
- TS_ASSERT(! b.hasAttribute(TestStringAttr2()));
- TS_ASSERT(! c.hasAttribute(TestStringAttr2()));
- TS_ASSERT(! unnamed.hasAttribute(TestStringAttr2()));
-
- a.setAttribute(VarNameAttr(), "b");
- b.setAttribute(VarNameAttr(), "c");
- c.setAttribute(VarNameAttr(), "a");
-
- TS_ASSERT(c.getAttribute(VarNameAttr()) == "a");
- TS_ASSERT(c.getAttribute(VarNameAttr()) != "b");
- TS_ASSERT(c.getAttribute(VarNameAttr()) != "c");
- TS_ASSERT(c.getAttribute(VarNameAttr()) != "");
-
- TS_ASSERT(a.getAttribute(VarNameAttr()) != "a");
- TS_ASSERT(a.getAttribute(VarNameAttr()) == "b");
- TS_ASSERT(a.getAttribute(VarNameAttr()) != "c");
- TS_ASSERT(a.getAttribute(VarNameAttr()) != "");
-
- TS_ASSERT(b.getAttribute(VarNameAttr()) != "a");
- TS_ASSERT(b.getAttribute(VarNameAttr()) != "b");
- TS_ASSERT(b.getAttribute(VarNameAttr()) == "c");
- TS_ASSERT(b.getAttribute(VarNameAttr()) != "");
-
- TS_ASSERT(unnamed.getAttribute(VarNameAttr()) != "a");
- TS_ASSERT(unnamed.getAttribute(VarNameAttr()) != "b");
- TS_ASSERT(unnamed.getAttribute(VarNameAttr()) != "c");
- TS_ASSERT(unnamed.getAttribute(VarNameAttr()) == "");
-
- TS_ASSERT(! unnamed.hasAttribute(VarNameAttr()));
- }
};
diff --git a/test/unit/parser/parser_black.h b/test/unit/parser/parser_black.h
index 1b05f490e..f7d4eff24 100644
--- a/test/unit/parser/parser_black.h
+++ b/test/unit/parser/parser_black.h
@@ -170,7 +170,7 @@ class ParserBlack : public CxxTest::TestSuite {
} catch (Exception& e) {
cout << "\nGood input failed:\n" << goodInputs[i] << endl
<< e << endl;
- throw e;
+ throw;
}
}
@@ -226,6 +226,7 @@ class ParserBlack : public CxxTest::TestSuite {
( smtParser->parseNextExpression();
cout << "\nBad expr succeeded: " << badBooleanExprs[i] << endl;,
ParserException );
+ delete smtParser;
}
//Debug.off("parser");
}
@@ -235,6 +236,10 @@ public:
d_exprManager = new ExprManager();
}
+ void tearDown() {
+ delete d_exprManager;
+ }
+
void testGoodCvc4Inputs() {
tryGoodInputs(Parser::LANG_CVC4,goodCvc4Inputs,numGoodCvc4Inputs);
}
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback