COIN-OR::LEMON - Graph Library

Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • test/dijkstra_test.cc

    r210 r228  
    2020#include <lemon/smart_graph.h>
    2121#include <lemon/list_graph.h>
    22 #include <lemon/graph_utils.h>
     22#include <lemon/lgf_reader.h>
     23
    2324#include <lemon/dijkstra.h>
    2425#include <lemon/path.h>
     
    2829
    2930using namespace lemon;
     31
     32char 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";
    3052
    3153void checkDijkstraCompile()
     
    86108  Node s, t;
    87109  LengthMap length(G);
    88   PetStruct<Digraph> ps = addPetersen(G, 5);
    89110
    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];
     111  std::istringstream input(test_lgf);
     112  digraphReader(input, G).
     113    arcMap("length", length).
     114    node("source", s).
     115    node("target", t).
     116    run();
    97117
    98118  Dijkstra<Digraph, LengthMap>
     
    100120  dijkstra_test.run(s);
    101121
    102   check(dijkstra_test.dist(t)==13,"Dijkstra found a wrong path.");
     122  check(dijkstra_test.dist(t)==3,"Dijkstra found a wrong path.");
    103123
    104124  Path<Digraph> p = dijkstra_test.path(t);
    105   check(p.length()==4,"getPath() found a wrong path.");
     125  check(p.length()==3,"getPath() found a wrong path.");
    106126  check(checkPath(G, p),"path() found a wrong path.");
    107127  check(pathSource(G, p) == s,"path() found a wrong path.");
     
    117137  }
    118138
    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]));
     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      }
    128150    }
    129151  }
Note: See TracChangeset for help on using the changeset viewer.