externalsort: simplify reader's and writer's contracts; add huge test

This commit is contained in:
Arseny Balobanov 2020-03-13 22:51:17 +03:00
parent 259a0d4ed8
commit 0125456ca7
17 changed files with 20 additions and 10 deletions

View file

@ -51,8 +51,9 @@ func TestLineReader(t *testing.T) {
{ {
name: "linebreak", name: "linebreak",
in: `abc in: `abc
`, `,
expected: []string{"abc\n"}, expected: []string{"abc", ""},
}, },
{ {
name: "multiple-rows", name: "multiple-rows",
@ -61,7 +62,7 @@ func TestLineReader(t *testing.T) {
b b
b b
`, `,
expected: []string{"a\n", "\n", "b\n", "b\n"}, expected: []string{"a", "", "b", "b"},
}, },
{ {
name: "large-row", name: "large-row",
@ -98,7 +99,6 @@ b
lines, err := readAll(lineReader) lines, err := readAll(lineReader)
require.NoError(t, err) require.NoError(t, err)
require.Equal(t, strings.Join(lines, ""), tc.in)
require.Len(t, lines, len(tc.expected), require.Len(t, lines, len(tc.expected),
"expected: %+v, got: %+v", tc.expected, lines) "expected: %+v, got: %+v", tc.expected, lines)
require.Equal(t, tc.expected, lines) require.Equal(t, tc.expected, lines)
@ -108,16 +108,22 @@ b
type brokenReader int type brokenReader int
func (b brokenReader) Read(data []byte) (n int, err error) { func (r brokenReader) Read(data []byte) (n int, err error) {
return 0, errors.New("read is broken") return 0, errors.New("read is broken")
} }
type eofReader int
func (r eofReader) Read(p []byte) (n int, err error) {
return 0, io.EOF
}
func TestLineReader_error(t *testing.T) { func TestLineReader_error(t *testing.T) {
_, err := NewReader(new(brokenReader)).ReadLine() _, err := NewReader(new(brokenReader)).ReadLine()
require.Error(t, err) require.Error(t, err)
require.False(t, errors.Is(err, io.EOF)) require.False(t, errors.Is(err, io.EOF))
r := newStringReader("") r := NewReader(new(eofReader))
_, err = r.ReadLine() _, err = r.ReadLine()
require.True(t, errors.Is(err, io.EOF)) require.True(t, errors.Is(err, io.EOF))
} }
@ -128,11 +134,12 @@ func TestLineWriter(t *testing.T) {
lines []string lines []string
}{ }{
{ {
name: "empty", name: "empty",
lines: []string{""},
}, },
{ {
name: "simple", name: "simple",
lines: []string{"a\n", "b\n", "c\n"}, lines: []string{"a", "b", "c"},
}, },
{ {
name: "large-line", name: "large-line",
@ -153,7 +160,8 @@ func TestLineWriter(t *testing.T) {
} }
require.NoError(t, w.Flush()) require.NoError(t, w.Flush())
require.Equal(t, strings.Join(tc.lines, ""), buf.String()) expected := strings.Join(tc.lines, "\n") + "\n"
require.Equal(t, expected, buf.String())
}) })
} }
} }

View file

@ -28,7 +28,8 @@ func TestMerge(t *testing.T) {
out: `0 out: `0
1 1
1 1
1`, 1
`,
}, },
{ {
// Merge believes lines are read in sorted order. // Merge believes lines are read in sorted order.
@ -36,7 +37,8 @@ func TestMerge(t *testing.T) {
in: []string{`1 in: []string{`1
0`}, 0`},
out: `1 out: `1
0`, 0
`,
}, },
} { } {
t.Run(tc.name, func(t *testing.T) { t.Run(tc.name, func(t *testing.T) {

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
externalsort/testdata/sort/7/in1.txt vendored Normal file

Binary file not shown.

BIN
externalsort/testdata/sort/7/in10.txt vendored Normal file

Binary file not shown.

BIN
externalsort/testdata/sort/7/in2.txt vendored Normal file

Binary file not shown.

BIN
externalsort/testdata/sort/7/in3.txt vendored Normal file

Binary file not shown.

BIN
externalsort/testdata/sort/7/in4.txt vendored Normal file

Binary file not shown.

BIN
externalsort/testdata/sort/7/in5.txt vendored Normal file

Binary file not shown.

BIN
externalsort/testdata/sort/7/in6.txt vendored Normal file

Binary file not shown.

BIN
externalsort/testdata/sort/7/in7.txt vendored Normal file

Binary file not shown.

BIN
externalsort/testdata/sort/7/in8.txt vendored Normal file

Binary file not shown.

BIN
externalsort/testdata/sort/7/in9.txt vendored Normal file

Binary file not shown.

BIN
externalsort/testdata/sort/7/out.txt vendored Normal file

Binary file not shown.