[Lemon-commits] Peter Kovacs: Greatly extend and improve the tes...
Lemon HG
hg at lemon.cs.elte.hu
Mon Jan 12 14:27:21 CET 2009
details: http://lemon.cs.elte.hu/hg/lemon/rev/a2fd8b8d0b30
changeset: 486:a2fd8b8d0b30
user: Peter Kovacs <kpeter [at] inf.elte.hu>
date: Mon Jan 12 07:52:48 2009 +0100
description:
Greatly extend and improve the test file for adaptors (#67)
- Add concept checks for the alterable, extendable, erasable and
clearable adaptors.
- Add test cases for modifying the underlying graphs through adaptors
whenever it is possible.
- Check the conversions between Node, Arc and Edge types.
- Add more test cases for the adaptor-specific functions and maps:
enable(), disable(), status(), forward(), backward(),
CombinedArcMap, CombinedNodeMap, ResidualCapacity etc.
- Use checkGraphIncEdgeArcLists() to simplify the test cases for
undirected graphs.
- Add test cases that use static graph structure (GridGraph) with
several adaptors combined.
- Add comments for the test cases.
diffstat:
1 file changed, 838 insertions(+), 336 deletions(-)
test/graph_adaptor_test.cc | 1174 +++++++++++++++++++++++++++++++-------------
diffs (truncated from 1578 to 300 lines):
diff --git a/test/graph_adaptor_test.cc b/test/graph_adaptor_test.cc
--- a/test/graph_adaptor_test.cc
+++ b/test/graph_adaptor_test.cc
@@ -16,35 +16,48 @@
*
*/
-#include<iostream>
-#include<lemon/concept_check.h>
+#include <iostream>
+#include <limits>
-#include<lemon/list_graph.h>
-#include<lemon/smart_graph.h>
-
-#include<lemon/concepts/digraph.h>
-#include<lemon/concepts/graph.h>
-
-#include<lemon/adaptors.h>
-
-#include <limits>
+#include <lemon/list_graph.h>
+#include <lemon/grid_graph.h>
#include <lemon/bfs.h>
#include <lemon/path.h>
-#include"test/test_tools.h"
-#include"test/graph_test.h"
+#include <lemon/concepts/digraph.h>
+#include <lemon/concepts/graph.h>
+#include <lemon/concepts/graph_components.h>
+#include <lemon/concepts/maps.h>
+#include <lemon/concept_check.h>
+
+#include <lemon/adaptors.h>
+
+#include "test/test_tools.h"
+#include "test/graph_test.h"
using namespace lemon;
void checkReverseDigraph() {
+ // Check concepts
checkConcept<concepts::Digraph, ReverseDigraph<concepts::Digraph> >();
+ checkConcept<concepts::Digraph, ReverseDigraph<ListDigraph> >();
+ checkConcept<concepts::AlterableDigraphComponent<>,
+ ReverseDigraph<ListDigraph> >();
+ checkConcept<concepts::ExtendableDigraphComponent<>,
+ ReverseDigraph<ListDigraph> >();
+ checkConcept<concepts::ErasableDigraphComponent<>,
+ ReverseDigraph<ListDigraph> >();
+ checkConcept<concepts::ClearableDigraphComponent<>,
+ ReverseDigraph<ListDigraph> >();
+ // Create a digraph and an adaptor
typedef ListDigraph Digraph;
typedef ReverseDigraph<Digraph> Adaptor;
Digraph digraph;
Adaptor adaptor(digraph);
+ // Add nodes and arcs to the original digraph
Digraph::Node n1 = digraph.addNode();
Digraph::Node n2 = digraph.addNode();
Digraph::Node n3 = digraph.addNode();
@@ -53,6 +66,7 @@
Digraph::Arc a2 = digraph.addArc(n1, n3);
Digraph::Arc a3 = digraph.addArc(n2, n3);
+ // Check the adaptor
checkGraphNodeList(adaptor, 3);
checkGraphArcList(adaptor, 3);
checkGraphConArcList(adaptor, 3);
@@ -71,18 +85,87 @@
checkGraphNodeMap(adaptor);
checkGraphArcMap(adaptor);
+ // Check the orientation of the arcs
for (Adaptor::ArcIt a(adaptor); a != INVALID; ++a) {
check(adaptor.source(a) == digraph.target(a), "Wrong reverse");
check(adaptor.target(a) == digraph.source(a), "Wrong reverse");
}
+
+ // Add and erase nodes and arcs in the digraph through the adaptor
+ Adaptor::Node n4 = adaptor.addNode();
+
+ Adaptor::Arc a4 = adaptor.addArc(n4, n3);
+ Adaptor::Arc a5 = adaptor.addArc(n2, n4);
+ Adaptor::Arc a6 = adaptor.addArc(n2, n4);
+ Adaptor::Arc a7 = adaptor.addArc(n1, n4);
+ Adaptor::Arc a8 = adaptor.addArc(n1, n2);
+
+ adaptor.erase(a1);
+ adaptor.erase(n3);
+
+ // Check the adaptor
+ checkGraphNodeList(adaptor, 3);
+ checkGraphArcList(adaptor, 4);
+ checkGraphConArcList(adaptor, 4);
+
+ checkGraphOutArcList(adaptor, n1, 2);
+ checkGraphOutArcList(adaptor, n2, 2);
+ checkGraphOutArcList(adaptor, n4, 0);
+
+ checkGraphInArcList(adaptor, n1, 0);
+ checkGraphInArcList(adaptor, n2, 1);
+ checkGraphInArcList(adaptor, n4, 3);
+
+ checkNodeIds(adaptor);
+ checkArcIds(adaptor);
+
+ checkGraphNodeMap(adaptor);
+ checkGraphArcMap(adaptor);
+
+ // Check the digraph
+ checkGraphNodeList(digraph, 3);
+ checkGraphArcList(digraph, 4);
+ checkGraphConArcList(digraph, 4);
+
+ checkGraphOutArcList(digraph, n1, 0);
+ checkGraphOutArcList(digraph, n2, 1);
+ checkGraphOutArcList(digraph, n4, 3);
+
+ checkGraphInArcList(digraph, n1, 2);
+ checkGraphInArcList(digraph, n2, 2);
+ checkGraphInArcList(digraph, n4, 0);
+
+ checkNodeIds(digraph);
+ checkArcIds(digraph);
+
+ checkGraphNodeMap(digraph);
+ checkGraphArcMap(digraph);
+
+ // Check the conversion of nodes and arcs
+ Digraph::Node nd = n4;
+ nd = n4;
+ Adaptor::Node na = n1;
+ na = n2;
+ Digraph::Arc ad = a4;
+ ad = a5;
+ Adaptor::Arc aa = a1;
+ aa = a2;
}
void checkSubDigraph() {
- checkConcept<concepts::Digraph,
- SubDigraph<concepts::Digraph,
- concepts::Digraph::NodeMap<bool>,
- concepts::Digraph::ArcMap<bool> > >();
+ // Check concepts
+ checkConcept<concepts::Digraph, SubDigraph<concepts::Digraph> >();
+ checkConcept<concepts::Digraph, SubDigraph<ListDigraph> >();
+ checkConcept<concepts::AlterableDigraphComponent<>,
+ SubDigraph<ListDigraph> >();
+ checkConcept<concepts::ExtendableDigraphComponent<>,
+ SubDigraph<ListDigraph> >();
+ checkConcept<concepts::ErasableDigraphComponent<>,
+ SubDigraph<ListDigraph> >();
+ checkConcept<concepts::ClearableDigraphComponent<>,
+ SubDigraph<ListDigraph> >();
+ // Create a digraph and an adaptor
typedef ListDigraph Digraph;
typedef Digraph::NodeMap<bool> NodeFilter;
typedef Digraph::ArcMap<bool> ArcFilter;
@@ -93,179 +176,16 @@
ArcFilter arc_filter(digraph);
Adaptor adaptor(digraph, node_filter, arc_filter);
+ // Add nodes and arcs to the original digraph and the adaptor
Digraph::Node n1 = digraph.addNode();
Digraph::Node n2 = digraph.addNode();
- Digraph::Node n3 = digraph.addNode();
+ Adaptor::Node n3 = adaptor.addNode();
+
+ node_filter[n1] = node_filter[n2] = node_filter[n3] = true;
Digraph::Arc a1 = digraph.addArc(n1, n2);
Digraph::Arc a2 = digraph.addArc(n1, n3);
- Digraph::Arc a3 = digraph.addArc(n2, n3);
-
- node_filter[n1] = node_filter[n2] = node_filter[n3] = true;
- arc_filter[a1] = arc_filter[a2] = arc_filter[a3] = true;
-
- checkGraphNodeList(adaptor, 3);
- checkGraphArcList(adaptor, 3);
- checkGraphConArcList(adaptor, 3);
-
- checkGraphOutArcList(adaptor, n1, 2);
- checkGraphOutArcList(adaptor, n2, 1);
- checkGraphOutArcList(adaptor, n3, 0);
-
- checkGraphInArcList(adaptor, n1, 0);
- checkGraphInArcList(adaptor, n2, 1);
- checkGraphInArcList(adaptor, n3, 2);
-
- checkNodeIds(adaptor);
- checkArcIds(adaptor);
-
- checkGraphNodeMap(adaptor);
- checkGraphArcMap(adaptor);
-
- arc_filter[a2] = false;
-
- checkGraphNodeList(adaptor, 3);
- checkGraphArcList(adaptor, 2);
- checkGraphConArcList(adaptor, 2);
-
- checkGraphOutArcList(adaptor, n1, 1);
- checkGraphOutArcList(adaptor, n2, 1);
- checkGraphOutArcList(adaptor, n3, 0);
-
- checkGraphInArcList(adaptor, n1, 0);
- checkGraphInArcList(adaptor, n2, 1);
- checkGraphInArcList(adaptor, n3, 1);
-
- checkNodeIds(adaptor);
- checkArcIds(adaptor);
-
- checkGraphNodeMap(adaptor);
- checkGraphArcMap(adaptor);
-
- node_filter[n1] = false;
-
- checkGraphNodeList(adaptor, 2);
- checkGraphArcList(adaptor, 1);
- checkGraphConArcList(adaptor, 1);
-
- checkGraphOutArcList(adaptor, n2, 1);
- checkGraphOutArcList(adaptor, n3, 0);
-
- checkGraphInArcList(adaptor, n2, 0);
- checkGraphInArcList(adaptor, n3, 1);
-
- checkNodeIds(adaptor);
- checkArcIds(adaptor);
-
- checkGraphNodeMap(adaptor);
- checkGraphArcMap(adaptor);
-
- node_filter[n1] = node_filter[n2] = node_filter[n3] = false;
- arc_filter[a1] = arc_filter[a2] = arc_filter[a3] = false;
-
- checkGraphNodeList(adaptor, 0);
- checkGraphArcList(adaptor, 0);
- checkGraphConArcList(adaptor, 0);
-
- checkNodeIds(adaptor);
- checkArcIds(adaptor);
-
- checkGraphNodeMap(adaptor);
- checkGraphArcMap(adaptor);
-}
-
-void checkFilterNodes1() {
- checkConcept<concepts::Digraph,
- FilterNodes<concepts::Digraph,
- concepts::Digraph::NodeMap<bool> > >();
-
- typedef ListDigraph Digraph;
- typedef Digraph::NodeMap<bool> NodeFilter;
- typedef FilterNodes<Digraph, NodeFilter> Adaptor;
-
- Digraph digraph;
- NodeFilter node_filter(digraph);
- Adaptor adaptor(digraph, node_filter);
-
- Digraph::Node n1 = digraph.addNode();
- Digraph::Node n2 = digraph.addNode();
- Digraph::Node n3 = digraph.addNode();
-
- Digraph::Arc a1 = digraph.addArc(n1, n2);
- Digraph::Arc a2 = digraph.addArc(n1, n3);
- Digraph::Arc a3 = digraph.addArc(n2, n3);
-
- node_filter[n1] = node_filter[n2] = node_filter[n3] = true;
-
- checkGraphNodeList(adaptor, 3);
- checkGraphArcList(adaptor, 3);
- checkGraphConArcList(adaptor, 3);
-
- checkGraphOutArcList(adaptor, n1, 2);
- checkGraphOutArcList(adaptor, n2, 1);
- checkGraphOutArcList(adaptor, n3, 0);
-
- checkGraphInArcList(adaptor, n1, 0);
- checkGraphInArcList(adaptor, n2, 1);
- checkGraphInArcList(adaptor, n3, 2);
-
- checkNodeIds(adaptor);
- checkArcIds(adaptor);
-
- checkGraphNodeMap(adaptor);
- checkGraphArcMap(adaptor);
-
- node_filter[n1] = false;
-
- checkGraphNodeList(adaptor, 2);
- checkGraphArcList(adaptor, 1);
- checkGraphConArcList(adaptor, 1);
More information about the Lemon-commits
mailing list