]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/move/test/adaptive_merge_test.cpp
1 //////////////////////////////////////////////////////////////////////////////
3 // (C) Copyright Ion Gaztanaga 2015-2016.
4 // Distributed under the Boost Software License, Version 1.0.
5 // (See accompanying file LICENSE_1_0.txt or copy at
6 // http://www.boost.org/LICENSE_1_0.txt)
8 // See http://www.boost.org/libs/move for documentation.
10 //////////////////////////////////////////////////////////////////////////////
12 #include <cstdlib> //std::srand
13 #include <algorithm> //std::next_permutation
14 #include <iostream> //std::cout
16 #include <boost/config.hpp>
18 #include <boost/move/unique_ptr.hpp>
19 #include <boost/container/vector.hpp>
20 #include <boost/timer/timer.hpp>
22 using boost::timer::cpu_timer
;
23 using boost::timer::cpu_times
;
24 using boost::timer::nanosecond_type
;
26 #include "order_type.hpp"
28 #include <boost/move/algo/adaptive_merge.hpp>
29 #include <boost/move/core.hpp>
33 bool test_random_shuffled(std::size_t const element_count
, std::size_t const num_keys
, std::size_t const num_iter
)
35 boost::movelib::unique_ptr
<T
[]> elements(new T
[element_count
]);
36 boost::movelib::unique_ptr
<std::size_t[]> key_reps(new std::size_t[num_keys
? num_keys
: element_count
]);
37 std::cout
<< "- - N: " << element_count
<< ", Keys: " << num_keys
<< ", It: " << num_iter
<< " \n";
40 for(std::size_t i
=0; i
< element_count
; ++i
){
41 std::size_t key
= num_keys
? (i
% num_keys
) : i
;
47 for (std::size_t i
= 0; i
!= num_iter
; ++i
)
49 std::random_shuffle(elements
.get(), elements
.get() + element_count
);
50 for(std::size_t i
= 0; i
< (num_keys
? num_keys
: element_count
); ++i
){
53 for(std::size_t i
= 0; i
< element_count
; ++i
){
54 elements
[i
].val
= key_reps
[elements
[i
].key
]++;
57 boost::container::vector
<order_type
> tmp(elements
.get(), elements
.get()+element_count
);
58 std::size_t const split
= std::size_t(std::rand()) % element_count
;
59 std::stable_sort(tmp
.data(), tmp
.data()+split
, order_type_less
<order_type
>());
60 std::stable_sort(tmp
.data()+split
, tmp
.data()+element_count
, order_type_less
<order_type
>());
62 boost::movelib::adaptive_merge(tmp
.data(), tmp
.data()+split
, tmp
.data()+element_count
, order_type_less
<order_type
>());
64 if (!is_order_type_ordered(tmp
.data(), element_count
))
66 std::cout
<< "\n ERROR\n";
76 const std::size_t NIter
= 100;
78 const std::size_t NIter
= 10;
80 test_random_shuffled
<order_type
>(10001, 65, NIter
);
81 test_random_shuffled
<order_type
>(10001, 101, NIter
);
82 test_random_shuffled
<order_type
>(10001, 1023, NIter
);
83 test_random_shuffled
<order_type
>(10001, 4095, NIter
);
84 test_random_shuffled
<order_type
>(10001, 0, NIter
);