2021-04-12 12:31:43 -07:00
|
|
|
/******************************************************************************
|
|
|
|
|
* Top contributors (to current version):
|
2022-04-05 13:38:57 -07:00
|
|
|
* Aina Niemetz, Gereon Kremer, Morgan Deters
|
2021-04-12 12:31:43 -07:00
|
|
|
*
|
|
|
|
|
* This file is part of the cvc5 project.
|
|
|
|
|
*
|
2022-04-05 13:38:57 -07:00
|
|
|
* Copyright (c) 2009-2022 by the authors listed in the file AUTHORS
|
2021-04-12 12:31:43 -07:00
|
|
|
* 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.
|
|
|
|
|
* ****************************************************************************
|
|
|
|
|
*
|
|
|
|
|
* White box testing of Node attributes.
|
|
|
|
|
*/
|
2020-12-09 11:14:01 -08:00
|
|
|
|
|
|
|
|
#include <string>
|
|
|
|
|
|
|
|
|
|
#include "base/check.h"
|
|
|
|
|
#include "expr/attribute.h"
|
|
|
|
|
#include "expr/node.h"
|
|
|
|
|
#include "expr/node_builder.h"
|
|
|
|
|
#include "expr/node_manager.h"
|
|
|
|
|
#include "expr/node_manager_attributes.h"
|
|
|
|
|
#include "expr/node_value.h"
|
2021-09-30 14:14:59 -07:00
|
|
|
#include "smt/solver_engine.h"
|
2021-03-05 06:09:06 -08:00
|
|
|
#include "test_node.h"
|
2020-12-09 11:14:01 -08:00
|
|
|
#include "theory/theory.h"
|
|
|
|
|
#include "theory/theory_engine.h"
|
|
|
|
|
#include "theory/uf/theory_uf.h"
|
|
|
|
|
|
2022-03-29 16:23:01 -07:00
|
|
|
namespace cvc5::internal {
|
2020-12-09 11:14:01 -08:00
|
|
|
|
|
|
|
|
using namespace kind;
|
|
|
|
|
using namespace smt;
|
|
|
|
|
using namespace expr;
|
|
|
|
|
using namespace expr::attr;
|
|
|
|
|
|
|
|
|
|
namespace test {
|
|
|
|
|
|
|
|
|
|
struct Test1;
|
|
|
|
|
struct Test2;
|
|
|
|
|
struct Test3;
|
|
|
|
|
struct Test4;
|
|
|
|
|
struct Test5;
|
|
|
|
|
|
|
|
|
|
typedef Attribute<Test1, std::string> TestStringAttr1;
|
|
|
|
|
typedef Attribute<Test2, std::string> TestStringAttr2;
|
|
|
|
|
|
|
|
|
|
using TestFlag1 = Attribute<Test1, bool>;
|
|
|
|
|
using TestFlag2 = Attribute<Test2, bool>;
|
|
|
|
|
using TestFlag3 = Attribute<Test3, bool>;
|
|
|
|
|
using TestFlag4 = Attribute<Test4, bool>;
|
|
|
|
|
using TestFlag5 = Attribute<Test5, bool>;
|
|
|
|
|
|
2021-03-17 11:07:48 -07:00
|
|
|
class TestNodeWhiteAttribute : public TestNode
|
2020-12-09 11:14:01 -08:00
|
|
|
{
|
|
|
|
|
protected:
|
|
|
|
|
void SetUp() override
|
|
|
|
|
{
|
2021-03-05 06:09:06 -08:00
|
|
|
TestNode::SetUp();
|
2020-12-09 11:14:01 -08:00
|
|
|
d_booleanType.reset(new TypeNode(d_nodeManager->booleanType()));
|
|
|
|
|
}
|
|
|
|
|
std::unique_ptr<TypeNode> d_booleanType;
|
|
|
|
|
};
|
|
|
|
|
|
2021-03-17 11:07:48 -07:00
|
|
|
TEST_F(TestNodeWhiteAttribute, attribute_ids)
|
2020-12-09 11:14:01 -08:00
|
|
|
{
|
|
|
|
|
// Test that IDs for (a subset of) attributes in the system are
|
|
|
|
|
// unique and that the LastAttributeId (which would be the next ID
|
|
|
|
|
// to assign) is greater than all attribute IDs.
|
|
|
|
|
|
|
|
|
|
// We used to check ID assignments explicitly. However, between
|
|
|
|
|
// compilation modules, you don't get a strong guarantee
|
|
|
|
|
// (initialization order is somewhat implementation-specific, and
|
|
|
|
|
// anyway you'd have to change the tests anytime you add an
|
|
|
|
|
// attribute). So we back off, and just test that they're unique
|
|
|
|
|
// and that the next ID to be assigned is strictly greater than
|
|
|
|
|
// those that have already been assigned.
|
|
|
|
|
|
2021-06-21 12:41:00 -07:00
|
|
|
unsigned lastId = attr::LastAttributeId<std::string>::getId();
|
2021-01-12 08:55:56 -08:00
|
|
|
ASSERT_LT(VarNameAttr::s_id, lastId);
|
|
|
|
|
ASSERT_LT(TestStringAttr1::s_id, lastId);
|
|
|
|
|
ASSERT_LT(TestStringAttr2::s_id, lastId);
|
2020-12-09 11:14:01 -08:00
|
|
|
|
2021-01-12 08:55:56 -08:00
|
|
|
ASSERT_NE(VarNameAttr::s_id, TestStringAttr1::s_id);
|
|
|
|
|
ASSERT_NE(VarNameAttr::s_id, TestStringAttr2::s_id);
|
|
|
|
|
ASSERT_NE(TestStringAttr1::s_id, TestStringAttr2::s_id);
|
2020-12-09 11:14:01 -08:00
|
|
|
|
2021-06-21 12:41:00 -07:00
|
|
|
lastId = attr::LastAttributeId<bool>::getId();
|
2021-01-12 08:55:56 -08:00
|
|
|
ASSERT_LT(TestFlag1::s_id, lastId);
|
|
|
|
|
ASSERT_LT(TestFlag2::s_id, lastId);
|
|
|
|
|
ASSERT_LT(TestFlag3::s_id, lastId);
|
|
|
|
|
ASSERT_LT(TestFlag4::s_id, lastId);
|
|
|
|
|
ASSERT_LT(TestFlag5::s_id, lastId);
|
|
|
|
|
ASSERT_NE(TestFlag1::s_id, TestFlag2::s_id);
|
|
|
|
|
ASSERT_NE(TestFlag1::s_id, TestFlag3::s_id);
|
|
|
|
|
ASSERT_NE(TestFlag1::s_id, TestFlag4::s_id);
|
|
|
|
|
ASSERT_NE(TestFlag1::s_id, TestFlag5::s_id);
|
|
|
|
|
ASSERT_NE(TestFlag2::s_id, TestFlag3::s_id);
|
|
|
|
|
ASSERT_NE(TestFlag2::s_id, TestFlag4::s_id);
|
|
|
|
|
ASSERT_NE(TestFlag2::s_id, TestFlag5::s_id);
|
|
|
|
|
ASSERT_NE(TestFlag3::s_id, TestFlag4::s_id);
|
|
|
|
|
ASSERT_NE(TestFlag3::s_id, TestFlag5::s_id);
|
|
|
|
|
ASSERT_NE(TestFlag4::s_id, TestFlag5::s_id);
|
2020-12-09 11:14:01 -08:00
|
|
|
|
2021-06-21 12:41:00 -07:00
|
|
|
lastId = attr::LastAttributeId<TypeNode>::getId();
|
2021-01-12 08:55:56 -08:00
|
|
|
ASSERT_LT(TypeAttr::s_id, lastId);
|
2020-12-09 11:14:01 -08:00
|
|
|
}
|
|
|
|
|
|
2021-03-17 11:07:48 -07:00
|
|
|
TEST_F(TestNodeWhiteAttribute, attributes)
|
2020-12-09 11:14:01 -08:00
|
|
|
{
|
|
|
|
|
Node a = d_nodeManager->mkVar(*d_booleanType);
|
|
|
|
|
Node b = d_nodeManager->mkVar(*d_booleanType);
|
|
|
|
|
Node c = d_nodeManager->mkVar(*d_booleanType);
|
|
|
|
|
Node unnamed = d_nodeManager->mkVar(*d_booleanType);
|
|
|
|
|
|
|
|
|
|
a.setAttribute(VarNameAttr(), "a");
|
|
|
|
|
b.setAttribute(VarNameAttr(), "b");
|
|
|
|
|
c.setAttribute(VarNameAttr(), "c");
|
|
|
|
|
|
|
|
|
|
// test that all boolean flags are FALSE to start
|
2022-03-17 19:00:56 +01:00
|
|
|
Trace("boolattr") << "get flag 1 on a (should be F)\n";
|
2020-12-09 11:14:01 -08:00
|
|
|
ASSERT_FALSE(a.getAttribute(TestFlag1()));
|
2022-03-17 19:00:56 +01:00
|
|
|
Trace("boolattr") << "get flag 1 on b (should be F)\n";
|
2020-12-09 11:14:01 -08:00
|
|
|
ASSERT_FALSE(b.getAttribute(TestFlag1()));
|
2022-03-17 19:00:56 +01:00
|
|
|
Trace("boolattr") << "get flag 1 on c (should be F)\n";
|
2020-12-09 11:14:01 -08:00
|
|
|
ASSERT_FALSE(c.getAttribute(TestFlag1()));
|
2022-03-17 19:00:56 +01:00
|
|
|
Trace("boolattr") << "get flag 1 on unnamed (should be F)\n";
|
2020-12-09 11:14:01 -08:00
|
|
|
ASSERT_FALSE(unnamed.getAttribute(TestFlag1()));
|
|
|
|
|
|
2022-03-17 19:00:56 +01:00
|
|
|
Trace("boolattr") << "get flag 2 on a (should be F)\n";
|
2020-12-09 11:14:01 -08:00
|
|
|
ASSERT_FALSE(a.getAttribute(TestFlag2()));
|
2022-03-17 19:00:56 +01:00
|
|
|
Trace("boolattr") << "get flag 2 on b (should be F)\n";
|
2020-12-09 11:14:01 -08:00
|
|
|
ASSERT_FALSE(b.getAttribute(TestFlag2()));
|
2022-03-17 19:00:56 +01:00
|
|
|
Trace("boolattr") << "get flag 2 on c (should be F)\n";
|
2020-12-09 11:14:01 -08:00
|
|
|
ASSERT_FALSE(c.getAttribute(TestFlag2()));
|
2022-03-17 19:00:56 +01:00
|
|
|
Trace("boolattr") << "get flag 2 on unnamed (should be F)\n";
|
2020-12-09 11:14:01 -08:00
|
|
|
ASSERT_FALSE(unnamed.getAttribute(TestFlag2()));
|
|
|
|
|
|
2022-03-17 19:00:56 +01:00
|
|
|
Trace("boolattr") << "get flag 3 on a (should be F)\n";
|
2020-12-09 11:14:01 -08:00
|
|
|
ASSERT_FALSE(a.getAttribute(TestFlag3()));
|
2022-03-17 19:00:56 +01:00
|
|
|
Trace("boolattr") << "get flag 3 on b (should be F)\n";
|
2020-12-09 11:14:01 -08:00
|
|
|
ASSERT_FALSE(b.getAttribute(TestFlag3()));
|
2022-03-17 19:00:56 +01:00
|
|
|
Trace("boolattr") << "get flag 3 on c (should be F)\n";
|
2020-12-09 11:14:01 -08:00
|
|
|
ASSERT_FALSE(c.getAttribute(TestFlag3()));
|
2022-03-17 19:00:56 +01:00
|
|
|
Trace("boolattr") << "get flag 3 on unnamed (should be F)\n";
|
2020-12-09 11:14:01 -08:00
|
|
|
ASSERT_FALSE(unnamed.getAttribute(TestFlag3()));
|
|
|
|
|
|
2022-03-17 19:00:56 +01:00
|
|
|
Trace("boolattr") << "get flag 4 on a (should be F)\n";
|
2020-12-09 11:14:01 -08:00
|
|
|
ASSERT_FALSE(a.getAttribute(TestFlag4()));
|
2022-03-17 19:00:56 +01:00
|
|
|
Trace("boolattr") << "get flag 4 on b (should be F)\n";
|
2020-12-09 11:14:01 -08:00
|
|
|
ASSERT_FALSE(b.getAttribute(TestFlag4()));
|
2022-03-17 19:00:56 +01:00
|
|
|
Trace("boolattr") << "get flag 4 on c (should be F)\n";
|
2020-12-09 11:14:01 -08:00
|
|
|
ASSERT_FALSE(c.getAttribute(TestFlag4()));
|
2022-03-17 19:00:56 +01:00
|
|
|
Trace("boolattr") << "get flag 4 on unnamed (should be F)\n";
|
2020-12-09 11:14:01 -08:00
|
|
|
ASSERT_FALSE(unnamed.getAttribute(TestFlag4()));
|
|
|
|
|
|
2022-03-17 19:00:56 +01:00
|
|
|
Trace("boolattr") << "get flag 5 on a (should be F)\n";
|
2020-12-09 11:14:01 -08:00
|
|
|
ASSERT_FALSE(a.getAttribute(TestFlag5()));
|
2022-03-17 19:00:56 +01:00
|
|
|
Trace("boolattr") << "get flag 5 on b (should be F)\n";
|
2020-12-09 11:14:01 -08:00
|
|
|
ASSERT_FALSE(b.getAttribute(TestFlag5()));
|
2022-03-17 19:00:56 +01:00
|
|
|
Trace("boolattr") << "get flag 5 on c (should be F)\n";
|
2020-12-09 11:14:01 -08:00
|
|
|
ASSERT_FALSE(c.getAttribute(TestFlag5()));
|
2022-03-17 19:00:56 +01:00
|
|
|
Trace("boolattr") << "get flag 5 on unnamed (should be F)\n";
|
2020-12-09 11:14:01 -08:00
|
|
|
ASSERT_FALSE(unnamed.getAttribute(TestFlag5()));
|
|
|
|
|
|
|
|
|
|
// test that they all HAVE the boolean attributes
|
|
|
|
|
ASSERT_TRUE(a.hasAttribute(TestFlag1()));
|
|
|
|
|
ASSERT_TRUE(b.hasAttribute(TestFlag1()));
|
|
|
|
|
ASSERT_TRUE(c.hasAttribute(TestFlag1()));
|
|
|
|
|
ASSERT_TRUE(unnamed.hasAttribute(TestFlag1()));
|
|
|
|
|
|
|
|
|
|
ASSERT_TRUE(a.hasAttribute(TestFlag2()));
|
|
|
|
|
ASSERT_TRUE(b.hasAttribute(TestFlag2()));
|
|
|
|
|
ASSERT_TRUE(c.hasAttribute(TestFlag2()));
|
|
|
|
|
ASSERT_TRUE(unnamed.hasAttribute(TestFlag2()));
|
|
|
|
|
|
|
|
|
|
ASSERT_TRUE(a.hasAttribute(TestFlag3()));
|
|
|
|
|
ASSERT_TRUE(b.hasAttribute(TestFlag3()));
|
|
|
|
|
ASSERT_TRUE(c.hasAttribute(TestFlag3()));
|
|
|
|
|
ASSERT_TRUE(unnamed.hasAttribute(TestFlag3()));
|
|
|
|
|
|
|
|
|
|
ASSERT_TRUE(a.hasAttribute(TestFlag4()));
|
|
|
|
|
ASSERT_TRUE(b.hasAttribute(TestFlag4()));
|
|
|
|
|
ASSERT_TRUE(c.hasAttribute(TestFlag4()));
|
|
|
|
|
ASSERT_TRUE(unnamed.hasAttribute(TestFlag4()));
|
|
|
|
|
|
|
|
|
|
ASSERT_TRUE(a.hasAttribute(TestFlag5()));
|
|
|
|
|
ASSERT_TRUE(b.hasAttribute(TestFlag5()));
|
|
|
|
|
ASSERT_TRUE(c.hasAttribute(TestFlag5()));
|
|
|
|
|
ASSERT_TRUE(unnamed.hasAttribute(TestFlag5()));
|
|
|
|
|
|
|
|
|
|
// test two-arg version of hasAttribute()
|
|
|
|
|
bool bb = false;
|
2022-03-17 19:00:56 +01:00
|
|
|
Trace("boolattr") << "get flag 1 on a (should be F)\n";
|
2020-12-09 11:14:01 -08:00
|
|
|
ASSERT_TRUE(a.getAttribute(TestFlag1(), bb));
|
|
|
|
|
ASSERT_FALSE(bb);
|
2022-03-17 19:00:56 +01:00
|
|
|
Trace("boolattr") << "get flag 1 on b (should be F)\n";
|
2020-12-09 11:14:01 -08:00
|
|
|
ASSERT_TRUE(b.getAttribute(TestFlag1(), bb));
|
|
|
|
|
ASSERT_FALSE(bb);
|
2022-03-17 19:00:56 +01:00
|
|
|
Trace("boolattr") << "get flag 1 on c (should be F)\n";
|
2020-12-09 11:14:01 -08:00
|
|
|
ASSERT_TRUE(c.getAttribute(TestFlag1(), bb));
|
|
|
|
|
ASSERT_FALSE(bb);
|
2022-03-17 19:00:56 +01:00
|
|
|
Trace("boolattr") << "get flag 1 on unnamed (should be F)\n";
|
2020-12-09 11:14:01 -08:00
|
|
|
ASSERT_TRUE(unnamed.getAttribute(TestFlag1(), bb));
|
|
|
|
|
ASSERT_FALSE(bb);
|
|
|
|
|
|
2022-03-17 19:00:56 +01:00
|
|
|
Trace("boolattr") << "get flag 2 on a (should be F)\n";
|
2020-12-09 11:14:01 -08:00
|
|
|
ASSERT_TRUE(a.getAttribute(TestFlag2(), bb));
|
|
|
|
|
ASSERT_FALSE(bb);
|
2022-03-17 19:00:56 +01:00
|
|
|
Trace("boolattr") << "get flag 2 on b (should be F)\n";
|
2020-12-09 11:14:01 -08:00
|
|
|
ASSERT_TRUE(b.getAttribute(TestFlag2(), bb));
|
|
|
|
|
ASSERT_FALSE(bb);
|
2022-03-17 19:00:56 +01:00
|
|
|
Trace("boolattr") << "get flag 2 on c (should be F)\n";
|
2020-12-09 11:14:01 -08:00
|
|
|
ASSERT_TRUE(c.getAttribute(TestFlag2(), bb));
|
|
|
|
|
ASSERT_FALSE(bb);
|
2022-03-17 19:00:56 +01:00
|
|
|
Trace("boolattr") << "get flag 2 on unnamed (should be F)\n";
|
2020-12-09 11:14:01 -08:00
|
|
|
ASSERT_TRUE(unnamed.getAttribute(TestFlag2(), bb));
|
|
|
|
|
ASSERT_FALSE(bb);
|
|
|
|
|
|
2022-03-17 19:00:56 +01:00
|
|
|
Trace("boolattr") << "get flag 3 on a (should be F)\n";
|
2020-12-09 11:14:01 -08:00
|
|
|
ASSERT_TRUE(a.getAttribute(TestFlag3(), bb));
|
|
|
|
|
ASSERT_FALSE(bb);
|
2022-03-17 19:00:56 +01:00
|
|
|
Trace("boolattr") << "get flag 3 on b (should be F)\n";
|
2020-12-09 11:14:01 -08:00
|
|
|
ASSERT_TRUE(b.getAttribute(TestFlag3(), bb));
|
|
|
|
|
ASSERT_FALSE(bb);
|
2022-03-17 19:00:56 +01:00
|
|
|
Trace("boolattr") << "get flag 3 on c (should be F)\n";
|
2020-12-09 11:14:01 -08:00
|
|
|
ASSERT_TRUE(c.getAttribute(TestFlag3(), bb));
|
|
|
|
|
ASSERT_FALSE(bb);
|
2022-03-17 19:00:56 +01:00
|
|
|
Trace("boolattr") << "get flag 3 on unnamed (should be F)\n";
|
2020-12-09 11:14:01 -08:00
|
|
|
ASSERT_TRUE(unnamed.getAttribute(TestFlag3(), bb));
|
|
|
|
|
ASSERT_FALSE(bb);
|
|
|
|
|
|
2022-03-17 19:00:56 +01:00
|
|
|
Trace("boolattr") << "get flag 4 on a (should be F)\n";
|
2020-12-09 11:14:01 -08:00
|
|
|
ASSERT_TRUE(a.getAttribute(TestFlag4(), bb));
|
|
|
|
|
ASSERT_FALSE(bb);
|
2022-03-17 19:00:56 +01:00
|
|
|
Trace("boolattr") << "get flag 4 on b (should be F)\n";
|
2020-12-09 11:14:01 -08:00
|
|
|
ASSERT_TRUE(b.getAttribute(TestFlag4(), bb));
|
|
|
|
|
ASSERT_FALSE(bb);
|
2022-03-17 19:00:56 +01:00
|
|
|
Trace("boolattr") << "get flag 4 on c (should be F)\n";
|
2020-12-09 11:14:01 -08:00
|
|
|
ASSERT_TRUE(c.getAttribute(TestFlag4(), bb));
|
|
|
|
|
ASSERT_FALSE(bb);
|
2022-03-17 19:00:56 +01:00
|
|
|
Trace("boolattr") << "get flag 4 on unnamed (should be F)\n";
|
2020-12-09 11:14:01 -08:00
|
|
|
ASSERT_TRUE(unnamed.getAttribute(TestFlag4(), bb));
|
|
|
|
|
ASSERT_FALSE(bb);
|
|
|
|
|
|
2022-03-17 19:00:56 +01:00
|
|
|
Trace("boolattr") << "get flag 5 on a (should be F)\n";
|
2020-12-09 11:14:01 -08:00
|
|
|
ASSERT_TRUE(a.getAttribute(TestFlag5(), bb));
|
|
|
|
|
ASSERT_FALSE(bb);
|
2022-03-17 19:00:56 +01:00
|
|
|
Trace("boolattr") << "get flag 5 on b (should be F)\n";
|
2020-12-09 11:14:01 -08:00
|
|
|
ASSERT_TRUE(b.getAttribute(TestFlag5(), bb));
|
|
|
|
|
ASSERT_FALSE(bb);
|
2022-03-17 19:00:56 +01:00
|
|
|
Trace("boolattr") << "get flag 5 on c (should be F)\n";
|
2020-12-09 11:14:01 -08:00
|
|
|
ASSERT_TRUE(c.getAttribute(TestFlag5(), bb));
|
|
|
|
|
ASSERT_FALSE(bb);
|
2022-03-17 19:00:56 +01:00
|
|
|
Trace("boolattr") << "get flag 5 on unnamed (should be F)\n";
|
2020-12-09 11:14:01 -08:00
|
|
|
ASSERT_TRUE(unnamed.getAttribute(TestFlag5(), bb));
|
|
|
|
|
ASSERT_FALSE(bb);
|
|
|
|
|
|
|
|
|
|
// setting boolean flags
|
2022-03-17 19:00:56 +01:00
|
|
|
Trace("boolattr") << "set flag 1 on a to T\n";
|
2020-12-09 11:14:01 -08:00
|
|
|
a.setAttribute(TestFlag1(), true);
|
2022-03-17 19:00:56 +01:00
|
|
|
Trace("boolattr") << "set flag 1 on b to F\n";
|
2020-12-09 11:14:01 -08:00
|
|
|
b.setAttribute(TestFlag1(), false);
|
2022-03-17 19:00:56 +01:00
|
|
|
Trace("boolattr") << "set flag 1 on c to F\n";
|
2020-12-09 11:14:01 -08:00
|
|
|
c.setAttribute(TestFlag1(), false);
|
2022-03-17 19:00:56 +01:00
|
|
|
Trace("boolattr") << "set flag 1 on unnamed to T\n";
|
2020-12-09 11:14:01 -08:00
|
|
|
unnamed.setAttribute(TestFlag1(), true);
|
|
|
|
|
|
2022-03-17 19:00:56 +01:00
|
|
|
Trace("boolattr") << "set flag 2 on a to F\n";
|
2020-12-09 11:14:01 -08:00
|
|
|
a.setAttribute(TestFlag2(), false);
|
2022-03-17 19:00:56 +01:00
|
|
|
Trace("boolattr") << "set flag 2 on b to T\n";
|
2020-12-09 11:14:01 -08:00
|
|
|
b.setAttribute(TestFlag2(), true);
|
2022-03-17 19:00:56 +01:00
|
|
|
Trace("boolattr") << "set flag 2 on c to T\n";
|
2020-12-09 11:14:01 -08:00
|
|
|
c.setAttribute(TestFlag2(), true);
|
2022-03-17 19:00:56 +01:00
|
|
|
Trace("boolattr") << "set flag 2 on unnamed to F\n";
|
2020-12-09 11:14:01 -08:00
|
|
|
unnamed.setAttribute(TestFlag2(), false);
|
|
|
|
|
|
2022-03-17 19:00:56 +01:00
|
|
|
Trace("boolattr") << "set flag 3 on a to T\n";
|
2020-12-09 11:14:01 -08:00
|
|
|
a.setAttribute(TestFlag3(), true);
|
2022-03-17 19:00:56 +01:00
|
|
|
Trace("boolattr") << "set flag 3 on b to T\n";
|
2020-12-09 11:14:01 -08:00
|
|
|
b.setAttribute(TestFlag3(), true);
|
2022-03-17 19:00:56 +01:00
|
|
|
Trace("boolattr") << "set flag 3 on c to T\n";
|
2020-12-09 11:14:01 -08:00
|
|
|
c.setAttribute(TestFlag3(), true);
|
2022-03-17 19:00:56 +01:00
|
|
|
Trace("boolattr") << "set flag 3 on unnamed to T\n";
|
2020-12-09 11:14:01 -08:00
|
|
|
unnamed.setAttribute(TestFlag3(), true);
|
|
|
|
|
|
2022-03-17 19:00:56 +01:00
|
|
|
Trace("boolattr") << "set flag 4 on a to T\n";
|
2020-12-09 11:14:01 -08:00
|
|
|
a.setAttribute(TestFlag4(), true);
|
2022-03-17 19:00:56 +01:00
|
|
|
Trace("boolattr") << "set flag 4 on b to T\n";
|
2020-12-09 11:14:01 -08:00
|
|
|
b.setAttribute(TestFlag4(), true);
|
2022-03-17 19:00:56 +01:00
|
|
|
Trace("boolattr") << "set flag 4 on c to T\n";
|
2020-12-09 11:14:01 -08:00
|
|
|
c.setAttribute(TestFlag4(), true);
|
2022-03-17 19:00:56 +01:00
|
|
|
Trace("boolattr") << "set flag 4 on unnamed to T\n";
|
2020-12-09 11:14:01 -08:00
|
|
|
unnamed.setAttribute(TestFlag4(), true);
|
|
|
|
|
|
2022-03-17 19:00:56 +01:00
|
|
|
Trace("boolattr") << "set flag 5 on a to T\n";
|
2020-12-09 11:14:01 -08:00
|
|
|
a.setAttribute(TestFlag5(), true);
|
2022-03-17 19:00:56 +01:00
|
|
|
Trace("boolattr") << "set flag 5 on b to T\n";
|
2020-12-09 11:14:01 -08:00
|
|
|
b.setAttribute(TestFlag5(), true);
|
2022-03-17 19:00:56 +01:00
|
|
|
Trace("boolattr") << "set flag 5 on c to F\n";
|
2020-12-09 11:14:01 -08:00
|
|
|
c.setAttribute(TestFlag5(), false);
|
2022-03-17 19:00:56 +01:00
|
|
|
Trace("boolattr") << "set flag 5 on unnamed to T\n";
|
2020-12-09 11:14:01 -08:00
|
|
|
unnamed.setAttribute(TestFlag5(), true);
|
|
|
|
|
|
2021-01-12 08:55:56 -08:00
|
|
|
ASSERT_EQ(a.getAttribute(VarNameAttr()), "a");
|
|
|
|
|
ASSERT_NE(a.getAttribute(VarNameAttr()), "b");
|
|
|
|
|
ASSERT_NE(a.getAttribute(VarNameAttr()), "c");
|
|
|
|
|
ASSERT_NE(a.getAttribute(VarNameAttr()), "");
|
2020-12-09 11:14:01 -08:00
|
|
|
|
2021-01-12 08:55:56 -08:00
|
|
|
ASSERT_NE(b.getAttribute(VarNameAttr()), "a");
|
|
|
|
|
ASSERT_EQ(b.getAttribute(VarNameAttr()), "b");
|
|
|
|
|
ASSERT_NE(b.getAttribute(VarNameAttr()), "c");
|
|
|
|
|
ASSERT_NE(b.getAttribute(VarNameAttr()), "");
|
2020-12-09 11:14:01 -08:00
|
|
|
|
2021-01-12 08:55:56 -08:00
|
|
|
ASSERT_NE(c.getAttribute(VarNameAttr()), "a");
|
|
|
|
|
ASSERT_NE(c.getAttribute(VarNameAttr()), "b");
|
|
|
|
|
ASSERT_EQ(c.getAttribute(VarNameAttr()), "c");
|
|
|
|
|
ASSERT_NE(c.getAttribute(VarNameAttr()), "");
|
2020-12-09 11:14:01 -08:00
|
|
|
|
2021-01-12 08:55:56 -08:00
|
|
|
ASSERT_NE(unnamed.getAttribute(VarNameAttr()), "a");
|
|
|
|
|
ASSERT_NE(unnamed.getAttribute(VarNameAttr()), "b");
|
|
|
|
|
ASSERT_NE(unnamed.getAttribute(VarNameAttr()), "c");
|
|
|
|
|
ASSERT_EQ(unnamed.getAttribute(VarNameAttr()), "");
|
2020-12-09 11:14:01 -08:00
|
|
|
|
|
|
|
|
ASSERT_FALSE(unnamed.hasAttribute(VarNameAttr()));
|
|
|
|
|
|
|
|
|
|
ASSERT_FALSE(a.hasAttribute(TestStringAttr1()));
|
|
|
|
|
ASSERT_FALSE(b.hasAttribute(TestStringAttr1()));
|
|
|
|
|
ASSERT_FALSE(c.hasAttribute(TestStringAttr1()));
|
|
|
|
|
ASSERT_FALSE(unnamed.hasAttribute(TestStringAttr1()));
|
|
|
|
|
|
|
|
|
|
ASSERT_FALSE(a.hasAttribute(TestStringAttr2()));
|
|
|
|
|
ASSERT_FALSE(b.hasAttribute(TestStringAttr2()));
|
|
|
|
|
ASSERT_FALSE(c.hasAttribute(TestStringAttr2()));
|
|
|
|
|
ASSERT_FALSE(unnamed.hasAttribute(TestStringAttr2()));
|
|
|
|
|
|
2022-03-17 19:00:56 +01:00
|
|
|
Trace("boolattr") << "get flag 1 on a (should be T)\n";
|
2020-12-09 11:14:01 -08:00
|
|
|
ASSERT_TRUE(a.getAttribute(TestFlag1()));
|
2022-03-17 19:00:56 +01:00
|
|
|
Trace("boolattr") << "get flag 1 on b (should be F)\n";
|
2020-12-09 11:14:01 -08:00
|
|
|
ASSERT_FALSE(b.getAttribute(TestFlag1()));
|
2022-03-17 19:00:56 +01:00
|
|
|
Trace("boolattr") << "get flag 1 on c (should be F)\n";
|
2020-12-09 11:14:01 -08:00
|
|
|
ASSERT_FALSE(c.getAttribute(TestFlag1()));
|
2022-03-17 19:00:56 +01:00
|
|
|
Trace("boolattr") << "get flag 1 on unnamed (should be T)\n";
|
2020-12-09 11:14:01 -08:00
|
|
|
ASSERT_TRUE(unnamed.getAttribute(TestFlag1()));
|
|
|
|
|
|
2022-03-17 19:00:56 +01:00
|
|
|
Trace("boolattr") << "get flag 2 on a (should be F)\n";
|
2020-12-09 11:14:01 -08:00
|
|
|
ASSERT_FALSE(a.getAttribute(TestFlag2()));
|
2022-03-17 19:00:56 +01:00
|
|
|
Trace("boolattr") << "get flag 2 on b (should be T)\n";
|
2020-12-09 11:14:01 -08:00
|
|
|
ASSERT_TRUE(b.getAttribute(TestFlag2()));
|
2022-03-17 19:00:56 +01:00
|
|
|
Trace("boolattr") << "get flag 2 on c (should be T)\n";
|
2020-12-09 11:14:01 -08:00
|
|
|
ASSERT_TRUE(c.getAttribute(TestFlag2()));
|
2022-03-17 19:00:56 +01:00
|
|
|
Trace("boolattr") << "get flag 2 on unnamed (should be F)\n";
|
2020-12-09 11:14:01 -08:00
|
|
|
ASSERT_FALSE(unnamed.getAttribute(TestFlag2()));
|
|
|
|
|
|
2022-03-17 19:00:56 +01:00
|
|
|
Trace("boolattr") << "get flag 3 on a (should be T)\n";
|
2020-12-09 11:14:01 -08:00
|
|
|
ASSERT_TRUE(a.getAttribute(TestFlag3()));
|
2022-03-17 19:00:56 +01:00
|
|
|
Trace("boolattr") << "get flag 3 on b (should be T)\n";
|
2020-12-09 11:14:01 -08:00
|
|
|
ASSERT_TRUE(b.getAttribute(TestFlag3()));
|
2022-03-17 19:00:56 +01:00
|
|
|
Trace("boolattr") << "get flag 3 on c (should be T)\n";
|
2020-12-09 11:14:01 -08:00
|
|
|
ASSERT_TRUE(c.getAttribute(TestFlag3()));
|
2022-03-17 19:00:56 +01:00
|
|
|
Trace("boolattr") << "get flag 3 on unnamed (should be T)\n";
|
2020-12-09 11:14:01 -08:00
|
|
|
ASSERT_TRUE(unnamed.getAttribute(TestFlag3()));
|
|
|
|
|
|
2022-03-17 19:00:56 +01:00
|
|
|
Trace("boolattr") << "get flag 4 on a (should be T)\n";
|
2020-12-09 11:14:01 -08:00
|
|
|
ASSERT_TRUE(a.getAttribute(TestFlag4()));
|
2022-03-17 19:00:56 +01:00
|
|
|
Trace("boolattr") << "get flag 4 on b (should be T)\n";
|
2020-12-09 11:14:01 -08:00
|
|
|
ASSERT_TRUE(b.getAttribute(TestFlag4()));
|
2022-03-17 19:00:56 +01:00
|
|
|
Trace("boolattr") << "get flag 4 on c (should be T)\n";
|
2020-12-09 11:14:01 -08:00
|
|
|
ASSERT_TRUE(c.getAttribute(TestFlag4()));
|
2022-03-17 19:00:56 +01:00
|
|
|
Trace("boolattr") << "get flag 4 on unnamed (should be T)\n";
|
2020-12-09 11:14:01 -08:00
|
|
|
ASSERT_TRUE(unnamed.getAttribute(TestFlag4()));
|
|
|
|
|
|
2022-03-17 19:00:56 +01:00
|
|
|
Trace("boolattr") << "get flag 5 on a (should be T)\n";
|
2020-12-09 11:14:01 -08:00
|
|
|
ASSERT_TRUE(a.getAttribute(TestFlag5()));
|
2022-03-17 19:00:56 +01:00
|
|
|
Trace("boolattr") << "get flag 5 on b (should be T)\n";
|
2020-12-09 11:14:01 -08:00
|
|
|
ASSERT_TRUE(b.getAttribute(TestFlag5()));
|
2022-03-17 19:00:56 +01:00
|
|
|
Trace("boolattr") << "get flag 5 on c (should be F)\n";
|
2020-12-09 11:14:01 -08:00
|
|
|
ASSERT_FALSE(c.getAttribute(TestFlag5()));
|
2022-03-17 19:00:56 +01:00
|
|
|
Trace("boolattr") << "get flag 5 on unnamed (should be T)\n";
|
2020-12-09 11:14:01 -08:00
|
|
|
ASSERT_TRUE(unnamed.getAttribute(TestFlag5()));
|
|
|
|
|
|
|
|
|
|
a.setAttribute(TestStringAttr1(), "foo");
|
|
|
|
|
b.setAttribute(TestStringAttr1(), "bar");
|
|
|
|
|
c.setAttribute(TestStringAttr1(), "baz");
|
|
|
|
|
|
2021-01-12 08:55:56 -08:00
|
|
|
ASSERT_EQ(a.getAttribute(VarNameAttr()), "a");
|
|
|
|
|
ASSERT_NE(a.getAttribute(VarNameAttr()), "b");
|
|
|
|
|
ASSERT_NE(a.getAttribute(VarNameAttr()), "c");
|
|
|
|
|
ASSERT_NE(a.getAttribute(VarNameAttr()), "");
|
2020-12-09 11:14:01 -08:00
|
|
|
|
2021-01-12 08:55:56 -08:00
|
|
|
ASSERT_NE(b.getAttribute(VarNameAttr()), "a");
|
|
|
|
|
ASSERT_EQ(b.getAttribute(VarNameAttr()), "b");
|
|
|
|
|
ASSERT_NE(b.getAttribute(VarNameAttr()), "c");
|
|
|
|
|
ASSERT_NE(b.getAttribute(VarNameAttr()), "");
|
2020-12-09 11:14:01 -08:00
|
|
|
|
2021-01-12 08:55:56 -08:00
|
|
|
ASSERT_NE(c.getAttribute(VarNameAttr()), "a");
|
|
|
|
|
ASSERT_NE(c.getAttribute(VarNameAttr()), "b");
|
|
|
|
|
ASSERT_EQ(c.getAttribute(VarNameAttr()), "c");
|
|
|
|
|
ASSERT_NE(c.getAttribute(VarNameAttr()), "");
|
2020-12-09 11:14:01 -08:00
|
|
|
|
2021-01-12 08:55:56 -08:00
|
|
|
ASSERT_NE(unnamed.getAttribute(VarNameAttr()), "a");
|
|
|
|
|
ASSERT_NE(unnamed.getAttribute(VarNameAttr()), "b");
|
|
|
|
|
ASSERT_NE(unnamed.getAttribute(VarNameAttr()), "c");
|
|
|
|
|
ASSERT_EQ(unnamed.getAttribute(VarNameAttr()), "");
|
2020-12-09 11:14:01 -08:00
|
|
|
|
|
|
|
|
ASSERT_FALSE(unnamed.hasAttribute(VarNameAttr()));
|
|
|
|
|
|
|
|
|
|
ASSERT_TRUE(a.hasAttribute(TestStringAttr1()));
|
|
|
|
|
ASSERT_TRUE(b.hasAttribute(TestStringAttr1()));
|
|
|
|
|
ASSERT_TRUE(c.hasAttribute(TestStringAttr1()));
|
|
|
|
|
ASSERT_FALSE(unnamed.hasAttribute(TestStringAttr1()));
|
|
|
|
|
|
|
|
|
|
ASSERT_FALSE(a.hasAttribute(TestStringAttr2()));
|
|
|
|
|
ASSERT_FALSE(b.hasAttribute(TestStringAttr2()));
|
|
|
|
|
ASSERT_FALSE(c.hasAttribute(TestStringAttr2()));
|
|
|
|
|
ASSERT_FALSE(unnamed.hasAttribute(TestStringAttr2()));
|
|
|
|
|
|
|
|
|
|
a.setAttribute(VarNameAttr(), "b");
|
|
|
|
|
b.setAttribute(VarNameAttr(), "c");
|
|
|
|
|
c.setAttribute(VarNameAttr(), "a");
|
|
|
|
|
|
2021-01-12 08:55:56 -08:00
|
|
|
ASSERT_EQ(c.getAttribute(VarNameAttr()), "a");
|
|
|
|
|
ASSERT_NE(c.getAttribute(VarNameAttr()), "b");
|
|
|
|
|
ASSERT_NE(c.getAttribute(VarNameAttr()), "c");
|
|
|
|
|
ASSERT_NE(c.getAttribute(VarNameAttr()), "");
|
2020-12-09 11:14:01 -08:00
|
|
|
|
2021-01-12 08:55:56 -08:00
|
|
|
ASSERT_NE(a.getAttribute(VarNameAttr()), "a");
|
|
|
|
|
ASSERT_EQ(a.getAttribute(VarNameAttr()), "b");
|
|
|
|
|
ASSERT_NE(a.getAttribute(VarNameAttr()), "c");
|
|
|
|
|
ASSERT_NE(a.getAttribute(VarNameAttr()), "");
|
2020-12-09 11:14:01 -08:00
|
|
|
|
2021-01-12 08:55:56 -08:00
|
|
|
ASSERT_NE(b.getAttribute(VarNameAttr()), "a");
|
|
|
|
|
ASSERT_NE(b.getAttribute(VarNameAttr()), "b");
|
|
|
|
|
ASSERT_EQ(b.getAttribute(VarNameAttr()), "c");
|
|
|
|
|
ASSERT_NE(b.getAttribute(VarNameAttr()), "");
|
2020-12-09 11:14:01 -08:00
|
|
|
|
2021-01-12 08:55:56 -08:00
|
|
|
ASSERT_NE(unnamed.getAttribute(VarNameAttr()), "a");
|
|
|
|
|
ASSERT_NE(unnamed.getAttribute(VarNameAttr()), "b");
|
|
|
|
|
ASSERT_NE(unnamed.getAttribute(VarNameAttr()), "c");
|
|
|
|
|
ASSERT_EQ(unnamed.getAttribute(VarNameAttr()), "");
|
2020-12-09 11:14:01 -08:00
|
|
|
|
|
|
|
|
ASSERT_FALSE(unnamed.hasAttribute(VarNameAttr()));
|
|
|
|
|
}
|
|
|
|
|
} // namespace test
|
2022-03-29 16:23:01 -07:00
|
|
|
} // namespace cvc5::internal
|