File: test_assertion_tracker.cpp

package info (click to toggle)
bitwuzla 0.8.2-1
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 43,292 kB
  • sloc: cpp: 94,870; python: 3,254; ansic: 1,613; sh: 50; makefile: 10
file content (100 lines) | stat: -rw-r--r-- 2,329 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
/***
 * Bitwuzla: Satisfiability Modulo Theories (SMT) solver.
 *
 * Copyright (C) 2023 by the authors listed in the AUTHORS file at
 * https://github.com/bitwuzla/bitwuzla/blob/main/AUTHORS
 *
 * This file is part of Bitwuzla under the MIT license. See COPYING for more
 * information at https://github.com/bitwuzla/bitwuzla/blob/main/COPYING
 */

#include <gtest/gtest.h>

#include "node/node_manager.h"
#include "preprocess/assertion_tracker.h"

namespace bzla::test {

using namespace preprocess;
using namespace node;

class TestAssertionTracker : public ::testing::Test
{
 public:
  TestAssertionTracker(){};

 protected:
  NodeManager d_nm;
};

TEST_F(TestAssertionTracker, track1)
{
  backtrack::BacktrackManager mgr;
  AssertionTracker tracker(&mgr);

  auto a = d_nm.mk_const(d_nm.mk_bool_type());
  auto b = d_nm.mk_const(d_nm.mk_bool_type());
  auto c = d_nm.mk_const(d_nm.mk_bool_type());
  auto d = d_nm.mk_const(d_nm.mk_bool_type());
  auto e = d_nm.mk_const(d_nm.mk_bool_type());

  tracker.track(b, a);
  tracker.track(c, b);
  tracker.track(d, c);
  tracker.track(e, d);

  {
    std::vector<Node> parents;
    tracker.find_original({e}, {a}, parents);
    ASSERT_EQ(parents.size(), 1);
    ASSERT_EQ(a, parents[0]);
  }

  {
    std::vector<Node> parents;
    tracker.find_original({e, b}, {a}, parents);
    ASSERT_EQ(parents.size(), 1);
    ASSERT_EQ(a, parents[0]);
  }

  {
    std::vector<Node> parents;
    tracker.find_original({e, b, a}, {a}, parents);
    ASSERT_EQ(parents.size(), 1);
    ASSERT_EQ(a, parents[0]);
  }
}

TEST_F(TestAssertionTracker, inc1)
{
  backtrack::BacktrackManager mgr;
  AssertionTracker tracker(&mgr);

  auto a = d_nm.mk_const(d_nm.mk_bool_type());
  auto b = d_nm.mk_const(d_nm.mk_bool_type());
  auto c = d_nm.mk_const(d_nm.mk_bool_type());
  auto d = d_nm.mk_const(d_nm.mk_bool_type());
  auto e = d_nm.mk_const(d_nm.mk_bool_type());

  tracker.track(b, a);
  tracker.track(c, b);

  {
    mgr.push();
    tracker.track(e, d);
    std::vector<Node> parents;
    tracker.find_original({e}, {a, d}, parents);
    ASSERT_EQ(parents.size(), 1);
    ASSERT_EQ(d, parents[0]);
    mgr.pop();
  }

  {
    std::vector<Node> parents;
    tracker.find_original({e}, {e}, parents);
    ASSERT_EQ(parents.size(), 1);
    ASSERT_EQ(e, parents[0]);
  }
}

}  // namespace bzla::test