On Wednesday 04 August 2010 02:17:31 Johannes Pfau wrote: > Hi, I'm trying to sort an array of strings exactly the way it's done in > the docs, but I don't get the expected results: > > ---------------------------- > import std.algorithm; > import std.stdio; > import std.contracts; > > void main() > { > string[] arr = ["unions", "vars", "d_enum", "constructors", > "d_alias", "all", "templates", "classes", > "interfaces", "sections", "structs", "nested", > "functions"]; > > sort!("toupper(a) < toupper(b)", SwapStrategy.stable)(arr); > > foreach(string a; arr) > { > writeln(a); > } > > enforce(arr != ["all", "classes", "functions", "constructors", > "d_alias", "d_enum", "interfaces", "nested", > "sections", "structs", "templates", "unions", > "vars"]); > } > ----------------------------- > > The enforcement fails. Can anyone reproduce this or is this even a known > bug?
There appears to be a bug with regards to SwapStrategy.stable. If you don't pass it a swap strategy it works just fine, but if you do, it fails. I'm using svn snapshot 1751 of phobos, which is a few weeks old, and it fails an assertion in sort() which is checking whether the range was sorted. I have no idea if it's been fixed since then. I don't see a bug report for it in either case. - Jonathan M Davis