1 // Copyright 2011 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
18 var filenames
= []string{
19 "../testdata/gettysburg.txt",
24 // testFile tests that compressing and then decompressing the given file with
25 // the given options yields equivalent bytes to the original file.
26 func testFile(t
*testing
.T
, fn
string, order Order
, litWidth
int) {
27 // Read the file, as golden output.
28 golden
, err
:= os
.Open(fn
)
30 t
.Errorf("%s (order=%d litWidth=%d): %v", fn
, order
, litWidth
, err
)
35 // Read the file again, and push it through a pipe that compresses at the write end, and decompresses at the read end.
36 raw
, err
:= os
.Open(fn
)
38 t
.Errorf("%s (order=%d litWidth=%d): %v", fn
, order
, litWidth
, err
)
42 piper
, pipew
:= io
.Pipe()
47 lzww
:= NewWriter(pipew
, order
, litWidth
)
51 n
, err0
:= raw
.Read(b
[:])
52 if err0
!= nil && err0
!= io
.EOF
{
53 t
.Errorf("%s (order=%d litWidth=%d): %v", fn
, order
, litWidth
, err0
)
56 _
, err1
:= lzww
.Write(b
[:n
])
58 t
.Errorf("%s (order=%d litWidth=%d): %v", fn
, order
, litWidth
, err1
)
66 lzwr
:= NewReader(piper
, order
, litWidth
)
70 b0
, err0
:= ioutil
.ReadAll(golden
)
71 b1
, err1
:= ioutil
.ReadAll(lzwr
)
73 t
.Errorf("%s (order=%d litWidth=%d): %v", fn
, order
, litWidth
, err0
)
77 t
.Errorf("%s (order=%d litWidth=%d): %v", fn
, order
, litWidth
, err1
)
80 if len(b1
) != len(b0
) {
81 t
.Errorf("%s (order=%d litWidth=%d): length mismatch %d != %d", fn
, order
, litWidth
, len(b1
), len(b0
))
84 for i
:= 0; i
< len(b0
); i
++ {
86 t
.Errorf("%s (order=%d litWidth=%d): mismatch at %d, 0x%02x != 0x%02x\n", fn
, order
, litWidth
, i
, b1
[i
], b0
[i
])
92 func TestWriter(t
*testing
.T
) {
93 for _
, filename
:= range filenames
{
94 for _
, order
:= range [...]Order
{LSB
, MSB
} {
95 // The test data "2.71828 etcetera" is ASCII text requiring at least 6 bits.
96 for litWidth
:= 6; litWidth
<= 8; litWidth
++ {
97 if filename
== "../testdata/gettysburg.txt" && litWidth
== 6 {
100 testFile(t
, filename
, order
, litWidth
)
103 if testing
.Short() && testenv
.Builder() == "" {
109 func TestWriterReturnValues(t
*testing
.T
) {
110 w
:= NewWriter(ioutil
.Discard
, LSB
, 8)
111 n
, err
:= w
.Write([]byte("asdf"))
112 if n
!= 4 || err
!= nil {
113 t
.Errorf("got %d, %v, want 4, nil", n
, err
)
117 func TestSmallLitWidth(t
*testing
.T
) {
118 w
:= NewWriter(ioutil
.Discard
, LSB
, 2)
119 if _
, err
:= w
.Write([]byte{0x03}); err
!= nil {
120 t
.Fatalf("write a byte < 1<<2: %v", err
)
122 if _
, err
:= w
.Write([]byte{0x04}); err
== nil {
123 t
.Fatal("write a byte >= 1<<2: got nil error, want non-nil")
127 func BenchmarkEncoder(b
*testing
.B
) {
128 buf
, err
:= ioutil
.ReadFile("../testdata/e.txt")
133 b
.Fatalf("test file has no data")
136 for e
:= 4; e
<= 6; e
++ {
137 n
:= int(math
.Pow10(e
))
139 buf1
:= make([]byte, n
)
140 for i
:= 0; i
< n
; i
+= len(buf0
) {
148 b
.Run(fmt
.Sprint("1e", e
), func(b
*testing
.B
) {
150 for i
:= 0; i
< b
.N
; i
++ {
151 w
:= NewWriter(ioutil
.Discard
, LSB
, 8)