package fibonacci
import (
"bytes"
"fmt"
"io"
"testing"
)
func TestNumbers(t *testing.T) {
n := New(32)
expected := []uint64{1, 1, 2, 3, 5, 8, 13, 21}
for i, v := range expected {
if f := n[i]; f != v {
t.Error("Unexpected value for", i, f, "expected", v)
}
}
}
func TestCoding(t *testing.T) {
n := New(32)
for i := uint64(0); i < 4096; i++ {
enc, _ := n.Code(i)
//fmt.Printf("%d - %b, %d\n", i, enc, len)
dec, _ := n.Decode(enc)
if i != dec {
t.Errorf("Unexpected value for %d - enc is %b, dec is %d\n", i, enc, dec)
}
}
}
func TestWriter0(t *testing.T) {
var buf bytes.Buffer
var w io.Writer = Writer(&buf)
w.Write([]byte{0})
w.Write(nil)
for _, v := range buf.Bytes() {
fmt.Printf("%s-", b2s(v))
}
fmt.Println()
}
func TestWriter1(t *testing.T) {
var buf bytes.Buffer
var w io.Writer = Writer(&buf)
w.Write([]byte{0, 1})
w.Write(nil)
for _, v := range buf.Bytes() {
fmt.Printf("%s-", b2s(v))
}
fmt.Println()
}
func TestWriter2(t *testing.T) {
var buf bytes.Buffer
var w io.Writer = Writer(&buf)
w.Write([]byte{0, 1, 2})
w.Write(nil)
for _, v := range buf.Bytes() {
fmt.Printf("%s-", b2s(v))
}
fmt.Println()
}
func TestWriter3(t *testing.T) {
var buf bytes.Buffer
var w io.Writer = Writer(&buf)
var input []byte = make([]byte, 256)
for i := 0; i < 256; i++ {
input[i] = byte(i)
}
w.Write(input)
w.Write(nil)
for _, v := range buf.Bytes() {
fmt.Printf("%s-", b2s(v))
}
fmt.Println()
}
func b2s(b byte) (result string) {
for i := 0; i < 8; i++ {
if b&1 > 0 {
result += "1"
} else {
result += "0"
}
b >>= 1
}
return
}