test/bpgraph_test.cc
changeset 1189 a12cca3ad15a
parent 1188 5ef0ab7b61cd
child 1193 c8fa41fcc4a7
     1.1 --- a/test/bpgraph_test.cc	Sun Nov 14 22:48:32 2010 +0100
     1.2 +++ b/test/bpgraph_test.cc	Mon Nov 15 09:46:08 2010 +0100
     1.3 @@ -17,7 +17,7 @@
     1.4   */
     1.5  
     1.6  #include <lemon/concepts/bpgraph.h>
     1.7 -//#include <lemon/list_graph.h>
     1.8 +#include <lemon/list_graph.h>
     1.9  #include <lemon/smart_graph.h>
    1.10  #include <lemon/full_graph.h>
    1.11  
    1.12 @@ -107,11 +107,108 @@
    1.13    checkGraphEdgeMap(G);
    1.14  }
    1.15  
    1.16 -template <class Graph>
    1.17 +template <class BpGraph>
    1.18 +void checkBpGraphErase() {
    1.19 +  TEMPLATE_BPGRAPH_TYPEDEFS(BpGraph);
    1.20 +
    1.21 +  BpGraph G;
    1.22 +  Node
    1.23 +    n1 = G.addRedNode(), n2 = G.addBlueNode(),
    1.24 +    n3 = G.addBlueNode(), n4 = G.addRedNode();
    1.25 +  Edge
    1.26 +    e1 = G.addEdge(n1, n2), e2 = G.addEdge(n1, n3),
    1.27 +    e3 = G.addEdge(n4, n2), e4 = G.addEdge(n4, n3);
    1.28 +
    1.29 +  // Check edge deletion
    1.30 +  G.erase(e2);
    1.31 +
    1.32 +  checkGraphNodeList(G, 4);
    1.33 +  checkGraphRedNodeList(G, 2);
    1.34 +  checkGraphBlueNodeList(G, 2);
    1.35 +  checkGraphEdgeList(G, 3);
    1.36 +  checkGraphArcList(G, 6);
    1.37 +
    1.38 +  checkGraphIncEdgeArcLists(G, n1, 1);
    1.39 +  checkGraphIncEdgeArcLists(G, n2, 2);
    1.40 +  checkGraphIncEdgeArcLists(G, n3, 1);
    1.41 +  checkGraphIncEdgeArcLists(G, n4, 2);
    1.42 +
    1.43 +  checkGraphConEdgeList(G, 3);
    1.44 +  checkGraphConArcList(G, 6);
    1.45 +
    1.46 +  // Check node deletion
    1.47 +  G.erase(n3);
    1.48 +
    1.49 +  checkGraphNodeList(G, 3);
    1.50 +  checkGraphRedNodeList(G, 2);
    1.51 +  checkGraphBlueNodeList(G, 1);
    1.52 +  checkGraphEdgeList(G, 2);
    1.53 +  checkGraphArcList(G, 4);
    1.54 +
    1.55 +  checkGraphIncEdgeArcLists(G, n1, 1);
    1.56 +  checkGraphIncEdgeArcLists(G, n2, 2);
    1.57 +  checkGraphIncEdgeArcLists(G, n4, 1);
    1.58 +
    1.59 +  checkGraphConEdgeList(G, 2);
    1.60 +  checkGraphConArcList(G, 4);
    1.61 +
    1.62 +}
    1.63 +
    1.64 +template <class BpGraph>
    1.65 +void checkBpGraphAlter() {
    1.66 +  TEMPLATE_BPGRAPH_TYPEDEFS(BpGraph);
    1.67 +
    1.68 +  BpGraph G;
    1.69 +  Node
    1.70 +    n1 = G.addRedNode(), n2 = G.addBlueNode(),
    1.71 +    n3 = G.addBlueNode(), n4 = G.addRedNode();
    1.72 +  Edge
    1.73 +    e1 = G.addEdge(n1, n2), e2 = G.addEdge(n1, n3),
    1.74 +    e3 = G.addEdge(n4, n2), e4 = G.addEdge(n4, n3);
    1.75 +
    1.76 +  G.changeRed(e2, n4);
    1.77 +  check(G.redNode(e2) == n4, "Wrong red node");
    1.78 +  check(G.blueNode(e2) == n3, "Wrong blue node");
    1.79 +
    1.80 +  checkGraphNodeList(G, 4);
    1.81 +  checkGraphRedNodeList(G, 2);
    1.82 +  checkGraphBlueNodeList(G, 2);
    1.83 +  checkGraphEdgeList(G, 4);
    1.84 +  checkGraphArcList(G, 8);
    1.85 +
    1.86 +  checkGraphIncEdgeArcLists(G, n1, 1);
    1.87 +  checkGraphIncEdgeArcLists(G, n2, 2);
    1.88 +  checkGraphIncEdgeArcLists(G, n3, 2);
    1.89 +  checkGraphIncEdgeArcLists(G, n4, 3);
    1.90 +
    1.91 +  checkGraphConEdgeList(G, 4);
    1.92 +  checkGraphConArcList(G, 8);
    1.93 +
    1.94 +  G.changeBlue(e2, n2);
    1.95 +  check(G.redNode(e2) == n4, "Wrong red node");
    1.96 +  check(G.blueNode(e2) == n2, "Wrong blue node");
    1.97 +
    1.98 +  checkGraphNodeList(G, 4);
    1.99 +  checkGraphRedNodeList(G, 2);
   1.100 +  checkGraphBlueNodeList(G, 2);
   1.101 +  checkGraphEdgeList(G, 4);
   1.102 +  checkGraphArcList(G, 8);
   1.103 +
   1.104 +  checkGraphIncEdgeArcLists(G, n1, 1);
   1.105 +  checkGraphIncEdgeArcLists(G, n2, 3);
   1.106 +  checkGraphIncEdgeArcLists(G, n3, 1);
   1.107 +  checkGraphIncEdgeArcLists(G, n4, 3);
   1.108 +
   1.109 +  checkGraphConEdgeList(G, 4);
   1.110 +  checkGraphConArcList(G, 8);
   1.111 +}
   1.112 +
   1.113 +
   1.114 +template <class BpGraph>
   1.115  void checkBpGraphSnapshot() {
   1.116 -  TEMPLATE_BPGRAPH_TYPEDEFS(Graph);
   1.117 +  TEMPLATE_BPGRAPH_TYPEDEFS(BpGraph);
   1.118  
   1.119 -  Graph G;
   1.120 +  BpGraph G;
   1.121    Node 
   1.122      n1 = G.addRedNode(),
   1.123      n2 = G.addBlueNode(),
   1.124 @@ -126,7 +223,7 @@
   1.125    checkGraphEdgeList(G, 2);
   1.126    checkGraphArcList(G, 4);
   1.127  
   1.128 -  typename Graph::Snapshot snapshot(G);
   1.129 +  typename BpGraph::Snapshot snapshot(G);
   1.130  
   1.131    Node n4 = G.addRedNode();
   1.132    G.addEdge(n4, n2);
   1.133 @@ -190,10 +287,10 @@
   1.134    checkGraphArcList(G, 4);
   1.135  }
   1.136  
   1.137 -template <typename Graph>
   1.138 +template <typename BpGraph>
   1.139  void checkBpGraphValidity() {
   1.140 -  TEMPLATE_GRAPH_TYPEDEFS(Graph);
   1.141 -  Graph g;
   1.142 +  TEMPLATE_BPGRAPH_TYPEDEFS(BpGraph);
   1.143 +  BpGraph g;
   1.144  
   1.145    Node
   1.146      n1 = g.addRedNode(),
   1.147 @@ -325,6 +422,13 @@
   1.148  }
   1.149  
   1.150  void checkGraphs() {
   1.151 +  { // Checking ListGraph
   1.152 +    checkBpGraphBuild<ListBpGraph>();
   1.153 +    checkBpGraphErase<ListBpGraph>();
   1.154 +    checkBpGraphAlter<ListBpGraph>();
   1.155 +    checkBpGraphSnapshot<ListBpGraph>();
   1.156 +    checkBpGraphValidity<ListBpGraph>();
   1.157 +  }
   1.158    { // Checking SmartGraph
   1.159      checkBpGraphBuild<SmartBpGraph>();
   1.160      checkBpGraphSnapshot<SmartBpGraph>();