huffman-coding/huffman_test.go
huffman_test.goRaw
1package huffman
2
3import (
4 "bytes"
5 "fmt"
6 "testing"
7
8 "gopkg.in/go-playground/assert.v1"
9)
10
11var debug = true
12
13func TestBuildTree0(t *testing.T) {
14 values := make(map[byte]int64)
15 values[65] = 3
16 values[66] = 5
17 values[67] = 6
18 values[68] = 4
19 values[69] = 2
20
21 leafs := leafsFromValues(values)
22 sortedLeafs := sortNodes(leafs)
23 n := buildTree(sortedLeafs)
24
25 /*
26 Expected result (both valid):
27 20
28 / \
29 9 \
30 / \ \
31 / 5 11
32 / / \ / \
33 4 2 3 5 6
34
35 20
36 / \
37 / 11
38 / / \
39 9 5 \
40 / \ / \ \
41 4 5 2 3 6
42 The second tree is what is genereated in this test
43 */
44 assert.Equal(t, int64(20), n.key)
45 assert.Equal(t, int64(9), n.l.key)
46 assert.Equal(t, int64(4), n.l.l.key)
47 assert.Equal(t, int64(5), n.l.r.key)
48 assert.Equal(t, int64(11), n.r.key)
49 assert.Equal(t, int64(5), n.r.l.key)
50 assert.Equal(t, int64(2), n.r.l.l.key)
51 assert.Equal(t, int64(3), n.r.l.r.key)
52 assert.Equal(t, int64(6), n.r.r.key)
53
54 w := bytes.NewBufferString("")
55 printTree(w, n)
56 if debug {
57 fmt.Println(w)
58 }
59}
60
61func TestBuildTree1(t *testing.T) {
62 values := make(map[byte]int64)
63 values[97] = 10
64 values[101] = 15
65 values[105] = 12
66 values[115] = 3
67 values[116] = 4
68 values[112] = 13
69 values[10] = 1
70
71 leafs := leafsFromValues(values)
72 sortedLeafs := sortNodes(leafs)
73 n := buildTree(sortedLeafs)
74
75 assert.Equal(t, int64(58), n.key)
76 assert.Equal(t, int64(25), n.l.key)
77 assert.Equal(t, int64(33), n.r.key)
78
79 w := bytes.NewBufferString("")
80 printTree(w, n)
81 if debug {
82 fmt.Println(w)
83 }
84}
85
86func TestGenerateTable(t *testing.T) {
87 values := make(map[byte]int64)
88 values[65] = 3
89 values[66] = 5
90 values[67] = 6
91 values[68] = 4
92 values[69] = 2
93
94 leafs := leafsFromValues(values)
95 sortedLeafs := sortNodes(leafs)
96 n := buildTree(sortedLeafs)
97
98 table := generateTable(n)
99
100 fmt.Println(table)
101}