read_write_test.go 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. package rle
  2. import (
  3. "bytes"
  4. "testing"
  5. "github.com/ethereum/go-ethereum/crypto"
  6. )
  7. func TestDecompressSimple(t *testing.T) {
  8. res, err := Decompress([]byte{token, 0xfd})
  9. if err != nil {
  10. t.Error(err)
  11. }
  12. if bytes.Compare(res, crypto.Sha3([]byte(""))) != 0 {
  13. t.Error("empty sha3", res)
  14. }
  15. res, err = Decompress([]byte{token, 0xfe})
  16. if err != nil {
  17. t.Error(err)
  18. }
  19. if bytes.Compare(res, crypto.Sha3([]byte{0x80})) != 0 {
  20. t.Error("0x80 sha3", res)
  21. }
  22. res, err = Decompress([]byte{token, 0xff})
  23. if err != nil {
  24. t.Error(err)
  25. }
  26. if bytes.Compare(res, []byte{token}) != 0 {
  27. t.Error("token", res)
  28. }
  29. res, err = Decompress([]byte{token, 12})
  30. if err != nil {
  31. t.Error(err)
  32. }
  33. if bytes.Compare(res, make([]byte, 10)) != 0 {
  34. t.Error("10 * zero", res)
  35. }
  36. }
  37. func TestDecompressMulti(t *testing.T) {
  38. res, err := Decompress([]byte{token, 0xfd, token, 0xfe, token, 12})
  39. if err != nil {
  40. t.Error(err)
  41. }
  42. var exp []byte
  43. exp = append(exp, crypto.Sha3([]byte(""))...)
  44. exp = append(exp, crypto.Sha3([]byte{0x80})...)
  45. exp = append(exp, make([]byte, 10)...)
  46. if bytes.Compare(res, res) != 0 {
  47. t.Error("Expected", exp, "result", res)
  48. }
  49. }
  50. func TestCompressSimple(t *testing.T) {
  51. res := Compress([]byte{0, 0, 0, 0, 0})
  52. if bytes.Compare(res, []byte{token, 7}) != 0 {
  53. t.Error("5 * zero", res)
  54. }
  55. res = Compress(crypto.Sha3([]byte("")))
  56. if bytes.Compare(res, []byte{token, emptyShaToken}) != 0 {
  57. t.Error("empty sha", res)
  58. }
  59. res = Compress(crypto.Sha3([]byte{0x80}))
  60. if bytes.Compare(res, []byte{token, emptyListShaToken}) != 0 {
  61. t.Error("empty list sha", res)
  62. }
  63. res = Compress([]byte{token})
  64. if bytes.Compare(res, []byte{token, tokenToken}) != 0 {
  65. t.Error("token", res)
  66. }
  67. }
  68. func TestCompressMulti(t *testing.T) {
  69. in := []byte{0, 0, 0, 0, 0}
  70. in = append(in, crypto.Sha3([]byte(""))...)
  71. in = append(in, crypto.Sha3([]byte{0x80})...)
  72. in = append(in, token)
  73. res := Compress(in)
  74. exp := []byte{token, 7, token, emptyShaToken, token, emptyListShaToken, token, tokenToken}
  75. if bytes.Compare(res, exp) != 0 {
  76. t.Error("expected", exp, "got", res)
  77. }
  78. }
  79. func TestCompressDecompress(t *testing.T) {
  80. var in []byte
  81. for i := 0; i < 20; i++ {
  82. in = append(in, []byte{0, 0, 0, 0, 0}...)
  83. in = append(in, crypto.Sha3([]byte(""))...)
  84. in = append(in, crypto.Sha3([]byte{0x80})...)
  85. in = append(in, []byte{123, 2, 19, 89, 245, 254, 255, token, 98, 233}...)
  86. in = append(in, token)
  87. }
  88. c := Compress(in)
  89. d, err := Decompress(c)
  90. if err != nil {
  91. t.Error(err)
  92. }
  93. if bytes.Compare(d, in) != 0 {
  94. t.Error("multi failed\n", d, "\n", in)
  95. }
  96. }