GCC Code Coverage Report
Directory: . Exec Total Coverage
File: test/unit/theory/theory_bv_rewriter_white.cpp Lines: 30 30 100.0 %
Date: 2021-05-22 Branches: 87 190 45.8 %

Line Exec Source
1
/******************************************************************************
2
 * Top contributors (to current version):
3
 *   Aina Niemetz
4
 *
5
 * This file is part of the cvc5 project.
6
 *
7
 * Copyright (c) 2009-2021 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
 * Unit tests for the bit-vector rewriter.
14
 */
15
16
#include <iostream>
17
#include <memory>
18
#include <vector>
19
20
#include "expr/node.h"
21
#include "test_smt.h"
22
#include "theory/rewriter.h"
23
#include "util/bitvector.h"
24
25
namespace cvc5 {
26
27
using namespace kind;
28
using namespace theory;
29
30
namespace test {
31
32
8
class TestTheoryWhiteBvRewriter : public TestSmt
33
{
34
 protected:
35
6
  Node boolToBv(Node b)
36
  {
37
    return d_nodeManager->mkNode(ITE,
38
                                 b,
39
12
                                 d_nodeManager->mkConst(BitVector(1, 1u)),
40
18
                                 d_nodeManager->mkConst(BitVector(1, 0u)));
41
  }
42
};
43
44
11
TEST_F(TestTheoryWhiteBvRewriter, rewrite_to_fixpoint)
45
{
46
4
  TypeNode boolType = d_nodeManager->booleanType();
47
4
  TypeNode bvType = d_nodeManager->mkBitVectorType(1);
48
49
4
  Node zero = d_nodeManager->mkConst(BitVector(1, 0u));
50
4
  Node b1 = d_nodeManager->mkVar("b1", boolType);
51
4
  Node b2 = d_nodeManager->mkVar("b2", boolType);
52
4
  Node b3 = d_nodeManager->mkVar("b3", boolType);
53
4
  Node bv = d_nodeManager->mkVar("bv", bvType);
54
55
  Node n = d_nodeManager->mkNode(
56
      BITVECTOR_ITE,
57
4
      boolToBv(b1),
58
12
      d_nodeManager->mkNode(
59
          BITVECTOR_ITE,
60
4
          boolToBv(b2),
61
4
          d_nodeManager->mkNode(BITVECTOR_ITE, boolToBv(b3), zero, bv),
62
          bv),
63
12
      bv);
64
4
  Node nr = Rewriter::rewrite(n);
65
2
  ASSERT_EQ(nr, Rewriter::rewrite(nr));
66
}
67
68
11
TEST_F(TestTheoryWhiteBvRewriter, rewrite_bv_ite)
69
{
70
4
  TypeNode boolType = d_nodeManager->booleanType();
71
4
  TypeNode bvType = d_nodeManager->mkBitVectorType(1);
72
73
4
  Node zero = d_nodeManager->mkConst(BitVector(1, 0u));
74
4
  Node c1 = d_nodeManager->mkVar("c1", bvType);
75
4
  Node c2 = d_nodeManager->mkVar("c2", bvType);
76
77
4
  Node ite = d_nodeManager->mkNode(BITVECTOR_ITE, c2, zero, zero);
78
4
  Node n = d_nodeManager->mkNode(BITVECTOR_ITE, c1, ite, ite);
79
4
  Node nr = Rewriter::rewrite(n);
80
2
  ASSERT_EQ(nr, Rewriter::rewrite(nr));
81
}
82
}  // namespace test
83
31889
}  // namespace cvc5