[Lemon-commits] Alpar Juttner: Merge
Lemon HG
hg at lemon.cs.elte.hu
Fri Nov 7 15:24:20 CET 2008
details: http://lemon.cs.elte.hu/hg/lemon/rev/2d87dbd7f8c8
changeset: 388:2d87dbd7f8c8
user: Alpar Juttner <alpar [at] cs.elte.hu>
date: Fri Nov 07 13:14:22 2008 +0000
description:
Merge
diffstat:
4 files changed, 462 insertions(+), 68 deletions(-)
lemon/smart_graph.h | 4
test/digraph_test.cc | 283 +++++++++++++++++++++++++++++++++++++++++++-------
test/graph_test.cc | 234 +++++++++++++++++++++++++++++++++++------
test/graph_test.h | 9 +
diffs (truncated from 641 to 300 lines):
diff -r 7b6466ed488a -r 2d87dbd7f8c8 lemon/smart_graph.h
--- a/lemon/smart_graph.h Fri Nov 07 13:04:54 2008 +0000
+++ b/lemon/smart_graph.h Fri Nov 07 13:14:22 2008 +0000
@@ -737,8 +737,8 @@
dir.push_back(arcFromId(n));
dir.push_back(arcFromId(n-1));
Parent::notifier(Arc()).erase(dir);
- nodes[arcs[n].target].first_out=arcs[n].next_out;
- nodes[arcs[n-1].target].first_out=arcs[n-1].next_out;
+ nodes[arcs[n-1].target].first_out=arcs[n].next_out;
+ nodes[arcs[n].target].first_out=arcs[n-1].next_out;
arcs.pop_back();
arcs.pop_back();
}
diff -r 7b6466ed488a -r 2d87dbd7f8c8 test/digraph_test.cc
--- a/test/digraph_test.cc Fri Nov 07 13:04:54 2008 +0000
+++ b/test/digraph_test.cc Fri Nov 07 13:14:22 2008 +0000
@@ -28,7 +28,7 @@
using namespace lemon::concepts;
template <class Digraph>
-void checkDigraph() {
+void checkDigraphBuild() {
TEMPLATE_DIGRAPH_TYPEDEFS(Digraph);
Digraph G;
@@ -57,7 +57,208 @@
checkGraphConArcList(G, 1);
- Arc a2 = G.addArc(n2, n1), a3 = G.addArc(n2, n3), a4 = G.addArc(n2, n3);
+ Arc a2 = G.addArc(n2, n1),
+ a3 = G.addArc(n2, n3),
+ a4 = G.addArc(n2, n3);
+
+ checkGraphNodeList(G, 3);
+ checkGraphArcList(G, 4);
+
+ checkGraphOutArcList(G, n1, 1);
+ checkGraphOutArcList(G, n2, 3);
+ checkGraphOutArcList(G, n3, 0);
+
+ checkGraphInArcList(G, n1, 1);
+ checkGraphInArcList(G, n2, 1);
+ checkGraphInArcList(G, n3, 2);
+
+ checkGraphConArcList(G, 4);
+
+ checkNodeIds(G);
+ checkArcIds(G);
+ checkGraphNodeMap(G);
+ checkGraphArcMap(G);
+}
+
+template <class Digraph>
+void checkDigraphSplit() {
+ TEMPLATE_DIGRAPH_TYPEDEFS(Digraph);
+
+ Digraph G;
+ Node n1 = G.addNode(), n2 = G.addNode(), n3 = G.addNode();
+ Arc a1 = G.addArc(n1, n2), a2 = G.addArc(n2, n1),
+ a3 = G.addArc(n2, n3), a4 = G.addArc(n2, n3);
+
+ Node n4 = G.split(n2);
+
+ check(G.target(OutArcIt(G, n2)) == n4 &&
+ G.source(InArcIt(G, n4)) == n2,
+ "Wrong split.");
+
+ checkGraphNodeList(G, 4);
+ checkGraphArcList(G, 5);
+
+ checkGraphOutArcList(G, n1, 1);
+ checkGraphOutArcList(G, n2, 1);
+ checkGraphOutArcList(G, n3, 0);
+ checkGraphOutArcList(G, n4, 3);
+
+ checkGraphInArcList(G, n1, 1);
+ checkGraphInArcList(G, n2, 1);
+ checkGraphInArcList(G, n3, 2);
+ checkGraphInArcList(G, n4, 1);
+
+ checkGraphConArcList(G, 5);
+}
+
+template <class Digraph>
+void checkDigraphAlter() {
+ TEMPLATE_DIGRAPH_TYPEDEFS(Digraph);
+
+ Digraph G;
+ Node n1 = G.addNode(), n2 = G.addNode(),
+ n3 = G.addNode(), n4 = G.addNode();
+ Arc a1 = G.addArc(n1, n2), a2 = G.addArc(n4, n1),
+ a3 = G.addArc(n4, n3), a4 = G.addArc(n4, n3),
+ a5 = G.addArc(n2, n4);
+
+ checkGraphNodeList(G, 4);
+ checkGraphArcList(G, 5);
+
+ // Check changeSource() and changeTarget()
+ G.changeTarget(a4, n1);
+
+ checkGraphNodeList(G, 4);
+ checkGraphArcList(G, 5);
+
+ checkGraphOutArcList(G, n1, 1);
+ checkGraphOutArcList(G, n2, 1);
+ checkGraphOutArcList(G, n3, 0);
+ checkGraphOutArcList(G, n4, 3);
+
+ checkGraphInArcList(G, n1, 2);
+ checkGraphInArcList(G, n2, 1);
+ checkGraphInArcList(G, n3, 1);
+ checkGraphInArcList(G, n4, 1);
+
+ checkGraphConArcList(G, 5);
+
+ G.changeSource(a4, n3);
+
+ checkGraphNodeList(G, 4);
+ checkGraphArcList(G, 5);
+
+ checkGraphOutArcList(G, n1, 1);
+ checkGraphOutArcList(G, n2, 1);
+ checkGraphOutArcList(G, n3, 1);
+ checkGraphOutArcList(G, n4, 2);
+
+ checkGraphInArcList(G, n1, 2);
+ checkGraphInArcList(G, n2, 1);
+ checkGraphInArcList(G, n3, 1);
+ checkGraphInArcList(G, n4, 1);
+
+ checkGraphConArcList(G, 5);
+
+ // Check contract()
+ G.contract(n2, n4, false);
+
+ checkGraphNodeList(G, 3);
+ checkGraphArcList(G, 5);
+
+ checkGraphOutArcList(G, n1, 1);
+ checkGraphOutArcList(G, n2, 3);
+ checkGraphOutArcList(G, n3, 1);
+
+ checkGraphInArcList(G, n1, 2);
+ checkGraphInArcList(G, n2, 2);
+ checkGraphInArcList(G, n3, 1);
+
+ checkGraphConArcList(G, 5);
+
+ G.contract(n2, n1);
+
+ checkGraphNodeList(G, 2);
+ checkGraphArcList(G, 3);
+
+ checkGraphOutArcList(G, n2, 2);
+ checkGraphOutArcList(G, n3, 1);
+
+ checkGraphInArcList(G, n2, 2);
+ checkGraphInArcList(G, n3, 1);
+
+ checkGraphConArcList(G, 3);
+}
+
+template <class Digraph>
+void checkDigraphErase() {
+ TEMPLATE_DIGRAPH_TYPEDEFS(Digraph);
+
+ Digraph G;
+ Node n1 = G.addNode(), n2 = G.addNode(),
+ n3 = G.addNode(), n4 = G.addNode();
+ Arc a1 = G.addArc(n1, n2), a2 = G.addArc(n4, n1),
+ a3 = G.addArc(n4, n3), a4 = G.addArc(n3, n1),
+ a5 = G.addArc(n2, n4);
+
+ // Check arc deletion
+ G.erase(a1);
+
+ checkGraphNodeList(G, 4);
+ checkGraphArcList(G, 4);
+
+ checkGraphOutArcList(G, n1, 0);
+ checkGraphOutArcList(G, n2, 1);
+ checkGraphOutArcList(G, n3, 1);
+ checkGraphOutArcList(G, n4, 2);
+
+ checkGraphInArcList(G, n1, 2);
+ checkGraphInArcList(G, n2, 0);
+ checkGraphInArcList(G, n3, 1);
+ checkGraphInArcList(G, n4, 1);
+
+ checkGraphConArcList(G, 4);
+
+ // Check node deletion
+ G.erase(n4);
+
+ checkGraphNodeList(G, 3);
+ checkGraphArcList(G, 1);
+
+ checkGraphOutArcList(G, n1, 0);
+ checkGraphOutArcList(G, n2, 0);
+ checkGraphOutArcList(G, n3, 1);
+ checkGraphOutArcList(G, n4, 0);
+
+ checkGraphInArcList(G, n1, 1);
+ checkGraphInArcList(G, n2, 0);
+ checkGraphInArcList(G, n3, 0);
+ checkGraphInArcList(G, n4, 0);
+
+ checkGraphConArcList(G, 1);
+}
+
+
+template <class Digraph>
+void checkDigraphSnapshot() {
+ TEMPLATE_DIGRAPH_TYPEDEFS(Digraph);
+
+ Digraph G;
+ Node n1 = G.addNode(), n2 = G.addNode(), n3 = G.addNode();
+ Arc a1 = G.addArc(n1, n2), a2 = G.addArc(n2, n1),
+ a3 = G.addArc(n2, n3), a4 = G.addArc(n2, n3);
+
+ typename Digraph::Snapshot snapshot(G);
+
+ Node n = G.addNode();
+ G.addArc(n3, n);
+ G.addArc(n, n3);
+
+ checkGraphNodeList(G, 4);
+ checkGraphArcList(G, 6);
+
+ snapshot.restore();
+
checkGraphNodeList(G, 3);
checkGraphArcList(G, 4);
@@ -76,39 +277,15 @@
checkGraphNodeMap(G);
checkGraphArcMap(G);
-}
+ G.addNode();
+ snapshot.save(G);
-void checkFullDigraph(int num) {
- typedef FullDigraph Digraph;
- DIGRAPH_TYPEDEFS(Digraph);
- Digraph G(num);
+ G.addArc(G.addNode(), G.addNode());
- checkGraphNodeList(G, num);
- checkGraphArcList(G, num * num);
+ snapshot.restore();
- for (NodeIt n(G); n != INVALID; ++n) {
- checkGraphOutArcList(G, n, num);
- checkGraphInArcList(G, n, num);
- }
-
- checkGraphConArcList(G, num * num);
-
- checkNodeIds(G);
- checkArcIds(G);
- checkGraphNodeMap(G);
- checkGraphArcMap(G);
-
- for (int i = 0; i < G.nodeNum(); ++i) {
- check(G.index(G(i)) == i, "Wrong index");
- }
-
- for (NodeIt s(G); s != INVALID; ++s) {
- for (NodeIt t(G); t != INVALID; ++t) {
- Arc a = G.arc(s, t);
- check(G.source(a) == s && G.target(a) == t, "Wrong arc lookup");
- }
- }
-
+ checkGraphNodeList(G, 4);
+ checkGraphArcList(G, 4);
}
void checkConcepts() {
@@ -195,13 +372,51 @@
check(!g.valid(g.arcFromId(-1)), "Wrong validity check");
}
+void checkFullDigraph(int num) {
+ typedef FullDigraph Digraph;
+ DIGRAPH_TYPEDEFS(Digraph);
+ Digraph G(num);
+
+ checkGraphNodeList(G, num);
+ checkGraphArcList(G, num * num);
+
+ for (NodeIt n(G); n != INVALID; ++n) {
+ checkGraphOutArcList(G, n, num);
+ checkGraphInArcList(G, n, num);
+ }
+
+ checkGraphConArcList(G, num * num);
More information about the Lemon-commits
mailing list