40 lines
973 B
Go
40 lines
973 B
Go
// Copyright © 2016 Alan A. A. Donovan & Brian W. Kernighan.
|
|
|
|
package bzip_test
|
|
|
|
import (
|
|
"bytes"
|
|
"compress/bzip2" // reader
|
|
"io"
|
|
"testing"
|
|
|
|
"gopl.io/ch13/bzip" // writer
|
|
)
|
|
|
|
func TestBzip2(t *testing.T) {
|
|
var compressed, uncompressed bytes.Buffer
|
|
w := bzip.NewWriter(&compressed)
|
|
|
|
// Write a repetitive message in a million pieces,
|
|
// compressing one copy but not the other.
|
|
tee := io.MultiWriter(w, &uncompressed)
|
|
for i := 0; i < 1000000; i++ {
|
|
io.WriteString(tee, "hello")
|
|
}
|
|
if err := w.Close(); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
// Check the size of the compressed stream.
|
|
if got, want := compressed.Len(), 255; got != want {
|
|
t.Errorf("1 million hellos compressed to %d bytes, want %d", got, want)
|
|
}
|
|
|
|
// Decompress and compare with original.
|
|
var decompressed bytes.Buffer
|
|
io.Copy(&decompressed, bzip2.NewReader(&compressed))
|
|
if !bytes.Equal(uncompressed.Bytes(), decompressed.Bytes()) {
|
|
t.Error("decompression yielded a different message")
|
|
}
|
|
}
|