Skip to content

Commit

Permalink
ensure that the sort is stable
Browse files Browse the repository at this point in the history
  • Loading branch information
trinitum committed Aug 21, 2018
1 parent 5d9cb7f commit b491eb0
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 4 deletions.
8 changes: 4 additions & 4 deletions filesort.go
Original file line number Diff line number Diff line change
Expand Up @@ -241,7 +241,7 @@ func newMergeReader(less func(a, b interface{}) bool, rs []reader) (reader, erro
}
return res, nil
}
if less(n0, n1) {
if !less(n1, n0) {
res := n0
if n0, err = rs0.Next(); err != nil {
return nil, err
Expand All @@ -265,16 +265,16 @@ func newMergeReader(less func(a, b interface{}) bool, rs []reader) (reader, erro
func (ps *FileSort) merge() error {
defer close(ps.out)
var readers []reader
if len(ps.buffer) > 0 {
readers = append(readers, &sliceReader{slice: ps.buffer})
}
for _, file := range ps.files {
fr, err := ps.makeFileReader(file)
if err != nil {
panic(err)
}
readers = append(readers, fr)
}
if len(ps.buffer) > 0 {
readers = append(readers, &sliceReader{slice: ps.buffer})
}
mr, err := newMergeReader(ps.less, readers)
if err != nil {
return err
Expand Down
27 changes: 27 additions & 0 deletions filesort_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package filesort

import (
"bufio"
"fmt"
"io"
"strings"
"testing"
Expand Down Expand Up @@ -88,3 +89,29 @@ func TestSort(t *testing.T) {
t.Errorf("expected to read %d values, but got %d", len(lines), n)
}
}

func TestSortStable(t *testing.T) {
sort, err := New(
WithLess(func(a, b interface{}) bool { return false }),
WithEncoderNew(newTestLineEncoder),
WithDecoderNew(newTestLineDecoder),
WithMaxMemoryBuffer(3),
)
if err != nil {
t.Fatal(err)
}
for i := 0; i < 100; i++ {
sort.Write(fmt.Sprintf("%d", i))
}
sort.Close()
for i := 0; i < 100; i++ {
exp := fmt.Sprintf("%d", i)
s, err := sort.Read()
if err != nil {
t.Fatal(err)
}
if s.(string) != exp {
t.Fatalf("expected %s but got %s", exp, s.(string))
}
}
}

0 comments on commit b491eb0

Please sign in to comment.