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