# HG changeset patch # User Alpar Juttner # Date 1277440915 -7200 # Node ID d395358592dfe9263bb7ad5263abb946ada7807b # Parent a22b3f1bf83e88557d0815adbe2b238cd19a3d6b# Parent bb871cb8ac0664d5db95721a1d678d604762a3c2 Merge bugfix #371 diff -r a22b3f1bf83e -r d395358592df lemon/core.h --- a/lemon/core.h Fri Jun 25 06:00:56 2010 +0200 +++ b/lemon/core.h Fri Jun 25 06:41:55 2010 +0200 @@ -394,6 +394,7 @@ template static void copy(const From& from, Digraph &to, NodeRefMap& nodeRefMap, ArcRefMap& arcRefMap) { + to.clear(); for (typename From::NodeIt it(from); it != INVALID; ++it) { nodeRefMap[it] = to.addNode(); } @@ -421,6 +422,7 @@ template static void copy(const From& from, Graph &to, NodeRefMap& nodeRefMap, EdgeRefMap& edgeRefMap) { + to.clear(); for (typename From::NodeIt it(from); it != INVALID; ++it) { nodeRefMap[it] = to.addNode(); } diff -r a22b3f1bf83e -r d395358592df test/graph_copy_test.cc --- a/test/graph_copy_test.cc Fri Jun 25 06:00:56 2010 +0200 +++ b/test/graph_copy_test.cc Fri Jun 25 06:41:55 2010 +0200 @@ -29,6 +29,7 @@ void digraph_copy_test() { const int nn = 10; + // Build a digraph SmartDigraph from; SmartDigraph::NodeMap fnm(from); SmartDigraph::ArcMap fam(from); @@ -51,6 +52,7 @@ } } + // Test digraph copy ListDigraph to; ListDigraph::NodeMap tnm(to); ListDigraph::ArcMap tam(to); @@ -68,6 +70,9 @@ nodeRef(nr).arcRef(er). nodeCrossRef(ncr).arcCrossRef(ecr). node(fn, tn).arc(fa, ta).run(); + + check(countNodes(from) == countNodes(to), "Wrong copy."); + check(countArcs(from) == countArcs(to), "Wrong copy."); for (SmartDigraph::NodeIt it(from); it != INVALID; ++it) { check(ncr[nr[it]] == it, "Wrong copy."); @@ -90,11 +95,18 @@ } check(tn == nr[fn], "Wrong copy."); check(ta == er[fa], "Wrong copy."); + + // Test repeated copy + digraphCopy(from, to).run(); + + check(countNodes(from) == countNodes(to), "Wrong copy."); + check(countArcs(from) == countArcs(to), "Wrong copy."); } void graph_copy_test() { const int nn = 10; + // Build a graph SmartGraph from; SmartGraph::NodeMap fnm(from); SmartGraph::ArcMap fam(from); @@ -122,6 +134,7 @@ } } + // Test graph copy ListGraph to; ListGraph::NodeMap tnm(to); ListGraph::ArcMap tam(to); @@ -144,6 +157,10 @@ nodeCrossRef(ncr).arcCrossRef(acr).edgeCrossRef(ecr). node(fn, tn).arc(fa, ta).edge(fe, te).run(); + check(countNodes(from) == countNodes(to), "Wrong copy."); + check(countEdges(from) == countEdges(to), "Wrong copy."); + check(countArcs(from) == countArcs(to), "Wrong copy."); + for (SmartGraph::NodeIt it(from); it != INVALID; ++it) { check(ncr[nr[it]] == it, "Wrong copy."); check(fnm[it] == tnm[nr[it]], "Wrong copy."); @@ -180,6 +197,13 @@ check(tn == nr[fn], "Wrong copy."); check(ta == ar[fa], "Wrong copy."); check(te == er[fe], "Wrong copy."); + + // Test repeated copy + graphCopy(from, to).run(); + + check(countNodes(from) == countNodes(to), "Wrong copy."); + check(countEdges(from) == countEdges(to), "Wrong copy."); + check(countArcs(from) == countArcs(to), "Wrong copy."); }