testing basic functionality of the DirectedNodeNetwork when filled with a basic type - int.
This test is a bit overcrowded and therefore not an ideal test for learning the intended usage of the network. This test tries to cover all cases relevant. The correct usage of the network is better described in the test 'CreateRealisticNetwork'.
171 if (node->getEntry() == otherNode->getEntry()) {
return true; }
177 auto printNodeEntries = [&](std::vector<DirectedNode<int, VoidMetaInfo>*>& nodes) -> std::string {
178 std::string output =
"Nodes got the following entries: ";
181 output += std::to_string(node->getEntry()) +
" ";
183 return output +
"\n";
187 std::array<int, 5> intArray = { { 2, 5, 3, 4, 99} };
188 std::array<int, 5> intArray2 = { { 144, 121, 33, 35, 31415} };
189 std::array<int, 5> intArray3 = { { 1440, 1210, 3, 33, 3141529} };
190 std::deque<int> onTheFlyCreatedInts;
191 EXPECT_EQ(5, intArray.size());
194 EXPECT_EQ(0, intNetwork.
size());
195 B2INFO(
"tests case when both nodes are new and when inner one is new, but outer one not");
196 for (
unsigned int index = 1 ; index < 5; index++) {
197 B2INFO(
"intArray-index " << index <<
" of array has entry: " << intArray.at(index));
199 intNetwork.
addNode(intArray.at(index - 1), intArray.at(index - 1));
200 intNetwork.
addNode(intArray.at(index), intArray.at(index));
202 intNetwork.
linkNodes(intArray.at(index - 1), intArray.at(index));
205 EXPECT_EQ(intArray.at(index), intNetwork.
getInnerEnds().at(0)->getEntry());
208 EXPECT_EQ(intArray.at(index - 1), *intNetwork.
getNode(intArray.at(index - 1)));
209 EXPECT_EQ(intArray.at(index), *intNetwork.
getNode(intArray.at(index)));
214 EXPECT_EQ(1, innerNodes.size());
215 EXPECT_EQ(1, outerNodes.size());
218 EXPECT_EQ(*(innerNodes.at(0)), *(intNetwork.
getNode(intArray.at(index))));
224 EXPECT_EQ(intArray.size(), intNetwork.
size());
225 std::vector<DirectedNode<int, VoidMetaInfo>*> outerEnds_before = intNetwork.
getOuterEnds();
226 std::vector<DirectedNode<int, VoidMetaInfo>*> innerEnds_before = intNetwork.
getInnerEnds();
227 EXPECT_EQ(1, outerEnds_before.size());
228 EXPECT_EQ(1, innerEnds_before.size());
231 EXPECT_EQ(intArray.at(0), outermostNode->
getEntry());
232 EXPECT_EQ(outermostNode->
getEntry(), *outermostNode);
233 EXPECT_EQ(intArray.at(1), *(outermostNode->
getInnerNodes().at(0)));
236 EXPECT_EQ(intArray.at(4), innermostNode->
getEntry());
237 EXPECT_EQ(innermostNode->
getEntry(), *innermostNode);
238 EXPECT_EQ(intArray.at(3), *(innermostNode->
getOuterNodes().at(0)));
242 B2INFO(
"building another path, which is independent of the first one:");
243 for (
unsigned int index = 1 ; index < 5; index++) {
244 B2INFO(
"intArray2-index " << index <<
" of array has entry: " << intArray2.at(index));
246 intNetwork.
addNode(intArray2.at(index - 1), intArray2.at(index - 1));
247 intNetwork.
addNode(intArray2.at(index), intArray2.at(index));
249 intNetwork.
linkNodes(intArray2.at(index - 1), intArray2.at(index));
252 EXPECT_EQ(intArray2.at(index - 1), *intNetwork.
getNode(intArray2.at(index - 1)));
253 EXPECT_EQ(intArray2.at(index), *intNetwork.
getNode(intArray2.at(index)));
258 EXPECT_EQ(1, innerNodes.size());
259 EXPECT_EQ(1, outerNodes.size());
262 EXPECT_TRUE(nodeWasFound(innerNodes, intNetwork.
getNode(intArray2.at(index))));
263 EXPECT_EQ(*(innerNodes.at(0)), *(intNetwork.
getNode(intArray2.at(index))));
269 EXPECT_EQ(10, intNetwork.
size());
270 std::vector<DirectedNode<int, VoidMetaInfo>*> outerEnds = intNetwork.
getOuterEnds();
271 std::vector<DirectedNode<int, VoidMetaInfo>*> innerEnds = intNetwork.
getInnerEnds();
272 EXPECT_EQ(2, outerEnds.size());
273 EXPECT_EQ(2, innerEnds.size());
277 B2INFO(
"building another path into the network which crosses the other paths:"); {
278 B2INFO(
"tests cases: both new, outer new but inner not, inner new but outer not, both already existing:");
279 for (
unsigned int index = 1 ; index < 5; index++) {
280 B2INFO(
"intArray3-indices " << index - 1 <<
"/" << index <<
281 " of array have entries: " << intArray3.at(index - 1) <<
"/" << intArray3.at(index) <<
"\n"
284 intNetwork.
addNode(intArray3.at(index - 1), intArray3.at(index - 1));
285 intNetwork.
addNode(intArray3.at(index), intArray3.at(index));
287 intNetwork.
linkNodes(intArray3.at(index - 1), intArray3.at(index));
290 EXPECT_EQ(intArray3.at(index - 1), *intNetwork.
getNode(intArray3.at(index - 1)));
291 EXPECT_EQ(intArray3.at(index), *intNetwork.
getNode(intArray3.at(index)));
295 intNetwork.
getNode(intArray3.at(index))));
298 if (index > 1)
continue;
300 std::vector<DirectedNode<int, VoidMetaInfo>*> innerEnds = intNetwork.
getInnerEnds();
301 EXPECT_TRUE(nodeWasFound(innerEnds, intNetwork.
getNode(intArray3.at(index))));
302 B2INFO(
"innerEnds after indices " << index - 1 <<
"/" << index <<
" are: " << printNodeEntries(innerEnds));
307 EXPECT_EQ(1, innerNodes.size());
308 EXPECT_EQ(1, outerNodes.size());
314 EXPECT_EQ(13, intNetwork.
size());
316 std::vector<DirectedNode<int, VoidMetaInfo>*> outerEnds = intNetwork.
getOuterEnds();
317 std::vector<DirectedNode<int, VoidMetaInfo>*> innerEnds = intNetwork.
getInnerEnds();
318 EXPECT_EQ(3, outerEnds.size());
319 EXPECT_EQ(3, innerEnds.size());
320 B2INFO(
"outerEnds are: \n" << printNodeEntries(outerEnds));
321 B2INFO(
"innerEnds are: \n" << printNodeEntries(innerEnds));
324 B2INFO(
"case: when outer node is new, but inner one not: "); {
325 B2INFO(
" case: inner one was outer end before: ");
326 auto* oldOuterMostNode = intNetwork.
getOuterEnds().at(0);
327 int oldOuterInt = oldOuterMostNode->getEntry();
328 onTheFlyCreatedInts.push_back(42);
329 int& newInnerInt = onTheFlyCreatedInts.back();
330 EXPECT_TRUE(NULL == intNetwork.
getNode(newInnerInt));
331 intNetwork.
addNode(newInnerInt, newInnerInt);
332 intNetwork.
linkNodes(newInnerInt, oldOuterInt);
333 EXPECT_FALSE(NULL == intNetwork.
getNode(newInnerInt));
334 EXPECT_EQ(14, intNetwork.
size());
336 std::vector<DirectedNode<int, VoidMetaInfo>*> newOuterEnds = intNetwork.
getOuterEnds();
337 EXPECT_EQ(3, newOuterEnds.size());
338 EXPECT_EQ(1, oldOuterMostNode->getOuterNodes().size());
339 EXPECT_EQ(newInnerInt, *(oldOuterMostNode->getOuterNodes().at(0)));
343 B2INFO(
" case: inner one was no outer end before: ");
344 onTheFlyCreatedInts.push_back(23);
345 int& newOuterInt = onTheFlyCreatedInts.back();
346 int& existingInt = intArray.at(1);
347 std::vector<DirectedNode<int, VoidMetaInfo>*> oldOuterEnds = intNetwork.
getOuterEnds();
348 std::vector<DirectedNode<int, VoidMetaInfo>*> oldInnerEnds = intNetwork.
getInnerEnds();
350 EXPECT_EQ(3, oldOuterEnds.size());
351 EXPECT_TRUE(NULL == intNetwork.
getNode(newOuterInt));
352 unsigned int sizeB4 = intNetwork.
size();
353 intNetwork.
addNode(newOuterInt, newOuterInt);
354 intNetwork.
linkNodes(newOuterInt, existingInt);
355 EXPECT_FALSE(NULL == intNetwork.
getNode(newOuterInt));
356 EXPECT_EQ(sizeB4 + 1, intNetwork.
size());
361 std::vector<DirectedNode<int, VoidMetaInfo>*> newOuterEnds = intNetwork.
getOuterEnds();
362 EXPECT_EQ(4, newOuterEnds.size());
369 B2INFO(
"case: when both were there, but not linked yet: ");
370 unsigned int sizeB4 = intNetwork.
size();
371 intNetwork.
linkNodes(intArray.at(0), intArray.at(2));
372 EXPECT_EQ(sizeB4, intNetwork.
size());
375 std::vector<DirectedNode<int, VoidMetaInfo>*> innerEnds = intNetwork.
getNode(intArray.at(0))->
getInnerNodes();
376 EXPECT_EQ(2, innerEnds.size());
377 EXPECT_TRUE(nodeWasFound(innerEnds, intNetwork.
getNode(intArray.at(1))));
378 EXPECT_TRUE(nodeWasFound(innerEnds, intNetwork.
getNode(intArray.at(2))));
379 EXPECT_TRUE(nodeWasFound(innerEnds, innerEnds.at(1)));
382 B2INFO(
"case: when outer both were there and already linked: ");
383 EXPECT_FALSE(intNetwork.
linkNodes(intArray.at(0), intArray.at(2)));
385 EXPECT_EQ(sizeB4, intNetwork.
size());
388 std::vector<DirectedNode<int, VoidMetaInfo>*> moreInnerEnds = intNetwork.
getNode(intArray.at(0))->
getInnerNodes();
389 EXPECT_EQ(innerEnds.size(), moreInnerEnds.size());
390 EXPECT_TRUE(nodeWasFound(innerEnds, moreInnerEnds.at(0)));
391 EXPECT_TRUE(nodeWasFound(innerEnds, moreInnerEnds.at(1)));
395 B2INFO(
"testing members for filling, when (at least) one entry was already there:"); {
396 B2INFO(
"case: addInnerToLastOuterNode: both were there, but not linked yet: ");
397 unsigned int networkSizeB4 = intNetwork.
size();
398 unsigned int nInnerEndsB4 = intNetwork.
getInnerEnds().size();
400 EXPECT_EQ(networkSizeB4, intNetwork.
size());
401 EXPECT_EQ(nInnerEndsB4, intNetwork.
getInnerEnds().size());
402 std::vector<DirectedNode<int, VoidMetaInfo>*> innerEnds = intNetwork.
getNode(intArray.at(0))->
getInnerNodes();
403 EXPECT_EQ(3, innerEnds.size());
405 EXPECT_TRUE(nodeWasFound(innerEnds, intNetwork.
getNode(intArray.at(1))));
406 EXPECT_TRUE(nodeWasFound(innerEnds, intNetwork.
getNode(intArray.at(2))));
407 EXPECT_TRUE(nodeWasFound(innerEnds, intNetwork.
getNode(intArray.at(3))));
412 B2INFO(
"case: addInnerToLastOuterNode: both were there, but already linked (same results as before, but with an error for unintended behavior):");
413 unsigned int networkSizeB4 = intNetwork.
size();
414 unsigned int nInnerEndsB4 = intNetwork.
getInnerEnds().size();
416 EXPECT_EQ(networkSizeB4, intNetwork.
size());
417 EXPECT_EQ(nInnerEndsB4, intNetwork.
getInnerEnds().size());
418 std::vector<DirectedNode<int, VoidMetaInfo>*> innerEnds = intNetwork.
getNode(intArray.at(0))->
getInnerNodes();
419 EXPECT_EQ(3, innerEnds.size());
421 EXPECT_TRUE(nodeWasFound(innerEnds, intNetwork.
getNode(intArray.at(1))));
422 EXPECT_TRUE(nodeWasFound(innerEnds, intNetwork.
getNode(intArray.at(2))));
423 EXPECT_TRUE(nodeWasFound(innerEnds, intNetwork.
getNode(intArray.at(3))));