Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Release 1.14.0 #215

Merged
merged 53 commits into from Dec 17, 2022
Merged

Release 1.14.0 #215

merged 53 commits into from Dec 17, 2022

Conversation

Morwenn
Copy link
Owner

@Morwenn Morwenn commented Dec 16, 2022

No description provided.

Somewhat in the perimeter of issue #211 though it does not fix it.
slab_sort had a bug where it partitioned the collection stably around
the median, then recursed in each *half* of the collection instead of
recursing in the two partitions created by the partitioning algorithm.
It made no difference with unique elements since the partitions would
always correspond to both halves of the collection. However the story
was different when several elements compared equivalent to the median,
leading to the error encountered in #211.
Typically some flavours of MinGW produce around 13k lines of -Winline
warnings even though the library only uses inline sparringly and for ODR
reasons. There is no explicit "force inline" anywhere, so the warning is
just noise that clutters the compiler results and makes it impossible to
find other warnings in the logs.
The SVG for the library's logo used text as-is but it referenced a font
that's not available on most computers. It happened to work on mine but
looked weird anymore else. The new SVG uses shape objects directly
instead of rendered text, and as such doesn't rely on the availability
on the font anymore.

I also took the opportunity to reduce it to the minimal required
components for it to display correctly, roughly halving its size.
Those tests roughly tested the same things, leading to needless
duplication. This commit merges them both in distributions/shuffled.cpp,
keeping enough to cover what both tests used to cover.

One notable exception is default_sorter: the sorter has been deprecated
for a while and mostly influences overload resolution but doesn't lead
to algorithmic code paths that aren't otherwise tested. As such, it has
no place in distributions tests and thus wasn't included.
I thought those calls were made on possibly non-random-access iterators
while they are actually always made on contiguous iterators. I decided
to drop the std::distance calls and replace them with a simple
subtraction to make the possible complexity difference more obvious.

I consequently removed the note in the documentation about probe::max
being potentially super slower when used on forward or bidirectional
iterators, which wasn't actually true.
Also introduce spcializations of indirect_t for std::identity when
available and utility::identity that simply return the dereferenced
indirect value passed to operator().
Improve documentation, allow to have utility::identity on both sides,
don't needlessly use as_function on operands.
Currently the iter_swap calls in string_spread_sort were all unqualified
and I fear they only worked by virtue of always being called either on
standard iterator types, or on iterators templated on std::string, and
therefore looking for iter_swap in the std:: namespace too.

I tried to create a regression test but didn't manage to trigger an
error. Nonetheless, adding these using declarations makes the code more
robust.
The follow notable changes are included:
* Plot the median of cycles instead of the mean
* Generate results for merge_exchange_network_sorter
* Don't generate results for size == 0
@Morwenn Morwenn merged commit 29b593a into master Dec 17, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

1 participant