Branch data Line data Source code
1 : : /******************************************************************************
2 : : * This file is part of the cvc5 project.
3 : : *
4 : : * Copyright (c) 2009-2026 by the authors listed in the file AUTHORS
5 : : * in the top-level source directory and their institutional affiliations.
6 : : * All rights reserved. See the file COPYING in the top-level source
7 : : * directory for licensing information.
8 : : * ****************************************************************************
9 : : *
10 : : * White box testing of cvc5::NodeManager.
11 : : */
12 : :
13 : : #include <string>
14 : :
15 : : #include "expr/node_manager.h"
16 : : #include "test_node.h"
17 : : #include "util/integer.h"
18 : : #include "util/rational.h"
19 : :
20 : : namespace cvc5::internal {
21 : :
22 : : using namespace cvc5::internal::expr;
23 : :
24 : : namespace test {
25 : :
26 : : class TestNodeWhiteNodeManager : public TestNode
27 : : {
28 : : };
29 : :
30 : 4 : TEST_F(TestNodeWhiteNodeManager, mkConst_rational)
31 : : {
32 : 1 : Rational i("3");
33 : 1 : Node n = d_nodeManager->mkConstInt(i);
34 : 1 : Node m = d_nodeManager->mkConstInt(i);
35 [ - + ][ + - ]: 1 : ASSERT_EQ(n.getId(), m.getId());
36 [ + - ][ + - ]: 1 : }
[ + - ]
37 : :
38 : 4 : TEST_F(TestNodeWhiteNodeManager, oversized_node_builder)
39 : : {
40 : 1 : NodeBuilder nb(d_nodeManager.get());
41 : :
42 [ + - ][ + - ]: 1 : ASSERT_NO_THROW(nb.realloc(15));
[ + - ][ - - ]
43 [ + - ][ + - ]: 1 : ASSERT_NO_THROW(nb.realloc(25));
[ + - ][ - - ]
44 [ + - ][ + - ]: 1 : ASSERT_NO_THROW(nb.realloc(256));
[ + - ][ - - ]
45 : : #ifdef CVC5_ASSERTIONS
46 : 1 : ASSERT_DEATH(nb.realloc(100), "toSize > d_nvMaxChildren");
47 : : #endif /* CVC5_ASSERTIONS */
48 [ + - ][ + - ]: 1 : ASSERT_NO_THROW(nb.realloc(257));
[ + - ][ - - ]
49 [ + - ][ + - ]: 1 : ASSERT_NO_THROW(nb.realloc(4000));
[ + - ][ - - ]
50 [ + - ][ + - ]: 1 : ASSERT_NO_THROW(nb.realloc(20000));
[ + - ][ - - ]
51 [ + - ][ + - ]: 1 : ASSERT_NO_THROW(nb.realloc(60000));
[ + - ][ - - ]
52 [ + - ][ + - ]: 1 : ASSERT_NO_THROW(nb.realloc(65535));
[ + - ][ - - ]
53 [ + - ][ + - ]: 1 : ASSERT_NO_THROW(nb.realloc(65536));
[ + - ][ - - ]
54 [ + - ][ + - ]: 1 : ASSERT_NO_THROW(nb.realloc(67108863));
[ + - ][ - - ]
55 : : #ifdef CVC5_ASSERTIONS
56 : 1 : ASSERT_DEATH(nb.realloc(67108863), "toSize > d_nvMaxChildren");
57 : : #endif /* CVC5_ASSERTIONS */
58 [ + - ]: 1 : }
59 : :
60 : 4 : TEST_F(TestNodeWhiteNodeManager, topological_sort)
61 : : {
62 : 1 : TypeNode boolType = d_nodeManager->booleanType();
63 : 2 : Node i = d_skolemManager->mkDummySkolem("i", boolType);
64 : 2 : Node j = d_skolemManager->mkDummySkolem("j", boolType);
65 : 2 : Node n1 = d_nodeManager->mkNode(Kind::AND, j, j);
66 : 2 : Node n2 = d_nodeManager->mkNode(Kind::AND, i, n1);
67 : :
68 : : {
69 : 1 : std::vector<NodeValue*> roots = {n1.d_nv};
70 [ - + ][ + - ]: 2 : ASSERT_EQ(NodeManager::TopologicalSort(roots), roots);
71 [ + - ]: 1 : }
72 : :
73 : : {
74 : 1 : std::vector<NodeValue*> roots = {n2.d_nv, n1.d_nv};
75 : 1 : std::vector<NodeValue*> result = {n1.d_nv, n2.d_nv};
76 [ - + ][ + - ]: 2 : ASSERT_EQ(NodeManager::TopologicalSort(roots), result);
77 [ + - ][ + - ]: 1 : }
78 : :
79 : : {
80 : 1 : TypeNode intType = d_nodeManager->integerType();
81 : 1 : TypeNode fnType = d_nodeManager->mkFunctionType(intType, intType);
82 : 2 : Node f = d_skolemManager->mkDummySkolem("f", fnType);
83 : 2 : Node x = d_skolemManager->mkDummySkolem("x", intType);
84 : 2 : Node fx = d_nodeManager->mkNode(Kind::APPLY_UF, f, x);
85 : 1 : std::vector<NodeValue*> roots = {fx.d_nv, f.d_nv};
86 : 1 : std::vector<NodeValue*> result = {f.d_nv, fx.d_nv};
87 [ - + ][ + - ]: 2 : ASSERT_EQ(NodeManager::TopologicalSort(roots), result);
88 [ + - ][ + - ]: 1 : }
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ]
89 [ + - ][ + - ]: 1 : }
[ + - ][ + - ]
[ + - ]
90 : : } // namespace test
91 : : } // namespace cvc5::internal
|