sl@0: //======================================================================= sl@0: // Copyright 1997, 1998, 1999, 2000 University of Notre Dame. sl@0: // Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek sl@0: // sl@0: // Distributed under the Boost Software License, Version 1.0. (See sl@0: // accompanying file LICENSE_1_0.txt or copy at sl@0: // http://www.boost.org/LICENSE_1_0.txt) sl@0: //======================================================================= sl@0: sl@0: /* sl@0: * © Portions copyright (c) 2006-2007 Nokia Corporation. All rights reserved. sl@0: */ sl@0: sl@0: #include sl@0: #include sl@0: #include sl@0: #include sl@0: #include sl@0: #include sl@0: sl@0: #ifdef __SYMBIAN32__ sl@0: #include "std_log_result.h" sl@0: #define LOG_FILENAME_LINE __FILE__, __LINE__ sl@0: #endif sl@0: sl@0: sl@0: sl@0: using namespace boost; sl@0: using namespace std; sl@0: sl@0: typedef property > > > > VertexProperty; sl@0: typedef property EdgeProperty; sl@0: typedef adjacency_list Graph; sl@0: sl@0: template sl@0: void print(Graph& g) { sl@0: typename Graph::vertex_iterator i, end; sl@0: typename Graph::out_edge_iterator ei, edge_end; sl@0: for(boost::tie(i,end) = vertices(g); i != end; ++i) { sl@0: cout << *i << " --> "; sl@0: for (boost::tie(ei,edge_end) = out_edges(*i, g); ei != edge_end; ++ei) sl@0: cout << target(*ei, g) << " "; sl@0: cout << endl; sl@0: } sl@0: } sl@0: sl@0: std::size_t myrand(std::size_t N) { sl@0: std::size_t ret = rand() % N; sl@0: // cout << "N = " << N << " rand = " << ret << endl; sl@0: return ret; sl@0: } sl@0: sl@0: template sl@0: bool check_edge(Graph& g, std::size_t a, std::size_t b) { sl@0: typedef typename Graph::vertex_descriptor Vertex; sl@0: typename Graph::adjacency_iterator vi, viend, found; sl@0: boost::tie(vi, viend) = adjacent_vertices(vertex(a,g), g); sl@0: sl@0: found = find(vi, viend, vertex(b, g)); sl@0: if ( found == viend ) sl@0: return false; sl@0: sl@0: return true; sl@0: } sl@0: sl@0: int main(int, char*[]) sl@0: { sl@0: std::size_t N = 5; sl@0: sl@0: Graph g(N); sl@0: int i; sl@0: sl@0: bool is_failed = false; sl@0: sl@0: for (i=0; i<6; ++i) { sl@0: std::size_t a = myrand(N), b = myrand(N); sl@0: while ( a == b ) b = myrand(N); sl@0: cout << "edge edge (" << a << "," << b <<")" << endl; sl@0: //add edges sl@0: add_edge(a, b, g); sl@0: is_failed = is_failed || (! check_edge(g, a, b) ); sl@0: } sl@0: sl@0: if ( is_failed ) sl@0: cerr << " Failed."<< endl; sl@0: else sl@0: cerr << " Passed."<< endl; sl@0: sl@0: print(g); sl@0: sl@0: //remove_edge sl@0: for (i = 0; i<2; ++i) { sl@0: std::size_t a = myrand(N), b = myrand(N); sl@0: while ( a == b ) b = myrand(N); sl@0: cout << "remove edge (" << a << "," << b <<")" << endl; sl@0: remove_edge(a, b, g); sl@0: is_failed = is_failed || check_edge(g, a, b); sl@0: } sl@0: if ( is_failed ) sl@0: cerr << " Failed."<< endl; sl@0: else sl@0: cerr << " Passed."<< endl; sl@0: sl@0: print(g); sl@0: sl@0: //add_vertex sl@0: is_failed = false; sl@0: std::size_t old_N = N; sl@0: std::size_t vid = add_vertex(g); sl@0: std::size_t vidp1 = add_vertex(g); sl@0: sl@0: N = num_vertices(g); sl@0: if ( (N - 2) != old_N ) sl@0: cerr << " Failed."<< endl; sl@0: else sl@0: cerr << " Passed."<< endl; sl@0: sl@0: is_failed = false; sl@0: for (i=0; i<2; ++i) { sl@0: std::size_t a = myrand(N), b = myrand(N); sl@0: while ( a == vid ) a = myrand(N); sl@0: while ( b == vidp1 ) b = myrand(N); sl@0: cout << "add edge (" << vid << "," << a <<")" << endl; sl@0: cout << "add edge (" << vid << "," << vidp1 <<")" << endl; sl@0: add_edge(vid, a, g); sl@0: add_edge(b, vidp1, g); sl@0: is_failed = is_failed || ! check_edge(g, vid, a); sl@0: is_failed = is_failed || ! check_edge(g, b, vidp1); sl@0: } sl@0: if ( is_failed ) sl@0: cerr << " Failed."<< endl; sl@0: else sl@0: cerr << " Passed."<< endl; sl@0: print(g); sl@0: sl@0: // clear_vertex sl@0: std::size_t c = myrand(N); sl@0: is_failed = false; sl@0: clear_vertex(c, g); sl@0: sl@0: if ( out_degree(c, g) != 0 ) sl@0: is_failed = true; sl@0: sl@0: cout << "Removing vertex " << c << endl; sl@0: remove_vertex(c, g); sl@0: sl@0: old_N = N; sl@0: N = num_vertices(g); sl@0: sl@0: if ( (N + 1) != old_N ) sl@0: is_failed = true; sl@0: sl@0: if ( is_failed ) sl@0: cerr << " Failed."<< endl; sl@0: else sl@0: cerr << " Passed."<< endl; sl@0: sl@0: print(g); sl@0: sl@0: #ifdef __SYMBIAN32__ sl@0: sl@0: std_log(LOG_FILENAME_LINE,"[End Test Case ]"); sl@0: testResultXml("graph"); sl@0: close_log_file(); sl@0: #endif sl@0: return 0; sl@0: }