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) }