src/test/graph_test.h
changeset 1435 8e85e6bbefdf
parent 1164 80bb73097736
equal deleted inserted replaced
12:19cd20527790 -1:000000000000
     1 /* -*- C++ -*-
       
     2  * src/test/graph_test.h - Part of LEMON, a generic C++ optimization library
       
     3  *
       
     4  * Copyright (C) 2005 Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
       
     5  * (Egervary Research Group on Combinatorial Optimization, EGRES).
       
     6  *
       
     7  * Permission to use, modify and distribute this software is granted
       
     8  * provided that this copyright notice appears in all copies. For
       
     9  * precise terms see the accompanying LICENSE file.
       
    10  *
       
    11  * This software is provided "AS IS" with no warranty of any kind,
       
    12  * express or implied, and with no claim as to its suitability for any
       
    13  * purpose.
       
    14  *
       
    15  */
       
    16 #ifndef LEMON_TEST_GRAPH_TEST_H
       
    17 #define LEMON_TEST_GRAPH_TEST_H
       
    18 
       
    19 
       
    20 #include "test_tools.h"
       
    21 
       
    22 //! \ingroup misc
       
    23 //! \file
       
    24 //! \brief Some utility and test cases to test graph classes.
       
    25 namespace lemon {
       
    26 
       
    27   template<class Graph> void checkGraphNodeList(Graph &G, int nn)
       
    28   {
       
    29     typename Graph::NodeIt n(G);
       
    30     for(int i=0;i<nn;i++) {
       
    31       check(n!=INVALID,"Wrong Node list linking.");
       
    32       ++n;
       
    33     }
       
    34     check(n==INVALID,"Wrong Node list linking.");
       
    35   }
       
    36 
       
    37   template<class Graph>
       
    38   void checkGraphEdgeList(Graph &G, int nn)
       
    39   {
       
    40     typedef typename Graph::EdgeIt EdgeIt;
       
    41 
       
    42     EdgeIt e(G);
       
    43     for(int i=0;i<nn;i++) {
       
    44       check(e!=INVALID,"Wrong Edge list linking.");
       
    45       ++e;
       
    46     }
       
    47     check(e==INVALID,"Wrong Edge list linking.");
       
    48   }
       
    49 
       
    50   template<class Graph> 
       
    51   void checkGraphOutEdgeList(Graph &G, typename Graph::Node n, int nn)
       
    52   {
       
    53     typename Graph::OutEdgeIt e(G,n);
       
    54     for(int i=0;i<nn;i++) {
       
    55       check(e!=INVALID,"Wrong OutEdge list linking.");
       
    56       check(n==G.source(e), "Wrong OutEdge list linking.");
       
    57       ++e;
       
    58     }
       
    59     check(e==INVALID,"Wrong OutEdge list linking.");
       
    60   }
       
    61 
       
    62   template<class Graph> void 
       
    63   checkGraphInEdgeList(Graph &G, typename Graph::Node n, int nn)
       
    64   {
       
    65     typename Graph::InEdgeIt e(G,n);
       
    66     for(int i=0;i<nn;i++) {
       
    67       check(e!=INVALID,"Wrong InEdge list linking.");
       
    68       check(n==G.target(e), "Wrong InEdge list linking.");
       
    69       ++e;
       
    70     }
       
    71     check(e==INVALID,"Wrong InEdge list linking.");
       
    72   }
       
    73 
       
    74   template <class Graph> 
       
    75   void checkGraph() {
       
    76     const int num = 5;
       
    77     Graph G;
       
    78     addPetersen(G, num);
       
    79     bidirGraph(G);
       
    80     checkBidirPetersen(G, num);
       
    81   }
       
    82 
       
    83   ///\file
       
    84   ///\todo Check target(), source() as well;
       
    85 
       
    86   
       
    87 } //namespace lemon
       
    88 
       
    89 
       
    90 #endif