test/dfs_test.cc
changeset 228 b6732e0d38c5
parent 209 765619b7cbb2
child 278 931190050520
     1.1 --- a/test/dfs_test.cc	Fri Jul 18 17:26:12 2008 +0100
     1.2 +++ b/test/dfs_test.cc	Mon Jul 21 16:30:28 2008 +0200
     1.3 @@ -19,6 +19,8 @@
     1.4  #include <lemon/concepts/digraph.h>
     1.5  #include <lemon/smart_graph.h>
     1.6  #include <lemon/list_graph.h>
     1.7 +#include <lemon/lgf_reader.h>
     1.8 +
     1.9  #include <lemon/dfs.h>
    1.10  #include <lemon/path.h>
    1.11  
    1.12 @@ -27,6 +29,30 @@
    1.13  
    1.14  using namespace lemon;
    1.15  
    1.16 +char test_lgf[] =
    1.17 +  "@nodes\n"
    1.18 +  "label\n"
    1.19 +  "0\n"
    1.20 +  "1\n"
    1.21 +  "2\n"
    1.22 +  "3\n"
    1.23 +  "4\n"
    1.24 +  "5\n"
    1.25 +  "6\n"
    1.26 +  "@arcs\n"
    1.27 +  "     label\n"
    1.28 +  "0 1  0\n"
    1.29 +  "1 2  1\n"
    1.30 +  "2 3  2\n"
    1.31 +  "1 4  3\n"
    1.32 +  "4 2  4\n"
    1.33 +  "4 5  5\n"
    1.34 +  "5 0  6\n"
    1.35 +  "6 3  7\n"
    1.36 +  "@attributes\n"
    1.37 +  "source 0\n"
    1.38 +  "target 5\n";
    1.39 +
    1.40  void checkDfsCompile()
    1.41  {
    1.42    typedef concepts::Digraph Digraph;
    1.43 @@ -39,7 +65,6 @@
    1.44    bool b;
    1.45    DType::DistMap d(G);
    1.46    DType::PredMap p(G);
    1.47 -  //  DType::PredNodeMap pn(G);
    1.48  
    1.49    DType dfs_test(G);
    1.50  
    1.51 @@ -50,7 +75,6 @@
    1.52    n  = dfs_test.predNode(n);
    1.53    d  = dfs_test.distMap();
    1.54    p  = dfs_test.predMap();
    1.55 -  //  pn = dfs_test.predNodeMap();
    1.56    b  = dfs_test.reached(n);
    1.57  
    1.58    Path<Digraph> pp = dfs_test.path(n);
    1.59 @@ -80,10 +104,12 @@
    1.60  
    1.61    Digraph G;
    1.62    Node s, t;
    1.63 -  PetStruct<Digraph> ps = addPetersen(G, 5);
    1.64  
    1.65 -  s=ps.outer[2];
    1.66 -  t=ps.inner[0];
    1.67 +  std::istringstream input(test_lgf);
    1.68 +  digraphReader(input, G).
    1.69 +    node("source", s).
    1.70 +    node("target", t).
    1.71 +    run();
    1.72  
    1.73    Dfs<Digraph> dfs_test(G);
    1.74    dfs_test.run(s);
    1.75 @@ -95,14 +121,16 @@
    1.76    check(pathTarget(G, p) == t,"path() found a wrong path.");
    1.77  
    1.78    for(NodeIt v(G); v!=INVALID; ++v) {
    1.79 -    check(dfs_test.reached(v),"Each node should be reached.");
    1.80 -    if ( dfs_test.predArc(v)!=INVALID ) {
    1.81 -      Arc e=dfs_test.predArc(v);
    1.82 -      Node u=G.source(e);
    1.83 -      check(u==dfs_test.predNode(v),"Wrong tree.");
    1.84 -      check(dfs_test.dist(v) - dfs_test.dist(u) == 1,
    1.85 -            "Wrong distance. (" << dfs_test.dist(u) << "->"
    1.86 -            <<dfs_test.dist(v) << ')');
    1.87 +    if (dfs_test.reached(v)) {
    1.88 +      check(v==s || dfs_test.predArc(v)!=INVALID, "Wrong tree.");
    1.89 +      if (dfs_test.predArc(v)!=INVALID ) {
    1.90 +        Arc e=dfs_test.predArc(v);
    1.91 +        Node u=G.source(e);
    1.92 +        check(u==dfs_test.predNode(v),"Wrong tree.");
    1.93 +        check(dfs_test.dist(v) - dfs_test.dist(u) == 1,
    1.94 +              "Wrong distance. (" << dfs_test.dist(u) << "->"
    1.95 +              <<dfs_test.dist(v) << ')');
    1.96 +      }
    1.97      }
    1.98    }
    1.99  }