You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

101 lines
1.9 KiB

package huffman
import (
"bytes"
"fmt"
"testing"
"gopkg.in/go-playground/assert.v1"
)
var debug = true
func TestBuildTree0(t *testing.T) {
values := make(map[byte]int64)
values[65] = 3
values[66] = 5
values[67] = 6
values[68] = 4
values[69] = 2
leafs := leafsFromValues(values)
sortedLeafs := sortNodes(leafs)
n := buildTree(sortedLeafs)
/*
Expected result (both valid):
20
/ \
9 \
/ \ \
/ 5 11
/ / \ / \
4 2 3 5 6
20
/ \
/ 11
/ / \
9 5 \
/ \ / \ \
4 5 2 3 6
The second tree is what is genereated in this test
*/
assert.Equal(t, int64(20), n.key)
assert.Equal(t, int64(9), n.l.key)
assert.Equal(t, int64(4), n.l.l.key)
assert.Equal(t, int64(5), n.l.r.key)
assert.Equal(t, int64(11), n.r.key)
assert.Equal(t, int64(5), n.r.l.key)
assert.Equal(t, int64(2), n.r.l.l.key)
assert.Equal(t, int64(3), n.r.l.r.key)
assert.Equal(t, int64(6), n.r.r.key)
w := bytes.NewBufferString("")
printTree(w, n)
if debug {
fmt.Println(w)
}
}
func TestBuildTree1(t *testing.T) {
values := make(map[byte]int64)
values[97] = 10
values[101] = 15
values[105] = 12
values[115] = 3
values[116] = 4
values[112] = 13
values[10] = 1
leafs := leafsFromValues(values)
sortedLeafs := sortNodes(leafs)
n := buildTree(sortedLeafs)
assert.Equal(t, int64(58), n.key)
assert.Equal(t, int64(25), n.l.key)
assert.Equal(t, int64(33), n.r.key)
w := bytes.NewBufferString("")
printTree(w, n)
if debug {
fmt.Println(w)
}
}
func TestGenerateTable(t *testing.T) {
values := make(map[byte]int64)
values[65] = 3
values[66] = 5
values[67] = 6
values[68] = 4
values[69] = 2
leafs := leafsFromValues(values)
sortedLeafs := sortNodes(leafs)
n := buildTree(sortedLeafs)
table := generateTable(n)
fmt.Println(table)
}