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

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