Login light
// Copyright © 2016 Alan A. A. Donovan & Brian W. Kernighan.
// License: https://creativecommons.org/licenses/by-nc-sa/4.0/

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")
    }
}