src/work/alpar/list_graph_demo.cc
author alpar
Fri, 23 Jul 2004 16:58:02 +0000
changeset 736 ba76a7f56b23
parent 401 2d0cccf7cc94
child 880 9d0bfd35b97c
permissions -rw-r--r--
Marci (and the other developpers),
please write exhaustive test code to avoid this kind of bugs...
     1 #include<list_graph.h>
     2 #include<skeletons/graph.h>
     3 
     4 #include <iostream>
     5 #include <vector>
     6 
     7 using namespace hugo;
     8 
     9 typedef ListGraph Graph;
    10 //typedef GraphSkeleton Graph;
    11 
    12 
    13 Graph::OutEdgeIt safeFirstOut(const Graph &G, Graph::Node n)
    14 {
    15   return G.valid(n) ? Graph::OutEdgeIt(G,n):INVALID;
    16 }
    17 
    18 int main()
    19 {
    20 
    21   typedef Graph::Edge Edge;
    22   typedef Graph::InEdgeIt InEdgeIt;
    23   typedef Graph::OutEdgeIt OutEdgeIt;
    24   typedef Graph::EdgeIt EdgeIt;
    25   typedef Graph::Node Node;
    26   typedef Graph::NodeIt NodeIt;
    27   
    28   Graph G;
    29   
    30   {
    31     NodeIt n;
    32 
    33     for(int i=0;i<10;i++) G.addNode();
    34     for(G.first(n);G.valid(n);G.next(n)) 
    35       for(NodeIt m(G);m!=INVALID;G.next(m)) 
    36 	if(n!=m) G.addEdge(n,m);
    37     
    38     OutEdgeIt e = safeFirstOut(G,n);
    39     OutEdgeIt f = safeFirstOut(G,NodeIt(G));
    40     
    41     
    42     InEdgeIt i(INVALID), j;
    43     InEdgeIt ii(i);
    44     ii=G.first(i,n);
    45     ii=G.next(i);
    46     
    47     OutEdgeIt o(INVALID), oo;
    48     OutEdgeIt ooo(oo);
    49     oo=G.first(o,n);
    50     oo=G.next(o);
    51     
    52     EdgeIt ei(INVALID), eie;
    53     EdgeIt eiee(ei);
    54     eie=G.first(ei);
    55     eie=G.next(ei);
    56     
    57     Edge eee(i);
    58     eee=o;
    59     eee=eie;
    60     
    61     
    62     bool tm;
    63     tm = G.valid(n) && G.valid(i) && G.valid(o) && G.valid(ei);
    64     
    65     std::vector<InEdgeIt> v(10);
    66     std::vector<InEdgeIt> w(10,INVALID);
    67     
    68   }
    69   
    70   // Test of maps
    71 
    72   G.clear();
    73   
    74   for(int i=0;i<10;i++) G.addNode();
    75   for(NodeIt i(G);G.valid(i);G.next(i)) 
    76     for(NodeIt j(G);G.valid(j);G.next(j)) 
    77       if(i<j) G.addEdge(i,j);           //The iterators are comparable
    78   
    79   Graph::NodeMap<int> n(G);
    80   int count=0;
    81   for(NodeIt i(G);G.valid(i);G.next(i)) n[i]=count++;
    82   
    83   Graph::NodeMap<int> nn=n;
    84   Graph::NodeMap<double> dd=n;
    85 
    86   n = nn;
    87   
    88   dd = nn;
    89   
    90   Graph::EdgeMap<int> emap(G);
    91 
    92   // Test of SymListGraph
    93   
    94   {
    95     typedef SymListGraph Graph;
    96     typedef Graph::Edge Edge;
    97     typedef Graph::InEdgeIt InEdgeIt;
    98     typedef Graph::OutEdgeIt OutEdgeIt;
    99     typedef Graph::EdgeIt EdgeIt;
   100     typedef Graph::Node Node;
   101     typedef Graph::NodeIt NodeIt;
   102 
   103     Graph G;
   104 
   105     for(int i=0;i<10;i++) G.addNode();
   106     for(NodeIt i(G);G.valid(i);G.next(i)) 
   107       for(NodeIt j(G);G.valid(j);G.next(j)) 
   108 	if(i<j) G.addEdge(i,j);           //The iterators are comparable
   109   
   110     Graph::EdgeMap<int> em(G);
   111     Graph::SymEdgeMap<int> sm(G);
   112     for(EdgeIt e(G);G.valid(e);G.next(e)) em[e]=G.id(e);
   113     for(EdgeIt e(G);G.valid(e);G.next(e))
   114       if(G.tail(e)<G.head(e)) sm[e]=G.id(e);
   115     
   116     for(EdgeIt e(G);G.valid(e);G.next(e))
   117       std::cout << G.id(G.tail(e)) << "->" << G.id(G.head(e))
   118 		<< ": id=" << G.id(e) << " oppid=" << G.id(G.opposite(e))
   119 		<< " em=" << em[e]
   120 		<< " sm=" << sm[e] << "\n";
   121     
   122     //Delete all nodes
   123     NodeIt n;
   124     while(G.valid(G.first(n))) G.erase(n);
   125   }
   126 
   127   // Tests for NodeSet and EdgeSet
   128   
   129   {
   130     NodeSet N;
   131     
   132     typedef EdgeSet<NodeSet> ES;
   133     
   134     ES E(N);
   135     ES F(N);
   136     for(int i=0;i<10;i++) G.addNode();
   137     
   138     for(ES::NodeIt n(E);E.valid(n);E.next(n))
   139       for(ES::NodeIt m(E);E.valid(m);E.next(m))
   140 	if(n!=m) F.addEdge(n,m);
   141     for(ES::NodeIt n(F);F.valid(n);F.next(n))
   142       for(ES::NodeIt m(F);F.valid(m);F.next(m))
   143 	if(n<m) F.addEdge(n,m);
   144     
   145 
   146     NodeSet::NodeMap<int> nm1(N);
   147     ES::NodeMap<int> nm2(E);
   148     ES::EdgeMap<int> eme(E);
   149     ES::EdgeMap<int> emf(F);
   150     
   151        
   152   }
   153   
   154 }