[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