1
2
3
4
5
6
7
8
9
10
11
12
13
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
-
+
|
package fibonacci
import (
"bytes"
"fmt"
"io"
"strings"
"testing"
)
func TestNumbers(t *testing.T) {
n := New(32)
expected := []uint64{1, 1, 2, 3, 5, 8, 13, 21}
|
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
|
-
+
-
+
-
-
-
-
-
-
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
|
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) {
func TestWriter(t *testing.T) {
var buf bytes.Buffer
var w io.Writer = Writer(&buf)
var input []byte = make([]byte, 256)
w.Write([]byte{0})
w.Write(nil)
for _, v := range buf.Bytes() {
fmt.Printf("%s-", b2s(v))
}
fmt.Println()
}
var fib Numbers = New(16)
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++ {
for i := uint64(0); i < 256; i++ {
input[i] = byte(i)
}
// Write the input
w.Write(input)
w.Write(nil)
count, err := w.Write(input)
if count != len(input) {
t.Error("Unexpected write count", count)
}
if err != nil {
t.Error("Unexpected write error", err.Error())
}
// Flush remaining bits
count, err = w.Write(nil)
if count != 0 {
t.Error("Unexpected write count while flushing", count)
}
if err != nil {
t.Error("Unexpected write error while flushing", err.Error())
}
var output string
for _, v := range buf.Bytes() {
fmt.Printf("%s-", b2s(v))
output += u2s(uint64(v), 8)
}
fmt.Println()
}
func b2s(b byte) (result string) {
for i := 0; i < 8; i++ {
if b&1 > 0 {
for i, v := range input {
c, l := fib.Code(uint64(v))
vs := u2s(c, l)
if loc := strings.Index(output, vs); loc != 0 {
t.Fatal("Unexpected location for", i, "value", vs)
}
output = output[len(vs):]
}
}
func u2s(b uint64, l byte) (result string) {
for i := byte(0); i < l; i++ {
if (b & 1) > 0 {
result += "1"
} else {
result += "0"
}
b >>= 1
}
return
}
|