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