arnaucube
arnaucube/huffman-codingPublic Self-hosted repository
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}