@@ -1,8 +1,9 @@ package fibonacci import ( + diff "0dev.org/diff" "bytes" "io" "strings" "testing" ) @@ -34,15 +35,17 @@ t.Errorf("Unexpected difference between encoded and decoded lengths.", encLen, decLen) } } } -func TestWriter(t *testing.T) { - var buf bytes.Buffer - var w io.Writer = Writer(&buf) - var input []byte = make([]byte, 256) - var fib Numbers = New(16) +func TestWriterReader(t *testing.T) { + var ( + buf bytes.Buffer + w io.Writer = Writer(&buf) + input []byte = make([]byte, 256) + fib Numbers = New(16) + ) for i := uint64(0); i < 256; i++ { input[i] = byte(i) } @@ -75,10 +78,26 @@ if loc := strings.Index(output, vs); loc != 0 { t.Fatal("Unexpected location for", i, "value", vs) } output = output[len(vs):] } + + var ( + in *bytes.Reader = bytes.NewReader(buf.Bytes()) + r io.Reader = Reader(in) + out bytes.Buffer + ) + io.Copy(&out, r) + decoded := out.Bytes() + + delta := diff.Diff(diff.D{Len1: len(decoded), Len2: len(input), EqualFunc: func(i, j int) bool { + return decoded[i] == input[j] + }}) + + if len(delta.Added) > 0 || len(delta.Removed) > 0 { + t.Error("Differences detected ", delta) + } } func u2s(b uint64, l byte) (result string) { for i := byte(0); i < l; i++ { if (b & 1) > 0 {