test/graph_utils_test.cc
author deba
Fri, 14 Oct 2005 11:03:40 +0000
changeset 1728 eb8bb91ba9e2
parent 1568 f694f75de683
child 1729 06f939455cb1
permissions -rw-r--r--
Updating tests
     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     const int nodeNum = 10;
    82     const int edgeNum = 100;
    83     ListGraph graph;
    84     InDegMap<ListGraph> inDeg(graph);
    85     std::vector<ListGraph::Node> nodes(nodeNum);
    86     for (int i = 0; i < nodeNum; ++i) {
    87       nodes[i] = graph.addNode();
    88     }
    89     std::vector<ListGraph::Edge> edges(edgeNum);
    90     for (int i = 0; i < edgeNum; ++i) {
    91       edges[i] = 
    92 	graph.addEdge(nodes[urandom(nodeNum)], nodes[urandom(nodeNum)]);
    93     }
    94     for (int i = 0; i < nodeNum; ++i) {
    95       check(inDeg[nodes[i]] == countInEdges(graph, nodes[i]), 
    96 	    "Wrong in degree map");
    97     }
    98     for (int i = 0; i < edgeNum; ++i) {
    99       graph.changeTarget(edges[i], nodes[urandom(nodeNum)]);
   100     }
   101     for (int i = 0; i < nodeNum; ++i) {
   102       check(inDeg[nodes[i]] == countInEdges(graph, nodes[i]),
   103 	    "Wrong in degree map");
   104     }
   105     for (int i = 0; i < edgeNum; ++i) {
   106       graph.changeSource(edges[i], nodes[urandom(nodeNum)]);
   107     }
   108     for (int i = 0; i < nodeNum; ++i) {
   109       check(inDeg[nodes[i]] == countInEdges(graph, nodes[i]), 
   110 	    "Wrong in degree map");
   111     }
   112     for (int i = 0; i < edgeNum; ++i) {
   113       graph.reverseEdge(edges[i]);
   114     }
   115     for (int i = 0; i < nodeNum; ++i) {
   116       check(inDeg[nodes[i]] == countInEdges(graph, nodes[i]), 
   117 	    "Wrong in degree map");
   118     }
   119   }
   120 
   121   ///Everything is OK
   122   std::cout << __FILE__ ": All tests passed.\n";
   123 
   124   return 0;
   125 }