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