4
4
"bytes"
5
5
"fmt"
6
6
"io"
7
- "math"
8
7
"strconv"
9
8
"testing"
10
9
@@ -50,18 +49,39 @@ func TestLossless(t *testing.T) {
50
49
compress : compressWithNewZstdCompressingReader ,
51
50
decompress : decompressWithNewZstdDecompressingReader ,
52
51
},
52
+ {
53
+ name : "NewZstdCompressingWriter -> DecompressZstd" ,
54
+ compress : compressWithNewZstdCompressingWriter ,
55
+ decompress : decompressWithDecompressZstd ,
56
+ },
57
+ {
58
+ name : "NewZstdCompressingWriter -> NewZstdDecompressor" ,
59
+ compress : compressWithNewZstdCompressingWriter ,
60
+ decompress : decompressWithNewZstdDecompressor ,
61
+ },
62
+ {
63
+ name : "NewZstdCompressingWriter -> NewZstdDecompressingReader" ,
64
+ compress : compressWithNewZstdCompressingWriter ,
65
+ decompress : decompressWithNewZstdDecompressingReader ,
66
+ },
53
67
} {
54
- for i := 1 ; i <= 5 ; i ++ {
55
- srclen := int (math .Pow10 (i ))
68
+ for _ , srclen := range []int {9 , 99 , 999 , 1_999_999 , 5_999_999 } {
56
69
name := tc .name + "_" + strconv .Itoa (srclen ) + "_bytes"
57
70
t .Run (name , func (t * testing.T ) {
58
71
_ , r := testdigest .NewReader (t , int64 (srclen ))
59
72
src , err := io .ReadAll (r )
60
73
require .NoError (t , err )
74
+ require .Len (t , src , srclen )
61
75
require .Equal (t , srclen , len (src ))
62
76
compressed := tc .compress (t , src )
63
77
64
78
decompressed := tc .decompress (t , len (src ), compressed )
79
+ require .Len (t , decompressed , srclen )
80
+ if srclen > 1000 {
81
+ require .Empty (t , cmp .Diff (src [:1000 ], decompressed [:1000 ]))
82
+ require .Empty (t , cmp .Diff (src [len (src )- 1000 :], decompressed [len (decompressed )- 1000 :]))
83
+ return
84
+ }
65
85
require .Empty (t , cmp .Diff (src , decompressed ))
66
86
})
67
87
}
@@ -88,6 +108,17 @@ func compressWithNewZstdCompressingReader(t *testing.T, src []byte) []byte {
88
108
return compressed
89
109
}
90
110
111
+ func compressWithNewZstdCompressingWriter (t * testing.T , src []byte ) []byte {
112
+ compressed := & bytes.Buffer {}
113
+ cw := compression .NewZstdCompressingWriter (compressed )
114
+ written , err := cw .Write (src )
115
+ require .NoError (t , err )
116
+ require .Equal (t , len (src ), written )
117
+ err = cw .Close ()
118
+ require .NoError (t , err )
119
+ return compressed .Bytes ()
120
+ }
121
+
91
122
func decompressWithDecompressZstd (t * testing.T , srclen int , compressed []byte ) []byte {
92
123
decompressed := make ([]byte , srclen )
93
124
decompressed , err := compression .DecompressZstd (decompressed , compressed )
@@ -111,10 +142,9 @@ func decompressWithNewZstdDecompressingReader(t *testing.T, srclen int, compress
111
142
rc := io .NopCloser (bytes .NewReader (compressed ))
112
143
d , err := compression .NewZstdDecompressingReader (rc )
113
144
require .NoError (t , err )
114
- buf := make ([]byte , srclen )
115
- n , err := d .Read (buf )
145
+ buf , err := io .ReadAll (d )
116
146
require .NoError (t , err )
117
- require .Equal (t , srclen , n )
147
+ require .Len (t , buf , srclen )
118
148
err = d .Close ()
119
149
require .NoError (t , err )
120
150
err = rc .Close ()
0 commit comments