# HG changeset patch
# User deba
# Date 1109956811 0
# Node ID 7bce0ef61d6b5549aebee3aaef44d7973c2ab42c
# Parent  c3585aec8cb3a92e4b191148dc192b9f36e8a267
Change test to be up to date.
Deprecated test, it should be used rather the heap_test.cc and heap_test.h.

diff -r c3585aec8cb3 -r 7bce0ef61d6b src/test/dijkstra_heap_test.cc
--- a/src/test/dijkstra_heap_test.cc	Fri Mar 04 17:18:25 2005 +0000
+++ b/src/test/dijkstra_heap_test.cc	Fri Mar 04 17:20:11 2005 +0000
@@ -31,49 +31,81 @@
 #include <math.h>
 
 #include <lemon/smart_graph.h>
+
+#include <lemon/graph_writer.h>
+#include <lemon/map_utils.h>
+
+
 #include <lemon/dimacs.h>
 #include <lemon/dijkstra.h>
 #include <lemon/time_measure.h>
+#include <lemon/graph_utils.h>
+
 #include <lemon/bin_heap.h>
 #include <lemon/fib_heap.h>
+#include <lemon/radix_heap.h>
 
 using namespace lemon;
 
-int main(int, char **) {
+typedef ListGraph Graph;
+
+typedef Graph::Edge Edge;
+typedef Graph::Node Node;
+typedef Graph::EdgeIt EdgeIt;
+typedef Graph::NodeIt NodeIt;
+typedef Graph::EdgeMap<int> LengthMap;
+
+
+struct FibTraits : public DijkstraDefaultTraits<Graph, LengthMap> {
+  typedef FibHeap<Graph::Node, LengthMap::Value, Graph::NodeMap<int> > Heap;
+};
+
+struct RadixTraits : public DijkstraDefaultTraits<Graph, LengthMap> {
+  typedef RadixHeap<Graph::Node, Graph::NodeMap<int> > Heap;
+};
+
+
+int main(int argc, const char* argv[]) {
   
-  typedef SmartGraph Graph;
 
-  typedef Graph::Edge Edge;
-  typedef Graph::Node Node;
-  typedef Graph::EdgeIt EdgeIt;
-  typedef Graph::NodeIt NodeIt;
-  typedef Graph::template EdgeMap<int> LengthMap;
+  Graph graph;
+  Node s, t;
+  LengthMap cap(graph);
+  readDimacs(std::cin, graph, cap, s, t);
+  Timer ts;
 
-  Graph G;
-  Node s, t;
-  LengthMap cap(G);
-  readDimacsMaxFlow(std::cin, G, s, t, cap);
-  Timer ts;
+  GraphWriter<Graph> writer(std::cout, graph);
+
+  IdMap<Graph, Node> nodeIdMap(graph);
+  writer.addNodeMap("id", nodeIdMap);
+
+  IdMap<Graph, Edge> edgeIdMap(graph);
+  writer.addEdgeMap("id", edgeIdMap);
+
+  writer.addEdgeMap("cap", cap);
+
+  writer.run();
     
   std::cout <<
     "\n  Testing dijkstra.h with binary heap implementation bin_heap.h,"
 	    <<std::endl;
   std::cout<<"  on a graph with " << 
-    G.nodeNum() << " nodes and " << G.edgeNum() << " edges..."
+    countNodes(graph) << " nodes and " << countEdges(graph) << " edges..."
 	   << std::endl<<std::endl;
-  
+
+
   Dijkstra<Graph, LengthMap> 
-    dijkstra_test(G, cap);
+    dijkstra_test(graph, cap);
   ts.reset();
-  dijkstra_test.run(s);
+   dijkstra_test.run(s);
   std::cout << "elapsed time: " << ts << std::endl;
-  
+
   int error1=0;
   int error2=0;
 
-  for(EdgeIt e(G); e!=INVALID; ++e) {
-    Node u=G.source(e);
-    Node v=G.target(e);
+  for(EdgeIt e(graph); e!=INVALID; ++e) {
+    Node u=graph.source(e); 
+    Node v=graph.target(e);
     if ( dijkstra_test.dist(v) - dijkstra_test.dist(u) > cap[e] )
       if ( dijkstra_test.reached(u) ) {
 	std::cout<<"Error! dist(target)-dist(source)- edge_length= " 
@@ -84,10 +116,10 @@
   }
 
   NodeIt v;
-  for(NodeIt v(G); v!=INVALID; ++v) {
+  for(NodeIt v(graph); v!=INVALID; ++v) {
     if ( dijkstra_test.reached(v) ) {
       Edge e=dijkstra_test.pred(v);
-      Node u=G.source(e);
+      Node u=graph.source(e);
       if ( dijkstra_test.dist(v) - dijkstra_test.dist(u) != cap[e] ) {
 	std::cout<<"Error in a shortest path tree edge! Difference: " 
 		 <<std::abs(dijkstra_test.dist(v) - dijkstra_test.dist(u) 
@@ -108,11 +140,12 @@
     "\n\n  Testing dijkstra.h with Fibonacci heap implementation fib_heap.h,"
 	    <<std::endl;
   std::cout<<"  on a graph with " << 
-    G.nodeNum() << " nodes and " << G.edgeNum() << " edges..."
+    countNodes(graph) << " nodes and " << countEdges(graph) << " edges..."
 	   << std::endl<<std::endl;
   
-  Dijkstra<Graph, LengthMap, FibHeap> 
-    dijkstra_test2(G, cap);
+
+  Dijkstra<Graph, LengthMap, FibTraits> 
+    dijkstra_test2(graph, cap);
   ts.reset();
   dijkstra_test2.run(s);
   std::cout << "elapsed time: " << ts << std::endl;
@@ -120,9 +153,9 @@
   error1=0;
   error2=0;
 
-  for(EdgeIt e(G); e!=INVALID; ++e) {
-    Node u=G.source(e);
-    Node v=G.target(e);
+  for(EdgeIt e(graph); e!=INVALID; ++e) {
+    Node u=graph.source(e);
+    Node v=graph.target(e);
     if ( dijkstra_test2.dist(v) - dijkstra_test2.dist(u) > cap[e] )
       if ( dijkstra_test2.reached(u) ) {
 	std::cout<<"Error! dist(target)-dist(source)- edge_length= " 
@@ -132,10 +165,10 @@
       }
   }
 
-  for(NodeIt n(G); v!=INVALID; ++v) {
+  for(NodeIt n(graph); v!=INVALID; ++v) {
     if ( dijkstra_test2.reached(v) ) {
       Edge e=dijkstra_test2.pred(v);
-      Node u=G.source(e);
+      Node u=graph.source(e);
       if ( dijkstra_test2.dist(v) - dijkstra_test2.dist(u) != cap[e] ) {
 	std::cout<<"Error in a shortest path tree edge! Difference: " 
 		 <<std::abs(dijkstra_test2.dist(v) - dijkstra_test2.dist(u) 
@@ -149,6 +182,52 @@
   std::cout << error1 << " non-tree and " << error2 
 	    << " shortest path tree edge is erroneous."<<std::endl;
 
+  std::cout <<
+    "\n\n  Testing dijkstra.h with Radix heap implementation radix_heap.h,"
+	    <<std::endl;
+  std::cout<<"  on a graph with " << 
+    countNodes(graph) << " nodes and " << countEdges(graph) << " edges..."
+	   << std::endl<<std::endl;
+
+
+  Dijkstra<Graph, LengthMap, RadixTraits> 
+    dijkstra_test3(graph, cap);
+  ts.reset();
+  dijkstra_test3.run(s);
+  std::cout << "elapsed time: " << ts << std::endl;
+  
+
+  error1=0;
+  error2=0;
+
+  for(EdgeIt e(graph); e!=INVALID; ++e) {
+    Node u=graph.source(e);
+    Node v=graph.target(e);
+    if ( dijkstra_test3.dist(v) - dijkstra_test3.dist(u) > cap[e] )
+      if ( dijkstra_test3.reached(u) ) {
+	std::cout<<"Error! dist(target)-dist(source)- edge_length= " 
+		 <<dijkstra_test3.dist(v) - dijkstra_test3.dist(u) 
+	  - cap[e]<<std::endl;
+	++error1;
+      }
+  }
+
+  for(NodeIt n(graph); v!=INVALID; ++v) {
+    if ( dijkstra_test3.reached(v) ) {
+      Edge e=dijkstra_test3.pred(v);
+      Node u=graph.source(e);
+      if ( dijkstra_test3.dist(v) - dijkstra_test3.dist(u) != cap[e] ) {
+	std::cout<<"Error in a shortest path tree edge! Difference: " 
+		 <<std::abs(dijkstra_test3.dist(v) - dijkstra_test3.dist(u) 
+			    - cap[e])<<std::endl;
+	++error2;
+      }
+    }
+  }
+
+
+  std::cout << error1 << " non-tree and " << error2 
+	    << " shortest path tree edge is erroneous."<<std::endl;
 
   return 0;
 }