...
1
2
3
4
5 package s2
6
7 import (
8 "bytes"
9 "encoding/binary"
10 "path/filepath"
11 "testing"
12
13 "github.com/klauspost/compress/internal/lz4ref"
14 "github.com/klauspost/compress/internal/snapref"
15 )
16
17 func TestLZ4sConverter_ConvertBlock(t *testing.T) {
18 for _, tf := range testFiles {
19 t.Run(tf.label, func(t *testing.T) {
20 if err := downloadBenchmarkFiles(t, tf.filename); err != nil {
21 t.Fatalf("failed to download testdata: %s", err)
22 }
23
24 bDir := filepath.FromSlash(*benchdataDir)
25 data := readFile(t, filepath.Join(bDir, tf.filename))
26 if n := tf.sizeLimit; 0 < n && n < len(data) {
27 data = data[:n]
28 }
29
30 lz4Data := make([]byte, lz4ref.CompressBlockBound(len(data)))
31 n, err := lz4ref.CompressBlockLZ4s(data, lz4Data)
32 if err != nil {
33 t.Fatal(err)
34 }
35 if n == 0 {
36 t.Skip("incompressible")
37 return
38 }
39 t.Log("input size:", len(data))
40 t.Log("lz4 size:", n)
41 lz4Data = lz4Data[:n]
42 s2Dst := make([]byte, binary.MaxVarintLen32, MaxEncodedLen(len(data)))
43 s2Dst = s2Dst[:binary.PutUvarint(s2Dst, uint64(len(data)))]
44 hdr := len(s2Dst)
45
46 conv := LZ4sConverter{}
47
48 szS := 0
49 out, n, err := conv.ConvertBlockSnappy(s2Dst, lz4Data)
50 if err != nil {
51 t.Fatal(err)
52 }
53 if n != len(data) {
54 t.Fatalf("length mismatch: want %d, got %d", len(data), n)
55 }
56 szS = len(out) - hdr
57 t.Log("lz4->snappy size:", szS)
58
59 decom, err := snapref.Decode(nil, out)
60 if err != nil {
61 t.Fatal(err)
62 }
63 if !bytes.Equal(decom, data) {
64 t.Errorf("output mismatch")
65 }
66
67 sz := 0
68 out, n, err = conv.ConvertBlock(s2Dst, lz4Data)
69 if err != nil {
70 t.Fatal(err)
71 }
72 if n != len(data) {
73 t.Fatalf("length mismatch: want %d, got %d", len(data), n)
74 }
75 sz = len(out) - hdr
76 t.Log("lz4->s2 size:", sz)
77
78 decom, err = Decode(nil, out)
79 if err != nil {
80 t.Fatal(err)
81 }
82 if !bytes.Equal(decom, data) {
83 t.Errorf("output mismatch")
84 }
85
86 out2 := Encode(s2Dst[:0], data)
87 sz2 := len(out2) - hdr
88 t.Log("s2 (default) size:", sz2)
89
90 out2 = EncodeBetter(s2Dst[:0], data)
91 sz3 := len(out2) - hdr
92 t.Log("s2 (better) size:", sz3)
93
94 t.Log("lz4 -> s2 bytes saved:", len(lz4Data)-sz)
95 t.Log("lz4 -> snappy bytes saved:", len(lz4Data)-szS)
96 t.Log("data -> s2 (default) bytes saved:", len(lz4Data)-sz2)
97 t.Log("data -> s2 (better) bytes saved:", len(lz4Data)-sz3)
98 t.Log("direct data -> s2 (default) compared to converted from lz4:", sz-sz2)
99 t.Log("direct data -> s2 (better) compared to converted from lz4:", sz-sz3)
100 })
101 }
102 }
103
View as plain text