On Thursday, 15 June 2023 at 19:18:03 UTC, H. S. Teoh wrote:
>https://issues.dlang.org/show_bug.cgi?id=23976
Caused by: https://github.com/dlang/phobos/pull/8738
(commit 8a9cfa2677)
Brief summary:
import std;
void main() {
auto input = "1<2";
foreach (pair; input.splitter("<").slide(2))
{
writeln(pair);
}
}
Output before commit 8a9cfa2677:
["1", "2"]
Output after commit 8a9cfa2677:
["1", "2"]
["2"]
This is incorrect because the code asked for a window of size 2, with the default option of No.withPartial.
This broke another of my old projects that relied on the old (correct)
behaviour. :-/
T
I actually need some help with this.
The behavior of withPartial
seems to be random! For instance, since the default of slide
is stated to be Yes.withPartial
, shouldn't [["1", "2"], ["2"]]
be the correct answer, since the last element has less than two entries?
But then the unittests on https://dlang.org/library/std/range/slide.html are all over the place. For instance:
assert([0, 1, 2, 3].slide(2).equal!equal(
[[0, 1], [1, 2], [2, 3]]
));
But this is Yes.withPartial
too! So shouldn't it end with , [3]
?
Either I'm severely not getting something here, or the bug report is in fact the wrong way around and the bug is that slide
sometimes doesn't append the partial last window.
Do we just need to revert my PR, throw up our hands and admit that the behavior of slide
is just basically down to the vagaries of range semantics, and start over with slide2
?