src/test/undir_graph_test.cc
changeset 1435 8e85e6bbefdf
parent 1307 d4acebef7276
equal deleted inserted replaced
7:eb5483afd796 -1:000000000000
     1 // -*- C++ -*-
       
     2 
       
     3 #include <lemon/bits/undir_graph_extender.h>
       
     4 #include <lemon/concept/undir_graph.h>
       
     5 #include <lemon/list_graph.h>
       
     6 #include <lemon/smart_graph.h>
       
     7 #include <lemon/full_graph.h>
       
     8 
       
     9 #include <lemon/graph_utils.h>
       
    10 
       
    11 #include "test_tools.h"
       
    12 
       
    13 
       
    14 using namespace lemon;
       
    15 using namespace lemon::concept;
       
    16 
       
    17 void check_concepts() {
       
    18   typedef UndirGraphExtender<ListGraphBase> UndirListGraphBase;
       
    19 
       
    20   typedef IterableUndirGraphExtender<
       
    21     AlterableUndirGraphExtender<UndirListGraphBase> > IterableUndirListGraph;
       
    22 
       
    23   typedef MappableUndirGraphExtender<IterableUndirListGraph>
       
    24     MappableUndirListGraph;
       
    25 
       
    26   typedef ErasableUndirGraphExtender<
       
    27     ClearableUndirGraphExtender<
       
    28     ExtendableUndirGraphExtender<MappableUndirListGraph> > > Graph;
       
    29 
       
    30   checkConcept<BaseIterableUndirGraphConcept, Graph>();
       
    31   checkConcept<IterableUndirGraphConcept, Graph>();
       
    32   checkConcept<MappableUndirGraphConcept, Graph>();
       
    33 
       
    34   checkConcept<UndirGraph, Graph>();
       
    35   checkConcept<ErasableUndirGraph, Graph>();
       
    36 
       
    37   checkConcept<UndirGraph, UndirListGraph>();
       
    38   checkConcept<ErasableUndirGraph, UndirListGraph>();
       
    39 
       
    40   checkConcept<UndirGraph, UndirSmartGraph>();
       
    41   checkConcept<ExtendableUndirGraph, UndirSmartGraph>();
       
    42 
       
    43   checkConcept<UndirGraph, UndirGraph>();
       
    44 }
       
    45 
       
    46 template <typename Graph>
       
    47 void check_item_counts(Graph &g, int n, int e) {
       
    48   check(countNodes(g)==n, "Wrong node number.");
       
    49   check(countEdges(g)==2*e, "Wrong edge number.");
       
    50 }
       
    51 
       
    52 template <typename Graph>
       
    53 void print_items(Graph &g) {
       
    54 
       
    55   typedef typename Graph::NodeIt NodeIt;
       
    56   typedef typename Graph::UndirEdgeIt UEdgeIt;
       
    57   typedef typename Graph::EdgeIt EdgeIt;
       
    58 
       
    59   std::cout << "Nodes" << std::endl;
       
    60   int i=0;
       
    61   for(NodeIt it(g); it!=INVALID; ++it, ++i) {
       
    62     std::cout << "  " << i << ": " << g.id(it) << std::endl;
       
    63   }
       
    64 
       
    65   std::cout << "UndirEdge" << std::endl;
       
    66   i=0;
       
    67   for(UEdgeIt it(g); it!=INVALID; ++it, ++i) {
       
    68     std::cout << "  " << i << ": " << g.id(it) 
       
    69 	 << " (" << g.id(g.source(it)) << ", " << g.id(g.target(it)) 
       
    70 	 << ")" << std::endl;
       
    71   }
       
    72 
       
    73   std::cout << "Edge" << std::endl;
       
    74   i=0;
       
    75   for(EdgeIt it(g); it!=INVALID; ++it, ++i) {
       
    76     std::cout << "  " << i << ": " << g.id(it)
       
    77 	 << " (" << g.id(g.source(it)) << ", " << g.id(g.target(it)) 
       
    78 	 << ")" << std::endl;
       
    79   }
       
    80 
       
    81 }
       
    82 
       
    83 template <typename Graph>
       
    84 void check_graph() {
       
    85 
       
    86   typedef typename Graph::Node Node;
       
    87   typedef typename Graph::UndirEdge UEdge;
       
    88   typedef typename Graph::Edge Edge;
       
    89   typedef typename Graph::NodeIt NodeIt;
       
    90   typedef typename Graph::UndirEdgeIt UEdgeIt;
       
    91   typedef typename Graph::EdgeIt EdgeIt;
       
    92 
       
    93   Graph g;
       
    94 
       
    95   check_item_counts(g,0,0);
       
    96 
       
    97   Node
       
    98     n1 = g.addNode(),
       
    99     n2 = g.addNode(),
       
   100     n3 = g.addNode();
       
   101 
       
   102   UEdge
       
   103     e1 = g.addEdge(n1, n2),
       
   104     e2 = g.addEdge(n2, n3);
       
   105 
       
   106   // print_items(g);
       
   107 
       
   108   check_item_counts(g,3,2);
       
   109 
       
   110 
       
   111 }
       
   112 
       
   113 int main() {
       
   114   check_concepts();
       
   115 
       
   116   check_graph<UndirListGraph>();
       
   117   check_graph<UndirSmartGraph>();
       
   118 
       
   119   return 0;
       
   120 }