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"
27 #include "graph_maps_test.h"
29 using namespace lemon;
30 using namespace lemon::concepts;
32 void check_concepts() {
33 { // Checking digraph components
34 checkConcept<BaseDigraphComponent, BaseDigraphComponent >();
36 checkConcept<IDableDigraphComponent<>,
37 IDableDigraphComponent<> >();
39 checkConcept<IterableDigraphComponent<>,
40 IterableDigraphComponent<> >();
42 checkConcept<MappableDigraphComponent<>,
43 MappableDigraphComponent<> >();
45 { // Checking skeleton digraph
46 checkConcept<Digraph, Digraph>();
48 { // Checking ListDigraph
49 checkConcept<Digraph, ListDigraph>();
50 checkConcept<AlterableDigraphComponent<>, ListDigraph>();
51 checkConcept<ExtendableDigraphComponent<>, ListDigraph>();
52 checkConcept<ClearableDigraphComponent<>, ListDigraph>();
53 checkConcept<ErasableDigraphComponent<>, ListDigraph>();
54 checkDigraphIterators<ListDigraph>();
56 { // Checking SmartDigraph
57 checkConcept<Digraph, SmartDigraph>();
58 checkConcept<AlterableDigraphComponent<>, SmartDigraph>();
59 checkConcept<ExtendableDigraphComponent<>, SmartDigraph>();
60 checkConcept<ClearableDigraphComponent<>, SmartDigraph>();
61 checkDigraphIterators<SmartDigraph>();
63 // { // Checking FullDigraph
64 // checkConcept<Digraph, FullDigraph>();
65 // checkDigraphIterators<FullDigraph>();
67 // { // Checking HyperCubeDigraph
68 // checkConcept<Digraph, HyperCubeDigraph>();
69 // checkDigraphIterators<HyperCubeDigraph>();
73 template <typename Digraph>
74 void check_graph_validity() {
75 TEMPLATE_DIGRAPH_TYPEDEFS(Digraph);
84 e1 = g.addArc(n1, n2),
85 e2 = g.addArc(n2, n3);
87 check(g.valid(n1), "Wrong validity check");
88 check(g.valid(e1), "Wrong validity check");
90 check(!g.valid(g.nodeFromId(-1)), "Wrong validity check");
91 check(!g.valid(g.arcFromId(-1)), "Wrong validity check");
94 template <typename Digraph>
95 void check_graph_validity_erase() {
96 TEMPLATE_DIGRAPH_TYPEDEFS(Digraph);
105 e1 = g.addArc(n1, n2),
106 e2 = g.addArc(n2, n3);
108 check(g.valid(n1), "Wrong validity check");
109 check(g.valid(e1), "Wrong validity check");
113 check(!g.valid(n1), "Wrong validity check");
114 check(g.valid(n2), "Wrong validity check");
115 check(g.valid(n3), "Wrong validity check");
116 check(!g.valid(e1), "Wrong validity check");
117 check(g.valid(e2), "Wrong validity check");
119 check(!g.valid(g.nodeFromId(-1)), "Wrong validity check");
120 check(!g.valid(g.arcFromId(-1)), "Wrong validity check");
123 void check_digraphs() {
124 { // Checking ListDigraph
125 checkDigraph<ListDigraph>();
126 checkGraphNodeMap<ListDigraph>();
127 checkGraphArcMap<ListDigraph>();
129 check_graph_validity_erase<ListDigraph>();
131 { // Checking SmartDigraph
132 checkDigraph<SmartDigraph>();
133 checkGraphNodeMap<SmartDigraph>();
134 checkGraphArcMap<SmartDigraph>();
136 check_graph_validity<SmartDigraph>();