Changeset 1013:b3bdd856faf4 in lemon-0.x for src/work/marci/merge_node_graph_wrapper_test.cc
- Timestamp:
- 11/20/04 15:09:27 (20 years ago)
- Branch:
- default
- Phase:
- public
- Convert:
- svn:c9d7d8f5-90d6-0310-b91f-818b3a526b0e/lemon/trunk@1403
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/work/marci/merge_node_graph_wrapper_test.cc
r1009 r1013 5 5 #include <lemon/smart_graph.h> 6 6 #include <lemon/dimacs.h> 7 #include <lemon/full_graph.h> 7 8 #include <merge_node_graph_wrapper.h> 8 9 … … 22 23 }; 23 24 24 int main() { 25 typedef SmartGraph Graph1; 26 typedef ListGraph Graph2; 27 28 { 29 checkConcept<StaticGraph, NewEdgeSetGraphWrapper<Graph1, Graph2> >(); 30 } 31 { 32 checkConcept<StaticGraph, MergeEdgeGraphWrapper<Graph1, Graph2> >(); 33 } 34 35 Graph1 g; 36 Graph2 h; 37 typedef MergeEdgeGraphWrapper<Graph1, Graph2> GW; 38 GW gw(g, h); 39 40 std::ifstream f1("graph1.dim"); 41 std::ifstream f2("graph2.dim"); 42 readDimacs(f1, g); 43 readDimacs(f2, h); 44 { 45 46 // Graph1::Node n1=g.addNode(); 47 // Graph1::Node n2=g.addNode(); 48 // Graph1::Node n3=g.addNode(); 49 // Graph2::Node n4=h.addNode(); 50 // Graph2::Node n5=h.addNode(); 51 // Graph2::Node n6=h.addNode(); 52 // Graph1::Edge e1=g.addEdge(n1, n2); 53 // Graph1::Edge e2=g.addEdge(n1, n3); 54 // Graph2::Edge e3=h.addEdge(n4, n5); 55 // Graph2::Edge e4=h.addEdge(n4, n5); 56 //GW::NodeIt n(gw) 57 cout << "1st graph" << endl; 25 template <typename Graph> 26 void printGraph(const Graph& g) { 58 27 cout << " nodes:" << endl; 59 for ( Graph1::NodeIt n(g); n!=INVALID; ++n) {28 for (typename Graph::NodeIt n(g); n!=INVALID; ++n) { 60 29 cout << " " << g.id(n) << endl; 61 30 } 62 31 cout << " edges:" << endl; 63 for ( Graph1::EdgeIt n(g); n!=INVALID; ++n) {32 for (typename Graph::EdgeIt n(g); n!=INVALID; ++n) { 64 33 cout << " " << g.id(n) << ": " 65 34 << g.id(g.source(n)) << "->" << g.id(g.target(n)) << endl; 66 } 67 cout << "2nd graph" << endl; 68 cout << " nodes:" << endl; 69 for (Graph2::NodeIt n(h); n!=INVALID; ++n) { 70 cout << " " << h.id(n) << endl; 71 } 72 cout << " edges:" << endl; 73 for (Graph2::EdgeIt n(h); n!=INVALID; ++n) { 74 cout << " " << h.id(n) << ": " 75 << h.id(h.source(n)) << "->" << h.id(h.target(n)) << endl; 76 } 77 cout << "merged graph" << endl; 78 cout << " nodes:" << endl; 79 for (GW::NodeIt n(gw); n!=INVALID; ++n) { 80 cout << " "<< gw.id(n) << endl; 81 } 82 cout << " edges:" << endl; 83 for (GW::EdgeIt n(gw); n!=INVALID; ++n) { 84 cout << " " << gw.id(n) << ": " 85 << gw.id(gw.source(n)) << "->" << gw.id(gw.target(n)) << endl; 35 } 36 } 37 38 int main() { 39 { 40 cout << "FIRST TEST" << endl; 41 typedef SmartGraph Graph1; 42 typedef ListGraph Graph2; 43 44 { 45 checkConcept<StaticGraph, MergeEdgeGraphWrapper<Graph1, Graph2> >(); 46 MergeEdgeGraphWrapper<Graph1, Graph2>::printNode(); 47 MergeEdgeGraphWrapper<Graph1, Graph2>::printEdge(); 48 checkConcept<StaticGraph, MergeEdgeGraphWrapper<Graph1, Graph1> >(); 49 MergeEdgeGraphWrapper<Graph1, Graph1>::printNode(); 50 MergeEdgeGraphWrapper<Graph1, Graph1>::printEdge(); 51 } 52 53 Graph1 g1; 54 Graph2 g2; 55 typedef MergeEdgeGraphWrapper<Graph1, Graph2> GW; 56 GW gw(g1, g2); 57 58 std::ifstream f1("graph1.dim"); 59 std::ifstream f2("graph2.dim"); 60 readDimacs(f1, g1); 61 readDimacs(f2, g2); 62 63 cout << "1st graph" << endl; 64 printGraph(g1); 65 66 cout << "2nd graph" << endl; 67 printGraph(g2); 68 69 cout << "merged graph" << endl; 70 printGraph(gw); 71 86 72 } 87 73 88 GW::NodeMap<int> nm(gw); 89 int i=0; 90 for (GW::NodeIt n(gw); n!=INVALID; ++n) { 91 ++i; 92 nm.set(n, i); 93 } 94 for (Graph1::NodeIt n(g); n!=INVALID; ++n) { 95 cout << nm[GW::Node(n,INVALID,false)] << endl; 96 } 97 for (Graph2::NodeIt n(h); n!=INVALID; ++n) { 98 cout << nm[GW::Node(INVALID,n,true)] << endl; 74 75 { 76 cout << "SECOND TEST" << endl; 77 typedef SmartGraph Graph1; 78 { 79 checkConcept<StaticGraph, Graph1>(); 80 } 81 82 Graph1 g1; 83 84 FullGraph pre_g2(2); 85 ConstMap<FullGraph::Edge, bool> const_false_map(false); 86 typedef EdgeSubGraphWrapper<FullGraph, ConstMap<FullGraph::Edge, bool> > 87 Graph2; 88 { 89 checkConcept<StaticGraph, Graph2>(); 90 } 91 92 Graph2 g2(pre_g2, const_false_map); 93 94 typedef MergeEdgeGraphWrapper<Graph1, Graph2> GW; 95 { 96 checkConcept<StaticGraph, GW>(); 97 } 98 GW gw(g1, g2); 99 GW::Node sw; 100 GW::Node tw; 101 { 102 Graph2::NodeIt k(g2); 103 sw=GW::Node(INVALID, k, true); 104 ++k; 105 tw=GW::Node(INVALID, k, true); 106 } 107 108 std::ifstream f1("graph2.dim"); 109 readDimacs(f1, g1); 110 111 cout << "1st graph" << endl; 112 printGraph(g1); 113 114 cout << "2nd graph" << endl; 115 printGraph(g2); 116 117 cout << "merged graph" << endl; 118 printGraph(gw); 119 120 typedef ListGraph Graph3; 121 Graph3 g3; 122 GW::NodeMap<Graph3::Node> gwn(gw); 123 Graph3::NodeMap<GW::Node> g3n(g3); 124 for (GW::NodeIt n(gw); n!=INVALID; ++n) { 125 Graph3::Node m=g3.addNode(); 126 gwn.set(n, m); 127 g3n.set(m, n); 128 } 129 130 typedef NewEdgeSetGraphWrapper<GW, Graph3> GWW; 131 { 132 checkConcept<StaticGraph, GWW>(); 133 } 134 135 GWW gww(gw, g3, gwn, g3n); 136 137 for (Graph1::NodeIt n(g1); n!=INVALID; ++n) { 138 g3.addEdge(gwn[sw], gwn[GW::Node(n,INVALID,false)]); 139 } 140 141 // for (Graph1::NodeIt n(g1); n!=INVALID; ++n) { 142 // gww.addEdge(sw, GW::Node(n,INVALID,false)); 143 // } 144 145 cout << "new edges" << endl; 146 printGraph(g3); 147 148 cout << "new edges in the new graph" << endl; 149 printGraph(gww); 150 151 typedef AugmentingGraphWrapper<GW, GWW> GWWW; 152 { 153 checkConcept<StaticGraph, GWWW>(); 154 } 155 GWWW gwww(gw, gww); 156 157 cout << "new edges merged into the original graph" << endl; 158 printGraph(gwww); 159 99 160 } 100 161 101 gw.printNode();102 103 {104 // typedef SmartGraph Graph1;105 typedef ListGraph Graph1;106 typedef ListGraph Graph2;107 Graph1 g;108 Graph2 h;109 typedef MergeNodeGraphWrapper<Graph1, Graph2> GW;110 GW gw(g, h);111 gw.printNode();112 }113 {114 // typedef SmartGraph Graph1;115 typedef Graph3 Graph1;116 typedef ListGraph Graph2;117 Graph1 g;118 Graph2 h;119 typedef MergeNodeGraphWrapper<Graph1, Graph2> GW;120 GW gw(g, h);121 gw.printNode();122 }123 {124 // typedef SmartGraph Graph1;125 typedef ListGraph Graph1;126 typedef Graph3 Graph2;127 Graph1 g;128 Graph2 h;129 typedef MergeNodeGraphWrapper<Graph1, Graph2> GW;130 GW gw(g, h);131 gw.printNode();132 }133 }134 {135 Graph1 g;136 Graph2 h;137 typedef Graph1::Node Node1;138 typedef Graph2::Node Node2;139 typedef NewEdgeSetGraphWrapper<Graph1, Graph2> GW;140 Graph1::NodeMap<Graph2::Node> e_node(g);141 Graph2::NodeMap<Graph1::Node> n_node(h);142 GW gw(g, h, e_node, n_node);143 for (int i=0; i<4; ++i) {144 Node1 n=g.addNode();145 e_node.set(n, INVALID);146 }147 for (int i=0; i<4; ++i) {148 Graph1::Node n1=g.addNode();149 Graph2::Node n2=h.addNode();150 e_node.set(n1, n2);151 n_node.set(n2, n1);152 }153 for (Graph2::NodeIt n(h); n!=INVALID; ++n)154 for (Graph2::NodeIt m(h); m!=INVALID; ++m)155 if ((h.id(n)+h.id(m))%3==0) h.addEdge(n, m);156 // Graph1::NodeIt n(g);157 // Node1 n1=n;158 // Node1 n2=++n;159 // Node1 n3=++n;160 // Node1 n4=n;161 // gw.addEdge(n1, n2);162 // gw.addEdge(n1, n2);163 // for (EdgeIt(e))164 // Graph1::Node n1=g.addNode();165 // Graph1::Node n2=g.addNode();166 // Graph1::Node n3=g.addNode();167 // Graph2::Node n4=h.addNode();168 // Graph2::Node n5=h.addNode();169 for (GW::EdgeIt e(gw); e!=INVALID; ++e)170 cout << gw.id(e) << endl;171 for (GW::NodeIt n(gw); n!=INVALID; ++n) {172 if (e_node[n]==INVALID) {173 cout<<gw.id(n)<<" INVALID"<<endl;174 } else {175 cout <<gw.id(n)<<" "<<h.id(e_node[n])<<" out_edges: ";176 // cout << &e_node << endl;177 //cout << &n_node << endl;178 for (GW::OutEdgeIt e(gw, n); e!=INVALID; ++e) {179 cout<<gw.id(e)<<" ";180 }181 cout<< endl;182 }183 }184 }185 162 }
Note: See TracChangeset
for help on using the changeset viewer.