From fcf217b8ec4e3817b1f9f7ec637fd590e089c358 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ion=20Gazta=C3=B1aga?= Date: Sat, 7 Oct 2017 14:35:22 +0200 Subject: [PATCH] Git Issue #15: Incorrect merge in adaptive_merge when the number of unique items is limited --- doc/move.qbk | 8 ++++++++ include/boost/move/algo/detail/adaptive_sort_merge.hpp | 3 ++- test/adaptive_merge_test.cpp | 1 + test/adaptive_sort_test.cpp | 2 +- 4 files changed, 12 insertions(+), 2 deletions(-) diff --git a/doc/move.qbk b/doc/move.qbk index 343d961..746d4b0 100644 --- a/doc/move.qbk +++ b/doc/move.qbk @@ -788,6 +788,14 @@ Many thanks to all boosters that have tested, reviewed and improved the library. [section:release_notes Release Notes] +[section:release_notes_boost_1_66 Boost 1.66 Release] + +* Fixed bug: + * [@https://github.com/boostorg/move/issues/15 Git Issue #15: ['"Incorrect merge in adaptive_merge when the number of unique items is limited'"]]. + +[endsect] + + [section:release_notes_boost_1_65 Boost 1.65 Release] * Fixed bug: diff --git a/include/boost/move/algo/detail/adaptive_sort_merge.hpp b/include/boost/move/algo/detail/adaptive_sort_merge.hpp index 7cbca57..5085100 100644 --- a/include/boost/move/algo/detail/adaptive_sort_merge.hpp +++ b/include/boost/move/algo/detail/adaptive_sort_merge.hpp @@ -2437,7 +2437,8 @@ void adaptive_merge_impl //Not the minimum number of keys is not available on the first range, so fallback to rotations if(collected != to_collect && collected < 4){ - merge_bufferless(first, first+len1, first+len1+len2, comp); + merge_bufferless(first, first+collected, first+len1, comp); + merge_bufferless(first, first + len1, first + len1 + len2, comp); return; } diff --git a/test/adaptive_merge_test.cpp b/test/adaptive_merge_test.cpp index 6f75dec..9522625 100644 --- a/test/adaptive_merge_test.cpp +++ b/test/adaptive_merge_test.cpp @@ -69,6 +69,7 @@ bool test_random_shuffled(std::size_t const element_count, std::size_t const num int main() { const std::size_t NIter = 100; + test_random_shuffled(10001, 3, NIter); test_random_shuffled(10001, 65, NIter); test_random_shuffled(10001, 101, NIter); test_random_shuffled(10001, 1023, NIter); diff --git a/test/adaptive_sort_test.cpp b/test/adaptive_sort_test.cpp index 5f2c70a..686b4bd 100644 --- a/test/adaptive_sort_test.cpp +++ b/test/adaptive_sort_test.cpp @@ -16,7 +16,6 @@ #include #include -#include #include "order_type.hpp" #include "random_shuffle.hpp" @@ -63,6 +62,7 @@ bool test_random_shuffled(std::size_t const element_count, std::size_t const num int main() { const std::size_t NIter = 100; + test_random_shuffled(10001, 3, NIter); test_random_shuffled(10001, 65, NIter); test_random_shuffled(10001, 101, NIter); test_random_shuffled(10001, 1023, NIter);