writer_test.go 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. package lz4_test
  2. import (
  3. "bytes"
  4. "fmt"
  5. "io"
  6. "io/ioutil"
  7. "reflect"
  8. "testing"
  9. lz4 "github.com/pierrec/lz4/v2"
  10. )
  11. func TestWriter(t *testing.T) {
  12. goldenFiles := []string{
  13. "testdata/e.txt",
  14. "testdata/gettysburg.txt",
  15. "testdata/Mark.Twain-Tom.Sawyer.txt",
  16. "testdata/pg1661.txt",
  17. "testdata/pi.txt",
  18. "testdata/random.data",
  19. "testdata/repeat.txt",
  20. }
  21. for _, fname := range goldenFiles {
  22. for _, header := range []lz4.Header{
  23. {}, // Default header.
  24. {BlockChecksum: true},
  25. {NoChecksum: true},
  26. {BlockMaxSize: 64 << 10}, // 64Kb
  27. {CompressionLevel: 10},
  28. {Size: 123},
  29. } {
  30. label := fmt.Sprintf("%s/%s", fname, header)
  31. t.Run(label, func(t *testing.T) {
  32. fname := fname
  33. header := header
  34. t.Parallel()
  35. raw, err := ioutil.ReadFile(fname)
  36. if err != nil {
  37. t.Fatal(err)
  38. }
  39. r := bytes.NewReader(raw)
  40. // Compress.
  41. var zout bytes.Buffer
  42. zw := lz4.NewWriter(&zout)
  43. zw.Header = header
  44. _, err = io.Copy(zw, r)
  45. if err != nil {
  46. t.Fatal(err)
  47. }
  48. err = zw.Close()
  49. if err != nil {
  50. t.Fatal(err)
  51. }
  52. // Uncompress.
  53. var out bytes.Buffer
  54. zr := lz4.NewReader(&zout)
  55. n, err := io.Copy(&out, zr)
  56. if err != nil {
  57. t.Fatal(err)
  58. }
  59. // The uncompressed data must be the same as the initial input.
  60. if got, want := int(n), len(raw); got != want {
  61. t.Errorf("invalid sizes: got %d; want %d", got, want)
  62. }
  63. if got, want := out.Bytes(), raw; !reflect.DeepEqual(got, want) {
  64. t.Fatal("uncompressed data does not match original")
  65. }
  66. })
  67. }
  68. }
  69. }