#include <boost/heap/heap_concepts.hpp>
+#ifdef BOOST_NO_CXX98_RANDOM_SHUFFLE
+#include <cstdlib>
+#include <iterator>
+
+template<class RandomIt>
+void random_shuffle(RandomIt first, RandomIt last)
+{
+ typedef typename std::iterator_traits<RandomIt>::difference_type difference_type;
+ difference_type n = last - first;
+ for (difference_type i = n-1; i > 0; --i) {
+ difference_type j = std::rand() % (i + 1);
+ if (j != i) {
+ using std::swap;
+ swap(first[i], first[j]);
+ }
+ }
+}
+
+#else
+
+using std::random_shuffle;
+
+#endif
typedef boost::default_constructible_archetype<
boost::less_than_comparable_archetype<
test_data data = make_test_data(i);
test_data shuffled (data);
- std::random_shuffle(shuffled.begin(), shuffled.end());
+ random_shuffle(shuffled.begin(), shuffled.end());
fill_q(q, shuffled);
pri_queue q;
test_data data = make_test_data(i);
test_data shuffled (data);
- std::random_shuffle(shuffled.begin(), shuffled.end());
+ random_shuffle(shuffled.begin(), shuffled.end());
fill_q(q, shuffled);
pri_queue r;
for (int i = 0; i != test_size; ++i) {
test_data data = make_test_data(test_size);
test_data shuffled (data);
- std::random_shuffle(shuffled.begin(), shuffled.end());
+ random_shuffle(shuffled.begin(), shuffled.end());
pri_queue q;
BOOST_REQUIRE(q.begin() == q.end());
fill_q(q, shuffled);
for (int i = 0; i != test_size; ++i) {
test_data data = make_test_data(i);
test_data shuffled (data);
- std::random_shuffle(shuffled.begin(), shuffled.end());
+ random_shuffle(shuffled.begin(), shuffled.end());
pri_queue q;
BOOST_REQUIRE(q.ordered_begin() == q.ordered_end());
fill_q(q, shuffled);