test/graph_test.h
author alpar
Wed, 04 Jan 2006 13:31:59 +0000
changeset 1875 98698b69a902
parent 1728 eb8bb91ba9e2
child 1956 a055123339d5
permissions -rw-r--r--
Happy new year to LEMON
     1 /* -*- C++ -*-
     2  * test/graph_test.h - Part of LEMON, a generic C++ optimization library
     3  *
     4  * Copyright (C) 2006 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 #include <lemon/graph_utils.h>
    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   template <class Graph> 
    84   void checkGraphIterators(const Graph& graph) {
    85     typedef typename Graph::Node Node;
    86     typedef typename Graph::NodeIt NodeIt;
    87     typedef typename Graph::Edge Edge;
    88     typedef typename Graph::EdgeIt EdgeIt;
    89     typedef typename Graph::InEdgeIt InEdgeIt;
    90     typedef typename Graph::OutEdgeIt OutEdgeIt;
    91     typedef ConEdgeIt<Graph> ConEdgeIt;
    92     
    93     for (NodeIt it(graph); it != INVALID; ++it) {}
    94   }
    95 
    96   ///\file
    97   ///\todo Check target(), source() as well;
    98 
    99   
   100 } //namespace lemon
   101 
   102 
   103 #endif