14 |
14 |
15 using namespace lemon; |
15 using namespace lemon; |
16 using namespace lemon::concept; |
16 using namespace lemon::concept; |
17 |
17 |
18 void check_concepts() { |
18 void check_concepts() { |
19 typedef UndirGraphExtender<ListGraphBase> UndirListGraphBase; |
19 typedef UGraphExtender<ListGraphBase> ListUGraphBase; |
20 |
20 |
21 typedef IterableUndirGraphExtender< |
21 typedef IterableUGraphExtender< |
22 AlterableUndirGraphExtender<UndirListGraphBase> > IterableUndirListGraph; |
22 AlterableUGraphExtender<ListUGraphBase> > IterableListUGraph; |
23 |
23 |
24 typedef MappableUndirGraphExtender<IterableUndirListGraph> |
24 typedef MappableUGraphExtender<IterableListUGraph> |
25 MappableUndirListGraph; |
25 MappableListUGraph; |
26 |
26 |
27 typedef ErasableUndirGraphExtender< |
27 typedef ErasableUGraphExtender< |
28 ClearableUndirGraphExtender< |
28 ClearableUGraphExtender< |
29 ExtendableUndirGraphExtender<MappableUndirListGraph> > > Graph; |
29 ExtendableUGraphExtender<MappableListUGraph> > > Graph; |
30 |
30 |
31 checkConcept<BaseIterableUndirGraphConcept, Graph>(); |
31 checkConcept<BaseIterableUGraphConcept, Graph>(); |
32 checkConcept<IterableUndirGraphConcept, Graph>(); |
32 checkConcept<IterableUGraphConcept, Graph>(); |
33 checkConcept<MappableUndirGraphConcept, Graph>(); |
33 checkConcept<MappableUGraphConcept, Graph>(); |
34 |
34 |
35 checkConcept<UndirGraph, Graph>(); |
35 checkConcept<UGraph, Graph>(); |
36 checkConcept<ErasableUndirGraph, Graph>(); |
36 checkConcept<ErasableUGraph, Graph>(); |
37 |
37 |
38 checkConcept<UndirGraph, UndirListGraph>(); |
38 checkConcept<UGraph, ListUGraph>(); |
39 checkConcept<ErasableUndirGraph, UndirListGraph>(); |
39 checkConcept<ErasableUGraph, ListUGraph>(); |
40 |
40 |
41 checkConcept<UndirGraph, UndirSmartGraph>(); |
41 checkConcept<UGraph, SmartUGraph>(); |
42 checkConcept<ExtendableUndirGraph, UndirSmartGraph>(); |
42 checkConcept<ExtendableUGraph, SmartUGraph>(); |
43 |
43 |
44 checkConcept<UndirGraph, UndirFullGraph>(); |
44 checkConcept<UGraph, FullUGraph>(); |
45 |
45 |
46 checkConcept<UndirGraph, UndirGraph>(); |
46 checkConcept<UGraph, UGraph>(); |
47 |
47 |
48 checkConcept<UndirGraph, GridGraph>(); |
48 checkConcept<UGraph, GridGraph>(); |
49 } |
49 } |
50 |
50 |
51 template <typename Graph> |
51 template <typename Graph> |
52 void check_item_counts(Graph &g, int n, int e) { |
52 void check_item_counts(Graph &g, int n, int e) { |
53 int nn = 0; |
53 int nn = 0; |
65 |
65 |
66 check(ee == 2*e, "Wrong edge number."); |
66 check(ee == 2*e, "Wrong edge number."); |
67 check(countEdges(g) == 2*e, "Wrong edge number."); |
67 check(countEdges(g) == 2*e, "Wrong edge number."); |
68 |
68 |
69 int uee = 0; |
69 int uee = 0; |
70 for (typename Graph::UndirEdgeIt it(g); it != INVALID; ++it) { |
70 for (typename Graph::UEdgeIt it(g); it != INVALID; ++it) { |
71 ++uee; |
71 ++uee; |
72 } |
72 } |
73 |
73 |
74 check(uee == e, "Wrong undir edge number."); |
74 check(uee == e, "Wrong uedge number."); |
75 check(countUndirEdges(g) == e, "Wrong undir edge number."); |
75 check(countUEdges(g) == e, "Wrong uedge number."); |
76 } |
76 } |
77 |
77 |
78 template <typename Graph> |
78 template <typename Graph> |
79 void print_items(Graph &g) { |
79 void print_items(Graph &g) { |
80 |
80 |
81 typedef typename Graph::NodeIt NodeIt; |
81 typedef typename Graph::NodeIt NodeIt; |
82 typedef typename Graph::UndirEdgeIt UEdgeIt; |
82 typedef typename Graph::UEdgeIt UEdgeIt; |
83 typedef typename Graph::EdgeIt EdgeIt; |
83 typedef typename Graph::EdgeIt EdgeIt; |
84 |
84 |
85 std::cout << "Nodes" << std::endl; |
85 std::cout << "Nodes" << std::endl; |
86 int i=0; |
86 int i=0; |
87 for(NodeIt it(g); it!=INVALID; ++it, ++i) { |
87 for(NodeIt it(g); it!=INVALID; ++it, ++i) { |
88 std::cout << " " << i << ": " << g.id(it) << std::endl; |
88 std::cout << " " << i << ": " << g.id(it) << std::endl; |
89 } |
89 } |
90 |
90 |
91 std::cout << "UndirEdge" << std::endl; |
91 std::cout << "UEdge" << std::endl; |
92 i=0; |
92 i=0; |
93 for(UEdgeIt it(g); it!=INVALID; ++it, ++i) { |
93 for(UEdgeIt it(g); it!=INVALID; ++it, ++i) { |
94 std::cout << " " << i << ": " << g.id(it) |
94 std::cout << " " << i << ": " << g.id(it) |
95 << " (" << g.id(g.source(it)) << ", " << g.id(g.target(it)) |
95 << " (" << g.id(g.source(it)) << ", " << g.id(g.target(it)) |
96 << ")" << std::endl; |
96 << ")" << std::endl; |
108 |
108 |
109 template <typename Graph> |
109 template <typename Graph> |
110 void check_graph() { |
110 void check_graph() { |
111 |
111 |
112 typedef typename Graph::Node Node; |
112 typedef typename Graph::Node Node; |
113 typedef typename Graph::UndirEdge UEdge; |
113 typedef typename Graph::UEdge UEdge; |
114 typedef typename Graph::Edge Edge; |
114 typedef typename Graph::Edge Edge; |
115 typedef typename Graph::NodeIt NodeIt; |
115 typedef typename Graph::NodeIt NodeIt; |
116 typedef typename Graph::UndirEdgeIt UEdgeIt; |
116 typedef typename Graph::UEdgeIt UEdgeIt; |
117 typedef typename Graph::EdgeIt EdgeIt; |
117 typedef typename Graph::EdgeIt EdgeIt; |
118 |
118 |
119 Graph g; |
119 Graph g; |
120 |
120 |
121 check_item_counts(g,0,0); |
121 check_item_counts(g,0,0); |