mirror of
https://github.com/golang/go
synced 2024-11-18 08:04:40 -07:00
compress/flate: make compression level 0 consistent
Tests for determinism was not working as intended since io.Copybuffer uses the io.WriterTo if available. This exposed that level 0 (no compression) changed output based on the number of writes and buffers given to the writer. Previously, Write would emit a new raw block (BTYPE=00) for every non-empty call to Write. This CL fixes it such that a raw block is only emitted upon the following conditions: * A full window is obtained (every 65535 bytes) * Flush is called * Close is called Change-Id: I807f866d97e2db7820f11febab30a96266a6cbf1 Reviewed-on: https://go-review.googlesource.com/31174 Run-TryBot: Joe Tsai <thebrokentoaster@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Joe Tsai <thebrokentoaster@gmail.com>
This commit is contained in:
parent
2e196b15b9
commit
461adfd817
@ -521,10 +521,10 @@ func (d *compressor) fillStore(b []byte) int {
|
||||
}
|
||||
|
||||
func (d *compressor) store() {
|
||||
if d.windowEnd > 0 {
|
||||
if d.windowEnd > 0 && (d.windowEnd == maxStoreBlockSize || d.sync) {
|
||||
d.err = d.writeStoredBlock(d.window[:d.windowEnd])
|
||||
d.windowEnd = 0
|
||||
}
|
||||
d.windowEnd = 0
|
||||
}
|
||||
|
||||
// storeHuff compresses and stores the currently added data
|
||||
|
@ -75,7 +75,7 @@ func TestWriteError(t *testing.T) {
|
||||
if err != nil {
|
||||
t.Fatalf("NewWriter: level %d: %v", l, err)
|
||||
}
|
||||
n, err := io.CopyBuffer(w, bytes.NewBuffer(in), copyBuffer)
|
||||
n, err := io.CopyBuffer(w, struct{ io.Reader }{bytes.NewBuffer(in)}, copyBuffer)
|
||||
if err == nil {
|
||||
t.Fatalf("Level %d: Expected an error, writer was %#v", l, ew)
|
||||
}
|
||||
@ -142,7 +142,7 @@ func testDeterministic(i int, t *testing.T) {
|
||||
}
|
||||
// Use a very small prime sized buffer.
|
||||
cbuf := make([]byte, 787)
|
||||
_, err = io.CopyBuffer(w, br, cbuf)
|
||||
_, err = io.CopyBuffer(w, struct{ io.Reader }{br}, cbuf)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@ -157,7 +157,7 @@ func testDeterministic(i int, t *testing.T) {
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
_, err = io.CopyBuffer(w2, br2, cbuf)
|
||||
_, err = io.CopyBuffer(w2, struct{ io.Reader }{br2}, cbuf)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user