What happened to the monotonicity test in SortedRange?
Atila Neves
atila.neves at gmail.com
Tue Jul 14 12:02:35 UTC 2020
On Monday, 13 July 2020 at 18:23:27 UTC, Andrei Alexandrescu
wrote:
> For a while we've had in Phobos a really nice monotnonicity
> test in SortedRange: in debug mode, sortedness was checked in
> O(n) time but not always (because that would ruin complexity),
> but instead at random with 1/n probability. That means on
> average the complexity was constant, yet we did get some
> checking.
>
> From there, things have gotten progressively... different.
> Various changes to the approach caused
> https://issues.dlang.org/show_bug.cgi?id=15230. The solution to
> that was https://github.com/dlang/phobos/pull/7205, which I
> don't think it's very good because it is deterministic (i.e.
> liable to systematic errors) and defaults to no checking at all
> regardless of debug vs. release mode.
>
> As an aside, that PR has documentation issues (e.g.
> disfluencies, too many commas) that should have been corrected
> in review.
>
> What I think we should do is this: use a probabilistic
> monotonicity testing as described in
> http://www.cse.psu.edu/~sxr48/pubs/TestingSortednessEncyclopedia.pdf or one of the referenced papers, or just get back to what we used to do - make the O(n) test with 1/n probability.
I'm not sure if this was one of them, but a lot of version(debug)
and version(assert) checks in Phobos caused linker errors because
Phobos is distributed in binary form and not compiled with
-debug. The "solution" was to always emit template code with
-debug, which meant incredibly long compile times for importing
anything from Phobos. I'm still trying to get rid of the similar
-unittest hack.
More information about the Digitalmars-d
mailing list