COIN-OR::LEMON - Graph Library

Ticket #172: 49d9a36b3b84.patch

File 49d9a36b3b84.patch, 13.6 KB (added by Peter Kovacs, 16 years ago)
  • test/digraph_test.cc

    # HG changeset patch
    # User Peter Kovacs <kpeter@inf.elte.hu>
    # Date 1226056516 -3600
    # Node ID 49d9a36b3b84393f37e6ac641f8173696ea335f1
    # Parent  5a3d689ea770255b4ba128fb91892266d3bb17a2
    Extend test cases for graphs and digraphs (#172)
    
    diff --git a/test/digraph_test.cc b/test/digraph_test.cc
    a b  
    2929using namespace lemon::concepts;
    3030
    3131template <class Digraph>
    32 void checkDigraph() {
     32void checkDigraphBuild() {
    3333  TEMPLATE_DIGRAPH_TYPEDEFS(Digraph);
    3434  Digraph G;
    3535
     
    5858
    5959  checkGraphConArcList(G, 1);
    6060
    61   Arc a2 = G.addArc(n2, n1), a3 = G.addArc(n2, n3), a4 = G.addArc(n2, n3);
     61  Arc a2 = G.addArc(n2, n1),
     62      a3 = G.addArc(n2, n3),
     63      a4 = G.addArc(n2, n3);
     64
     65  checkGraphNodeList(G, 3);
     66  checkGraphArcList(G, 4);
     67
     68  checkGraphOutArcList(G, n1, 1);
     69  checkGraphOutArcList(G, n2, 3);
     70  checkGraphOutArcList(G, n3, 0);
     71
     72  checkGraphInArcList(G, n1, 1);
     73  checkGraphInArcList(G, n2, 1);
     74  checkGraphInArcList(G, n3, 2);
     75
     76  checkGraphConArcList(G, 4);
     77
     78  checkNodeIds(G);
     79  checkArcIds(G);
     80  checkGraphNodeMap(G);
     81  checkGraphArcMap(G);
     82}
     83
     84template <class Digraph>
     85void checkDigraphSplit() {
     86  TEMPLATE_DIGRAPH_TYPEDEFS(Digraph);
     87
     88  Digraph G;
     89  Node n1 = G.addNode(), n2 = G.addNode(), n3 = G.addNode();
     90  Arc a1 = G.addArc(n1, n2), a2 = G.addArc(n2, n1),
     91      a3 = G.addArc(n2, n3), a4 = G.addArc(n2, n3);
     92
     93  Node n4 = G.split(n2);
     94
     95  check(G.target(OutArcIt(G, n2)) == n4 &&
     96        G.source(InArcIt(G, n4)) == n2,
     97        "Wrong split.");
     98
     99  checkGraphNodeList(G, 4);
     100  checkGraphArcList(G, 5);
     101
     102  checkGraphOutArcList(G, n1, 1);
     103  checkGraphOutArcList(G, n2, 1);
     104  checkGraphOutArcList(G, n3, 0);
     105  checkGraphOutArcList(G, n4, 3);
     106
     107  checkGraphInArcList(G, n1, 1);
     108  checkGraphInArcList(G, n2, 1);
     109  checkGraphInArcList(G, n3, 2);
     110  checkGraphInArcList(G, n4, 1);
     111
     112  checkGraphConArcList(G, 5);
     113}
     114
     115template <class Digraph>
     116void checkDigraphAlter() {
     117  TEMPLATE_DIGRAPH_TYPEDEFS(Digraph);
     118
     119  Digraph G;
     120  Node n1 = G.addNode(), n2 = G.addNode(),
     121       n3 = G.addNode(), n4 = G.addNode();
     122  Arc a1 = G.addArc(n1, n2), a2 = G.addArc(n4, n1),
     123      a3 = G.addArc(n4, n3), a4 = G.addArc(n4, n3),
     124      a5 = G.addArc(n2, n4);
     125
     126  checkGraphNodeList(G, 4);
     127  checkGraphArcList(G, 5);
     128
     129  // Check changeSource() and changeTarget()
     130  G.changeTarget(a4, n1);
     131
     132  checkGraphNodeList(G, 4);
     133  checkGraphArcList(G, 5);
     134
     135  checkGraphOutArcList(G, n1, 1);
     136  checkGraphOutArcList(G, n2, 1);
     137  checkGraphOutArcList(G, n3, 0);
     138  checkGraphOutArcList(G, n4, 3);
     139
     140  checkGraphInArcList(G, n1, 2);
     141  checkGraphInArcList(G, n2, 1);
     142  checkGraphInArcList(G, n3, 1);
     143  checkGraphInArcList(G, n4, 1);
     144
     145  checkGraphConArcList(G, 5);
     146
     147  G.changeSource(a4, n3);
     148
     149  checkGraphNodeList(G, 4);
     150  checkGraphArcList(G, 5);
     151
     152  checkGraphOutArcList(G, n1, 1);
     153  checkGraphOutArcList(G, n2, 1);
     154  checkGraphOutArcList(G, n3, 1);
     155  checkGraphOutArcList(G, n4, 2);
     156
     157  checkGraphInArcList(G, n1, 2);
     158  checkGraphInArcList(G, n2, 1);
     159  checkGraphInArcList(G, n3, 1);
     160  checkGraphInArcList(G, n4, 1);
     161
     162  checkGraphConArcList(G, 5);
     163
     164  // Check contract()
     165  G.contract(n2, n4, false);
     166
     167  checkGraphNodeList(G, 3);
     168  checkGraphArcList(G, 5);
     169
     170  checkGraphOutArcList(G, n1, 1);
     171  checkGraphOutArcList(G, n2, 3);
     172  checkGraphOutArcList(G, n3, 1);
     173
     174  checkGraphInArcList(G, n1, 2);
     175  checkGraphInArcList(G, n2, 2);
     176  checkGraphInArcList(G, n3, 1);
     177
     178  checkGraphConArcList(G, 5);
     179
     180  G.contract(n2, n1);
     181
     182  checkGraphNodeList(G, 2);
     183  checkGraphArcList(G, 3);
     184
     185  checkGraphOutArcList(G, n2, 2);
     186  checkGraphOutArcList(G, n3, 1);
     187
     188  checkGraphInArcList(G, n2, 2);
     189  checkGraphInArcList(G, n3, 1);
     190
     191  checkGraphConArcList(G, 3);
     192}
     193
     194template <class Digraph>
     195void checkDigraphErase() {
     196  TEMPLATE_DIGRAPH_TYPEDEFS(Digraph);
     197
     198  Digraph G;
     199  Node n1 = G.addNode(), n2 = G.addNode(),
     200       n3 = G.addNode(), n4 = G.addNode();
     201  Arc a1 = G.addArc(n1, n2), a2 = G.addArc(n4, n1),
     202      a3 = G.addArc(n4, n3), a4 = G.addArc(n3, n1),
     203      a5 = G.addArc(n2, n4);
     204
     205  // Check arc deletion
     206  G.erase(a1);
     207
     208  checkGraphNodeList(G, 4);
     209  checkGraphArcList(G, 4);
     210
     211  checkGraphOutArcList(G, n1, 0);
     212  checkGraphOutArcList(G, n2, 1);
     213  checkGraphOutArcList(G, n3, 1);
     214  checkGraphOutArcList(G, n4, 2);
     215
     216  checkGraphInArcList(G, n1, 2);
     217  checkGraphInArcList(G, n2, 0);
     218  checkGraphInArcList(G, n3, 1);
     219  checkGraphInArcList(G, n4, 1);
     220
     221  checkGraphConArcList(G, 4);
     222
     223  // Check node deletion
     224  G.erase(n4);
     225
     226  checkGraphNodeList(G, 3);
     227  checkGraphArcList(G, 1);
     228
     229  checkGraphOutArcList(G, n1, 0);
     230  checkGraphOutArcList(G, n2, 0);
     231  checkGraphOutArcList(G, n3, 1);
     232  checkGraphOutArcList(G, n4, 0);
     233
     234  checkGraphInArcList(G, n1, 1);
     235  checkGraphInArcList(G, n2, 0);
     236  checkGraphInArcList(G, n3, 0);
     237  checkGraphInArcList(G, n4, 0);
     238
     239  checkGraphConArcList(G, 1);
     240}
     241
     242
     243template <class Digraph>
     244void checkDigraphSnapshot() {
     245  TEMPLATE_DIGRAPH_TYPEDEFS(Digraph);
     246
     247  Digraph G;
     248  Node n1 = G.addNode(), n2 = G.addNode(), n3 = G.addNode();
     249  Arc a1 = G.addArc(n1, n2), a2 = G.addArc(n2, n1),
     250      a3 = G.addArc(n2, n3), a4 = G.addArc(n2, n3);
     251
     252  typename Digraph::Snapshot snapshot(G);
     253
     254  Node n = G.addNode();
     255  G.addArc(n3, n);
     256  G.addArc(n, n3);
     257
     258  checkGraphNodeList(G, 4);
     259  checkGraphArcList(G, 6);
     260
     261  snapshot.restore();
     262
    62263  checkGraphNodeList(G, 3);
    63264  checkGraphArcList(G, 4);
    64265
     
    77278  checkGraphNodeMap(G);
    78279  checkGraphArcMap(G);
    79280
     281  G.addNode();
     282  snapshot.save(G);
     283
     284  G.addArc(G.addNode(), G.addNode());
     285
     286  snapshot.restore();
     287
     288  checkGraphNodeList(G, 4);
     289  checkGraphArcList(G, 4);
    80290}
    81 
    82291
    83292void checkConcepts() {
    84293  { // Checking digraph components
     
    169378
    170379void checkDigraphs() {
    171380  { // Checking ListDigraph
    172     checkDigraph<ListDigraph>();
     381    checkDigraphBuild<ListDigraph>();
     382    checkDigraphSplit<ListDigraph>();
     383    checkDigraphAlter<ListDigraph>();
     384    checkDigraphErase<ListDigraph>();
     385    checkDigraphSnapshot<ListDigraph>();
    173386    checkDigraphValidityErase<ListDigraph>();
    174387  }
    175388  { // Checking SmartDigraph
    176     checkDigraph<SmartDigraph>();
     389    checkDigraphBuild<SmartDigraph>();
     390    checkDigraphSplit<SmartDigraph>();
     391    checkDigraphSnapshot<SmartDigraph>();
    177392    checkDigraphValidity<SmartDigraph>();
    178393  }
    179394}
  • test/graph_test.cc

    diff --git a/test/graph_test.cc b/test/graph_test.cc
    a b  
    2929using namespace lemon::concepts;
    3030
    3131template <class Graph>
    32 void checkGraph() {
     32void checkGraphBuild() {
    3333  TEMPLATE_GRAPH_TYPEDEFS(Graph);
    3434
    3535  Graph G;
    3636  checkGraphNodeList(G, 0);
    3737  checkGraphEdgeList(G, 0);
     38  checkGraphArcList(G, 0);
    3839
    3940  Node
    4041    n1 = G.addNode(),
     
    4243    n3 = G.addNode();
    4344  checkGraphNodeList(G, 3);
    4445  checkGraphEdgeList(G, 0);
     46  checkGraphArcList(G, 0);
    4547
    4648  Edge e1 = G.addEdge(n1, n2);
    4749  check((G.u(e1) == n1 && G.v(e1) == n2) || (G.u(e1) == n2 && G.v(e1) == n1),
    4850        "Wrong edge");
     51
    4952  checkGraphNodeList(G, 3);
     53  checkGraphEdgeList(G, 1);
    5054  checkGraphArcList(G, 2);
    51   checkGraphEdgeList(G, 1);
    5255
    53   checkGraphOutArcList(G, n1, 1);
    54   checkGraphOutArcList(G, n2, 1);
    55   checkGraphOutArcList(G, n3, 0);
     56  checkGraphIncEdgeArcLists(G, n1, 1);
     57  checkGraphIncEdgeArcLists(G, n2, 1);
     58  checkGraphIncEdgeArcLists(G, n3, 0);
    5659
    57   checkGraphInArcList(G, n1, 1);
    58   checkGraphInArcList(G, n2, 1);
    59   checkGraphInArcList(G, n3, 0);
     60  checkGraphConEdgeList(G, 1);
     61  checkGraphConArcList(G, 2);
    6062
    61   checkGraphIncEdgeList(G, n1, 1);
    62   checkGraphIncEdgeList(G, n2, 1);
    63   checkGraphIncEdgeList(G, n3, 0);
     63  Edge e2 = G.addEdge(n2, n1),
     64       e3 = G.addEdge(n2, n3);
    6465
    65   checkGraphConArcList(G, 2);
    66   checkGraphConEdgeList(G, 1);
     66  checkGraphNodeList(G, 3);
     67  checkGraphEdgeList(G, 3);
     68  checkGraphArcList(G, 6);
    6769
    68   Edge e2 = G.addEdge(n2, n1), e3 = G.addEdge(n2, n3);
    69   checkGraphNodeList(G, 3);
    70   checkGraphArcList(G, 6);
    71   checkGraphEdgeList(G, 3);
     70  checkGraphIncEdgeArcLists(G, n1, 2);
     71  checkGraphIncEdgeArcLists(G, n2, 3);
     72  checkGraphIncEdgeArcLists(G, n3, 1);
    7273
    73   checkGraphOutArcList(G, n1, 2);
    74   checkGraphOutArcList(G, n2, 3);
    75   checkGraphOutArcList(G, n3, 1);
    76 
    77   checkGraphInArcList(G, n1, 2);
    78   checkGraphInArcList(G, n2, 3);
    79   checkGraphInArcList(G, n3, 1);
    80 
    81   checkGraphIncEdgeList(G, n1, 2);
    82   checkGraphIncEdgeList(G, n2, 3);
    83   checkGraphIncEdgeList(G, n3, 1);
    84 
     74  checkGraphConEdgeList(G, 3);
    8575  checkGraphConArcList(G, 6);
    86   checkGraphConEdgeList(G, 3);
    8776
    8877  checkArcDirections(G);
    8978
     
    9382  checkGraphNodeMap(G);
    9483  checkGraphArcMap(G);
    9584  checkGraphEdgeMap(G);
     85}
     86
     87template <class Graph>
     88void checkGraphAlter() {
     89  TEMPLATE_GRAPH_TYPEDEFS(Graph);
     90
     91  Graph G;
     92  Node n1 = G.addNode(), n2 = G.addNode(),
     93       n3 = G.addNode(), n4 = G.addNode();
     94  Edge e1 = G.addEdge(n1, n2), e2 = G.addEdge(n2, n1),
     95       e3 = G.addEdge(n2, n3), e4 = G.addEdge(n1, n4),
     96       e5 = G.addEdge(n4, n3);
     97
     98  checkGraphNodeList(G, 4);
     99  checkGraphEdgeList(G, 5);
     100  checkGraphArcList(G, 10);
     101
     102  // Check changeU() and changeV()
     103  if (G.u(e2) == n2) {
     104    G.changeU(e2, n3);
     105  } else {
     106    G.changeV(e2, n3);
     107  }
     108
     109  checkGraphNodeList(G, 4);
     110  checkGraphEdgeList(G, 5);
     111  checkGraphArcList(G, 10);
     112
     113  checkGraphIncEdgeArcLists(G, n1, 3);
     114  checkGraphIncEdgeArcLists(G, n2, 2);
     115  checkGraphIncEdgeArcLists(G, n3, 3);
     116  checkGraphIncEdgeArcLists(G, n4, 2);
     117
     118  checkGraphConEdgeList(G, 5);
     119  checkGraphConArcList(G, 10);
     120
     121  if (G.u(e2) == n1) {
     122    G.changeU(e2, n2);
     123  } else {
     124    G.changeV(e2, n2);
     125  }
     126
     127  checkGraphNodeList(G, 4);
     128  checkGraphEdgeList(G, 5);
     129  checkGraphArcList(G, 10);
     130
     131  checkGraphIncEdgeArcLists(G, n1, 2);
     132  checkGraphIncEdgeArcLists(G, n2, 3);
     133  checkGraphIncEdgeArcLists(G, n3, 3);
     134  checkGraphIncEdgeArcLists(G, n4, 2);
     135
     136  checkGraphConEdgeList(G, 5);
     137  checkGraphConArcList(G, 10);
     138
     139  // Check contract()
     140  G.contract(n1, n4, false);
     141
     142  checkGraphNodeList(G, 3);
     143  checkGraphEdgeList(G, 5);
     144  checkGraphArcList(G, 10);
     145
     146  checkGraphIncEdgeArcLists(G, n1, 4);
     147  checkGraphIncEdgeArcLists(G, n2, 3);
     148  checkGraphIncEdgeArcLists(G, n3, 3);
     149
     150  checkGraphConEdgeList(G, 5);
     151  checkGraphConArcList(G, 10);
     152
     153  G.contract(n2, n3);
     154
     155  checkGraphNodeList(G, 2);
     156  checkGraphEdgeList(G, 3);
     157  checkGraphArcList(G, 6);
     158
     159  checkGraphIncEdgeArcLists(G, n1, 4);
     160  checkGraphIncEdgeArcLists(G, n2, 2);
     161
     162  checkGraphConEdgeList(G, 3);
     163  checkGraphConArcList(G, 6);
     164}
     165
     166template <class Graph>
     167void checkGraphErase() {
     168  TEMPLATE_GRAPH_TYPEDEFS(Graph);
     169
     170  Graph G;
     171  Node n1 = G.addNode(), n2 = G.addNode(),
     172       n3 = G.addNode(), n4 = G.addNode();
     173  Edge e1 = G.addEdge(n1, n2), e2 = G.addEdge(n2, n1),
     174       e3 = G.addEdge(n2, n3), e4 = G.addEdge(n1, n4),
     175       e5 = G.addEdge(n4, n3);
     176
     177  // Check edge deletion
     178  G.erase(e2);
     179
     180  checkGraphNodeList(G, 4);
     181  checkGraphEdgeList(G, 4);
     182  checkGraphArcList(G, 8);
     183
     184  checkGraphIncEdgeArcLists(G, n1, 2);
     185  checkGraphIncEdgeArcLists(G, n2, 2);
     186  checkGraphIncEdgeArcLists(G, n3, 2);
     187  checkGraphIncEdgeArcLists(G, n4, 2);
     188
     189  checkGraphConEdgeList(G, 4);
     190  checkGraphConArcList(G, 8);
     191
     192  // Check node deletion
     193  G.erase(n3);
     194
     195  checkGraphNodeList(G, 3);
     196  checkGraphEdgeList(G, 2);
     197  checkGraphArcList(G, 4);
     198
     199  checkGraphIncEdgeArcLists(G, n1, 2);
     200  checkGraphIncEdgeArcLists(G, n2, 1);
     201  checkGraphIncEdgeArcLists(G, n4, 1);
     202
     203  checkGraphConEdgeList(G, 2);
     204  checkGraphConArcList(G, 4);
     205}
     206
     207
     208template <class Graph>
     209void checkGraphSnapshot() {
     210  TEMPLATE_GRAPH_TYPEDEFS(Graph);
     211
     212  Graph G;
     213  Node n1 = G.addNode(), n2 = G.addNode(), n3 = G.addNode();
     214  Edge e1 = G.addEdge(n1, n2), e2 = G.addEdge(n2, n1),
     215       e3 = G.addEdge(n2, n3);
     216
     217  checkGraphNodeList(G, 3);
     218  checkGraphEdgeList(G, 3);
     219  checkGraphArcList(G, 6);
     220
     221  typename Graph::Snapshot snapshot(G);
     222
     223  Node n = G.addNode();
     224  G.addEdge(n3, n);
     225  G.addEdge(n, n3);
     226  G.addEdge(n3, n2);
     227
     228  checkGraphNodeList(G, 4);
     229  checkGraphEdgeList(G, 6);
     230  checkGraphArcList(G, 12);
     231
     232  snapshot.restore();
     233
     234  checkGraphNodeList(G, 3);
     235  checkGraphEdgeList(G, 3);
     236  checkGraphArcList(G, 6);
     237
     238  checkGraphIncEdgeArcLists(G, n1, 2);
     239  checkGraphIncEdgeArcLists(G, n2, 3);
     240  checkGraphIncEdgeArcLists(G, n3, 1);
     241
     242  checkGraphConEdgeList(G, 3);
     243  checkGraphConArcList(G, 6);
     244
     245  checkNodeIds(G);
     246  checkEdgeIds(G);
     247  checkArcIds(G);
     248  checkGraphNodeMap(G);
     249  checkGraphEdgeMap(G);
     250  checkGraphArcMap(G);
     251
     252  G.addNode();
     253  snapshot.save(G);
     254
     255  G.addEdge(G.addNode(), G.addNode());
     256
     257  snapshot.restore();
     258
     259  checkGraphNodeList(G, 4);
     260  checkGraphEdgeList(G, 3);
     261  checkGraphArcList(G, 6);
    96262}
    97263
    98264void checkConcepts() {
     
    234400
    235401void checkGraphs() {
    236402  { // Checking ListGraph
    237     checkGraph<ListGraph>();
     403    checkGraphBuild<ListGraph>();
     404    checkGraphAlter<ListGraph>();
     405    checkGraphErase<ListGraph>();
     406    checkGraphSnapshot<ListGraph>();
    238407    checkGraphValidityErase<ListGraph>();
    239408  }
    240409  { // Checking SmartGraph
    241     checkGraph<SmartGraph>();
     410    checkGraphBuild<SmartGraph>();
     411    checkGraphSnapshot<SmartGraph>();
    242412    checkGraphValidity<SmartGraph>();
    243413  }
    244414//   { // Checking FullGraph
  • test/graph_test.h

    diff --git a/test/graph_test.h b/test/graph_test.h
    a b  
    114114    }
    115115    check(e==INVALID,"Wrong IncEdge list linking.");
    116116    check(countIncEdges(G,n)==cnt,"Wrong IncEdge number.");
     117  }
     118
     119  template <class Graph>
     120  void checkGraphIncEdgeArcLists(const Graph &G, typename Graph::Node n,
     121                                 int cnt)
     122  {
     123    checkGraphIncEdgeList(G, n, cnt);
     124    checkGraphOutArcList(G, n, cnt);
     125    checkGraphInArcList(G, n, cnt);
    117126  }
    118127
    119128  template <class Graph>