COIN-OR::LEMON - Graph Library

Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • test/dijkstra_test.cc

    r228 r210  
    2020#include <lemon/smart_graph.h>
    2121#include <lemon/list_graph.h>
    22 #include <lemon/lgf_reader.h>
    23 
     22#include <lemon/graph_utils.h>
    2423#include <lemon/dijkstra.h>
    2524#include <lemon/path.h>
     
    2928
    3029using namespace lemon;
    31 
    32 char test_lgf[] =
    33   "@nodes\n"
    34   "label\n"
    35   "0\n"
    36   "1\n"
    37   "2\n"
    38   "3\n"
    39   "4\n"
    40   "@arcs\n"
    41   "     label length\n"
    42   "0 1  0     1\n"
    43   "1 2  1     1\n"
    44   "2 3  2     1\n"
    45   "0 3  4     5\n"
    46   "0 3  5     10\n"
    47   "0 3  6     7\n"
    48   "4 2  7     1\n"
    49   "@attributes\n"
    50   "source 0\n"
    51   "target 3\n";
    5230
    5331void checkDijkstraCompile()
     
    10886  Node s, t;
    10987  LengthMap length(G);
     88  PetStruct<Digraph> ps = addPetersen(G, 5);
    11089
    111   std::istringstream input(test_lgf);
    112   digraphReader(input, G).
    113     arcMap("length", length).
    114     node("source", s).
    115     node("target", t).
    116     run();
     90  for(int i=0;i<5;i++) {
     91    length[ps.outcir[i]]=4;
     92    length[ps.incir[i]]=1;
     93    length[ps.chords[i]]=10;
     94  }
     95  s=ps.outer[0];
     96  t=ps.inner[1];
    11797
    11898  Dijkstra<Digraph, LengthMap>
     
    120100  dijkstra_test.run(s);
    121101
    122   check(dijkstra_test.dist(t)==3,"Dijkstra found a wrong path.");
     102  check(dijkstra_test.dist(t)==13,"Dijkstra found a wrong path.");
    123103
    124104  Path<Digraph> p = dijkstra_test.path(t);
    125   check(p.length()==3,"getPath() found a wrong path.");
     105  check(p.length()==4,"getPath() found a wrong path.");
    126106  check(checkPath(G, p),"path() found a wrong path.");
    127107  check(pathSource(G, p) == s,"path() found a wrong path.");
     
    137117  }
    138118
    139   for(NodeIt v(G); v!=INVALID; ++v) {
    140     if (dijkstra_test.reached(v)) {
    141       check(v==s || dijkstra_test.predArc(v)!=INVALID, "Wrong tree.");
    142       if (dijkstra_test.predArc(v)!=INVALID ) {
    143         Arc e=dijkstra_test.predArc(v);
    144         Node u=G.source(e);
    145         check(u==dijkstra_test.predNode(v),"Wrong tree.");
    146         check(dijkstra_test.dist(v) - dijkstra_test.dist(u) == length[e],
    147               "Wrong distance! Difference: " <<
    148               std::abs(dijkstra_test.dist(v)-dijkstra_test.dist(u)-length[e]));
    149       }
     119  for(NodeIt v(G); v!=INVALID; ++v){
     120    check(dijkstra_test.reached(v),"Each node should be reached.");
     121    if ( dijkstra_test.predArc(v)!=INVALID ) {
     122      Arc e=dijkstra_test.predArc(v);
     123      Node u=G.source(e);
     124      check(u==dijkstra_test.predNode(v),"Wrong tree.");
     125      check(dijkstra_test.dist(v) - dijkstra_test.dist(u) == length[e],
     126            "Wrong distance! Difference: " <<
     127            std::abs(dijkstra_test.dist(v)-dijkstra_test.dist(u)-length[e]));
    150128    }
    151129  }
Note: See TracChangeset for help on using the changeset viewer.