-
Notifications
You must be signed in to change notification settings - Fork 3
/
golden_test.go
87 lines (76 loc) · 1.93 KB
/
golden_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
package fpc
import (
"bytes"
"io"
"io/ioutil"
"os"
"testing"
)
const (
goldenCompressedFilepath = "golden/test.trace.fpc"
goldenDecompressedFilepath = "golden/test_decompressed.data"
)
func TestGoldenCompress(t *testing.T) {
// Test that compressing data reproduces the reference implementation's
// compression.
input, err := os.Open(goldenDecompressedFilepath)
if err != nil {
t.Fatalf("unable to load decompressed bytes: %v", err)
}
defer input.Close()
buf := bytes.NewBuffer(nil)
w, err := NewWriterLevel(buf, 20)
if err != nil {
t.Fatalf("unable to create writer: %v", err)
}
_, err = io.Copy(w, input)
if err != nil {
t.Fatalf("unable to write: %v", err)
}
err = w.Close()
if err != nil {
t.Fatalf("unable to close: %v", err)
}
want, err := ioutil.ReadFile(goldenCompressedFilepath)
if err != nil {
t.Fatalf("unable to load golden compressed bytes: %v", err)
}
have := buf.Bytes()
if !bytes.Equal(have, want) {
t.Error("compressed data golden mismatch")
t.Logf("len(have) = %d", len(have))
t.Logf("len(want) = %d", len(want))
}
}
func TestGoldenDecompress(t *testing.T) {
// Test that decompressing data reproduces the reference implementation's
// decompression.
input, err := os.Open(goldenCompressedFilepath)
if err != nil {
t.Fatalf("unable to load compressed bytes: %v", err)
}
defer input.Close()
r := NewReader(input)
readBuf := make([]byte, 1024)
haveBuf := bytes.NewBuffer(nil)
for {
n, err := r.Read(readBuf)
if err == io.EOF {
haveBuf.Write(readBuf[:n])
break
} else if err != nil {
t.Fatalf("read error: %v", err)
}
haveBuf.Write(readBuf[:n])
}
want, err := ioutil.ReadFile(goldenDecompressedFilepath)
if err != nil {
t.Fatalf("unable to load golden decompressed bytes: %v", err)
}
have := haveBuf.Bytes()
if !bytes.Equal(have, want) {
t.Error("decompressed data golden mismatch")
t.Logf("len(have) = %d", len(have))
t.Logf("len(want) = %d", len(want))
}
}