You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
A new tests uncovered issues when sing some sorters with long strings (too big for SSO to apply). I thought it was mostly due to self-move (as with issue #141), but apparently more algorithms break, so while self-moves are a problem, there are other issues at play. Here are some failing sorters:
block_sorter (with a dynamic buffer following the half policy)
Apparently at least part of the issue with block_sort is due to the fact that I changed a few std::copy to std::move blindly when adapting the algorithms and making sure that it would work with move-only types, which actually introduced a few self-moves.
Specifically I just found such an issue with a call to merge_move where, when merging [first, middle, last), the remaining value of [middle, last) sometimes overrode themselves when they didn't change position. Changing the merge_move call by a buffered_inplace_merge solved this specific issue (see commit f9a0c62), and I'm pretty sure that the remaining issue in block_sort, but also in grail_sort, are similar to this one. After all these algorithms are the only two to use merge_move in the library (occasionally doing it right).
A new tests uncovered issues when sing some sorters with long strings (too big for SSO to apply). I thought it was mostly due to self-move (as with issue #141), but apparently more algorithms break, so while self-moves are a problem, there are other issues at play. Here are some failing sorters:
block_sorter
(with a dynamic buffer following thehalf
policy)drop_merge_sorter
(see also Strange benchmark results with std::string adrian17/cpp-drop-merge-sort#4)grail_sorter
(with a dynamic buffer following thesqrt
policy)The text was updated successfully, but these errors were encountered: