LCOV - code coverage report
Current view: top level - buildbot/coverage/build/test/unit/node - attribute_white.cpp (source / functions) Hit Total Coverage
Test: coverage.info Lines: 312 312 100.0 %
Date: 2026-01-30 12:59:30 Functions: 5 5 100.0 %
Branches: 269 538 50.0 %

           Branch data     Line data    Source code
       1                 :            : /******************************************************************************
       2                 :            :  * Top contributors (to current version):
       3                 :            :  *   Aina Niemetz, Gereon Kremer, Morgan Deters
       4                 :            :  *
       5                 :            :  * This file is part of the cvc5 project.
       6                 :            :  *
       7                 :            :  * Copyright (c) 2009-2025 by the authors listed in the file AUTHORS
       8                 :            :  * in the top-level source directory and their institutional affiliations.
       9                 :            :  * All rights reserved.  See the file COPYING in the top-level source
      10                 :            :  * directory for licensing information.
      11                 :            :  * ****************************************************************************
      12                 :            :  *
      13                 :            :  * White box testing of Node attributes.
      14                 :            :  */
      15                 :            : 
      16                 :            : #include <string>
      17                 :            : 
      18                 :            : #include "base/check.h"
      19                 :            : #include "expr/attribute.h"
      20                 :            : #include "expr/node.h"
      21                 :            : #include "expr/node_builder.h"
      22                 :            : #include "expr/node_manager.h"
      23                 :            : #include "expr/node_manager_attributes.h"
      24                 :            : #include "expr/node_value.h"
      25                 :            : #include "smt/solver_engine.h"
      26                 :            : #include "test_node.h"
      27                 :            : #include "theory/theory.h"
      28                 :            : #include "theory/theory_engine.h"
      29                 :            : #include "theory/uf/theory_uf.h"
      30                 :            : 
      31                 :            : namespace cvc5::internal {
      32                 :            : 
      33                 :            : using namespace kind;
      34                 :            : using namespace smt;
      35                 :            : using namespace expr;
      36                 :            : using namespace expr::attr;
      37                 :            : 
      38                 :            : namespace test {
      39                 :            : 
      40                 :            : struct Test1;
      41                 :            : struct Test2;
      42                 :            : struct Test3;
      43                 :            : struct Test4;
      44                 :            : struct Test5;
      45                 :            : 
      46                 :            : typedef Attribute<Test1, std::string> TestStringAttr1;
      47                 :            : typedef Attribute<Test2, std::string> TestStringAttr2;
      48                 :            : 
      49                 :            : using TestFlag1 = Attribute<Test1, bool>;
      50                 :            : using TestFlag2 = Attribute<Test2, bool>;
      51                 :            : using TestFlag3 = Attribute<Test3, bool>;
      52                 :            : using TestFlag4 = Attribute<Test4, bool>;
      53                 :            : using TestFlag5 = Attribute<Test5, bool>;
      54                 :            : 
      55                 :            : class TestNodeWhiteAttribute : public TestNode
      56                 :            : {
      57                 :            :  protected:
      58                 :          2 :   void SetUp() override
      59                 :            :   {
      60                 :          2 :     TestNode::SetUp();
      61                 :          2 :     d_booleanType.reset(new TypeNode(d_nodeManager->booleanType()));
      62                 :          2 :   }
      63                 :            :   std::unique_ptr<TypeNode> d_booleanType;
      64                 :            : };
      65                 :            : 
      66                 :          2 : TEST_F(TestNodeWhiteAttribute, attribute_ids)
      67                 :            : {
      68                 :            :   // Test that IDs for (a subset of) attributes in the system are
      69                 :            :   // unique and that the LastAttributeId (which would be the next ID
      70                 :            :   // to assign) is greater than all attribute IDs.
      71                 :            : 
      72                 :            :   // We used to check ID assignments explicitly.  However, between
      73                 :            :   // compilation modules, you don't get a strong guarantee
      74                 :            :   // (initialization order is somewhat implementation-specific, and
      75                 :            :   // anyway you'd have to change the tests anytime you add an
      76                 :            :   // attribute).  So we back off, and just test that they're unique
      77                 :            :   // and that the next ID to be assigned is strictly greater than
      78                 :            :   // those that have already been assigned.
      79                 :            : 
      80                 :          1 :   unsigned lastId = attr::LastAttributeId<std::string>::getId();
      81         [ -  + ]:          1 :   ASSERT_LT(VarNameAttr::s_id, lastId);
      82         [ -  + ]:          1 :   ASSERT_LT(TestStringAttr1::s_id, lastId);
      83         [ -  + ]:          1 :   ASSERT_LT(TestStringAttr2::s_id, lastId);
      84                 :            : 
      85         [ -  + ]:          1 :   ASSERT_NE(VarNameAttr::s_id, TestStringAttr1::s_id);
      86         [ -  + ]:          1 :   ASSERT_NE(VarNameAttr::s_id, TestStringAttr2::s_id);
      87         [ -  + ]:          1 :   ASSERT_NE(TestStringAttr1::s_id, TestStringAttr2::s_id);
      88                 :            : 
      89                 :          1 :   lastId = attr::LastAttributeId<bool>::getId();
      90         [ -  + ]:          1 :   ASSERT_LT(TestFlag1::s_id, lastId);
      91         [ -  + ]:          1 :   ASSERT_LT(TestFlag2::s_id, lastId);
      92         [ -  + ]:          1 :   ASSERT_LT(TestFlag3::s_id, lastId);
      93         [ -  + ]:          1 :   ASSERT_LT(TestFlag4::s_id, lastId);
      94         [ -  + ]:          1 :   ASSERT_LT(TestFlag5::s_id, lastId);
      95         [ -  + ]:          1 :   ASSERT_NE(TestFlag1::s_id, TestFlag2::s_id);
      96         [ -  + ]:          1 :   ASSERT_NE(TestFlag1::s_id, TestFlag3::s_id);
      97         [ -  + ]:          1 :   ASSERT_NE(TestFlag1::s_id, TestFlag4::s_id);
      98         [ -  + ]:          1 :   ASSERT_NE(TestFlag1::s_id, TestFlag5::s_id);
      99         [ -  + ]:          1 :   ASSERT_NE(TestFlag2::s_id, TestFlag3::s_id);
     100         [ -  + ]:          1 :   ASSERT_NE(TestFlag2::s_id, TestFlag4::s_id);
     101         [ -  + ]:          1 :   ASSERT_NE(TestFlag2::s_id, TestFlag5::s_id);
     102         [ -  + ]:          1 :   ASSERT_NE(TestFlag3::s_id, TestFlag4::s_id);
     103         [ -  + ]:          1 :   ASSERT_NE(TestFlag3::s_id, TestFlag5::s_id);
     104         [ -  + ]:          1 :   ASSERT_NE(TestFlag4::s_id, TestFlag5::s_id);
     105                 :            : 
     106                 :          1 :   lastId = attr::LastAttributeId<TypeNode>::getId();
     107         [ -  + ]:          1 :   ASSERT_LT(TypeAttr::s_id, lastId);
     108                 :            : }
     109                 :            : 
     110                 :          2 : TEST_F(TestNodeWhiteAttribute, attributes)
     111                 :            : {
     112                 :          1 :   Node a = d_nodeManager->mkVar(*d_booleanType);
     113                 :          1 :   Node b = d_nodeManager->mkVar(*d_booleanType);
     114                 :          1 :   Node c = d_nodeManager->mkVar(*d_booleanType);
     115                 :          1 :   Node unnamed = d_nodeManager->mkVar(*d_booleanType);
     116                 :            : 
     117                 :          1 :   a.setAttribute(VarNameAttr(), "a");
     118                 :          1 :   b.setAttribute(VarNameAttr(), "b");
     119                 :          1 :   c.setAttribute(VarNameAttr(), "c");
     120                 :            : 
     121                 :            :   // test that all boolean flags are FALSE to start
     122         [ +  - ]:          1 :   Trace("boolattr") << "get flag 1 on a (should be F)\n";
     123         [ -  + ]:          1 :   ASSERT_FALSE(a.getAttribute(TestFlag1()));
     124         [ +  - ]:          1 :   Trace("boolattr") << "get flag 1 on b (should be F)\n";
     125         [ -  + ]:          1 :   ASSERT_FALSE(b.getAttribute(TestFlag1()));
     126         [ +  - ]:          1 :   Trace("boolattr") << "get flag 1 on c (should be F)\n";
     127         [ -  + ]:          1 :   ASSERT_FALSE(c.getAttribute(TestFlag1()));
     128         [ +  - ]:          1 :   Trace("boolattr") << "get flag 1 on unnamed (should be F)\n";
     129         [ -  + ]:          1 :   ASSERT_FALSE(unnamed.getAttribute(TestFlag1()));
     130                 :            : 
     131         [ +  - ]:          1 :   Trace("boolattr") << "get flag 2 on a (should be F)\n";
     132         [ -  + ]:          1 :   ASSERT_FALSE(a.getAttribute(TestFlag2()));
     133         [ +  - ]:          1 :   Trace("boolattr") << "get flag 2 on b (should be F)\n";
     134         [ -  + ]:          1 :   ASSERT_FALSE(b.getAttribute(TestFlag2()));
     135         [ +  - ]:          1 :   Trace("boolattr") << "get flag 2 on c (should be F)\n";
     136         [ -  + ]:          1 :   ASSERT_FALSE(c.getAttribute(TestFlag2()));
     137         [ +  - ]:          1 :   Trace("boolattr") << "get flag 2 on unnamed (should be F)\n";
     138         [ -  + ]:          1 :   ASSERT_FALSE(unnamed.getAttribute(TestFlag2()));
     139                 :            : 
     140         [ +  - ]:          1 :   Trace("boolattr") << "get flag 3 on a (should be F)\n";
     141         [ -  + ]:          1 :   ASSERT_FALSE(a.getAttribute(TestFlag3()));
     142         [ +  - ]:          1 :   Trace("boolattr") << "get flag 3 on b (should be F)\n";
     143         [ -  + ]:          1 :   ASSERT_FALSE(b.getAttribute(TestFlag3()));
     144         [ +  - ]:          1 :   Trace("boolattr") << "get flag 3 on c (should be F)\n";
     145         [ -  + ]:          1 :   ASSERT_FALSE(c.getAttribute(TestFlag3()));
     146         [ +  - ]:          1 :   Trace("boolattr") << "get flag 3 on unnamed (should be F)\n";
     147         [ -  + ]:          1 :   ASSERT_FALSE(unnamed.getAttribute(TestFlag3()));
     148                 :            : 
     149         [ +  - ]:          1 :   Trace("boolattr") << "get flag 4 on a (should be F)\n";
     150         [ -  + ]:          1 :   ASSERT_FALSE(a.getAttribute(TestFlag4()));
     151         [ +  - ]:          1 :   Trace("boolattr") << "get flag 4 on b (should be F)\n";
     152         [ -  + ]:          1 :   ASSERT_FALSE(b.getAttribute(TestFlag4()));
     153         [ +  - ]:          1 :   Trace("boolattr") << "get flag 4 on c (should be F)\n";
     154         [ -  + ]:          1 :   ASSERT_FALSE(c.getAttribute(TestFlag4()));
     155         [ +  - ]:          1 :   Trace("boolattr") << "get flag 4 on unnamed (should be F)\n";
     156         [ -  + ]:          1 :   ASSERT_FALSE(unnamed.getAttribute(TestFlag4()));
     157                 :            : 
     158         [ +  - ]:          1 :   Trace("boolattr") << "get flag 5 on a (should be F)\n";
     159         [ -  + ]:          1 :   ASSERT_FALSE(a.getAttribute(TestFlag5()));
     160         [ +  - ]:          1 :   Trace("boolattr") << "get flag 5 on b (should be F)\n";
     161         [ -  + ]:          1 :   ASSERT_FALSE(b.getAttribute(TestFlag5()));
     162         [ +  - ]:          1 :   Trace("boolattr") << "get flag 5 on c (should be F)\n";
     163         [ -  + ]:          1 :   ASSERT_FALSE(c.getAttribute(TestFlag5()));
     164         [ +  - ]:          1 :   Trace("boolattr") << "get flag 5 on unnamed (should be F)\n";
     165         [ -  + ]:          1 :   ASSERT_FALSE(unnamed.getAttribute(TestFlag5()));
     166                 :            : 
     167                 :            :   // test that they all HAVE the boolean attributes
     168         [ -  + ]:          1 :   ASSERT_TRUE(a.hasAttribute(TestFlag1()));
     169         [ -  + ]:          1 :   ASSERT_TRUE(b.hasAttribute(TestFlag1()));
     170         [ -  + ]:          1 :   ASSERT_TRUE(c.hasAttribute(TestFlag1()));
     171         [ -  + ]:          1 :   ASSERT_TRUE(unnamed.hasAttribute(TestFlag1()));
     172                 :            : 
     173         [ -  + ]:          1 :   ASSERT_TRUE(a.hasAttribute(TestFlag2()));
     174         [ -  + ]:          1 :   ASSERT_TRUE(b.hasAttribute(TestFlag2()));
     175         [ -  + ]:          1 :   ASSERT_TRUE(c.hasAttribute(TestFlag2()));
     176         [ -  + ]:          1 :   ASSERT_TRUE(unnamed.hasAttribute(TestFlag2()));
     177                 :            : 
     178         [ -  + ]:          1 :   ASSERT_TRUE(a.hasAttribute(TestFlag3()));
     179         [ -  + ]:          1 :   ASSERT_TRUE(b.hasAttribute(TestFlag3()));
     180         [ -  + ]:          1 :   ASSERT_TRUE(c.hasAttribute(TestFlag3()));
     181         [ -  + ]:          1 :   ASSERT_TRUE(unnamed.hasAttribute(TestFlag3()));
     182                 :            : 
     183         [ -  + ]:          1 :   ASSERT_TRUE(a.hasAttribute(TestFlag4()));
     184         [ -  + ]:          1 :   ASSERT_TRUE(b.hasAttribute(TestFlag4()));
     185         [ -  + ]:          1 :   ASSERT_TRUE(c.hasAttribute(TestFlag4()));
     186         [ -  + ]:          1 :   ASSERT_TRUE(unnamed.hasAttribute(TestFlag4()));
     187                 :            : 
     188         [ -  + ]:          1 :   ASSERT_TRUE(a.hasAttribute(TestFlag5()));
     189         [ -  + ]:          1 :   ASSERT_TRUE(b.hasAttribute(TestFlag5()));
     190         [ -  + ]:          1 :   ASSERT_TRUE(c.hasAttribute(TestFlag5()));
     191         [ -  + ]:          1 :   ASSERT_TRUE(unnamed.hasAttribute(TestFlag5()));
     192                 :            : 
     193                 :            :   // test two-arg version of hasAttribute()
     194                 :          1 :   bool bb = false;
     195         [ +  - ]:          1 :   Trace("boolattr") << "get flag 1 on a (should be F)\n";
     196         [ -  + ]:          1 :   ASSERT_TRUE(a.getAttribute(TestFlag1(), bb));
     197         [ -  + ]:          1 :   ASSERT_FALSE(bb);
     198         [ +  - ]:          1 :   Trace("boolattr") << "get flag 1 on b (should be F)\n";
     199         [ -  + ]:          1 :   ASSERT_TRUE(b.getAttribute(TestFlag1(), bb));
     200         [ -  + ]:          1 :   ASSERT_FALSE(bb);
     201         [ +  - ]:          1 :   Trace("boolattr") << "get flag 1 on c (should be F)\n";
     202         [ -  + ]:          1 :   ASSERT_TRUE(c.getAttribute(TestFlag1(), bb));
     203         [ -  + ]:          1 :   ASSERT_FALSE(bb);
     204         [ +  - ]:          1 :   Trace("boolattr") << "get flag 1 on unnamed (should be F)\n";
     205         [ -  + ]:          1 :   ASSERT_TRUE(unnamed.getAttribute(TestFlag1(), bb));
     206         [ -  + ]:          1 :   ASSERT_FALSE(bb);
     207                 :            : 
     208         [ +  - ]:          1 :   Trace("boolattr") << "get flag 2 on a (should be F)\n";
     209         [ -  + ]:          1 :   ASSERT_TRUE(a.getAttribute(TestFlag2(), bb));
     210         [ -  + ]:          1 :   ASSERT_FALSE(bb);
     211         [ +  - ]:          1 :   Trace("boolattr") << "get flag 2 on b (should be F)\n";
     212         [ -  + ]:          1 :   ASSERT_TRUE(b.getAttribute(TestFlag2(), bb));
     213         [ -  + ]:          1 :   ASSERT_FALSE(bb);
     214         [ +  - ]:          1 :   Trace("boolattr") << "get flag 2 on c (should be F)\n";
     215         [ -  + ]:          1 :   ASSERT_TRUE(c.getAttribute(TestFlag2(), bb));
     216         [ -  + ]:          1 :   ASSERT_FALSE(bb);
     217         [ +  - ]:          1 :   Trace("boolattr") << "get flag 2 on unnamed (should be F)\n";
     218         [ -  + ]:          1 :   ASSERT_TRUE(unnamed.getAttribute(TestFlag2(), bb));
     219         [ -  + ]:          1 :   ASSERT_FALSE(bb);
     220                 :            : 
     221         [ +  - ]:          1 :   Trace("boolattr") << "get flag 3 on a (should be F)\n";
     222         [ -  + ]:          1 :   ASSERT_TRUE(a.getAttribute(TestFlag3(), bb));
     223         [ -  + ]:          1 :   ASSERT_FALSE(bb);
     224         [ +  - ]:          1 :   Trace("boolattr") << "get flag 3 on b (should be F)\n";
     225         [ -  + ]:          1 :   ASSERT_TRUE(b.getAttribute(TestFlag3(), bb));
     226         [ -  + ]:          1 :   ASSERT_FALSE(bb);
     227         [ +  - ]:          1 :   Trace("boolattr") << "get flag 3 on c (should be F)\n";
     228         [ -  + ]:          1 :   ASSERT_TRUE(c.getAttribute(TestFlag3(), bb));
     229         [ -  + ]:          1 :   ASSERT_FALSE(bb);
     230         [ +  - ]:          1 :   Trace("boolattr") << "get flag 3 on unnamed (should be F)\n";
     231         [ -  + ]:          1 :   ASSERT_TRUE(unnamed.getAttribute(TestFlag3(), bb));
     232         [ -  + ]:          1 :   ASSERT_FALSE(bb);
     233                 :            : 
     234         [ +  - ]:          1 :   Trace("boolattr") << "get flag 4 on a (should be F)\n";
     235         [ -  + ]:          1 :   ASSERT_TRUE(a.getAttribute(TestFlag4(), bb));
     236         [ -  + ]:          1 :   ASSERT_FALSE(bb);
     237         [ +  - ]:          1 :   Trace("boolattr") << "get flag 4 on b (should be F)\n";
     238         [ -  + ]:          1 :   ASSERT_TRUE(b.getAttribute(TestFlag4(), bb));
     239         [ -  + ]:          1 :   ASSERT_FALSE(bb);
     240         [ +  - ]:          1 :   Trace("boolattr") << "get flag 4 on c (should be F)\n";
     241         [ -  + ]:          1 :   ASSERT_TRUE(c.getAttribute(TestFlag4(), bb));
     242         [ -  + ]:          1 :   ASSERT_FALSE(bb);
     243         [ +  - ]:          1 :   Trace("boolattr") << "get flag 4 on unnamed (should be F)\n";
     244         [ -  + ]:          1 :   ASSERT_TRUE(unnamed.getAttribute(TestFlag4(), bb));
     245         [ -  + ]:          1 :   ASSERT_FALSE(bb);
     246                 :            : 
     247         [ +  - ]:          1 :   Trace("boolattr") << "get flag 5 on a (should be F)\n";
     248         [ -  + ]:          1 :   ASSERT_TRUE(a.getAttribute(TestFlag5(), bb));
     249         [ -  + ]:          1 :   ASSERT_FALSE(bb);
     250         [ +  - ]:          1 :   Trace("boolattr") << "get flag 5 on b (should be F)\n";
     251         [ -  + ]:          1 :   ASSERT_TRUE(b.getAttribute(TestFlag5(), bb));
     252         [ -  + ]:          1 :   ASSERT_FALSE(bb);
     253         [ +  - ]:          1 :   Trace("boolattr") << "get flag 5 on c (should be F)\n";
     254         [ -  + ]:          1 :   ASSERT_TRUE(c.getAttribute(TestFlag5(), bb));
     255         [ -  + ]:          1 :   ASSERT_FALSE(bb);
     256         [ +  - ]:          1 :   Trace("boolattr") << "get flag 5 on unnamed (should be F)\n";
     257         [ -  + ]:          1 :   ASSERT_TRUE(unnamed.getAttribute(TestFlag5(), bb));
     258         [ -  + ]:          1 :   ASSERT_FALSE(bb);
     259                 :            : 
     260                 :            :   // setting boolean flags
     261         [ +  - ]:          1 :   Trace("boolattr") << "set flag 1 on a to T\n";
     262                 :          1 :   a.setAttribute(TestFlag1(), true);
     263         [ +  - ]:          1 :   Trace("boolattr") << "set flag 1 on b to F\n";
     264                 :          1 :   b.setAttribute(TestFlag1(), false);
     265         [ +  - ]:          1 :   Trace("boolattr") << "set flag 1 on c to F\n";
     266                 :          1 :   c.setAttribute(TestFlag1(), false);
     267         [ +  - ]:          1 :   Trace("boolattr") << "set flag 1 on unnamed to T\n";
     268                 :          1 :   unnamed.setAttribute(TestFlag1(), true);
     269                 :            : 
     270         [ +  - ]:          1 :   Trace("boolattr") << "set flag 2 on a to F\n";
     271                 :          1 :   a.setAttribute(TestFlag2(), false);
     272         [ +  - ]:          1 :   Trace("boolattr") << "set flag 2 on b to T\n";
     273                 :          1 :   b.setAttribute(TestFlag2(), true);
     274         [ +  - ]:          1 :   Trace("boolattr") << "set flag 2 on c to T\n";
     275                 :          1 :   c.setAttribute(TestFlag2(), true);
     276         [ +  - ]:          1 :   Trace("boolattr") << "set flag 2 on unnamed to F\n";
     277                 :          1 :   unnamed.setAttribute(TestFlag2(), false);
     278                 :            : 
     279         [ +  - ]:          1 :   Trace("boolattr") << "set flag 3 on a to T\n";
     280                 :          1 :   a.setAttribute(TestFlag3(), true);
     281         [ +  - ]:          1 :   Trace("boolattr") << "set flag 3 on b to T\n";
     282                 :          1 :   b.setAttribute(TestFlag3(), true);
     283         [ +  - ]:          1 :   Trace("boolattr") << "set flag 3 on c to T\n";
     284                 :          1 :   c.setAttribute(TestFlag3(), true);
     285         [ +  - ]:          1 :   Trace("boolattr") << "set flag 3 on unnamed to T\n";
     286                 :          1 :   unnamed.setAttribute(TestFlag3(), true);
     287                 :            : 
     288         [ +  - ]:          1 :   Trace("boolattr") << "set flag 4 on a to T\n";
     289                 :          1 :   a.setAttribute(TestFlag4(), true);
     290         [ +  - ]:          1 :   Trace("boolattr") << "set flag 4 on b to T\n";
     291                 :          1 :   b.setAttribute(TestFlag4(), true);
     292         [ +  - ]:          1 :   Trace("boolattr") << "set flag 4 on c to T\n";
     293                 :          1 :   c.setAttribute(TestFlag4(), true);
     294         [ +  - ]:          1 :   Trace("boolattr") << "set flag 4 on unnamed to T\n";
     295                 :          1 :   unnamed.setAttribute(TestFlag4(), true);
     296                 :            : 
     297         [ +  - ]:          1 :   Trace("boolattr") << "set flag 5 on a to T\n";
     298                 :          1 :   a.setAttribute(TestFlag5(), true);
     299         [ +  - ]:          1 :   Trace("boolattr") << "set flag 5 on b to T\n";
     300                 :          1 :   b.setAttribute(TestFlag5(), true);
     301         [ +  - ]:          1 :   Trace("boolattr") << "set flag 5 on c to F\n";
     302                 :          1 :   c.setAttribute(TestFlag5(), false);
     303         [ +  - ]:          1 :   Trace("boolattr") << "set flag 5 on unnamed to T\n";
     304                 :          1 :   unnamed.setAttribute(TestFlag5(), true);
     305                 :            : 
     306         [ -  + ]:          2 :   ASSERT_EQ(a.getAttribute(VarNameAttr()), "a");
     307         [ -  + ]:          2 :   ASSERT_NE(a.getAttribute(VarNameAttr()), "b");
     308         [ -  + ]:          2 :   ASSERT_NE(a.getAttribute(VarNameAttr()), "c");
     309         [ -  + ]:          2 :   ASSERT_NE(a.getAttribute(VarNameAttr()), "");
     310                 :            : 
     311         [ -  + ]:          2 :   ASSERT_NE(b.getAttribute(VarNameAttr()), "a");
     312         [ -  + ]:          2 :   ASSERT_EQ(b.getAttribute(VarNameAttr()), "b");
     313         [ -  + ]:          2 :   ASSERT_NE(b.getAttribute(VarNameAttr()), "c");
     314         [ -  + ]:          2 :   ASSERT_NE(b.getAttribute(VarNameAttr()), "");
     315                 :            : 
     316         [ -  + ]:          2 :   ASSERT_NE(c.getAttribute(VarNameAttr()), "a");
     317         [ -  + ]:          2 :   ASSERT_NE(c.getAttribute(VarNameAttr()), "b");
     318         [ -  + ]:          2 :   ASSERT_EQ(c.getAttribute(VarNameAttr()), "c");
     319         [ -  + ]:          2 :   ASSERT_NE(c.getAttribute(VarNameAttr()), "");
     320                 :            : 
     321         [ -  + ]:          2 :   ASSERT_NE(unnamed.getAttribute(VarNameAttr()), "a");
     322         [ -  + ]:          2 :   ASSERT_NE(unnamed.getAttribute(VarNameAttr()), "b");
     323         [ -  + ]:          2 :   ASSERT_NE(unnamed.getAttribute(VarNameAttr()), "c");
     324         [ -  + ]:          2 :   ASSERT_EQ(unnamed.getAttribute(VarNameAttr()), "");
     325                 :            : 
     326         [ -  + ]:          1 :   ASSERT_FALSE(unnamed.hasAttribute(VarNameAttr()));
     327                 :            : 
     328         [ -  + ]:          1 :   ASSERT_FALSE(a.hasAttribute(TestStringAttr1()));
     329         [ -  + ]:          1 :   ASSERT_FALSE(b.hasAttribute(TestStringAttr1()));
     330         [ -  + ]:          1 :   ASSERT_FALSE(c.hasAttribute(TestStringAttr1()));
     331         [ -  + ]:          1 :   ASSERT_FALSE(unnamed.hasAttribute(TestStringAttr1()));
     332                 :            : 
     333         [ -  + ]:          1 :   ASSERT_FALSE(a.hasAttribute(TestStringAttr2()));
     334         [ -  + ]:          1 :   ASSERT_FALSE(b.hasAttribute(TestStringAttr2()));
     335         [ -  + ]:          1 :   ASSERT_FALSE(c.hasAttribute(TestStringAttr2()));
     336         [ -  + ]:          1 :   ASSERT_FALSE(unnamed.hasAttribute(TestStringAttr2()));
     337                 :            : 
     338         [ +  - ]:          1 :   Trace("boolattr") << "get flag 1 on a (should be T)\n";
     339         [ -  + ]:          1 :   ASSERT_TRUE(a.getAttribute(TestFlag1()));
     340         [ +  - ]:          1 :   Trace("boolattr") << "get flag 1 on b (should be F)\n";
     341         [ -  + ]:          1 :   ASSERT_FALSE(b.getAttribute(TestFlag1()));
     342         [ +  - ]:          1 :   Trace("boolattr") << "get flag 1 on c (should be F)\n";
     343         [ -  + ]:          1 :   ASSERT_FALSE(c.getAttribute(TestFlag1()));
     344         [ +  - ]:          1 :   Trace("boolattr") << "get flag 1 on unnamed (should be T)\n";
     345         [ -  + ]:          1 :   ASSERT_TRUE(unnamed.getAttribute(TestFlag1()));
     346                 :            : 
     347         [ +  - ]:          1 :   Trace("boolattr") << "get flag 2 on a (should be F)\n";
     348         [ -  + ]:          1 :   ASSERT_FALSE(a.getAttribute(TestFlag2()));
     349         [ +  - ]:          1 :   Trace("boolattr") << "get flag 2 on b (should be T)\n";
     350         [ -  + ]:          1 :   ASSERT_TRUE(b.getAttribute(TestFlag2()));
     351         [ +  - ]:          1 :   Trace("boolattr") << "get flag 2 on c (should be T)\n";
     352         [ -  + ]:          1 :   ASSERT_TRUE(c.getAttribute(TestFlag2()));
     353         [ +  - ]:          1 :   Trace("boolattr") << "get flag 2 on unnamed (should be F)\n";
     354         [ -  + ]:          1 :   ASSERT_FALSE(unnamed.getAttribute(TestFlag2()));
     355                 :            : 
     356         [ +  - ]:          1 :   Trace("boolattr") << "get flag 3 on a (should be T)\n";
     357         [ -  + ]:          1 :   ASSERT_TRUE(a.getAttribute(TestFlag3()));
     358         [ +  - ]:          1 :   Trace("boolattr") << "get flag 3 on b (should be T)\n";
     359         [ -  + ]:          1 :   ASSERT_TRUE(b.getAttribute(TestFlag3()));
     360         [ +  - ]:          1 :   Trace("boolattr") << "get flag 3 on c (should be T)\n";
     361         [ -  + ]:          1 :   ASSERT_TRUE(c.getAttribute(TestFlag3()));
     362         [ +  - ]:          1 :   Trace("boolattr") << "get flag 3 on unnamed (should be T)\n";
     363         [ -  + ]:          1 :   ASSERT_TRUE(unnamed.getAttribute(TestFlag3()));
     364                 :            : 
     365         [ +  - ]:          1 :   Trace("boolattr") << "get flag 4 on a (should be T)\n";
     366         [ -  + ]:          1 :   ASSERT_TRUE(a.getAttribute(TestFlag4()));
     367         [ +  - ]:          1 :   Trace("boolattr") << "get flag 4 on b (should be T)\n";
     368         [ -  + ]:          1 :   ASSERT_TRUE(b.getAttribute(TestFlag4()));
     369         [ +  - ]:          1 :   Trace("boolattr") << "get flag 4 on c (should be T)\n";
     370         [ -  + ]:          1 :   ASSERT_TRUE(c.getAttribute(TestFlag4()));
     371         [ +  - ]:          1 :   Trace("boolattr") << "get flag 4 on unnamed (should be T)\n";
     372         [ -  + ]:          1 :   ASSERT_TRUE(unnamed.getAttribute(TestFlag4()));
     373                 :            : 
     374         [ +  - ]:          1 :   Trace("boolattr") << "get flag 5 on a (should be T)\n";
     375         [ -  + ]:          1 :   ASSERT_TRUE(a.getAttribute(TestFlag5()));
     376         [ +  - ]:          1 :   Trace("boolattr") << "get flag 5 on b (should be T)\n";
     377         [ -  + ]:          1 :   ASSERT_TRUE(b.getAttribute(TestFlag5()));
     378         [ +  - ]:          1 :   Trace("boolattr") << "get flag 5 on c (should be F)\n";
     379         [ -  + ]:          1 :   ASSERT_FALSE(c.getAttribute(TestFlag5()));
     380         [ +  - ]:          1 :   Trace("boolattr") << "get flag 5 on unnamed (should be T)\n";
     381         [ -  + ]:          1 :   ASSERT_TRUE(unnamed.getAttribute(TestFlag5()));
     382                 :            : 
     383                 :          1 :   a.setAttribute(TestStringAttr1(), "foo");
     384                 :          1 :   b.setAttribute(TestStringAttr1(), "bar");
     385                 :          1 :   c.setAttribute(TestStringAttr1(), "baz");
     386                 :            : 
     387         [ -  + ]:          2 :   ASSERT_EQ(a.getAttribute(VarNameAttr()), "a");
     388         [ -  + ]:          2 :   ASSERT_NE(a.getAttribute(VarNameAttr()), "b");
     389         [ -  + ]:          2 :   ASSERT_NE(a.getAttribute(VarNameAttr()), "c");
     390         [ -  + ]:          2 :   ASSERT_NE(a.getAttribute(VarNameAttr()), "");
     391                 :            : 
     392         [ -  + ]:          2 :   ASSERT_NE(b.getAttribute(VarNameAttr()), "a");
     393         [ -  + ]:          2 :   ASSERT_EQ(b.getAttribute(VarNameAttr()), "b");
     394         [ -  + ]:          2 :   ASSERT_NE(b.getAttribute(VarNameAttr()), "c");
     395         [ -  + ]:          2 :   ASSERT_NE(b.getAttribute(VarNameAttr()), "");
     396                 :            : 
     397         [ -  + ]:          2 :   ASSERT_NE(c.getAttribute(VarNameAttr()), "a");
     398         [ -  + ]:          2 :   ASSERT_NE(c.getAttribute(VarNameAttr()), "b");
     399         [ -  + ]:          2 :   ASSERT_EQ(c.getAttribute(VarNameAttr()), "c");
     400         [ -  + ]:          2 :   ASSERT_NE(c.getAttribute(VarNameAttr()), "");
     401                 :            : 
     402         [ -  + ]:          2 :   ASSERT_NE(unnamed.getAttribute(VarNameAttr()), "a");
     403         [ -  + ]:          2 :   ASSERT_NE(unnamed.getAttribute(VarNameAttr()), "b");
     404         [ -  + ]:          2 :   ASSERT_NE(unnamed.getAttribute(VarNameAttr()), "c");
     405         [ -  + ]:          2 :   ASSERT_EQ(unnamed.getAttribute(VarNameAttr()), "");
     406                 :            : 
     407         [ -  + ]:          1 :   ASSERT_FALSE(unnamed.hasAttribute(VarNameAttr()));
     408                 :            : 
     409         [ -  + ]:          1 :   ASSERT_TRUE(a.hasAttribute(TestStringAttr1()));
     410         [ -  + ]:          1 :   ASSERT_TRUE(b.hasAttribute(TestStringAttr1()));
     411         [ -  + ]:          1 :   ASSERT_TRUE(c.hasAttribute(TestStringAttr1()));
     412         [ -  + ]:          1 :   ASSERT_FALSE(unnamed.hasAttribute(TestStringAttr1()));
     413                 :            : 
     414         [ -  + ]:          1 :   ASSERT_FALSE(a.hasAttribute(TestStringAttr2()));
     415         [ -  + ]:          1 :   ASSERT_FALSE(b.hasAttribute(TestStringAttr2()));
     416         [ -  + ]:          1 :   ASSERT_FALSE(c.hasAttribute(TestStringAttr2()));
     417         [ -  + ]:          1 :   ASSERT_FALSE(unnamed.hasAttribute(TestStringAttr2()));
     418                 :            : 
     419                 :          1 :   a.setAttribute(VarNameAttr(), "b");
     420                 :          1 :   b.setAttribute(VarNameAttr(), "c");
     421                 :          1 :   c.setAttribute(VarNameAttr(), "a");
     422                 :            : 
     423         [ -  + ]:          2 :   ASSERT_EQ(c.getAttribute(VarNameAttr()), "a");
     424         [ -  + ]:          2 :   ASSERT_NE(c.getAttribute(VarNameAttr()), "b");
     425         [ -  + ]:          2 :   ASSERT_NE(c.getAttribute(VarNameAttr()), "c");
     426         [ -  + ]:          2 :   ASSERT_NE(c.getAttribute(VarNameAttr()), "");
     427                 :            : 
     428         [ -  + ]:          2 :   ASSERT_NE(a.getAttribute(VarNameAttr()), "a");
     429         [ -  + ]:          2 :   ASSERT_EQ(a.getAttribute(VarNameAttr()), "b");
     430         [ -  + ]:          2 :   ASSERT_NE(a.getAttribute(VarNameAttr()), "c");
     431         [ -  + ]:          2 :   ASSERT_NE(a.getAttribute(VarNameAttr()), "");
     432                 :            : 
     433         [ -  + ]:          2 :   ASSERT_NE(b.getAttribute(VarNameAttr()), "a");
     434         [ -  + ]:          2 :   ASSERT_NE(b.getAttribute(VarNameAttr()), "b");
     435         [ -  + ]:          2 :   ASSERT_EQ(b.getAttribute(VarNameAttr()), "c");
     436         [ -  + ]:          2 :   ASSERT_NE(b.getAttribute(VarNameAttr()), "");
     437                 :            : 
     438         [ -  + ]:          2 :   ASSERT_NE(unnamed.getAttribute(VarNameAttr()), "a");
     439         [ -  + ]:          2 :   ASSERT_NE(unnamed.getAttribute(VarNameAttr()), "b");
     440         [ -  + ]:          2 :   ASSERT_NE(unnamed.getAttribute(VarNameAttr()), "c");
     441         [ -  + ]:          2 :   ASSERT_EQ(unnamed.getAttribute(VarNameAttr()), "");
     442                 :            : 
     443         [ -  + ]:          1 :   ASSERT_FALSE(unnamed.hasAttribute(VarNameAttr()));
     444                 :            : }
     445                 :            : }  // namespace test
     446                 :            : }  // namespace cvc5::internal

Generated by: LCOV version 1.14