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
|