52#include <gtest/gtest.h>
81 std::vector<TestGraph::Node*>
nodes;
82 std::vector<TestDigraph::Node*>
dnodes;
105 auto* n = g.insert_node(42);
120 auto* n1 = g.insert_node(1);
121 auto* n2 = g.insert_node(2);
122 g.insert_arc(n1, n2, 3.14);
129 auto*
c1 =
copy.get_copy(n1);
130 auto*
c2 =
copy.get_copy(n2);
137 for (
auto it =
copy.get_graph().get_arc_it(); it.has_curr(); it.next())
139 auto* arc = it.get_curr();
140 auto* src =
copy.get_graph().get_src_node(arc);
141 auto* tgt =
copy.get_graph().get_tgt_node(arc);
142 if ((src ==
c1 && tgt ==
c2) || (src ==
c2 && tgt ==
c1))
153 auto* n1 = dg.insert_node(1);
154 auto* n2 = dg.insert_node(2);
155 dg.insert_arc(n1, n2, 1.0);
156 dg.insert_arc(n2, n1, 2.0);
163 auto*
c1 =
copy.get_copy(n1);
164 auto*
c2 =
copy.get_copy(n2);
168 for (
auto it =
copy.get_graph().get_arc_it(); it.has_curr(); it.next())
170 auto* arc = it.get_curr();
171 auto* src =
copy.get_graph().get_src_node(arc);
172 auto* tgt =
copy.get_graph().get_tgt_node(arc);
174 if (src ==
c1 && tgt ==
c2)
179 else if (src ==
c2 && tgt ==
c1)
192 auto* n1 = g.insert_node(1);
207 auto* n1 = g.insert_node(1);
219 auto* n1 = g.insert_node(1);
240 auto*
dummy =
copy.insert_unmapped_node(999);
252 auto* n1 = g.insert_node(1);
253 auto* n2 = g.insert_node(2);
257 auto*
c1 =
copy.get_copy(n1);
258 auto*
dummy =
copy.insert_unmapped_node(0);
269 auto* n1 = g.insert_node(1);
272 auto*
dummy =
copy.insert_unmapped_node(999);
273 auto*
c1 =
copy.get_copy(n1);
292 auto* n1 = g.insert_node(1);
293 auto* n2 = g.insert_node(2);
294 auto* n3 = g.insert_node(3);
295 g.insert_arc(n1, n2, 1.0);
296 g.insert_arc(n2, n3, 2.0);
297 g.insert_arc(n3, n1, 3.0);
304 auto*
c1 =
copy.get_copy(n1);
305 auto*
c2 =
copy.get_copy(n2);
306 auto*
c3 =
copy.get_copy(n3);
322 auto* n1 = g.insert_node(1);
323 auto* n2 = g.insert_node(2);
324 g.insert_arc(n1, n2, 1.0);
327 auto* n3 = g.insert_node(3);
328 auto* n4 = g.insert_node(4);
329 g.insert_arc(n3, n4, 2.0);
345 auto* n1 = dg.insert_node(1);
346 dg.insert_arc(n1, n1, 5.0);
353 auto*
c1 =
copy.get_copy(n1);
357 for (
auto it =
copy.get_graph().get_arc_it(); it.has_curr(); it.next())
359 auto* arc = it.get_curr();
360 auto* src =
copy.get_graph().get_src_node(arc);
361 auto* tgt =
copy.get_graph().get_tgt_node(arc);
362 if (src ==
c1 && tgt ==
c1)
373 auto* n1 = dg.insert_node(1);
374 auto* n2 = dg.insert_node(2);
375 dg.insert_arc(n1, n2, 1.0);
376 dg.insert_arc(n1, n2, 2.0);
377 dg.insert_arc(n1, n2, 3.0);
415 auto* s = dg.insert_node(0);
416 auto* a = dg.insert_node(1);
417 auto* b = dg.insert_node(2);
418 auto* t = dg.insert_node(3);
420 dg.insert_arc(s, a, 1.0);
421 dg.insert_arc(s, b, 4.0);
422 dg.insert_arc(a, b, 2.0);
423 dg.insert_arc(a, t, 6.0);
424 dg.insert_arc(b, t, 3.0);
429 EXPECT_EQ(
copy.get_graph().get_num_nodes(), dg.get_num_nodes());
430 EXPECT_EQ(
copy.get_graph().get_num_arcs(), dg.get_num_arcs());
433 auto*
cs =
copy.get_copy(s);
434 auto*
ct =
copy.get_copy(t);
441 for (
auto it = dg.get_out_it(s); it.has_curr(); it.next())
445 for (
auto it =
copy.get_graph().get_out_it(
cs); it.has_curr(); it.next())
455 std::vector<TestDigraph::Node*>
ns;
457 for (
int i = 0; i <
N; ++i)
458 ns.push_back(dg.insert_node(i));
461 for (
int i = 0; i <
N - 1; ++i)
462 dg.insert_arc(
ns[i],
ns[i + 1],
static_cast<double>(i));
465 for (
int i = 0; i <
N - 10; i += 10)
466 dg.insert_arc(
ns[i],
ns[i + 10],
static_cast<double>(i * 10));
473 for (
int i = 0; i <
N; ++i)
485 auto* n1 = g.insert_node(1);
486 auto* n2 = g.insert_node(2);
487 g.insert_arc(n1, n2, 1.0);
504 auto* n1 = g.insert_node(1);
505 auto* n2 = g.insert_node(2);
506 auto* n3 = g.insert_node(3);
507 g.insert_arc(n1, n3, 10);
528 auto* n1 = g.insert_node(1);
529 auto* n2 = g.insert_node(2);
530 auto* n3 = g.insert_node(3);
531 g.insert_arc(n1, n3, 10);
561 ::testing::InitGoogleTest(&
argc,
argv);
Generic directed graph (digraph) wrapper template.
Graph copy with explicit node mapping.
std::vector< TestDigraph::Node * > dnodes
std::vector< TestGraph::Node * > nodes
TEST_F(GraphCopyTest, EmptyGraph)
Main namespace for Aleph-w library functions.
Itor2 copy(Itor1 sourceBeg, const Itor1 &sourceEnd, Itor2 destBeg)
Copy elements from one range to another.
DynList< T > maps(const C &c, Op op)
Classic map operation.
Itor::difference_type count(const Itor &beg, const Itor &end, const T &value)
Count elements equal to a value.
Arc of graph implemented with double-linked adjacency lists.
Node belonging to a graph implemented with a double linked adjacency list.
Generic graph and digraph implementations.