Both of these should pass, but they currently fail: assert("a\n".splitLines() == ["a", ""]); assert("a\n".splitLines() != ["a"]); This is inconsistent with both "\na".splitLines() and with split(str, delim), as demonstrated here: ---------------------------------- import std.stdio; import std.string; void main() { // assert("a\n".splitLines() == ["a", ""]); assert("a\n".splitLines() != ["a"]); foreach(str; ["a", "a\n", "\na"]) { writefln("\nstr: '%s'", str); foreach(i, line; str.splitLines()) writeln(i, ": ", line); } foreach(str; ["a", "a,", ",a"]) { writefln("\nstr: '%s'", str); foreach(i, line; str.splitLines()) writeln(i, ": ", line); } } ---------------------------------- str: 'a b' 0: a 1: b str: 'a b ' 0: a 1: b str: ' a b' 0: 1: a 2: b str: 'a,b' 0: a 1: b str: 'a,b,' 0: a 1: b 2: str: ',a,b' 0: 1: a 2: b ----------------------------------
Disregard those two assert lines inside main() in the second code example.
https://github.com/D-Programming-Language/phobos/pull/277
This is by design. Refer to comment in https://github.com/D-Programming-Language/phobos/pull/277.