test/graph_utils_test.cc
author alpar
Tue, 30 Aug 2005 13:48:40 +0000
changeset 1664 72f1f24b73c9
parent 1459 2ee881cf30a8
child 1728 eb8bb91ba9e2
permissions -rw-r--r--
Bugfix: DFS crashed if the source did not have an outgoing edge.
     1 // -*- c++ -*-
     2 
     3 #include <iostream>
     4 #include <vector>
     5 
     6 #include <lemon/graph_utils.h>
     7 
     8 #include <lemon/list_graph.h>
     9 #include <lemon/smart_graph.h>
    10 #include <lemon/full_graph.h>
    11 
    12 #include "test_tools.h"
    13 #include "graph_utils_test.h"
    14 
    15 
    16 using namespace lemon;
    17 
    18 template<class Graph>
    19 void checkSnapDeg() 
    20 {
    21   Graph g;
    22   typename Graph::Node n1=g.addNode();
    23   typename Graph::Node n2=g.addNode();
    24    
    25   InDegMap<Graph> ind(g);
    26  
    27   g.addEdge(n1,n2);
    28   
    29   typename Graph::SnapShot snap(g);
    30   
    31   OutDegMap<Graph> outd(g);
    32   
    33   check(ind[n1]==0 && ind[n2]==1, "Wrong InDegMap value.");
    34   check(outd[n1]==1 && outd[n2]==0, "Wrong OutDegMap value.");
    35 
    36   g.addEdge(n1,n2);
    37   g.addEdge(n2,n1);
    38  
    39   check(ind[n1]==1 && ind[n2]==2, "Wrong InDegMap value.");
    40   check(outd[n1]==2 && outd[n2]==1, "Wrong OutDegMap value.");
    41 
    42   snap.restore();
    43 
    44   check(ind[n1]==0 && ind[n2]==1, "Wrong InDegMap value.");
    45   check(outd[n1]==1 && outd[n2]==0, "Wrong OutDegMap value.");
    46   
    47 }
    48 
    49 int main() {
    50   ///\file
    51   { // checking list graph
    52     checkGraphCounters<ListGraph>();
    53     checkFindEdge<ListGraph>();
    54   }
    55   { // checking smart graph
    56     checkGraphCounters<SmartGraph>();
    57     checkFindEdge<SmartGraph>();
    58   }
    59   {
    60     int num = 5;
    61     FullGraph fg(num);
    62     check(countNodes(fg) == num, "FullGraph: wrong node number.");
    63     check(countEdges(fg) == num*num, "FullGraph: wrong edge number.");
    64     for (FullGraph::NodeIt src(fg); src != INVALID; ++src) {
    65       for (FullGraph::NodeIt trg(fg); trg != INVALID; ++trg) {
    66 	ConEdgeIt<FullGraph> con(fg, src, trg);
    67 	check(con != INVALID, "There is no connecting edge.");
    68 	check(fg.source(con) == src, "Wrong source.");
    69 	check(fg.target(con) == trg, "Wrong target.");
    70 	check(++con == INVALID, "There is more connecting edge.");
    71       }
    72     }
    73   }
    74 
    75   //check In/OutDegMap (and SnapShot feature)
    76 
    77   checkSnapDeg<ListGraph>();
    78   checkSnapDeg<SmartGraph>();
    79   
    80 
    81   ///Everything is OK
    82   std::cout << __FILE__ ": All tests passed.\n";
    83 
    84   return 0;
    85 }