ahmetb / go-linq

.NET LINQ capabilities in Go
https://godoc.org/github.com/ahmetb/go-linq
Apache License 2.0
3.51k stars 225 forks source link

Unit test ExampleOrderedQuery_ThenByDescending fails on golang-1.19.2 #113

Open sdgathman opened 1 year ago

sdgathman commented 1 year ago
      testing: github.com/ahmetb/go-linq
github.com/ahmetb/go-linq
--- FAIL: ExampleOrderedQuery_ThenByDescending (0.00s)
got:
apPLe
apple
apPLE
APple
orange
baNanA
ORANGE
BAnana
want:
apPLe
apPLE
apple
APple
orange
baNanA
ORANGE
BAnana
FAIL
exit status 1
FAIL    github.com/ahmetb/go-linq   0.021s
sdgathman commented 1 year ago

Passes on golang-1.18

ahmetb commented 1 year ago

Interesting. If you wanna debug, I'm open to patches.

neilalexander commented 1 year ago

Probably related to the change in sorting algorithm to pattern-defeating quicksort in Go 1.19.

https://tip.golang.org/doc/go1.19#sort

sdgathman commented 1 year ago

I'm not a go programmer, but you'd think there would be a sort_unstable() to get the faster algorithm rather than breaking a bunch of things that depend on stability.

sdgathman commented 1 year ago

Since this package seems to be about linking to case insensitive libraries, the result might be actually valid. But the verbatim check is too strict for an unstable sort. How about running the output through an undependent stable sort (e.g. unix sort program with case insensitive option) and check that the result is unchanged? Would that be valid?

neilalexander commented 1 year ago

I'm not a go programmer, but you'd think there would be a sort_unstable() to get the faster algorithm rather than breaking a bunch of things that depend on stability.

There is probably already some difference between sort.Sort and sort.Stable.