Skip to content

Commit 3a988f4

Browse files
committed
cleanup and add tests
1 parent 03b6926 commit 3a988f4

File tree

3 files changed

+75
-30
lines changed

3 files changed

+75
-30
lines changed

Makefile

+5-1
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,8 @@ test:
33
go test -v -race -count=1 ./...
44

55
fuzz_write:
6-
go test -v -race -count=1 -fuzz=FuzzWrite -fuzztime 120s ./...
6+
go test -v -race -count=1 -fuzz=FuzzWriterWrite -fuzztime 120s .
7+
8+
9+
fuzz_compress_decompress:
10+
go test -fuzz=FuzzHuffmannCompressDecompress -fuzztime 120s .

huffmann_test.go

+43-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package huffman
22

33
import (
4+
"bytes"
45
"reflect"
56
"testing"
67
)
@@ -151,7 +152,47 @@ func TestCompressEmpty(t *testing.T) {
151152
huff := NewHuffman()
152153

153154
_, err := huff.Compress([]byte{})
154-
if err == nil {
155-
t.Errorf("Expected error on empty input")
155+
if err != nil {
156+
t.Errorf("Expected error no error on empty input: %v", err)
157+
}
158+
}
159+
160+
func TestDecompressEmpty(t *testing.T) {
161+
huff := NewHuffman()
162+
163+
_, err := huff.Decompress([]byte{})
164+
if err != nil {
165+
t.Errorf("Expected error no error on empty input: %v", err)
156166
}
157167
}
168+
169+
func FuzzHuffmannCompressDecompress(f *testing.F) {
170+
f.Add([]byte("hello"))
171+
f.Add([]byte("1234567890"))
172+
f.Add([]byte("1234567890abcdef"))
173+
f.Add([]byte("1234567890abcdef1234567890abcdef"))
174+
f.Add([]byte("1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef"))
175+
f.Add([]byte("cfgvlhböjnhavUBÖObv)öob"))
176+
177+
f.Fuzz(func(t *testing.T, data []byte) {
178+
if len(data) == 0 {
179+
return
180+
}
181+
182+
huff := NewHuffman()
183+
184+
compressed, err := huff.Compress(data)
185+
if err != nil {
186+
t.Fatalf("Unexpected compression error: %v", err)
187+
}
188+
189+
decompressed, err := huff.Decompress(compressed)
190+
if err != nil {
191+
t.Fatalf("Unexpected decompression error: %v", err)
192+
}
193+
194+
if !bytes.Equal(decompressed, data) {
195+
t.Fatalf("wanted %v, got %v", data, decompressed)
196+
}
197+
})
198+
}

writer_test.go

+27-27
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,7 @@ import (
77
"testing"
88
)
99

10-
func FuzzWrite(f *testing.F) {
11-
refHuffman := NewHuffman()
12-
10+
func FuzzWriterWrite(f *testing.F) {
1311
f.Add([]byte{})
1412
f.Add([]byte("hello"))
1513
f.Add([]byte("1234567890"))
@@ -96,35 +94,37 @@ func FuzzWrite(f *testing.F) {
9694
0x03, 0x22, 0x02, 0x00, 0x00, 0x17,
9795
})
9896

99-
dict := NewDictionary()
100-
10197
f.Fuzz(func(t *testing.T, data []byte) {
102-
// TODO: except for the case where no data is passed, Compress and Write should do the same.
103-
if len(data) == 0 {
104-
return
105-
}
106-
inputStream := bytes.NewReader(data)
107-
compressedStream := bytes.NewBuffer(make([]byte, 0, len(data)))
98+
testWriteAndCompareWithCompress(t, data)
99+
})
100+
}
108101

109-
w := NewWriterDict(dict, compressedStream)
110-
n, err := io.CopyBuffer(w, inputStream, make([]byte, 2)) // we want to test with a small buffer explicitly
111-
if err != nil {
112-
t.Fatalf("error writing: %v", err)
113-
}
102+
func testWriteAndCompareWithCompress(t *testing.T, data []byte) {
114103

115-
if n != int64(len(data)) {
116-
t.Fatalf("expected to write %d bytes, wrote %d", len(data), n)
117-
}
104+
var (
105+
huff = NewHuffman()
106+
inputStream = bytes.NewReader(data)
107+
compressedStream = bytes.NewBuffer(make([]byte, 0, len(data)))
108+
w = NewWriter(compressedStream)
109+
)
118110

119-
compressed, err := refHuffman.Compress(data)
120-
if err != nil {
121-
t.Fatalf("error compressing: %v", err)
122-
}
111+
n, err := io.CopyBuffer(w, inputStream, make([]byte, 1)) // we want to test with a small buffer explicitly
112+
if err != nil {
113+
t.Fatalf("error writing: %v", err)
114+
}
123115

124-
if !bytes.Equal(compressed, compressedStream.Bytes()) {
125-
t.Fatalf("expected %v(%s), got %v(%s)", compressed, string(compressed), compressedStream.Bytes(), string(compressedStream.Bytes()))
126-
}
127-
})
116+
if n != int64(len(data)) {
117+
t.Fatalf("expected to write %d bytes, wrote %d", len(data), n)
118+
}
119+
120+
compressed, err := huff.Compress(data)
121+
if err != nil {
122+
t.Fatalf("error compressing: %v", err)
123+
}
124+
125+
if !bytes.Equal(compressed, compressedStream.Bytes()) {
126+
t.Fatalf("expected %v(%s), got %v(%s)", compressed, string(compressed), compressedStream.Bytes(), compressedStream.String())
127+
}
128128
}
129129

130130
func BenchmarkCompression(b *testing.B) {

0 commit comments

Comments
 (0)