1 /* -*- mode: C++; indent-tabs-mode: nil; -*-
3 * This file is a part of LEMON, a generic C++ optimization library.
5 * Copyright (C) 2003-2008
6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
7 * (Egervary Research Group on Combinatorial Optimization, EGRES).
9 * Permission to use, modify and distribute this software is granted
10 * provided that this copyright notice appears in all copies. For
11 * precise terms see the accompanying LICENSE file.
13 * This software is provided "AS IS" with no warranty of any kind,
14 * express or implied, and with no claim as to its suitability for any
19 #include <lemon/concepts/digraph.h>
20 #include <lemon/list_graph.h>
21 #include <lemon/smart_graph.h>
22 //#include <lemon/full_graph.h>
23 //#include <lemon/hypercube_graph.h>
25 #include "test_tools.h"
26 #include "graph_test.h"
28 using namespace lemon;
29 using namespace lemon::concepts;
31 template <class Digraph>
33 TEMPLATE_DIGRAPH_TYPEDEFS(Digraph);
36 checkGraphNodeList(G, 0);
37 checkGraphArcList(G, 0);
43 checkGraphNodeList(G, 3);
44 checkGraphArcList(G, 0);
46 Arc a1 = G.addArc(n1, n2);
47 check(G.source(a1) == n1 && G.target(a1) == n2, "Wrong arc");
48 checkGraphNodeList(G, 3);
49 checkGraphArcList(G, 1);
51 checkGraphOutArcList(G, n1, 1);
52 checkGraphOutArcList(G, n2, 0);
53 checkGraphOutArcList(G, n3, 0);
55 checkGraphInArcList(G, n1, 0);
56 checkGraphInArcList(G, n2, 1);
57 checkGraphInArcList(G, n3, 0);
59 checkGraphConArcList(G, 1);
61 Arc a2 = G.addArc(n2, n1), a3 = G.addArc(n2, n3), a4 = G.addArc(n2, n3);
62 checkGraphNodeList(G, 3);
63 checkGraphArcList(G, 4);
65 checkGraphOutArcList(G, n1, 1);
66 checkGraphOutArcList(G, n2, 3);
67 checkGraphOutArcList(G, n3, 0);
69 checkGraphInArcList(G, n1, 1);
70 checkGraphInArcList(G, n2, 1);
71 checkGraphInArcList(G, n3, 2);
73 checkGraphConArcList(G, 4);
83 void checkConcepts() {
84 { // Checking digraph components
85 checkConcept<BaseDigraphComponent, BaseDigraphComponent >();
87 checkConcept<IDableDigraphComponent<>,
88 IDableDigraphComponent<> >();
90 checkConcept<IterableDigraphComponent<>,
91 IterableDigraphComponent<> >();
93 checkConcept<MappableDigraphComponent<>,
94 MappableDigraphComponent<> >();
96 { // Checking skeleton digraph
97 checkConcept<Digraph, Digraph>();
99 { // Checking ListDigraph
100 checkConcept<Digraph, ListDigraph>();
101 checkConcept<AlterableDigraphComponent<>, ListDigraph>();
102 checkConcept<ExtendableDigraphComponent<>, ListDigraph>();
103 checkConcept<ClearableDigraphComponent<>, ListDigraph>();
104 checkConcept<ErasableDigraphComponent<>, ListDigraph>();
106 { // Checking SmartDigraph
107 checkConcept<Digraph, SmartDigraph>();
108 checkConcept<AlterableDigraphComponent<>, SmartDigraph>();
109 checkConcept<ExtendableDigraphComponent<>, SmartDigraph>();
110 checkConcept<ClearableDigraphComponent<>, SmartDigraph>();
112 // { // Checking FullDigraph
113 // checkConcept<Digraph, FullDigraph>();
115 // { // Checking HyperCubeDigraph
116 // checkConcept<Digraph, HyperCubeDigraph>();
120 template <typename Digraph>
121 void checkDigraphValidity() {
122 TEMPLATE_DIGRAPH_TYPEDEFS(Digraph);
131 e1 = g.addArc(n1, n2),
132 e2 = g.addArc(n2, n3);
134 check(g.valid(n1), "Wrong validity check");
135 check(g.valid(e1), "Wrong validity check");
137 check(!g.valid(g.nodeFromId(-1)), "Wrong validity check");
138 check(!g.valid(g.arcFromId(-1)), "Wrong validity check");
141 template <typename Digraph>
142 void checkDigraphValidityErase() {
143 TEMPLATE_DIGRAPH_TYPEDEFS(Digraph);
152 e1 = g.addArc(n1, n2),
153 e2 = g.addArc(n2, n3);
155 check(g.valid(n1), "Wrong validity check");
156 check(g.valid(e1), "Wrong validity check");
160 check(!g.valid(n1), "Wrong validity check");
161 check(g.valid(n2), "Wrong validity check");
162 check(g.valid(n3), "Wrong validity check");
163 check(!g.valid(e1), "Wrong validity check");
164 check(g.valid(e2), "Wrong validity check");
166 check(!g.valid(g.nodeFromId(-1)), "Wrong validity check");
167 check(!g.valid(g.arcFromId(-1)), "Wrong validity check");
170 void checkDigraphs() {
171 { // Checking ListDigraph
172 checkDigraph<ListDigraph>();
173 checkDigraphValidityErase<ListDigraph>();
175 { // Checking SmartDigraph
176 checkDigraph<SmartDigraph>();
177 checkDigraphValidity<SmartDigraph>();