writer_test.go 1.6 KB

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