1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/test/graph_adaptor_test.cc Sun Nov 30 18:57:18 2008 +0100
1.3 @@ -0,0 +1,1072 @@
1.4 +/* -*- C++ -*-
1.5 + *
1.6 + * This file is a part of LEMON, a generic C++ optimization library
1.7 + *
1.8 + * Copyright (C) 2003-2008
1.9 + * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
1.10 + * (Egervary Research Group on Combinatorial Optimization, EGRES).
1.11 + *
1.12 + * Permission to use, modify and distribute this software is granted
1.13 + * provided that this copyright notice appears in all copies. For
1.14 + * precise terms see the accompanying LICENSE file.
1.15 + *
1.16 + * This software is provided "AS IS" with no warranty of any kind,
1.17 + * express or implied, and with no claim as to its suitability for any
1.18 + * purpose.
1.19 + *
1.20 + */
1.21 +
1.22 +#include<iostream>
1.23 +#include<lemon/concept_check.h>
1.24 +
1.25 +#include<lemon/list_graph.h>
1.26 +#include<lemon/smart_graph.h>
1.27 +
1.28 +#include<lemon/concepts/digraph.h>
1.29 +#include<lemon/concepts/graph.h>
1.30 +
1.31 +#include<lemon/digraph_adaptor.h>
1.32 +#include<lemon/graph_adaptor.h>
1.33 +
1.34 +#include <limits>
1.35 +#include <lemon/bfs.h>
1.36 +#include <lemon/path.h>
1.37 +
1.38 +#include"test/test_tools.h"
1.39 +#include"test/graph_test.h"
1.40 +
1.41 +using namespace lemon;
1.42 +
1.43 +void checkDigraphAdaptor() {
1.44 + checkConcept<concepts::Digraph, DigraphAdaptor<concepts::Digraph> >();
1.45 +
1.46 + typedef ListDigraph Digraph;
1.47 + typedef DigraphAdaptor<Digraph> Adaptor;
1.48 +
1.49 + Digraph digraph;
1.50 + Adaptor adaptor(digraph);
1.51 +
1.52 + Digraph::Node n1 = digraph.addNode();
1.53 + Digraph::Node n2 = digraph.addNode();
1.54 + Digraph::Node n3 = digraph.addNode();
1.55 +
1.56 + Digraph::Arc a1 = digraph.addArc(n1, n2);
1.57 + Digraph::Arc a2 = digraph.addArc(n1, n3);
1.58 + Digraph::Arc a3 = digraph.addArc(n2, n3);
1.59 +
1.60 + checkGraphNodeList(adaptor, 3);
1.61 + checkGraphArcList(adaptor, 3);
1.62 + checkGraphConArcList(adaptor, 3);
1.63 +
1.64 + checkGraphOutArcList(adaptor, n1, 2);
1.65 + checkGraphOutArcList(adaptor, n2, 1);
1.66 + checkGraphOutArcList(adaptor, n3, 0);
1.67 +
1.68 + checkGraphInArcList(adaptor, n1, 0);
1.69 + checkGraphInArcList(adaptor, n2, 1);
1.70 + checkGraphInArcList(adaptor, n3, 2);
1.71 +
1.72 + checkNodeIds(adaptor);
1.73 + checkArcIds(adaptor);
1.74 +
1.75 + checkGraphNodeMap(adaptor);
1.76 + checkGraphArcMap(adaptor);
1.77 +}
1.78 +
1.79 +void checkRevDigraphAdaptor() {
1.80 + checkConcept<concepts::Digraph, RevDigraphAdaptor<concepts::Digraph> >();
1.81 +
1.82 + typedef ListDigraph Digraph;
1.83 + typedef RevDigraphAdaptor<Digraph> Adaptor;
1.84 +
1.85 + Digraph digraph;
1.86 + Adaptor adaptor(digraph);
1.87 +
1.88 + Digraph::Node n1 = digraph.addNode();
1.89 + Digraph::Node n2 = digraph.addNode();
1.90 + Digraph::Node n3 = digraph.addNode();
1.91 +
1.92 + Digraph::Arc a1 = digraph.addArc(n1, n2);
1.93 + Digraph::Arc a2 = digraph.addArc(n1, n3);
1.94 + Digraph::Arc a3 = digraph.addArc(n2, n3);
1.95 +
1.96 + checkGraphNodeList(adaptor, 3);
1.97 + checkGraphArcList(adaptor, 3);
1.98 + checkGraphConArcList(adaptor, 3);
1.99 +
1.100 + checkGraphOutArcList(adaptor, n1, 0);
1.101 + checkGraphOutArcList(adaptor, n2, 1);
1.102 + checkGraphOutArcList(adaptor, n3, 2);
1.103 +
1.104 + checkGraphInArcList(adaptor, n1, 2);
1.105 + checkGraphInArcList(adaptor, n2, 1);
1.106 + checkGraphInArcList(adaptor, n3, 0);
1.107 +
1.108 + checkNodeIds(adaptor);
1.109 + checkArcIds(adaptor);
1.110 +
1.111 + checkGraphNodeMap(adaptor);
1.112 + checkGraphArcMap(adaptor);
1.113 +
1.114 + for (Adaptor::ArcIt a(adaptor); a != INVALID; ++a) {
1.115 + check(adaptor.source(a) == digraph.target(a), "Wrong reverse");
1.116 + check(adaptor.target(a) == digraph.source(a), "Wrong reverse");
1.117 + }
1.118 +}
1.119 +
1.120 +void checkSubDigraphAdaptor() {
1.121 + checkConcept<concepts::Digraph,
1.122 + SubDigraphAdaptor<concepts::Digraph,
1.123 + concepts::Digraph::NodeMap<bool>,
1.124 + concepts::Digraph::ArcMap<bool> > >();
1.125 +
1.126 + typedef ListDigraph Digraph;
1.127 + typedef Digraph::NodeMap<bool> NodeFilter;
1.128 + typedef Digraph::ArcMap<bool> ArcFilter;
1.129 + typedef SubDigraphAdaptor<Digraph, NodeFilter, ArcFilter> Adaptor;
1.130 +
1.131 + Digraph digraph;
1.132 + NodeFilter node_filter(digraph);
1.133 + ArcFilter arc_filter(digraph);
1.134 + Adaptor adaptor(digraph, node_filter, arc_filter);
1.135 +
1.136 + Digraph::Node n1 = digraph.addNode();
1.137 + Digraph::Node n2 = digraph.addNode();
1.138 + Digraph::Node n3 = digraph.addNode();
1.139 +
1.140 + Digraph::Arc a1 = digraph.addArc(n1, n2);
1.141 + Digraph::Arc a2 = digraph.addArc(n1, n3);
1.142 + Digraph::Arc a3 = digraph.addArc(n2, n3);
1.143 +
1.144 + node_filter[n1] = node_filter[n2] = node_filter[n3] = true;
1.145 + arc_filter[a1] = arc_filter[a2] = arc_filter[a3] = true;
1.146 +
1.147 + checkGraphNodeList(adaptor, 3);
1.148 + checkGraphArcList(adaptor, 3);
1.149 + checkGraphConArcList(adaptor, 3);
1.150 +
1.151 + checkGraphOutArcList(adaptor, n1, 2);
1.152 + checkGraphOutArcList(adaptor, n2, 1);
1.153 + checkGraphOutArcList(adaptor, n3, 0);
1.154 +
1.155 + checkGraphInArcList(adaptor, n1, 0);
1.156 + checkGraphInArcList(adaptor, n2, 1);
1.157 + checkGraphInArcList(adaptor, n3, 2);
1.158 +
1.159 + checkNodeIds(adaptor);
1.160 + checkArcIds(adaptor);
1.161 +
1.162 + checkGraphNodeMap(adaptor);
1.163 + checkGraphArcMap(adaptor);
1.164 +
1.165 + arc_filter[a2] = false;
1.166 +
1.167 + checkGraphNodeList(adaptor, 3);
1.168 + checkGraphArcList(adaptor, 2);
1.169 + checkGraphConArcList(adaptor, 2);
1.170 +
1.171 + checkGraphOutArcList(adaptor, n1, 1);
1.172 + checkGraphOutArcList(adaptor, n2, 1);
1.173 + checkGraphOutArcList(adaptor, n3, 0);
1.174 +
1.175 + checkGraphInArcList(adaptor, n1, 0);
1.176 + checkGraphInArcList(adaptor, n2, 1);
1.177 + checkGraphInArcList(adaptor, n3, 1);
1.178 +
1.179 + checkNodeIds(adaptor);
1.180 + checkArcIds(adaptor);
1.181 +
1.182 + checkGraphNodeMap(adaptor);
1.183 + checkGraphArcMap(adaptor);
1.184 +
1.185 + node_filter[n1] = false;
1.186 +
1.187 + checkGraphNodeList(adaptor, 2);
1.188 + checkGraphArcList(adaptor, 1);
1.189 + checkGraphConArcList(adaptor, 1);
1.190 +
1.191 + checkGraphOutArcList(adaptor, n2, 1);
1.192 + checkGraphOutArcList(adaptor, n3, 0);
1.193 +
1.194 + checkGraphInArcList(adaptor, n2, 0);
1.195 + checkGraphInArcList(adaptor, n3, 1);
1.196 +
1.197 + checkNodeIds(adaptor);
1.198 + checkArcIds(adaptor);
1.199 +
1.200 + checkGraphNodeMap(adaptor);
1.201 + checkGraphArcMap(adaptor);
1.202 +
1.203 + node_filter[n1] = node_filter[n2] = node_filter[n3] = false;
1.204 + arc_filter[a1] = arc_filter[a2] = arc_filter[a3] = false;
1.205 +
1.206 + checkGraphNodeList(adaptor, 0);
1.207 + checkGraphArcList(adaptor, 0);
1.208 + checkGraphConArcList(adaptor, 0);
1.209 +
1.210 + checkNodeIds(adaptor);
1.211 + checkArcIds(adaptor);
1.212 +
1.213 + checkGraphNodeMap(adaptor);
1.214 + checkGraphArcMap(adaptor);
1.215 +}
1.216 +
1.217 +void checkNodeSubDigraphAdaptor() {
1.218 + checkConcept<concepts::Digraph,
1.219 + NodeSubDigraphAdaptor<concepts::Digraph,
1.220 + concepts::Digraph::NodeMap<bool> > >();
1.221 +
1.222 + typedef ListDigraph Digraph;
1.223 + typedef Digraph::NodeMap<bool> NodeFilter;
1.224 + typedef NodeSubDigraphAdaptor<Digraph, NodeFilter> Adaptor;
1.225 +
1.226 + Digraph digraph;
1.227 + NodeFilter node_filter(digraph);
1.228 + Adaptor adaptor(digraph, node_filter);
1.229 +
1.230 + Digraph::Node n1 = digraph.addNode();
1.231 + Digraph::Node n2 = digraph.addNode();
1.232 + Digraph::Node n3 = digraph.addNode();
1.233 +
1.234 + Digraph::Arc a1 = digraph.addArc(n1, n2);
1.235 + Digraph::Arc a2 = digraph.addArc(n1, n3);
1.236 + Digraph::Arc a3 = digraph.addArc(n2, n3);
1.237 +
1.238 + node_filter[n1] = node_filter[n2] = node_filter[n3] = true;
1.239 +
1.240 + checkGraphNodeList(adaptor, 3);
1.241 + checkGraphArcList(adaptor, 3);
1.242 + checkGraphConArcList(adaptor, 3);
1.243 +
1.244 + checkGraphOutArcList(adaptor, n1, 2);
1.245 + checkGraphOutArcList(adaptor, n2, 1);
1.246 + checkGraphOutArcList(adaptor, n3, 0);
1.247 +
1.248 + checkGraphInArcList(adaptor, n1, 0);
1.249 + checkGraphInArcList(adaptor, n2, 1);
1.250 + checkGraphInArcList(adaptor, n3, 2);
1.251 +
1.252 + checkNodeIds(adaptor);
1.253 + checkArcIds(adaptor);
1.254 +
1.255 + checkGraphNodeMap(adaptor);
1.256 + checkGraphArcMap(adaptor);
1.257 +
1.258 + node_filter[n1] = false;
1.259 +
1.260 + checkGraphNodeList(adaptor, 2);
1.261 + checkGraphArcList(adaptor, 1);
1.262 + checkGraphConArcList(adaptor, 1);
1.263 +
1.264 + checkGraphOutArcList(adaptor, n2, 1);
1.265 + checkGraphOutArcList(adaptor, n3, 0);
1.266 +
1.267 + checkGraphInArcList(adaptor, n2, 0);
1.268 + checkGraphInArcList(adaptor, n3, 1);
1.269 +
1.270 + checkNodeIds(adaptor);
1.271 + checkArcIds(adaptor);
1.272 +
1.273 + checkGraphNodeMap(adaptor);
1.274 + checkGraphArcMap(adaptor);
1.275 +
1.276 + node_filter[n1] = node_filter[n2] = node_filter[n3] = false;
1.277 +
1.278 + checkGraphNodeList(adaptor, 0);
1.279 + checkGraphArcList(adaptor, 0);
1.280 + checkGraphConArcList(adaptor, 0);
1.281 +
1.282 + checkNodeIds(adaptor);
1.283 + checkArcIds(adaptor);
1.284 +
1.285 + checkGraphNodeMap(adaptor);
1.286 + checkGraphArcMap(adaptor);
1.287 +}
1.288 +
1.289 +void checkArcSubDigraphAdaptor() {
1.290 + checkConcept<concepts::Digraph,
1.291 + ArcSubDigraphAdaptor<concepts::Digraph,
1.292 + concepts::Digraph::ArcMap<bool> > >();
1.293 +
1.294 + typedef ListDigraph Digraph;
1.295 + typedef Digraph::ArcMap<bool> ArcFilter;
1.296 + typedef ArcSubDigraphAdaptor<Digraph, ArcFilter> Adaptor;
1.297 +
1.298 + Digraph digraph;
1.299 + ArcFilter arc_filter(digraph);
1.300 + Adaptor adaptor(digraph, arc_filter);
1.301 +
1.302 + Digraph::Node n1 = digraph.addNode();
1.303 + Digraph::Node n2 = digraph.addNode();
1.304 + Digraph::Node n3 = digraph.addNode();
1.305 +
1.306 + Digraph::Arc a1 = digraph.addArc(n1, n2);
1.307 + Digraph::Arc a2 = digraph.addArc(n1, n3);
1.308 + Digraph::Arc a3 = digraph.addArc(n2, n3);
1.309 +
1.310 + arc_filter[a1] = arc_filter[a2] = arc_filter[a3] = true;
1.311 +
1.312 + checkGraphNodeList(adaptor, 3);
1.313 + checkGraphArcList(adaptor, 3);
1.314 + checkGraphConArcList(adaptor, 3);
1.315 +
1.316 + checkGraphOutArcList(adaptor, n1, 2);
1.317 + checkGraphOutArcList(adaptor, n2, 1);
1.318 + checkGraphOutArcList(adaptor, n3, 0);
1.319 +
1.320 + checkGraphInArcList(adaptor, n1, 0);
1.321 + checkGraphInArcList(adaptor, n2, 1);
1.322 + checkGraphInArcList(adaptor, n3, 2);
1.323 +
1.324 + checkNodeIds(adaptor);
1.325 + checkArcIds(adaptor);
1.326 +
1.327 + checkGraphNodeMap(adaptor);
1.328 + checkGraphArcMap(adaptor);
1.329 +
1.330 + arc_filter[a2] = false;
1.331 +
1.332 + checkGraphNodeList(adaptor, 3);
1.333 + checkGraphArcList(adaptor, 2);
1.334 + checkGraphConArcList(adaptor, 2);
1.335 +
1.336 + checkGraphOutArcList(adaptor, n1, 1);
1.337 + checkGraphOutArcList(adaptor, n2, 1);
1.338 + checkGraphOutArcList(adaptor, n3, 0);
1.339 +
1.340 + checkGraphInArcList(adaptor, n1, 0);
1.341 + checkGraphInArcList(adaptor, n2, 1);
1.342 + checkGraphInArcList(adaptor, n3, 1);
1.343 +
1.344 + checkNodeIds(adaptor);
1.345 + checkArcIds(adaptor);
1.346 +
1.347 + checkGraphNodeMap(adaptor);
1.348 + checkGraphArcMap(adaptor);
1.349 +
1.350 + arc_filter[a1] = arc_filter[a2] = arc_filter[a3] = false;
1.351 +
1.352 + checkGraphNodeList(adaptor, 3);
1.353 + checkGraphArcList(adaptor, 0);
1.354 + checkGraphConArcList(adaptor, 0);
1.355 +
1.356 + checkNodeIds(adaptor);
1.357 + checkArcIds(adaptor);
1.358 +
1.359 + checkGraphNodeMap(adaptor);
1.360 + checkGraphArcMap(adaptor);
1.361 +}
1.362 +
1.363 +void checkUndirDigraphAdaptor() {
1.364 + checkConcept<concepts::Graph, UndirDigraphAdaptor<concepts::Digraph> >();
1.365 +
1.366 + typedef ListDigraph Digraph;
1.367 + typedef UndirDigraphAdaptor<Digraph> Adaptor;
1.368 +
1.369 + Digraph digraph;
1.370 + Adaptor adaptor(digraph);
1.371 +
1.372 + Digraph::Node n1 = digraph.addNode();
1.373 + Digraph::Node n2 = digraph.addNode();
1.374 + Digraph::Node n3 = digraph.addNode();
1.375 +
1.376 + Digraph::Arc a1 = digraph.addArc(n1, n2);
1.377 + Digraph::Arc a2 = digraph.addArc(n1, n3);
1.378 + Digraph::Arc a3 = digraph.addArc(n2, n3);
1.379 +
1.380 + checkGraphNodeList(adaptor, 3);
1.381 + checkGraphArcList(adaptor, 6);
1.382 + checkGraphEdgeList(adaptor, 3);
1.383 + checkGraphConArcList(adaptor, 6);
1.384 + checkGraphConEdgeList(adaptor, 3);
1.385 +
1.386 + checkGraphOutArcList(adaptor, n1, 2);
1.387 + checkGraphOutArcList(adaptor, n2, 2);
1.388 + checkGraphOutArcList(adaptor, n3, 2);
1.389 +
1.390 + checkGraphInArcList(adaptor, n1, 2);
1.391 + checkGraphInArcList(adaptor, n2, 2);
1.392 + checkGraphInArcList(adaptor, n3, 2);
1.393 +
1.394 + checkGraphIncEdgeList(adaptor, n1, 2);
1.395 + checkGraphIncEdgeList(adaptor, n2, 2);
1.396 + checkGraphIncEdgeList(adaptor, n3, 2);
1.397 +
1.398 + checkNodeIds(adaptor);
1.399 + checkArcIds(adaptor);
1.400 + checkEdgeIds(adaptor);
1.401 +
1.402 + checkGraphNodeMap(adaptor);
1.403 + checkGraphArcMap(adaptor);
1.404 + checkGraphEdgeMap(adaptor);
1.405 +
1.406 + for (Adaptor::EdgeIt e(adaptor); e != INVALID; ++e) {
1.407 + check(adaptor.u(e) == digraph.source(e), "Wrong undir");
1.408 + check(adaptor.v(e) == digraph.target(e), "Wrong undir");
1.409 + }
1.410 +
1.411 +}
1.412 +
1.413 +void checkResDigraphAdaptor() {
1.414 + checkConcept<concepts::Digraph,
1.415 + ResDigraphAdaptor<concepts::Digraph,
1.416 + concepts::Digraph::ArcMap<int>,
1.417 + concepts::Digraph::ArcMap<int> > >();
1.418 +
1.419 + typedef ListDigraph Digraph;
1.420 + typedef Digraph::ArcMap<int> IntArcMap;
1.421 + typedef ResDigraphAdaptor<Digraph, IntArcMap> Adaptor;
1.422 +
1.423 + Digraph digraph;
1.424 + IntArcMap capacity(digraph), flow(digraph);
1.425 + Adaptor adaptor(digraph, capacity, flow);
1.426 +
1.427 + Digraph::Node n1 = digraph.addNode();
1.428 + Digraph::Node n2 = digraph.addNode();
1.429 + Digraph::Node n3 = digraph.addNode();
1.430 + Digraph::Node n4 = digraph.addNode();
1.431 +
1.432 + Digraph::Arc a1 = digraph.addArc(n1, n2);
1.433 + Digraph::Arc a2 = digraph.addArc(n1, n3);
1.434 + Digraph::Arc a3 = digraph.addArc(n1, n4);
1.435 + Digraph::Arc a4 = digraph.addArc(n2, n3);
1.436 + Digraph::Arc a5 = digraph.addArc(n2, n4);
1.437 + Digraph::Arc a6 = digraph.addArc(n3, n4);
1.438 +
1.439 + capacity[a1] = 8;
1.440 + capacity[a2] = 6;
1.441 + capacity[a3] = 4;
1.442 + capacity[a4] = 4;
1.443 + capacity[a5] = 6;
1.444 + capacity[a6] = 10;
1.445 +
1.446 + for (Adaptor::ArcIt a(adaptor); a != INVALID; ++a) {
1.447 + flow[a] = 0;
1.448 + }
1.449 +
1.450 + checkGraphNodeList(adaptor, 4);
1.451 + checkGraphArcList(adaptor, 6);
1.452 + checkGraphConArcList(adaptor, 6);
1.453 +
1.454 + checkGraphOutArcList(adaptor, n1, 3);
1.455 + checkGraphOutArcList(adaptor, n2, 2);
1.456 + checkGraphOutArcList(adaptor, n3, 1);
1.457 + checkGraphOutArcList(adaptor, n4, 0);
1.458 +
1.459 + checkGraphInArcList(adaptor, n1, 0);
1.460 + checkGraphInArcList(adaptor, n2, 1);
1.461 + checkGraphInArcList(adaptor, n3, 2);
1.462 + checkGraphInArcList(adaptor, n4, 3);
1.463 +
1.464 + for (Adaptor::ArcIt a(adaptor); a != INVALID; ++a) {
1.465 + flow[a] = capacity[a] / 2;
1.466 + }
1.467 +
1.468 + checkGraphNodeList(adaptor, 4);
1.469 + checkGraphArcList(adaptor, 12);
1.470 + checkGraphConArcList(adaptor, 12);
1.471 +
1.472 + checkGraphOutArcList(adaptor, n1, 3);
1.473 + checkGraphOutArcList(adaptor, n2, 3);
1.474 + checkGraphOutArcList(adaptor, n3, 3);
1.475 + checkGraphOutArcList(adaptor, n4, 3);
1.476 +
1.477 + checkGraphInArcList(adaptor, n1, 3);
1.478 + checkGraphInArcList(adaptor, n2, 3);
1.479 + checkGraphInArcList(adaptor, n3, 3);
1.480 + checkGraphInArcList(adaptor, n4, 3);
1.481 +
1.482 + checkNodeIds(adaptor);
1.483 + checkArcIds(adaptor);
1.484 +
1.485 + checkGraphNodeMap(adaptor);
1.486 + checkGraphArcMap(adaptor);
1.487 +
1.488 + for (Adaptor::ArcIt a(adaptor); a != INVALID; ++a) {
1.489 + flow[a] = capacity[a];
1.490 + }
1.491 +
1.492 + checkGraphNodeList(adaptor, 4);
1.493 + checkGraphArcList(adaptor, 6);
1.494 + checkGraphConArcList(adaptor, 6);
1.495 +
1.496 + checkGraphOutArcList(adaptor, n1, 0);
1.497 + checkGraphOutArcList(adaptor, n2, 1);
1.498 + checkGraphOutArcList(adaptor, n3, 2);
1.499 + checkGraphOutArcList(adaptor, n4, 3);
1.500 +
1.501 + checkGraphInArcList(adaptor, n1, 3);
1.502 + checkGraphInArcList(adaptor, n2, 2);
1.503 + checkGraphInArcList(adaptor, n3, 1);
1.504 + checkGraphInArcList(adaptor, n4, 0);
1.505 +
1.506 + for (Adaptor::ArcIt a(adaptor); a != INVALID; ++a) {
1.507 + flow[a] = 0;
1.508 + }
1.509 +
1.510 + int flow_value = 0;
1.511 + while (true) {
1.512 +
1.513 + Bfs<Adaptor> bfs(adaptor);
1.514 + bfs.run(n1, n4);
1.515 +
1.516 + if (!bfs.reached(n4)) break;
1.517 +
1.518 + Path<Adaptor> p = bfs.path(n4);
1.519 +
1.520 + int min = std::numeric_limits<int>::max();
1.521 + for (Path<Adaptor>::ArcIt a(p); a != INVALID; ++a) {
1.522 + if (adaptor.rescap(a) < min) min = adaptor.rescap(a);
1.523 + }
1.524 +
1.525 + for (Path<Adaptor>::ArcIt a(p); a != INVALID; ++a) {
1.526 + adaptor.augment(a, min);
1.527 + }
1.528 + flow_value += min;
1.529 + }
1.530 +
1.531 + check(flow_value == 18, "Wrong flow with res graph adaptor");
1.532 +
1.533 +}
1.534 +
1.535 +void checkSplitDigraphAdaptor() {
1.536 + checkConcept<concepts::Digraph, SplitDigraphAdaptor<concepts::Digraph> >();
1.537 +
1.538 + typedef ListDigraph Digraph;
1.539 + typedef SplitDigraphAdaptor<Digraph> Adaptor;
1.540 +
1.541 + Digraph digraph;
1.542 + Adaptor adaptor(digraph);
1.543 +
1.544 + Digraph::Node n1 = digraph.addNode();
1.545 + Digraph::Node n2 = digraph.addNode();
1.546 + Digraph::Node n3 = digraph.addNode();
1.547 +
1.548 + Digraph::Arc a1 = digraph.addArc(n1, n2);
1.549 + Digraph::Arc a2 = digraph.addArc(n1, n3);
1.550 + Digraph::Arc a3 = digraph.addArc(n2, n3);
1.551 +
1.552 + checkGraphNodeList(adaptor, 6);
1.553 + checkGraphArcList(adaptor, 6);
1.554 + checkGraphConArcList(adaptor, 6);
1.555 +
1.556 + checkGraphOutArcList(adaptor, adaptor.inNode(n1), 1);
1.557 + checkGraphOutArcList(adaptor, adaptor.outNode(n1), 2);
1.558 + checkGraphOutArcList(adaptor, adaptor.inNode(n2), 1);
1.559 + checkGraphOutArcList(adaptor, adaptor.outNode(n2), 1);
1.560 + checkGraphOutArcList(adaptor, adaptor.inNode(n3), 1);
1.561 + checkGraphOutArcList(adaptor, adaptor.outNode(n3), 0);
1.562 +
1.563 + checkGraphInArcList(adaptor, adaptor.inNode(n1), 0);
1.564 + checkGraphInArcList(adaptor, adaptor.outNode(n1), 1);
1.565 + checkGraphInArcList(adaptor, adaptor.inNode(n2), 1);
1.566 + checkGraphInArcList(adaptor, adaptor.outNode(n2), 1);
1.567 + checkGraphInArcList(adaptor, adaptor.inNode(n3), 2);
1.568 + checkGraphInArcList(adaptor, adaptor.outNode(n3), 1);
1.569 +
1.570 + checkNodeIds(adaptor);
1.571 + checkArcIds(adaptor);
1.572 +
1.573 + checkGraphNodeMap(adaptor);
1.574 + checkGraphArcMap(adaptor);
1.575 +
1.576 + for (Adaptor::ArcIt a(adaptor); a != INVALID; ++a) {
1.577 + if (adaptor.origArc(a)) {
1.578 + Digraph::Arc oa = a;
1.579 + check(adaptor.source(a) == adaptor.outNode(digraph.source(oa)),
1.580 + "Wrong split");
1.581 + check(adaptor.target(a) == adaptor.inNode(digraph.target(oa)),
1.582 + "Wrong split");
1.583 + } else {
1.584 + Digraph::Node on = a;
1.585 + check(adaptor.source(a) == adaptor.inNode(on), "Wrong split");
1.586 + check(adaptor.target(a) == adaptor.outNode(on), "Wrong split");
1.587 + }
1.588 + }
1.589 +}
1.590 +
1.591 +void checkGraphAdaptor() {
1.592 + checkConcept<concepts::Graph, GraphAdaptor<concepts::Graph> >();
1.593 +
1.594 + typedef ListGraph Graph;
1.595 + typedef GraphAdaptor<Graph> Adaptor;
1.596 +
1.597 + Graph graph;
1.598 + Adaptor adaptor(graph);
1.599 +
1.600 + Graph::Node n1 = graph.addNode();
1.601 + Graph::Node n2 = graph.addNode();
1.602 + Graph::Node n3 = graph.addNode();
1.603 + Graph::Node n4 = graph.addNode();
1.604 +
1.605 + Graph::Edge a1 = graph.addEdge(n1, n2);
1.606 + Graph::Edge a2 = graph.addEdge(n1, n3);
1.607 + Graph::Edge a3 = graph.addEdge(n2, n3);
1.608 + Graph::Edge a4 = graph.addEdge(n3, n4);
1.609 +
1.610 + checkGraphNodeList(adaptor, 4);
1.611 + checkGraphArcList(adaptor, 8);
1.612 + checkGraphEdgeList(adaptor, 4);
1.613 + checkGraphConArcList(adaptor, 8);
1.614 + checkGraphConEdgeList(adaptor, 4);
1.615 +
1.616 + checkGraphOutArcList(adaptor, n1, 2);
1.617 + checkGraphOutArcList(adaptor, n2, 2);
1.618 + checkGraphOutArcList(adaptor, n3, 3);
1.619 + checkGraphOutArcList(adaptor, n4, 1);
1.620 +
1.621 + checkGraphInArcList(adaptor, n1, 2);
1.622 + checkGraphInArcList(adaptor, n2, 2);
1.623 + checkGraphInArcList(adaptor, n3, 3);
1.624 + checkGraphInArcList(adaptor, n4, 1);
1.625 +
1.626 + checkGraphIncEdgeList(adaptor, n1, 2);
1.627 + checkGraphIncEdgeList(adaptor, n2, 2);
1.628 + checkGraphIncEdgeList(adaptor, n3, 3);
1.629 + checkGraphIncEdgeList(adaptor, n4, 1);
1.630 +
1.631 +
1.632 + checkNodeIds(adaptor);
1.633 + checkArcIds(adaptor);
1.634 + checkEdgeIds(adaptor);
1.635 +
1.636 + checkGraphNodeMap(adaptor);
1.637 + checkGraphArcMap(adaptor);
1.638 + checkGraphEdgeMap(adaptor);
1.639 +}
1.640 +
1.641 +void checkSubGraphAdaptor() {
1.642 + checkConcept<concepts::Graph,
1.643 + SubGraphAdaptor<concepts::Graph,
1.644 + concepts::Graph::NodeMap<bool>,
1.645 + concepts::Graph::EdgeMap<bool> > >();
1.646 +
1.647 + typedef ListGraph Graph;
1.648 + typedef Graph::NodeMap<bool> NodeFilter;
1.649 + typedef Graph::EdgeMap<bool> EdgeFilter;
1.650 + typedef SubGraphAdaptor<Graph, NodeFilter, EdgeFilter> Adaptor;
1.651 +
1.652 + Graph graph;
1.653 + NodeFilter node_filter(graph);
1.654 + EdgeFilter edge_filter(graph);
1.655 + Adaptor adaptor(graph, node_filter, edge_filter);
1.656 +
1.657 + Graph::Node n1 = graph.addNode();
1.658 + Graph::Node n2 = graph.addNode();
1.659 + Graph::Node n3 = graph.addNode();
1.660 + Graph::Node n4 = graph.addNode();
1.661 +
1.662 + Graph::Edge e1 = graph.addEdge(n1, n2);
1.663 + Graph::Edge e2 = graph.addEdge(n1, n3);
1.664 + Graph::Edge e3 = graph.addEdge(n2, n3);
1.665 + Graph::Edge e4 = graph.addEdge(n3, n4);
1.666 +
1.667 + node_filter[n1] = node_filter[n2] = node_filter[n3] = node_filter[n4] = true;
1.668 + edge_filter[e1] = edge_filter[e2] = edge_filter[e3] = edge_filter[e4] = true;
1.669 +
1.670 + checkGraphNodeList(adaptor, 4);
1.671 + checkGraphArcList(adaptor, 8);
1.672 + checkGraphEdgeList(adaptor, 4);
1.673 + checkGraphConArcList(adaptor, 8);
1.674 + checkGraphConEdgeList(adaptor, 4);
1.675 +
1.676 + checkGraphOutArcList(adaptor, n1, 2);
1.677 + checkGraphOutArcList(adaptor, n2, 2);
1.678 + checkGraphOutArcList(adaptor, n3, 3);
1.679 + checkGraphOutArcList(adaptor, n4, 1);
1.680 +
1.681 + checkGraphInArcList(adaptor, n1, 2);
1.682 + checkGraphInArcList(adaptor, n2, 2);
1.683 + checkGraphInArcList(adaptor, n3, 3);
1.684 + checkGraphInArcList(adaptor, n4, 1);
1.685 +
1.686 + checkGraphIncEdgeList(adaptor, n1, 2);
1.687 + checkGraphIncEdgeList(adaptor, n2, 2);
1.688 + checkGraphIncEdgeList(adaptor, n3, 3);
1.689 + checkGraphIncEdgeList(adaptor, n4, 1);
1.690 +
1.691 + checkNodeIds(adaptor);
1.692 + checkArcIds(adaptor);
1.693 + checkEdgeIds(adaptor);
1.694 +
1.695 + checkGraphNodeMap(adaptor);
1.696 + checkGraphArcMap(adaptor);
1.697 + checkGraphEdgeMap(adaptor);
1.698 +
1.699 + edge_filter[e2] = false;
1.700 +
1.701 + checkGraphNodeList(adaptor, 4);
1.702 + checkGraphArcList(adaptor, 6);
1.703 + checkGraphEdgeList(adaptor, 3);
1.704 + checkGraphConArcList(adaptor, 6);
1.705 + checkGraphConEdgeList(adaptor, 3);
1.706 +
1.707 + checkGraphOutArcList(adaptor, n1, 1);
1.708 + checkGraphOutArcList(adaptor, n2, 2);
1.709 + checkGraphOutArcList(adaptor, n3, 2);
1.710 + checkGraphOutArcList(adaptor, n4, 1);
1.711 +
1.712 + checkGraphInArcList(adaptor, n1, 1);
1.713 + checkGraphInArcList(adaptor, n2, 2);
1.714 + checkGraphInArcList(adaptor, n3, 2);
1.715 + checkGraphInArcList(adaptor, n4, 1);
1.716 +
1.717 + checkGraphIncEdgeList(adaptor, n1, 1);
1.718 + checkGraphIncEdgeList(adaptor, n2, 2);
1.719 + checkGraphIncEdgeList(adaptor, n3, 2);
1.720 + checkGraphIncEdgeList(adaptor, n4, 1);
1.721 +
1.722 + checkNodeIds(adaptor);
1.723 + checkArcIds(adaptor);
1.724 + checkEdgeIds(adaptor);
1.725 +
1.726 + checkGraphNodeMap(adaptor);
1.727 + checkGraphArcMap(adaptor);
1.728 + checkGraphEdgeMap(adaptor);
1.729 +
1.730 + node_filter[n1] = false;
1.731 +
1.732 + checkGraphNodeList(adaptor, 3);
1.733 + checkGraphArcList(adaptor, 4);
1.734 + checkGraphEdgeList(adaptor, 2);
1.735 + checkGraphConArcList(adaptor, 4);
1.736 + checkGraphConEdgeList(adaptor, 2);
1.737 +
1.738 + checkGraphOutArcList(adaptor, n2, 1);
1.739 + checkGraphOutArcList(adaptor, n3, 2);
1.740 + checkGraphOutArcList(adaptor, n4, 1);
1.741 +
1.742 + checkGraphInArcList(adaptor, n2, 1);
1.743 + checkGraphInArcList(adaptor, n3, 2);
1.744 + checkGraphInArcList(adaptor, n4, 1);
1.745 +
1.746 + checkGraphIncEdgeList(adaptor, n2, 1);
1.747 + checkGraphIncEdgeList(adaptor, n3, 2);
1.748 + checkGraphIncEdgeList(adaptor, n4, 1);
1.749 +
1.750 + checkNodeIds(adaptor);
1.751 + checkArcIds(adaptor);
1.752 + checkEdgeIds(adaptor);
1.753 +
1.754 + checkGraphNodeMap(adaptor);
1.755 + checkGraphArcMap(adaptor);
1.756 + checkGraphEdgeMap(adaptor);
1.757 +
1.758 + node_filter[n1] = node_filter[n2] = node_filter[n3] = node_filter[n4] = false;
1.759 + edge_filter[e1] = edge_filter[e2] = edge_filter[e3] = edge_filter[e4] = false;
1.760 +
1.761 + checkGraphNodeList(adaptor, 0);
1.762 + checkGraphArcList(adaptor, 0);
1.763 + checkGraphEdgeList(adaptor, 0);
1.764 + checkGraphConArcList(adaptor, 0);
1.765 + checkGraphConEdgeList(adaptor, 0);
1.766 +
1.767 + checkNodeIds(adaptor);
1.768 + checkArcIds(adaptor);
1.769 + checkEdgeIds(adaptor);
1.770 +
1.771 + checkGraphNodeMap(adaptor);
1.772 + checkGraphArcMap(adaptor);
1.773 + checkGraphEdgeMap(adaptor);
1.774 +}
1.775 +
1.776 +void checkNodeSubGraphAdaptor() {
1.777 + checkConcept<concepts::Graph,
1.778 + NodeSubGraphAdaptor<concepts::Graph,
1.779 + concepts::Graph::NodeMap<bool> > >();
1.780 +
1.781 + typedef ListGraph Graph;
1.782 + typedef Graph::NodeMap<bool> NodeFilter;
1.783 + typedef NodeSubGraphAdaptor<Graph, NodeFilter> Adaptor;
1.784 +
1.785 + Graph graph;
1.786 + NodeFilter node_filter(graph);
1.787 + Adaptor adaptor(graph, node_filter);
1.788 +
1.789 + Graph::Node n1 = graph.addNode();
1.790 + Graph::Node n2 = graph.addNode();
1.791 + Graph::Node n3 = graph.addNode();
1.792 + Graph::Node n4 = graph.addNode();
1.793 +
1.794 + Graph::Edge e1 = graph.addEdge(n1, n2);
1.795 + Graph::Edge e2 = graph.addEdge(n1, n3);
1.796 + Graph::Edge e3 = graph.addEdge(n2, n3);
1.797 + Graph::Edge e4 = graph.addEdge(n3, n4);
1.798 +
1.799 + node_filter[n1] = node_filter[n2] = node_filter[n3] = node_filter[n4] = true;
1.800 +
1.801 + checkGraphNodeList(adaptor, 4);
1.802 + checkGraphArcList(adaptor, 8);
1.803 + checkGraphEdgeList(adaptor, 4);
1.804 + checkGraphConArcList(adaptor, 8);
1.805 + checkGraphConEdgeList(adaptor, 4);
1.806 +
1.807 + checkGraphOutArcList(adaptor, n1, 2);
1.808 + checkGraphOutArcList(adaptor, n2, 2);
1.809 + checkGraphOutArcList(adaptor, n3, 3);
1.810 + checkGraphOutArcList(adaptor, n4, 1);
1.811 +
1.812 + checkGraphInArcList(adaptor, n1, 2);
1.813 + checkGraphInArcList(adaptor, n2, 2);
1.814 + checkGraphInArcList(adaptor, n3, 3);
1.815 + checkGraphInArcList(adaptor, n4, 1);
1.816 +
1.817 + checkGraphIncEdgeList(adaptor, n1, 2);
1.818 + checkGraphIncEdgeList(adaptor, n2, 2);
1.819 + checkGraphIncEdgeList(adaptor, n3, 3);
1.820 + checkGraphIncEdgeList(adaptor, n4, 1);
1.821 +
1.822 + checkNodeIds(adaptor);
1.823 + checkArcIds(adaptor);
1.824 + checkEdgeIds(adaptor);
1.825 +
1.826 + checkGraphNodeMap(adaptor);
1.827 + checkGraphArcMap(adaptor);
1.828 + checkGraphEdgeMap(adaptor);
1.829 +
1.830 + node_filter[n1] = false;
1.831 +
1.832 + checkGraphNodeList(adaptor, 3);
1.833 + checkGraphArcList(adaptor, 4);
1.834 + checkGraphEdgeList(adaptor, 2);
1.835 + checkGraphConArcList(adaptor, 4);
1.836 + checkGraphConEdgeList(adaptor, 2);
1.837 +
1.838 + checkGraphOutArcList(adaptor, n2, 1);
1.839 + checkGraphOutArcList(adaptor, n3, 2);
1.840 + checkGraphOutArcList(adaptor, n4, 1);
1.841 +
1.842 + checkGraphInArcList(adaptor, n2, 1);
1.843 + checkGraphInArcList(adaptor, n3, 2);
1.844 + checkGraphInArcList(adaptor, n4, 1);
1.845 +
1.846 + checkGraphIncEdgeList(adaptor, n2, 1);
1.847 + checkGraphIncEdgeList(adaptor, n3, 2);
1.848 + checkGraphIncEdgeList(adaptor, n4, 1);
1.849 +
1.850 + checkNodeIds(adaptor);
1.851 + checkArcIds(adaptor);
1.852 + checkEdgeIds(adaptor);
1.853 +
1.854 + checkGraphNodeMap(adaptor);
1.855 + checkGraphArcMap(adaptor);
1.856 + checkGraphEdgeMap(adaptor);
1.857 +
1.858 + node_filter[n1] = node_filter[n2] = node_filter[n3] = node_filter[n4] = false;
1.859 +
1.860 + checkGraphNodeList(adaptor, 0);
1.861 + checkGraphArcList(adaptor, 0);
1.862 + checkGraphEdgeList(adaptor, 0);
1.863 + checkGraphConArcList(adaptor, 0);
1.864 + checkGraphConEdgeList(adaptor, 0);
1.865 +
1.866 + checkNodeIds(adaptor);
1.867 + checkArcIds(adaptor);
1.868 + checkEdgeIds(adaptor);
1.869 +
1.870 + checkGraphNodeMap(adaptor);
1.871 + checkGraphArcMap(adaptor);
1.872 + checkGraphEdgeMap(adaptor);
1.873 +}
1.874 +
1.875 +void checkEdgeSubGraphAdaptor() {
1.876 + checkConcept<concepts::Graph,
1.877 + EdgeSubGraphAdaptor<concepts::Graph,
1.878 + concepts::Graph::EdgeMap<bool> > >();
1.879 +
1.880 + typedef ListGraph Graph;
1.881 + typedef Graph::EdgeMap<bool> EdgeFilter;
1.882 + typedef EdgeSubGraphAdaptor<Graph, EdgeFilter> Adaptor;
1.883 +
1.884 + Graph graph;
1.885 + EdgeFilter edge_filter(graph);
1.886 + Adaptor adaptor(graph, edge_filter);
1.887 +
1.888 + Graph::Node n1 = graph.addNode();
1.889 + Graph::Node n2 = graph.addNode();
1.890 + Graph::Node n3 = graph.addNode();
1.891 + Graph::Node n4 = graph.addNode();
1.892 +
1.893 + Graph::Edge e1 = graph.addEdge(n1, n2);
1.894 + Graph::Edge e2 = graph.addEdge(n1, n3);
1.895 + Graph::Edge e3 = graph.addEdge(n2, n3);
1.896 + Graph::Edge e4 = graph.addEdge(n3, n4);
1.897 +
1.898 + edge_filter[e1] = edge_filter[e2] = edge_filter[e3] = edge_filter[e4] = true;
1.899 +
1.900 + checkGraphNodeList(adaptor, 4);
1.901 + checkGraphArcList(adaptor, 8);
1.902 + checkGraphEdgeList(adaptor, 4);
1.903 + checkGraphConArcList(adaptor, 8);
1.904 + checkGraphConEdgeList(adaptor, 4);
1.905 +
1.906 + checkGraphOutArcList(adaptor, n1, 2);
1.907 + checkGraphOutArcList(adaptor, n2, 2);
1.908 + checkGraphOutArcList(adaptor, n3, 3);
1.909 + checkGraphOutArcList(adaptor, n4, 1);
1.910 +
1.911 + checkGraphInArcList(adaptor, n1, 2);
1.912 + checkGraphInArcList(adaptor, n2, 2);
1.913 + checkGraphInArcList(adaptor, n3, 3);
1.914 + checkGraphInArcList(adaptor, n4, 1);
1.915 +
1.916 + checkGraphIncEdgeList(adaptor, n1, 2);
1.917 + checkGraphIncEdgeList(adaptor, n2, 2);
1.918 + checkGraphIncEdgeList(adaptor, n3, 3);
1.919 + checkGraphIncEdgeList(adaptor, n4, 1);
1.920 +
1.921 + checkNodeIds(adaptor);
1.922 + checkArcIds(adaptor);
1.923 + checkEdgeIds(adaptor);
1.924 +
1.925 + checkGraphNodeMap(adaptor);
1.926 + checkGraphArcMap(adaptor);
1.927 + checkGraphEdgeMap(adaptor);
1.928 +
1.929 + edge_filter[e2] = false;
1.930 +
1.931 + checkGraphNodeList(adaptor, 4);
1.932 + checkGraphArcList(adaptor, 6);
1.933 + checkGraphEdgeList(adaptor, 3);
1.934 + checkGraphConArcList(adaptor, 6);
1.935 + checkGraphConEdgeList(adaptor, 3);
1.936 +
1.937 + checkGraphOutArcList(adaptor, n1, 1);
1.938 + checkGraphOutArcList(adaptor, n2, 2);
1.939 + checkGraphOutArcList(adaptor, n3, 2);
1.940 + checkGraphOutArcList(adaptor, n4, 1);
1.941 +
1.942 + checkGraphInArcList(adaptor, n1, 1);
1.943 + checkGraphInArcList(adaptor, n2, 2);
1.944 + checkGraphInArcList(adaptor, n3, 2);
1.945 + checkGraphInArcList(adaptor, n4, 1);
1.946 +
1.947 + checkGraphIncEdgeList(adaptor, n1, 1);
1.948 + checkGraphIncEdgeList(adaptor, n2, 2);
1.949 + checkGraphIncEdgeList(adaptor, n3, 2);
1.950 + checkGraphIncEdgeList(adaptor, n4, 1);
1.951 +
1.952 + checkNodeIds(adaptor);
1.953 + checkArcIds(adaptor);
1.954 + checkEdgeIds(adaptor);
1.955 +
1.956 + checkGraphNodeMap(adaptor);
1.957 + checkGraphArcMap(adaptor);
1.958 + checkGraphEdgeMap(adaptor);
1.959 +
1.960 + edge_filter[e1] = edge_filter[e2] = edge_filter[e3] = edge_filter[e4] = false;
1.961 +
1.962 + checkGraphNodeList(adaptor, 4);
1.963 + checkGraphArcList(adaptor, 0);
1.964 + checkGraphEdgeList(adaptor, 0);
1.965 + checkGraphConArcList(adaptor, 0);
1.966 + checkGraphConEdgeList(adaptor, 0);
1.967 +
1.968 + checkNodeIds(adaptor);
1.969 + checkArcIds(adaptor);
1.970 + checkEdgeIds(adaptor);
1.971 +
1.972 + checkGraphNodeMap(adaptor);
1.973 + checkGraphArcMap(adaptor);
1.974 + checkGraphEdgeMap(adaptor);
1.975 +}
1.976 +
1.977 +void checkDirGraphAdaptor() {
1.978 + checkConcept<concepts::Digraph,
1.979 + DirGraphAdaptor<concepts::Graph, concepts::Graph::EdgeMap<bool> > >();
1.980 +
1.981 + typedef ListGraph Graph;
1.982 + typedef ListGraph::EdgeMap<bool> DirMap;
1.983 + typedef DirGraphAdaptor<Graph> Adaptor;
1.984 +
1.985 + Graph graph;
1.986 + DirMap dir(graph, true);
1.987 + Adaptor adaptor(graph, dir);
1.988 +
1.989 + Graph::Node n1 = graph.addNode();
1.990 + Graph::Node n2 = graph.addNode();
1.991 + Graph::Node n3 = graph.addNode();
1.992 +
1.993 + Graph::Edge e1 = graph.addEdge(n1, n2);
1.994 + Graph::Edge e2 = graph.addEdge(n1, n3);
1.995 + Graph::Edge e3 = graph.addEdge(n2, n3);
1.996 +
1.997 + checkGraphNodeList(adaptor, 3);
1.998 + checkGraphArcList(adaptor, 3);
1.999 + checkGraphConArcList(adaptor, 3);
1.1000 +
1.1001 + {
1.1002 + dir[e1] = true;
1.1003 + Adaptor::Node u = adaptor.source(e1);
1.1004 + Adaptor::Node v = adaptor.target(e1);
1.1005 +
1.1006 + dir[e1] = false;
1.1007 + check (u == adaptor.target(e1), "Wrong dir");
1.1008 + check (v == adaptor.source(e1), "Wrong dir");
1.1009 +
1.1010 + check ((u == n1 && v == n2) || (u == n2 && v == n1), "Wrong dir");
1.1011 + dir[e1] = n1 == u;
1.1012 + }
1.1013 +
1.1014 + {
1.1015 + dir[e2] = true;
1.1016 + Adaptor::Node u = adaptor.source(e2);
1.1017 + Adaptor::Node v = adaptor.target(e2);
1.1018 +
1.1019 + dir[e2] = false;
1.1020 + check (u == adaptor.target(e2), "Wrong dir");
1.1021 + check (v == adaptor.source(e2), "Wrong dir");
1.1022 +
1.1023 + check ((u == n1 && v == n3) || (u == n3 && v == n1), "Wrong dir");
1.1024 + dir[e2] = n3 == u;
1.1025 + }
1.1026 +
1.1027 + {
1.1028 + dir[e3] = true;
1.1029 + Adaptor::Node u = adaptor.source(e3);
1.1030 + Adaptor::Node v = adaptor.target(e3);
1.1031 +
1.1032 + dir[e3] = false;
1.1033 + check (u == adaptor.target(e3), "Wrong dir");
1.1034 + check (v == adaptor.source(e3), "Wrong dir");
1.1035 +
1.1036 + check ((u == n2 && v == n3) || (u == n3 && v == n2), "Wrong dir");
1.1037 + dir[e3] = n2 == u;
1.1038 + }
1.1039 +
1.1040 + checkGraphOutArcList(adaptor, n1, 1);
1.1041 + checkGraphOutArcList(adaptor, n2, 1);
1.1042 + checkGraphOutArcList(adaptor, n3, 1);
1.1043 +
1.1044 + checkGraphInArcList(adaptor, n1, 1);
1.1045 + checkGraphInArcList(adaptor, n2, 1);
1.1046 + checkGraphInArcList(adaptor, n3, 1);
1.1047 +
1.1048 + checkNodeIds(adaptor);
1.1049 + checkArcIds(adaptor);
1.1050 +
1.1051 + checkGraphNodeMap(adaptor);
1.1052 + checkGraphArcMap(adaptor);
1.1053 +
1.1054 +}
1.1055 +
1.1056 +
1.1057 +int main(int, const char **) {
1.1058 +
1.1059 + checkDigraphAdaptor();
1.1060 + checkRevDigraphAdaptor();
1.1061 + checkSubDigraphAdaptor();
1.1062 + checkNodeSubDigraphAdaptor();
1.1063 + checkArcSubDigraphAdaptor();
1.1064 + checkUndirDigraphAdaptor();
1.1065 + checkResDigraphAdaptor();
1.1066 + checkSplitDigraphAdaptor();
1.1067 +
1.1068 + checkGraphAdaptor();
1.1069 + checkSubGraphAdaptor();
1.1070 + checkNodeSubGraphAdaptor();
1.1071 + checkEdgeSubGraphAdaptor();
1.1072 + checkDirGraphAdaptor();
1.1073 +
1.1074 + return 0;
1.1075 +}