diff -r 0d5a628cb184 -r f27d21767d38 src/test/dijkstra_heap_test.cc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/test/dijkstra_heap_test.cc Fri Apr 23 18:48:56 2004 +0000 @@ -0,0 +1,137 @@ +//Tests dijsktra.h with two heap implementations: +//the default binary heap of bin_heap.h, and the +//Fibonacci heap of fib_heap.h. + +//The input is a graph in standard dimacs format from the standard input (like +//in /hugo_loc/testfiles/dimacs). It runs dijkstra.h on this graph with +//both heaps, checking two postconditions: + +//- if the edges e=uv of the shortest path tree reported by dijkstra.h have +//dist(v)-dist(u)=length(e) + +// - if all edges e=uv with u reachable from the root have +//dist(v)-dist(u)>=length(e) +#include +#include + +#include +#include +#include +#include +#include +#include + +using namespace hugo; + +int main(int, char **) { + + typedef SmartGraph Graph; + + typedef Graph::Edge Edge; + typedef Graph::Node Node; + typedef Graph::EdgeIt EdgeIt; + typedef Graph::NodeIt NodeIt; + typedef Graph::EdgeMap LengthMap; + + Graph G; + Node s, t; + LengthMap cap(G); + readDimacsMaxFlow(std::cin, G, s, t, cap); + Timer ts; + + std::cout << + "\n Testing dijkstra.h with binary heap implementation bin_heap.h," + < + dijkstra_test(G, cap); + ts.reset(); + dijkstra_test.run(s); + std::cout << "elapsed time: " << ts << std::endl; + + int error1=0; + int error2=0; + + FOR_EACH_LOC ( EdgeIt, e, G) { + Node u=G.tail(e); + Node v=G.head(e); + if ( dijkstra_test.dist(v) - dijkstra_test.dist(u) > cap[e] ) + if ( dijkstra_test.reached(u) ) { + std::cout<<"Error! dist(head)-dist(tail)- edge_length= " + < + dijkstra_test2(G, cap); + ts.reset(); + dijkstra_test2.run(s); + std::cout << "elapsed time: " << ts << std::endl; + + error1=0; + error2=0; + + FOR_EACH_LOC ( EdgeIt, e, G) { + Node u=G.tail(e); + Node v=G.head(e); + if ( dijkstra_test2.dist(v) - dijkstra_test2.dist(u) > cap[e] ) + if ( dijkstra_test2.reached(u) ) { + std::cout<<"Error! dist(head)-dist(tail)- edge_length= " + <