6#include <gtest/gtest.h>
70 auto n1 = g.insert_node(1);
71 auto n2 = g.insert_node(2);
81 auto n1 = g.insert_node(1);
82 auto n2 = g.insert_node(2);
83 auto n3 = g.insert_node(3);
84 auto n4 = g.insert_node(4);
97 auto n1 = g.insert_node(1);
98 auto n2 = g.insert_node(2);
99 auto n3 = g.insert_node(3);
100 auto n4 = g.insert_node(4);
101 auto n5 = g.insert_node(5);
104 g.insert_arc(n1, n2);
105 g.insert_arc(n1, n3);
106 g.insert_arc(n2, n4);
107 g.insert_arc(n2, n5);
120 auto n1 = g.insert_node(1);
121 auto n2 = g.insert_node(2);
122 auto n3 = g.insert_node(3);
124 g.insert_arc(n1, n2);
125 g.insert_arc(n2, n3);
126 g.insert_arc(n3, n1);
135 auto n1 = g.insert_node(1);
136 auto n2 = g.insert_node(2);
137 auto n3 = g.insert_node(3);
138 auto n4 = g.insert_node(4);
140 g.insert_arc(n1, n2);
141 g.insert_arc(n2, n3);
142 g.insert_arc(n3, n4);
143 g.insert_arc(n4, n1);
152 auto n = g.insert_node(1);
162 const size_t n = 100;
163 std::vector<Node*>
nodes;
165 for (
size_t i = 0; i < n; ++i)
166 nodes.push_back(g.insert_node(i));
168 for (
size_t i = 0; i < n - 1; ++i)
192 auto n1 = g.insert_node(1);
193 auto n2 = g.insert_node(2);
194 auto n3 = g.insert_node(3);
196 g.insert_arc(n1, n2);
197 g.insert_arc(n2, n3);
206 auto n1 = g.insert_node(1);
207 auto n2 = g.insert_node(2);
208 auto n3 = g.insert_node(3);
210 g.insert_arc(n1, n2);
211 g.insert_arc(n2, n3);
212 g.insert_arc(n3, n1);
222 auto n1 = g.insert_node(1);
223 auto n2 = g.insert_node(2);
224 g.insert_arc(n1, n2);
227 auto n3 = g.insert_node(3);
228 auto n4 = g.insert_node(4);
229 auto n5 = g.insert_node(5);
230 g.insert_arc(n3, n4);
231 g.insert_arc(n4, n5);
232 g.insert_arc(n5, n3);
246 auto n1 = g.insert_node(1);
247 auto n2 = g.insert_node(2);
248 auto n3 = g.insert_node(3);
249 auto n4 = g.insert_node(4);
250 auto n5 = g.insert_node(5);
251 auto n6 = g.insert_node(6);
254 g.insert_arc(n1, n2);
255 g.insert_arc(n1, n3);
256 g.insert_arc(n2, n4);
257 g.insert_arc(n2, n5);
258 g.insert_arc(n3, n6);
267 auto n1 = g.insert_node(1);
268 auto n2 = g.insert_node(2);
269 auto n3 = g.insert_node(3);
270 auto n4 = g.insert_node(4);
273 g.insert_arc(n1, n2);
274 g.insert_arc(n1, n3);
275 g.insert_arc(n2, n4);
276 g.insert_arc(n3, n4);
279 g.insert_arc(n4, n1);
293 auto n1 = g.insert_node(1);
294 auto n2 = g.insert_node(2);
295 g.insert_arc(n1, n2);
298 auto n3 = g.insert_node(3);
299 auto n4 = g.insert_node(4);
300 g.insert_arc(n3, n4);
310 auto n1 = g.insert_node(1);
311 auto n2 = g.insert_node(2);
312 g.insert_arc(n1, n2);
315 auto n3 = g.insert_node(3);
316 auto n4 = g.insert_node(4);
317 auto n5 = g.insert_node(5);
318 g.insert_arc(n3, n4);
319 g.insert_arc(n4, n5);
320 g.insert_arc(n5, n3);
333 auto n1 = g.insert_node(1);
334 auto n2 = g.insert_node(2);
336 g.insert_arc(n1, n2);
337 g.insert_arc(n2, n1);
346 auto center = g.insert_node(0);
348 for (
int i = 1; i <= 10; ++i)
350 auto leaf = g.insert_node(i);
351 g.insert_arc(center,
leaf);
365 auto n1 = g.insert_node(1);
366 auto n2 = g.insert_node(2);
367 auto n3 = g.insert_node(3);
369 g.insert_arc(n1, n2);
370 g.insert_arc(n2, n3);
379 auto n1 = g.insert_node(1);
380 auto n2 = g.insert_node(2);
381 auto n3 = g.insert_node(3);
383 g.insert_arc(n1, n2);
384 g.insert_arc(n2, n3);
385 g.insert_arc(n3, n1);
394 auto n1 = g.insert_node(1);
395 auto n2 = g.insert_node(2);
397 g.insert_arc(n1, n2);
398 g.insert_arc(n2, n1);
411 const size_t n = 500;
412 std::vector<Node*>
nodes;
414 for (
size_t i = 0; i < n; ++i)
415 nodes.push_back(g.insert_node(i));
417 for (
size_t i = 0; i < n - 1; ++i)
427 auto root = g.insert_node(0);
431 std::vector<Node*> current_level = {
root};
433 for (
int depth = 0; depth < 6; ++depth)
437 for (
auto parent : current_level)
439 auto left = g.insert_node(node_count++);
440 auto right = g.insert_node(node_count++);
442 g.insert_arc(parent, left);
443 g.insert_arc(parent, right);
464 std::vector<Node*>
nodes;
466 for (
size_t i = 0; i < n; ++i)
467 nodes.push_back(g.insert_node(i));
470 for (
size_t i = 0; i < n; ++i)
482 std::vector<Node*>
nodes;
484 for (
size_t i = 0; i < n; ++i)
485 nodes.push_back(g.insert_node(i));
488 for (
size_t i = 0; i < n - 1; ++i)
WeightedDigraph::Node Node
Determines whether a graph contains cycles.
Determines whether a graph is acyclic (contains no cycles).
Graph_Node< int > Node
The graph type.
Graph_Arc< int > Arc
The node class type.
__gmp_expr< T, __gmp_binary_expr< __gmp_expr< T, U >, unsigned long int, __gmp_root_function > > root(const __gmp_expr< T, U > &expr, unsigned long int l)
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.
List_Graph< Graph_Node< int >, Graph_Arc< int > > GT
TEST_F(TestAcycliqueTest, EmptyGraphIsAcyclic)
Generic graph and digraph implementations.
DAG (acyclic) graph testing.