53#include <gtest/gtest.h>
112 auto n1 = g.insert_node(1);
122 auto n1 = g.insert_node(1);
123 auto n2 = g.insert_node(2);
124 auto n3 = g.insert_node(3);
125 auto n4 = g.insert_node(4);
127 g.insert_arc(n1, n2);
128 g.insert_arc(n2, n3);
129 g.insert_arc(n3, n4);
142 auto n1 = g.insert_node(1);
143 auto n2 = g.insert_node(2);
144 auto n3 = g.insert_node(3);
146 g.insert_arc(n1, n2);
147 g.insert_arc(n2, n3);
148 g.insert_arc(n3, n1);
160 auto n1 = g.insert_node(1);
161 g.insert_arc(n1, n1);
170 auto n1 = g.insert_node(1);
171 auto n2 = g.insert_node(2);
173 g.insert_arc(n1, n2);
174 g.insert_arc(n2, n1);
187 for (
int i = 0; i <
N; ++i)
191 for (
int i = 0; i <
N; ++i)
195 for (
int i = 0; i <
N; ++i)
208 auto n1 = g.insert_node(1);
209 auto n2 = g.insert_node(2);
210 auto n3 = g.insert_node(3);
211 auto n4 = g.insert_node(4);
213 g.insert_arc(n1, n2);
214 g.insert_arc(n2, n3);
215 g.insert_arc(n3, n4);
216 g.insert_arc(n4, n2);
231 auto n1 = g.insert_node(1);
232 auto n2 = g.insert_node(2);
233 auto n3 = g.insert_node(3);
236 g.insert_arc(n1, n2);
237 g.insert_arc(n2, n1);
247 auto n1 = g.insert_node(1);
248 auto n2 = g.insert_node(2);
249 auto n3 = g.insert_node(3);
250 auto n4 = g.insert_node(4);
253 g.insert_arc(n1, n2);
254 g.insert_arc(n3, n4);
255 g.insert_arc(n4, n3);
271 auto n1 = g.insert_node(1);
272 auto n2 = g.insert_node(2);
273 auto n3 = g.insert_node(3);
274 auto n4 = g.insert_node(4);
275 auto n5 = g.insert_node(5);
278 g.insert_arc(n1, n2);
279 g.insert_arc(n2, n1);
282 g.insert_arc(n3, n4);
283 g.insert_arc(n4, n5);
284 g.insert_arc(n5, n3);
287 g.insert_arc(n2, n3);
302 auto n1 = g.insert_node(1);
303 auto n2 = g.insert_node(2);
304 auto n3 = g.insert_node(3);
305 auto n4 = g.insert_node(4);
308 g.insert_arc(n1, n2);
309 g.insert_arc(n1, n3);
310 g.insert_arc(n2, n4);
311 g.insert_arc(n3, n4);
317 g.insert_arc(n4, n1);
328 auto n1 = g.insert_node(1);
329 auto n2 = g.insert_node(2);
330 auto n3 = g.insert_node(3);
331 auto n4 = g.insert_node(4);
334 g.insert_arc(n1, n2);
335 g.insert_arc(n2, n3);
336 g.insert_arc(n3, n4);
337 g.insert_arc(n4, n1);
340 g.insert_arc(n2, n4);
356 auto n1 = g.insert_node(1);
357 auto n2 = g.insert_node(2);
358 auto n3 = g.insert_node(3);
360 g.insert_arc(n1, n2);
361 g.insert_arc(n2, n3);
362 g.insert_arc(n3, n1);
375 auto n1 = g.insert_node(1);
376 auto n2 = g.insert_node(2);
377 auto n3 = g.insert_node(3);
378 auto n4 = g.insert_node(4);
381 g.insert_arc(n1, n2);
382 g.insert_arc(n1, n3);
383 g.insert_arc(n1, n4);
390 g.insert_arc(n2, n3);
400 auto n1 = g.insert_node(1);
401 auto n2 = g.insert_node(2);
402 auto n3 = g.insert_node(3);
405 auto a1 = g.insert_arc(n1, n2, 1);
407 auto a3 = g.insert_arc(n3, n1, 3);
422 auto n1 = g.insert_node(1);
423 auto n2 = g.insert_node(2);
424 auto n3 = g.insert_node(3);
425 auto n4 = g.insert_node(4);
428 g.insert_arc(n1, n2, 2);
429 g.insert_arc(n2, n3, 2);
430 g.insert_arc(n3, n4, 1);
431 g.insert_arc(n4, n1, 2);
453 auto n1 = g.insert_node(1);
454 auto n2 = g.insert_node(2);
455 g.insert_arc(n1, n2);
456 g.insert_arc(n2, n1);
476 for (
int i = 0; i <
N; ++i)
480 for (
int i = 0; i <
N - 1; ++i)
481 for (
int j = i + 1; j < std::min(i + 5,
N); ++j)
497 for (
int i = 0; i <
N; ++i)
501 for (
int i = 0; i <
N; ++i)
502 for (
int j = i + 1; j <
N; ++j)
520 auto n1 = g.insert_node(1);
521 auto n2 = g.insert_node(2);
522 g.insert_arc(n1, n2);
523 g.insert_arc(n2, n1);
534 auto n1 = g.insert_node(1);
535 auto n2 = g.insert_node(2);
536 g.insert_arc(n1, n2);
537 g.insert_arc(n2, n1);
553 auto n1 = g.insert_node(1);
554 auto n2 = g.insert_node(2);
556 g.insert_arc(n1, n1);
557 g.insert_arc(n2, n2);
558 g.insert_arc(n1, n2);
568 auto n1 = g.insert_node(1);
569 auto n2 = g.insert_node(2);
572 g.insert_arc(n1, n2);
573 g.insert_arc(n1, n2);
574 g.insert_arc(n2, n1);
575 g.insert_arc(n2, n1);
586 auto n1 = g.insert_node(1);
587 auto n2 = g.insert_node(2);
588 g.insert_arc(n1, n2);
589 g.insert_arc(n2, n1);
592 auto n3 = g.insert_node(3);
593 auto n4 = g.insert_node(4);
594 g.insert_arc(n3, n4);
607template <
typename GraphType>
737 ::testing::InitGoogleTest(&
argc,
argv);
Generic directed graph (digraph) wrapper template.
T & append()
Allocate a new entry to the end of array.
Arc for graphs implemented with simple adjacency lists.
virtual Node * insert_node(Node *node) noexcept
Insertion of a node already allocated.
Arc * insert_arc(Node *src_node, Node *tgt_node, void *a)
Graph class implemented with singly-linked adjacency lists.
Test whether a cycle is reachable from a given node.
ArcInfo & get_info() noexcept
Return a modifiable reference to the arc data.
DynArray< Graph::Node * > nodes
Main namespace for Aleph-w library functions.
DynList< T > maps(const C &c, Op op)
Classic map operation.
Arc of graph implemented with double-linked adjacency lists.
bool operator()(typename GT::Arc *arc) const
Array-based graph implementation.
::testing::Types< ListGraph, ListDigraph, SparseGraph, SparseDigraph, ArrayGraph, ArrayDigraph > GraphTypes
Generic graph and digraph implementations.
Simple graph implementation with adjacency lists.
Cycle detection in graphs.
TEST_F(TestForCycleDirected, EmptyGraph)
List_Digraph< Graph_Node< int >, Graph_Arc< int > > ListDigraph
List_Graph< Graph_Node< int >, Graph_Arc< int > > ListGraph
Array_Graph< Graph_Anode< int >, Graph_Aarc< int > > ArrayGraph
TYPED_TEST_SUITE(TestForCycleAllGraphs, GraphTypes)
TYPED_TEST(TestForCycleAllGraphs, BasicNoCycle)
List_SDigraph< Graph_Snode< int >, Graph_Sarc< int > > SparseDigraph
List_SGraph< Graph_Snode< int >, Graph_Sarc< int > > SparseGraph