klao@962: // -*- C++ -*- klao@962: deba@1307: #include klao@962: #include klao@962: #include klao@962: #include klao@962: #include klao@962: klao@1053: #include klao@1053: klao@962: #include "test_tools.h" klao@962: klao@962: klao@962: using namespace lemon; klao@962: using namespace lemon::concept; klao@962: klao@1053: void check_concepts() { klao@962: typedef UndirGraphExtender UndirListGraphBase; klao@962: klao@962: typedef IterableUndirGraphExtender< klao@962: AlterableUndirGraphExtender > IterableUndirListGraph; klao@962: klao@1022: typedef MappableUndirGraphExtender klao@1022: MappableUndirListGraph; klao@1022: klao@1022: typedef ErasableUndirGraphExtender< klao@1022: ClearableUndirGraphExtender< klao@1022: ExtendableUndirGraphExtender > > Graph; klao@1022: klao@1022: checkConcept(); klao@1022: checkConcept(); klao@1022: checkConcept(); klao@1022: klao@1022: checkConcept(); klao@1022: checkConcept(); klao@962: klao@1034: checkConcept(); klao@1034: checkConcept(); klao@1034: klao@1034: checkConcept(); klao@1034: checkConcept(); klao@1034: klao@1030: checkConcept(); klao@1053: } klao@1053: klao@1054: template klao@1053: void check_item_counts(Graph &g, int n, int e) { klao@1053: check(countNodes(g)==n, "Wrong node number."); klao@1053: check(countEdges(g)==2*e, "Wrong edge number."); klao@1053: } klao@1053: klao@1054: template klao@1053: void print_items(Graph &g) { klao@1054: klao@1054: typedef typename Graph::NodeIt NodeIt; klao@1054: typedef typename Graph::UndirEdgeIt UEdgeIt; klao@1054: typedef typename Graph::EdgeIt EdgeIt; klao@1054: klao@1053: cout << "Nodes" << endl; klao@1053: int i=0; klao@1053: for(NodeIt it(g); it!=INVALID; ++it, ++i) { klao@1053: cout << " " << i << ": " << g.id(it) << endl; klao@1053: } klao@1053: klao@1053: cout << "UndirEdge" << endl; klao@1053: i=0; klao@1053: for(UEdgeIt it(g); it!=INVALID; ++it, ++i) { klao@1053: cout << " " << i << ": " << g.id(it) klao@1053: << " (" << g.id(g.source(it)) << ", " << g.id(g.target(it)) klao@1053: << ")" << endl; klao@1053: } klao@1053: klao@1053: cout << "Edge" << endl; klao@1053: i=0; klao@1053: for(EdgeIt it(g); it!=INVALID; ++it, ++i) { klao@1053: cout << " " << i << ": " << g.id(it) klao@1053: << " (" << g.id(g.source(it)) << ", " << g.id(g.target(it)) klao@1053: << ")" << endl; klao@1053: } klao@1053: klao@1053: } klao@1053: klao@1054: template klao@1054: void check_graph() { klao@1053: klao@1054: typedef typename Graph::Node Node; klao@1054: typedef typename Graph::UndirEdge UEdge; klao@1054: typedef typename Graph::Edge Edge; klao@1054: typedef typename Graph::NodeIt NodeIt; klao@1054: typedef typename Graph::UndirEdgeIt UEdgeIt; klao@1054: typedef typename Graph::EdgeIt EdgeIt; klao@1053: klao@1053: Graph g; klao@1053: klao@1053: check_item_counts(g,0,0); klao@1053: klao@1053: Node klao@1053: n1 = g.addNode(), klao@1053: n2 = g.addNode(), klao@1053: n3 = g.addNode(); klao@1053: klao@1053: UEdge klao@1053: e1 = g.addEdge(n1, n2), klao@1053: e2 = g.addEdge(n2, n3); klao@1053: klao@1053: // print_items(g); klao@1053: klao@1053: check_item_counts(g,3,2); klao@1030: klao@1054: klao@1054: } klao@1054: klao@1054: int main() { klao@1054: check_concepts(); klao@1054: klao@1054: check_graph(); klao@1054: check_graph(); klao@1054: klao@962: return 0; klao@962: }