forked from boostorg/move
Fixed adaptive_sort/merge bugs for stability.
This commit is contained in:
@@ -10,7 +10,6 @@
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include <cstdlib> //std::srand
|
||||
#include <algorithm> //std::next_permutation
|
||||
#include <iostream> //std::cout
|
||||
|
||||
#include <boost/config.hpp>
|
||||
@@ -19,11 +18,8 @@
|
||||
#include <boost/container/vector.hpp>
|
||||
#include <boost/timer/timer.hpp>
|
||||
|
||||
using boost::timer::cpu_timer;
|
||||
using boost::timer::cpu_times;
|
||||
using boost::timer::nanosecond_type;
|
||||
|
||||
#include "order_type.hpp"
|
||||
#include "random_shuffle.hpp"
|
||||
|
||||
#include <boost/move/algo/adaptive_sort.hpp>
|
||||
#include <boost/move/core.hpp>
|
||||
@@ -45,7 +41,7 @@ bool test_random_shuffled(std::size_t const element_count, std::size_t const num
|
||||
|
||||
for (std::size_t i = 0; i != num_iter; ++i)
|
||||
{
|
||||
std::random_shuffle(elements.get(), elements.get() + element_count);
|
||||
::random_shuffle(elements.get(), elements.get() + element_count);
|
||||
for(std::size_t i = 0; i < (num_keys ? num_keys : element_count); ++i){
|
||||
key_reps[i]=0;
|
||||
}
|
||||
@@ -53,11 +49,9 @@ bool test_random_shuffled(std::size_t const element_count, std::size_t const num
|
||||
elements[i].val = key_reps[elements[i].key]++;
|
||||
}
|
||||
|
||||
boost::container::vector<order_type> tmp(elements.get(), elements.get()+element_count);
|
||||
boost::movelib::adaptive_sort(elements.get(), elements.get()+element_count, order_type_less());
|
||||
|
||||
boost::movelib::adaptive_sort(tmp.data(), tmp.data()+element_count, order_type_less<order_type>());
|
||||
|
||||
if (!is_order_type_ordered(tmp.data(), element_count))
|
||||
if (!is_order_type_ordered(elements.get(), element_count))
|
||||
{
|
||||
std::cout << "\n ERROR\n";
|
||||
throw int(0);
|
||||
@@ -68,16 +62,12 @@ bool test_random_shuffled(std::size_t const element_count, std::size_t const num
|
||||
|
||||
int main()
|
||||
{
|
||||
#ifdef NDEBUG
|
||||
const std::size_t NIter = 100;
|
||||
#else
|
||||
const std::size_t NIter = 10;
|
||||
#endif
|
||||
test_random_shuffled<order_type>(10001, 65, NIter);
|
||||
test_random_shuffled<order_type>(10001, 101, NIter);
|
||||
test_random_shuffled<order_type>(10001, 1023, NIter);
|
||||
test_random_shuffled<order_type>(10001, 4095, NIter);
|
||||
test_random_shuffled<order_type>(10001, 0, NIter);
|
||||
test_random_shuffled<order_move_type>(10001, 65, NIter);
|
||||
test_random_shuffled<order_move_type>(10001, 101, NIter);
|
||||
test_random_shuffled<order_move_type>(10001, 1023, NIter);
|
||||
test_random_shuffled<order_move_type>(10001, 4095, NIter);
|
||||
test_random_shuffled<order_move_type>(10001, 0, NIter);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user