[graph] minor patch for Borland testers

The following patch resolves some infinite loops that kill regression tests. Graph library is not supported on Borland compilers, so the following patch is mostly useful to: i/ people running regular regressions on this compiler ii/ someone trying to get a working port of graph library on Borland I am holding back other partial-fixes to boost-graph until I can show a reasonably large subset of the the library passing the tests. This one is a bit of a killer though: cvs diff -u -wb -- graph\random.hpp (in directory E:\sourceforge\devel\boost\boost\) Index: graph/random.hpp =================================================================== RCS file: /cvsroot/boost/boost/boost/graph/random.hpp,v retrieving revision 1.5 diff -u -w -b -r1.5 random.hpp --- graph/random.hpp 24 Mar 2005 15:06:44 -0000 1.5 +++ graph/random.hpp 19 Feb 2006 11:50:46 -0000 @@ -32,9 +32,13 @@ random_vertex(Graph& g, RandomNumGen& gen) { if (num_vertices(g) > 1) { + #if BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT(0x581)) + std::size_t n = std::random( num_vertices(g) ); + #else uniform_int<> distrib(0, num_vertices(g)-1); variate_generator<RandomNumGen&, uniform_int<> > rand_gen(gen, distrib); std::size_t n = rand_gen(); + #endif typename graph_traits<Graph>::vertex_iterator i = vertices(g).first; while (n-- > 0) ++i; // std::advance not VC++ portable @@ -47,10 +51,15 @@ typename graph_traits<Graph>::edge_descriptor random_edge(Graph& g, RandomNumGen& gen) { if (num_edges(g) > 1) { + #if BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT(0x581)) + typename graph_traits<Graph>::edges_size_type + n = std::random( num_edges(g) ); + #else uniform_int<> distrib(0, num_edges(g)-1); variate_generator<RandomNumGen&, uniform_int<> > rand_gen(gen, distrib); typename graph_traits<Graph>::edges_size_type n = rand_gen(); + #endif typename graph_traits<Graph>::edge_iterator i = edges(g).first; while (n-- > 0) ++i; // std::advance not VC++ portable I still need to investigate why boost::random is not working correctly, but in practice the random number generators used here produce an endless stream of zeros, which sends the 'find me another vertex' logic into an infinte loop. -- AlisdairM

AlisdairM wrote:
The following patch resolves some infinite loops that kill regression tests.
Graph library is not supported on Borland compilers, so the following patch is mostly useful to: i/ people running regular regressions on this compiler ii/ someone trying to get a working port of graph library on Borland
I am holding back other partial-fixes to boost-graph until I can show a reasonably large subset of the the library passing the tests. This one is a bit of a killer though:
Alisdair, I believe I just found an even better fix for this and that's to update the workarounds in boost\random\variate_generator.hpp . This is enough to get four passes for the four tests that hang. Sorry I dodn't come up with this earlier... Cheers, Nicola Musatti
participants (3)
-
AlisdairM
-
Douglas Gregor
-
Nicola Musatti