xrpld
Loading...
Searching...
No Matches
Digraph_test.cpp
1#include <test/csf/Digraph.h>
2
3#include <xrpl/beast/unit_test/suite.h>
4
5#include <sstream>
6#include <string>
7#include <tuple>
8#include <vector>
9
10namespace xrpl::test {
11
13{
14public:
15 void
16 run() override
17 {
18 using namespace csf;
19 using Graph = Digraph<char, std::string>;
20 Graph graph;
21
22 BEAST_EXPECT(!graph.connected('a', 'b'));
23 BEAST_EXPECT(!graph.edge('a', 'b'));
24 BEAST_EXPECT(!graph.disconnect('a', 'b'));
25
26 BEAST_EXPECT(graph.connect('a', 'b', "foobar"));
27 BEAST_EXPECT(graph.connected('a', 'b'));
28 BEAST_EXPECT(
29 *graph.edge('a', 'b') == "foobar"); // NOLINT(bugprone-unchecked-optional-access)
30
31 BEAST_EXPECT(!graph.connect('a', 'b', "repeat"));
32 BEAST_EXPECT(graph.disconnect('a', 'b'));
33 BEAST_EXPECT(graph.connect('a', 'b', "repeat"));
34 BEAST_EXPECT(graph.connected('a', 'b'));
35 BEAST_EXPECT(
36 *graph.edge('a', 'b') == "repeat"); // NOLINT(bugprone-unchecked-optional-access)
37
38 BEAST_EXPECT(graph.connect('a', 'c', "tree"));
39
40 {
42
43 for (auto const& edge : graph.outEdges('a'))
44 {
45 edges.emplace_back(edge.source, edge.target, edge.data);
46 }
47
49 expected.emplace_back('a', 'b', "repeat");
50 expected.emplace_back('a', 'c', "tree");
51 BEAST_EXPECT(edges == expected);
52 BEAST_EXPECT(graph.outDegree('a') == expected.size());
53 }
54
55 BEAST_EXPECT(graph.outEdges('r').size() == 0);
56 BEAST_EXPECT(graph.outDegree('r') == 0);
57 BEAST_EXPECT(graph.outDegree('c') == 0);
58
59 // only 'a' has out edges
60 BEAST_EXPECT(graph.outVertices().size() == 1);
61 std::vector<char> const expected = {'b', 'c'};
62
63 BEAST_EXPECT((graph.outVertices('a') == expected));
64 BEAST_EXPECT(graph.outVertices('b').size() == 0);
65 BEAST_EXPECT(graph.outVertices('c').size() == 0);
66 BEAST_EXPECT(graph.outVertices('r').size() == 0);
67
69 graph.saveDot(ss, [](char v) { return v; });
70 std::string const expectedDot =
71 "digraph {\n"
72 "a -> b;\n"
73 "a -> c;\n"
74 "}\n";
75 BEAST_EXPECT(ss.str() == expectedDot);
76 }
77};
78
80
81} // namespace xrpl::test
A testsuite class.
Definition suite.h:50
void run() override
Runs the suite.
T emplace_back(T... args)
BEAST_DEFINE_TESTSUITE(AMMClawback, app, xrpl)
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition algorithm.h:5
T size(T... args)
T str(T... args)