diff options
author | Morgan Deters <mdeters@gmail.com> | 2010-02-19 23:10:02 +0000 |
---|---|---|
committer | Morgan Deters <mdeters@gmail.com> | 2010-02-19 23:10:02 +0000 |
commit | 7697b5218118d71800318472a7423a5b42bee469 (patch) | |
tree | 28f910c4cb5475a3bd70e5669420d55caee4f6d8 /test | |
parent | ce0e796ad92f040fb75435bd7880bc28a60b0374 (diff) |
specialized implementation for boolean node attributes ("flags"): they now share memory words properly; also, implementations of some output functionality
Diffstat (limited to 'test')
-rw-r--r-- | test/unit/expr/node_white.h | 248 |
1 files changed, 242 insertions, 6 deletions
diff --git a/test/unit/expr/node_white.h b/test/unit/expr/node_white.h index 73a7b1a54..e2e1a94fd 100644 --- a/test/unit/expr/node_white.h +++ b/test/unit/expr/node_white.h @@ -31,12 +31,16 @@ struct Test1; struct Test2; struct Test3; struct Test4; +struct Test5; typedef Attribute<Test1, std::string> TestStringAttr1; typedef Attribute<Test2, std::string> TestStringAttr2; -typedef Attribute<Test3, bool> TestFlag1; -typedef Attribute<Test4, bool> TestFlag2; +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; class NodeWhite : public CxxTest::TestSuite { @@ -82,15 +86,17 @@ public: TS_ASSERT(TestFlag1::s_id == 0); TS_ASSERT(TestFlag2::s_id == 1); - TS_ASSERT(attr::LastAttributeId<bool>::s_id == 2); - TS_ASSERT(TestFlag1::s_bit == 0); - TS_ASSERT(TestFlag2::s_bit == 1); - TS_ASSERT(attr::BitAssignment::s_bit == 2); + TS_ASSERT(TestFlag3::s_id == 2); + TS_ASSERT(TestFlag4::s_id == 3); + TS_ASSERT(TestFlag5::s_id == 4); + TS_ASSERT(attr::LastAttributeId<bool>::s_id == 5); } void testAttributes() { AttributeManager& am = d_nm->d_am; + //Debug.on("boolattr"); + Node a = d_nm->mkVar(); Node b = d_nm->mkVar(); Node c = d_nm->mkVar(); @@ -100,16 +106,211 @@ public: 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 + Debug("boolattr", "get flag 1 on a (should be F)\n"); + TS_ASSERT(a.hasAttribute(TestFlag1())); + Debug("boolattr", "get flag 1 on b (should be F)\n"); + TS_ASSERT(b.hasAttribute(TestFlag1())); + Debug("boolattr", "get flag 1 on c (should be F)\n"); + TS_ASSERT(c.hasAttribute(TestFlag1())); + Debug("boolattr", "get flag 1 on unnamed (should be F)\n"); + TS_ASSERT(unnamed.hasAttribute(TestFlag1())); + + Debug("boolattr", "get flag 2 on a (should be F)\n"); + TS_ASSERT(a.hasAttribute(TestFlag2())); + Debug("boolattr", "get flag 2 on b (should be F)\n"); + TS_ASSERT(b.hasAttribute(TestFlag2())); + Debug("boolattr", "get flag 2 on c (should be F)\n"); + TS_ASSERT(c.hasAttribute(TestFlag2())); + Debug("boolattr", "get flag 2 on unnamed (should be F)\n"); + TS_ASSERT(unnamed.hasAttribute(TestFlag2())); + + Debug("boolattr", "get flag 3 on a (should be F)\n"); + TS_ASSERT(a.hasAttribute(TestFlag3())); + Debug("boolattr", "get flag 3 on b (should be F)\n"); + TS_ASSERT(b.hasAttribute(TestFlag3())); + Debug("boolattr", "get flag 3 on c (should be F)\n"); + TS_ASSERT(c.hasAttribute(TestFlag3())); + Debug("boolattr", "get flag 3 on unnamed (should be F)\n"); + TS_ASSERT(unnamed.hasAttribute(TestFlag3())); + + Debug("boolattr", "get flag 4 on a (should be F)\n"); + TS_ASSERT(a.hasAttribute(TestFlag4())); + Debug("boolattr", "get flag 4 on b (should be F)\n"); + TS_ASSERT(b.hasAttribute(TestFlag4())); + Debug("boolattr", "get flag 4 on c (should be F)\n"); + TS_ASSERT(c.hasAttribute(TestFlag4())); + Debug("boolattr", "get flag 4 on unnamed (should be F)\n"); + TS_ASSERT(unnamed.hasAttribute(TestFlag4())); + + Debug("boolattr", "get flag 5 on a (should be F)\n"); + TS_ASSERT(a.hasAttribute(TestFlag5())); + Debug("boolattr", "get flag 5 on b (should be F)\n"); + TS_ASSERT(b.hasAttribute(TestFlag5())); + Debug("boolattr", "get flag 5 on c (should be F)\n"); + TS_ASSERT(c.hasAttribute(TestFlag5())); + Debug("boolattr", "get flag 5 on unnamed (should be F)\n"); + 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"); @@ -142,16 +343,51 @@ public: 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"); |