1.1 --- a/test/bpgraph_test.cc Sun Nov 14 16:35:31 2010 +0100
1.2 +++ b/test/bpgraph_test.cc Sun Nov 14 20:06:23 2010 +0100
1.3 @@ -18,10 +18,8 @@
1.4
1.5 #include <lemon/concepts/bpgraph.h>
1.6 //#include <lemon/list_graph.h>
1.7 -//#include <lemon/smart_graph.h>
1.8 +#include <lemon/smart_graph.h>
1.9 //#include <lemon/full_graph.h>
1.10 -//#include <lemon/grid_graph.h>
1.11 -//#include <lemon/hypercube_graph.h>
1.12
1.13 #include "test_tools.h"
1.14 #include "graph_test.h"
1.15 @@ -29,6 +27,192 @@
1.16 using namespace lemon;
1.17 using namespace lemon::concepts;
1.18
1.19 +template <class BpGraph>
1.20 +void checkBpGraphBuild() {
1.21 + TEMPLATE_BPGRAPH_TYPEDEFS(BpGraph);
1.22 +
1.23 + BpGraph G;
1.24 + checkGraphNodeList(G, 0);
1.25 + checkGraphRedNodeList(G, 0);
1.26 + checkGraphBlueNodeList(G, 0);
1.27 + checkGraphEdgeList(G, 0);
1.28 + checkGraphArcList(G, 0);
1.29 +
1.30 + G.reserveNode(3);
1.31 + G.reserveEdge(3);
1.32 +
1.33 + Node
1.34 + rn1 = G.addRedNode();
1.35 + checkGraphNodeList(G, 1);
1.36 + checkGraphRedNodeList(G, 1);
1.37 + checkGraphBlueNodeList(G, 0);
1.38 + checkGraphEdgeList(G, 0);
1.39 + checkGraphArcList(G, 0);
1.40 +
1.41 + Node
1.42 + bn1 = G.addBlueNode(),
1.43 + bn2 = G.addBlueNode();
1.44 + checkGraphNodeList(G, 3);
1.45 + checkGraphRedNodeList(G, 1);
1.46 + checkGraphBlueNodeList(G, 2);
1.47 + checkGraphEdgeList(G, 0);
1.48 + checkGraphArcList(G, 0);
1.49 +
1.50 + Edge e1 = G.addEdge(rn1, bn2);
1.51 + check(G.redNode(e1) == rn1 && G.blueNode(e1) == bn2, "Wrong edge");
1.52 + check(G.u(e1) == rn1 && G.v(e1) == bn2, "Wrong edge");
1.53 +
1.54 + checkGraphNodeList(G, 3);
1.55 + checkGraphRedNodeList(G, 1);
1.56 + checkGraphBlueNodeList(G, 2);
1.57 + checkGraphEdgeList(G, 1);
1.58 + checkGraphArcList(G, 2);
1.59 +
1.60 + checkGraphIncEdgeArcLists(G, rn1, 1);
1.61 + checkGraphIncEdgeArcLists(G, bn1, 0);
1.62 + checkGraphIncEdgeArcLists(G, bn2, 1);
1.63 +
1.64 + checkGraphConEdgeList(G, 1);
1.65 + checkGraphConArcList(G, 2);
1.66 +
1.67 + Edge
1.68 + e2 = G.addEdge(rn1, bn1),
1.69 + e3 = G.addEdge(rn1, bn2);
1.70 +
1.71 + checkGraphNodeList(G, 3);
1.72 + checkGraphRedNodeList(G, 1);
1.73 + checkGraphBlueNodeList(G, 2);
1.74 + checkGraphEdgeList(G, 3);
1.75 + checkGraphArcList(G, 6);
1.76 +
1.77 + checkGraphIncEdgeArcLists(G, rn1, 3);
1.78 + checkGraphIncEdgeArcLists(G, bn1, 1);
1.79 + checkGraphIncEdgeArcLists(G, bn2, 2);
1.80 +
1.81 + checkGraphConEdgeList(G, 3);
1.82 + checkGraphConArcList(G, 6);
1.83 +
1.84 + checkArcDirections(G);
1.85 +
1.86 + checkNodeIds(G);
1.87 + checkRedNodeIds(G);
1.88 + checkBlueNodeIds(G);
1.89 + checkArcIds(G);
1.90 + checkEdgeIds(G);
1.91 +
1.92 + checkGraphNodeMap(G);
1.93 + checkGraphRedMap(G);
1.94 + checkGraphBlueMap(G);
1.95 + checkGraphArcMap(G);
1.96 + checkGraphEdgeMap(G);
1.97 +}
1.98 +
1.99 +template <class Graph>
1.100 +void checkBpGraphSnapshot() {
1.101 + TEMPLATE_BPGRAPH_TYPEDEFS(Graph);
1.102 +
1.103 + Graph G;
1.104 + Node
1.105 + n1 = G.addRedNode(),
1.106 + n2 = G.addBlueNode(),
1.107 + n3 = G.addBlueNode();
1.108 + Edge
1.109 + e1 = G.addEdge(n1, n2),
1.110 + e2 = G.addEdge(n1, n3);
1.111 +
1.112 + checkGraphNodeList(G, 3);
1.113 + checkGraphRedNodeList(G, 1);
1.114 + checkGraphBlueNodeList(G, 2);
1.115 + checkGraphEdgeList(G, 2);
1.116 + checkGraphArcList(G, 4);
1.117 +
1.118 + typename Graph::Snapshot snapshot(G);
1.119 +
1.120 + Node n4 = G.addRedNode();
1.121 + G.addEdge(n4, n2);
1.122 + G.addEdge(n4, n3);
1.123 +
1.124 + checkGraphNodeList(G, 4);
1.125 + checkGraphRedNodeList(G, 2);
1.126 + checkGraphBlueNodeList(G, 2);
1.127 + checkGraphEdgeList(G, 4);
1.128 + checkGraphArcList(G, 8);
1.129 +
1.130 + snapshot.restore();
1.131 +
1.132 + checkGraphNodeList(G, 3);
1.133 + checkGraphRedNodeList(G, 1);
1.134 + checkGraphBlueNodeList(G, 2);
1.135 + checkGraphEdgeList(G, 2);
1.136 + checkGraphArcList(G, 4);
1.137 +
1.138 + checkGraphIncEdgeArcLists(G, n1, 2);
1.139 + checkGraphIncEdgeArcLists(G, n2, 1);
1.140 + checkGraphIncEdgeArcLists(G, n3, 1);
1.141 +
1.142 + checkGraphConEdgeList(G, 2);
1.143 + checkGraphConArcList(G, 4);
1.144 +
1.145 + checkNodeIds(G);
1.146 + checkRedNodeIds(G);
1.147 + checkBlueNodeIds(G);
1.148 + checkArcIds(G);
1.149 + checkEdgeIds(G);
1.150 +
1.151 + checkGraphNodeMap(G);
1.152 + checkGraphRedMap(G);
1.153 + checkGraphBlueMap(G);
1.154 + checkGraphArcMap(G);
1.155 + checkGraphEdgeMap(G);
1.156 +
1.157 + G.addRedNode();
1.158 + snapshot.save(G);
1.159 +
1.160 + G.addEdge(G.addRedNode(), G.addBlueNode());
1.161 +
1.162 + snapshot.restore();
1.163 + snapshot.save(G);
1.164 +
1.165 + checkGraphNodeList(G, 4);
1.166 + checkGraphRedNodeList(G, 2);
1.167 + checkGraphBlueNodeList(G, 2);
1.168 + checkGraphEdgeList(G, 2);
1.169 + checkGraphArcList(G, 4);
1.170 +
1.171 + G.addEdge(G.addRedNode(), G.addBlueNode());
1.172 +
1.173 + snapshot.restore();
1.174 +
1.175 + checkGraphNodeList(G, 4);
1.176 + checkGraphRedNodeList(G, 2);
1.177 + checkGraphBlueNodeList(G, 2);
1.178 + checkGraphEdgeList(G, 2);
1.179 + checkGraphArcList(G, 4);
1.180 +}
1.181 +
1.182 +template <typename Graph>
1.183 +void checkBpGraphValidity() {
1.184 + TEMPLATE_GRAPH_TYPEDEFS(Graph);
1.185 + Graph g;
1.186 +
1.187 + Node
1.188 + n1 = g.addRedNode(),
1.189 + n2 = g.addBlueNode(),
1.190 + n3 = g.addBlueNode();
1.191 +
1.192 + Edge
1.193 + e1 = g.addEdge(n1, n2),
1.194 + e2 = g.addEdge(n1, n3);
1.195 +
1.196 + check(g.valid(n1), "Wrong validity check");
1.197 + check(g.valid(e1), "Wrong validity check");
1.198 + check(g.valid(g.direct(e1, true)), "Wrong validity check");
1.199 +
1.200 + check(!g.valid(g.nodeFromId(-1)), "Wrong validity check");
1.201 + check(!g.valid(g.edgeFromId(-1)), "Wrong validity check");
1.202 + check(!g.valid(g.arcFromId(-1)), "Wrong validity check");
1.203 +}
1.204 +
1.205 void checkConcepts() {
1.206 { // Checking graph components
1.207 checkConcept<BaseBpGraphComponent, BaseBpGraphComponent >();
1.208 @@ -51,16 +235,27 @@
1.209 checkConcept<ErasableBpGraphComponent<>,
1.210 ErasableBpGraphComponent<> >();
1.211
1.212 - checkConcept<ClearableGraphComponent<>,
1.213 - ClearableGraphComponent<> >();
1.214 + checkConcept<ClearableBpGraphComponent<>,
1.215 + ClearableBpGraphComponent<> >();
1.216
1.217 }
1.218 { // Checking skeleton graph
1.219 checkConcept<BpGraph, BpGraph>();
1.220 }
1.221 + { // Checking SmartBpGraph
1.222 + checkConcept<BpGraph, SmartBpGraph>();
1.223 + checkConcept<AlterableBpGraphComponent<>, SmartBpGraph>();
1.224 + checkConcept<ExtendableBpGraphComponent<>, SmartBpGraph>();
1.225 + checkConcept<ClearableBpGraphComponent<>, SmartBpGraph>();
1.226 + }
1.227 }
1.228
1.229 void checkGraphs() {
1.230 + { // Checking SmartGraph
1.231 + checkBpGraphBuild<SmartBpGraph>();
1.232 + checkBpGraphSnapshot<SmartBpGraph>();
1.233 + checkBpGraphValidity<SmartBpGraph>();
1.234 + }
1.235 }
1.236
1.237 int main() {