13 #include <gtest/gtest.h>
15 #include <framework/logging/Logger.h>
17 #include <tracking/trackFindingVXD/segmentNetwork/DirectedNode.h>
18 #include <tracking/trackFindingVXD/segmentNetwork/DirectedNodeNetworkContainer.h>
19 #include <tracking/trackFindingVXD/segmentNetwork/CACell.h>
20 #include <tracking/trackFindingVXD/algorithms/CellularAutomaton.h>
21 #include <tracking/trackFindingVXD/algorithms/CAValidator.h>
22 #include <tracking/trackFindingVXD/algorithms/PathCollectorRecursive.h>
23 #include <tracking/trackFindingVXD/algorithms/NodeCompatibilityCheckerPathCollector.h>
49 std::array<int, 5> intArray = { { 2, 5, 3, 4, 99} };
50 std::array<int, 5> intArray2 = { { 144, 121, 33, 35, 31415} };
51 std::array<int, 5> intArray3 = { { 1440, 1210, 3, 33, 3141529} };
52 std::vector<int> onTheFlyCreatedInts;
53 onTheFlyCreatedInts.reserve(4);
57 EXPECT_EQ(0, intNetwork.
size());
60 for (
unsigned int index = 1 ; index < 5; index++) {
62 intNetwork.
addNode(intArray.at(index - 1), intArray.at(index - 1));
63 intNetwork.
addNode(intArray.at(index), intArray.at(index));
65 intNetwork.
linkNodes(intArray.at(index - 1), intArray.at(index));
68 for (
unsigned int index = 1 ; index < 5; index++) {
69 intNetwork.
addNode(intArray2.at(index - 1), intArray2.at(index - 1));
70 intNetwork.
addNode(intArray2.at(index), intArray2.at(index));
72 intNetwork.
linkNodes(intArray2.at(index - 1), intArray2.at(index));
75 for (
unsigned int index = 1 ; index < 5; index++) {
76 intNetwork.
addNode(intArray3.at(index - 1), intArray3.at(index - 1));
77 intNetwork.
addNode(intArray3.at(index), intArray3.at(index));
79 intNetwork.
linkNodes(intArray3.at(index - 1), intArray3.at(index));
84 onTheFlyCreatedInts.push_back(42);
85 int& newInnerInt = onTheFlyCreatedInts.back();
86 intNetwork.
addNode(newInnerInt, newInnerInt);
87 intNetwork.
linkNodes(newInnerInt, oldOuterInt);
91 onTheFlyCreatedInts.push_back(23);
92 int& newOuterInt = onTheFlyCreatedInts.back();
93 int& existingInt = intArray.at(1);
94 intNetwork.
addNode(newOuterInt, newOuterInt);
95 intNetwork.
linkNodes(newOuterInt, existingInt);
98 intNetwork.
linkNodes(intArray.at(0), intArray.at(2));
102 onTheFlyCreatedInts.push_back(31);
103 int& newInnerInt = onTheFlyCreatedInts.back();
104 intNetwork.
addNode(newInnerInt, newInnerInt);
111 onTheFlyCreatedInts.push_back(66);
112 int& newOuterInt = onTheFlyCreatedInts.back();
113 intNetwork.
addNode(newOuterInt, newOuterInt);
117 EXPECT_EQ(17, intNetwork.
size());
125 int nRounds = cellularAutomaton.
apply(intNetwork);
126 unsigned int nSeeds = cellularAutomaton.
findSeeds(intNetwork);
129 EXPECT_EQ(13, nSeeds);
134 std::vector<DirectedNode<int, CACell>*>,
139 PathCollectorType pathCollector;
141 std::vector< PathCollectorType::Path> paths;
142 pathCollector.findPaths(intNetwork, paths, 100000000);
144 std::string out = PathCollectorType::printPaths(paths);
149 EXPECT_EQ(13, paths.size());
150 unsigned int longestPath = 0;
151 for (
auto& aPath : paths) {
152 if (longestPath < aPath.size()) {
153 longestPath = aPath.size();
157 EXPECT_EQ(7, longestPath);
158 EXPECT_EQ(nRounds, longestPath +
163 bool test = pathCollector.findPaths(intNetwork, paths, 50,
true);
164 EXPECT_EQ(44, paths.size());
165 EXPECT_EQ(
true, test);
169 test = pathCollector.findPaths(intNetwork, paths, 10);
170 EXPECT_EQ(
false, test);