Skip to content

Commit 6357b6d

Browse files
committed
IDisposable
1 parent b5f16ed commit 6357b6d

3 files changed

Lines changed: 97 additions & 49 deletions

File tree

ZstdNet.Tests/Binding_Tests.cs

Lines changed: 95 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,15 @@ public void CompressAndDecompress_workCorrectly([Values(false, true)] bool useDi
1515

1616
var dict = useDictionary ? BuildDictionary() : null;
1717
var compressionLevel = bestCompression ? CompressionOptions.MaxCompressionLevel : CompressionOptions.DefaultCompressionLevel;
18+
1819
byte[] compressed;
19-
using(var compressor = new Compressor(new CompressionOptions(dict, compressionLevel)))
20+
using(var options = new CompressionOptions(dict, compressionLevel))
21+
using(var compressor = new Compressor(options))
2022
compressed = compressor.Wrap(data);
23+
2124
byte[] decompressed;
22-
using(var decompressor = new Decompressor(new DecompressionOptions(dict)))
25+
using(var options = new DecompressionOptions(dict))
26+
using(var decompressor = new Decompressor(options))
2327
decompressed = decompressor.Unwrap(compressed);
2428

2529
CollectionAssert.AreEqual(data, decompressed);
@@ -34,8 +38,10 @@ public void DecompressWithDictionary_worksCorrectly_onDataCompressedWithoutIt()
3438
compressed = compressor.Wrap(data);
3539

3640
var dict = BuildDictionary();
41+
3742
byte[] decompressed;
38-
using(var decompressor = new Decompressor(new DecompressionOptions(dict)))
43+
using(var options = new DecompressionOptions(dict))
44+
using(var decompressor = new Decompressor(options))
3945
decompressed = decompressor.Unwrap(compressed);
4046

4147
CollectionAssert.AreEqual(data, decompressed);
@@ -46,8 +52,10 @@ public void DecompressWithoutDictionary_throwsZstdException_onDataCompressedWith
4652
{
4753
var data = GenerateSample();
4854
var dict = BuildDictionary();
55+
4956
byte[] compressed;
50-
using(var compressor = new Compressor(new CompressionOptions(dict)))
57+
using(var options = new CompressionOptions(dict))
58+
using(var compressor = new Compressor(options))
5159
compressed = compressor.Wrap(data);
5260

5361
using(var decompressor = new Decompressor())
@@ -59,12 +67,16 @@ public void DecompressWithAnotherDictionary_throwsZstdException()
5967
{
6068
var data = GenerateSample();
6169
var oldDict = BuildDictionary();
70+
6271
byte[] compressed;
63-
using(var compressor = new Compressor(new CompressionOptions(oldDict)))
72+
using(var options = new CompressionOptions(oldDict))
73+
using(var compressor = new Compressor(options))
6474
compressed = compressor.Wrap(data);
75+
6576
var newDict = Encoding.ASCII.GetBytes("zstd supports raw-content dictionaries");
6677

67-
using(var decompressor = new Decompressor(new DecompressionOptions(newDict)))
78+
using(var options = new DecompressionOptions(newDict))
79+
using(var decompressor = new Decompressor(options))
6880
Assert.Throws<ZstdException>(() => decompressor.Unwrap(compressed));
6981
}
7082

@@ -88,7 +100,9 @@ public void Compress_worksBetter_withDictionary()
88100
byte[] compressedWithoutDict, compressedWithDict;
89101
using (var compressor = new Compressor())
90102
compressedWithoutDict = compressor.Wrap(data);
91-
using (var compressor = new Compressor(new CompressionOptions(BuildDictionary())))
103+
104+
using(var options = new CompressionOptions(BuildDictionary()))
105+
using(var compressor = new Compressor(options))
92106
compressedWithDict = compressor.Wrap(data);
93107

94108
Assert.Greater(compressedWithoutDict.Length, compressedWithDict.Length);
@@ -100,7 +114,8 @@ public void Decompress_throwsZstdException_onInvalidData([Values(false, true)] b
100114
var data = GenerateSample(); // This isn't data in compressed format
101115
var dict = useDictionary ? BuildDictionary() : null;
102116

103-
using(var decompressor = new Decompressor(new DecompressionOptions(dict)))
117+
using(var options = new DecompressionOptions(dict))
118+
using(var decompressor = new Decompressor(options))
104119
Assert.Throws<ZstdException>(() => decompressor.Unwrap(data));
105120
}
106121

@@ -109,12 +124,14 @@ public void Decompress_throwsZstdException_onMalformedDecompressedSize([Values(f
109124
{
110125
var data = GenerateSample();
111126
var dict = useDictionary ? BuildDictionary() : null;
127+
112128
byte[] compressed;
113-
using(var compressor = new Compressor(new CompressionOptions(dict)))
129+
using(var options = new CompressionOptions(dict))
130+
using(var compressor = new Compressor(options))
114131
compressed = compressor.Wrap(data);
115132

116133
var frameHeader = compressed[4]; // Ensure that we malform decompressed size in the right place
117-
if (useDictionary)
134+
if(useDictionary)
118135
{
119136
Assert.AreEqual(frameHeader, 0x63);
120137
compressed[9]--;
@@ -124,8 +141,10 @@ public void Decompress_throwsZstdException_onMalformedDecompressedSize([Values(f
124141
Assert.AreEqual(frameHeader, 0x60);
125142
compressed[5]--;
126143
}
144+
127145
// Thus, ZSTD_getDecompressedSize will return size that is one byte lesser than actual
128-
using(var decompressor = new Decompressor(new DecompressionOptions(dict)))
146+
using(var options = new DecompressionOptions(dict))
147+
using(var decompressor = new Decompressor(options))
129148
Assert.Throws<ZstdException>(() => decompressor.Unwrap(compressed));
130149
}
131150

@@ -134,11 +153,14 @@ public void Decompress_throwsArgumentOutOfRangeException_onTooBigData([Values(fa
134153
{
135154
var data = GenerateSample();
136155
var dict = useDictionary ? BuildDictionary() : null;
156+
137157
byte[] compressed;
138-
using(var compressor = new Compressor(new CompressionOptions(dict)))
158+
using(var options = new CompressionOptions(dict))
159+
using(var compressor = new Compressor(options))
139160
compressed = compressor.Wrap(data);
140161

141-
using(var decompressor = new Decompressor(new DecompressionOptions(dict)))
162+
using(var options = new DecompressionOptions(dict))
163+
using(var decompressor = new Decompressor(options))
142164
Assert.Throws<ArgumentOutOfRangeException>(() => decompressor.Unwrap(compressed, 20));
143165
}
144166

@@ -150,12 +172,15 @@ public void Compress_canRead_fromArraySegment([Values(false, true)] bool useDict
150172
var dict = useDictionary ? BuildDictionary() : null;
151173

152174
byte[] compressed;
153-
using(var compressor = new Compressor(new CompressionOptions(dict)))
175+
using(var options = new CompressionOptions(dict))
176+
using(var compressor = new Compressor(options))
154177
compressed = compressor.Wrap(segment);
155178

156179
byte[] decompressed;
157-
using(var decompressor = new Decompressor(new DecompressionOptions(dict)))
180+
using(var options = new DecompressionOptions(dict))
181+
using(var decompressor = new Decompressor(options))
158182
decompressed = decompressor.Unwrap(compressed);
183+
159184
CollectionAssert.AreEqual(segment, decompressed);
160185
}
161186

@@ -164,15 +189,18 @@ public void Decompress_canRead_fromArraySegment([Values(false, true)] bool useDi
164189
{
165190
var data = GenerateSample();
166191
var dict = useDictionary ? BuildDictionary() : null;
192+
167193
byte[] compressed;
168-
using(var compressor = new Compressor(new CompressionOptions(dict)))
194+
using(var options = new CompressionOptions(dict))
195+
using(var compressor = new Compressor(options))
169196
compressed = compressor.Wrap(data);
170-
compressed = new byte[] {1, 2}.Concat(compressed).Concat(new byte[] {4, 5, 6})
171-
.ToArray();
197+
198+
compressed = new byte[] {1, 2}.Concat(compressed).Concat(new byte[] {4, 5, 6}).ToArray();
172199
var segment = new ArraySegment<byte>(compressed, 2, compressed.Length - 5);
173200

174201
byte[] decompressed;
175-
using(var decompressor = new Decompressor(new DecompressionOptions(dict)))
202+
using(var options = new DecompressionOptions(dict))
203+
using(var decompressor = new Decompressor(options))
176204
decompressed = decompressor.Unwrap(segment);
177205

178206
CollectionAssert.AreEqual(data, decompressed);
@@ -187,12 +215,15 @@ public void Compress_canWrite_toGivenBuffer([Values(false, true)] bool useDictio
187215
const int offset = 54;
188216

189217
int compressedSize;
190-
using(var compressor = new Compressor(new CompressionOptions(dict)))
218+
using(var options = new CompressionOptions(dict))
219+
using(var compressor = new Compressor(options))
191220
compressedSize = compressor.Wrap(data, compressed, offset);
192221

193222
byte[] decompressed;
194-
using(var decompressor = new Decompressor(new DecompressionOptions(dict)))
223+
using(var options = new DecompressionOptions(dict))
224+
using(var decompressor = new Decompressor(options))
195225
decompressed = decompressor.Unwrap(compressed.Skip(offset).Take(compressedSize).ToArray());
226+
196227
CollectionAssert.AreEqual(data, decompressed);
197228
}
198229

@@ -201,14 +232,18 @@ public void Decompress_canWrite_toGivenBuffer([Values(false, true)] bool useDict
201232
{
202233
var data = GenerateSample();
203234
var dict = useDictionary ? BuildDictionary() : null;
235+
204236
byte[] compressed;
205-
using(var compressor = new Compressor(new CompressionOptions(dict)))
237+
using(var options = new CompressionOptions(dict))
238+
using(var compressor = new Compressor(options))
206239
compressed = compressor.Wrap(data);
240+
207241
var decompressed = new byte[1000];
208242
const int offset = 54;
209243

210244
int decompressedSize;
211-
using(var decompressor = new Decompressor(new DecompressionOptions(dict)))
245+
using(var options = new DecompressionOptions(dict))
246+
using(var decompressor = new Decompressor(options))
212247
decompressedSize = decompressor.Unwrap(compressed, decompressed, offset);
213248

214249
CollectionAssert.AreEqual(data, decompressed.Skip(offset).Take(decompressedSize));
@@ -222,7 +257,8 @@ public void Compress_throwsInsufficientMemoryException_whenDestinationBufferIsTo
222257
var compressed = new byte[20];
223258
const int offset = 4;
224259

225-
using (var compressor = new Compressor(new CompressionOptions(dict)))
260+
using(var options = new CompressionOptions(dict))
261+
using(var compressor = new Compressor(options))
226262
Assert.Throws<InsufficientMemoryException>(() => compressor.Wrap(data, compressed, offset));
227263
}
228264

@@ -231,13 +267,17 @@ public void Decompress_throwsInsufficientMemoryException_whenDestinationBufferIs
231267
{
232268
var data = GenerateSample();
233269
var dict = useDictionary ? BuildDictionary() : null;
270+
234271
byte[] compressed;
235-
using(var compressor = new Compressor(new CompressionOptions(dict)))
272+
using(var options = new CompressionOptions(dict))
273+
using(var compressor = new Compressor(options))
236274
compressed = compressor.Wrap(data);
275+
237276
var decompressed = new byte[20];
238277
const int offset = 4;
239278

240-
using (var decompressor = new Decompressor(new DecompressionOptions(dict)))
279+
using(var options = new DecompressionOptions(dict))
280+
using(var decompressor = new Decompressor(options))
241281
Assert.Throws<InsufficientMemoryException>(() => decompressor.Unwrap(compressed, decompressed, offset));
242282
}
243283

@@ -248,10 +288,13 @@ public void CompressAndDecompress_workCorrectly_onEmptyBuffer([Values(false, tru
248288
var dict = useDictionary ? BuildDictionary() : null;
249289

250290
byte[] compressed;
251-
using(var compressor = new Compressor(new CompressionOptions(dict)))
291+
using(var options = new CompressionOptions(dict))
292+
using(var compressor = new Compressor(options))
252293
compressed = compressor.Wrap(data);
294+
253295
byte[] decompressed;
254-
using(var decompressor = new Decompressor(new DecompressionOptions(dict)))
296+
using(var options = new DecompressionOptions(dict))
297+
using(var decompressor = new Decompressor(options))
255298
decompressed = decompressor.Unwrap(compressed);
256299

257300
CollectionAssert.AreEqual(data, decompressed);
@@ -264,10 +307,13 @@ public void CompressAndDecompress_workCorrectly_onOneByteBuffer([Values(false, t
264307
var dict = useDictionary ? BuildDictionary() : null;
265308

266309
byte[] compressed;
267-
using(var compressor = new Compressor(new CompressionOptions(dict)))
310+
using(var options = new CompressionOptions(dict))
311+
using(var compressor = new Compressor(options))
268312
compressed = compressor.Wrap(data);
313+
269314
byte[] decompressed;
270-
using(var decompressor = new Decompressor(new DecompressionOptions(dict)))
315+
using(var options = new DecompressionOptions(dict))
316+
using(var decompressor = new Decompressor(options))
271317
decompressed = decompressor.Unwrap(compressed);
272318

273319
CollectionAssert.AreEqual(data, decompressed);
@@ -277,10 +323,12 @@ public void CompressAndDecompress_workCorrectly_onOneByteBuffer([Values(false, t
277323
public void CompressAndDecompress_workCorrectly_onArraysOfDifferentSizes([Values(false, true)] bool useDictionary)
278324
{
279325
var dict = useDictionary ? BuildDictionary() : null;
280-
using (var compressor = new Compressor(new CompressionOptions(dict)))
281-
using (var decompressor = new Decompressor(new DecompressionOptions(dict)))
326+
using(var compressionOptions = new CompressionOptions(dict))
327+
using(var decompressionOptions = new DecompressionOptions(dict))
328+
using(var compressor = new Compressor(compressionOptions))
329+
using(var decompressor = new Decompressor(decompressionOptions))
282330
{
283-
for (var i = 2; i < 100000; i += 3000)
331+
for(var i = 2; i < 100000; i += 3000)
284332
{
285333
var data = GenerateBuffer(i);
286334

@@ -295,25 +343,25 @@ public void CompressAndDecompress_workCorrectly_onArraysOfDifferentSizes([Values
295343
public void CompressAndDecompress_workCorrectly_ifDifferentInstancesRunInDifferentThreads([Values(false, true)] bool useDictionary)
296344
{
297345
var dict = useDictionary ? BuildDictionary() : null;
298-
var compressionOptions = new CompressionOptions(dict);
299-
var decompressionOptions = new DecompressionOptions(dict);
300-
Enumerable.Range(0, 100)
301-
.AsParallel().WithDegreeOfParallelism(50)
302-
.ForAll(_ =>
303-
{
304-
using (var compressor = new Compressor(compressionOptions))
305-
using (var decompressor = new Decompressor(decompressionOptions))
346+
using(var compressionOptions = new CompressionOptions(dict))
347+
using(var decompressionOptions = new DecompressionOptions(dict))
348+
Enumerable.Range(0, 100)
349+
.AsParallel().WithDegreeOfParallelism(50)
350+
.ForAll(_ =>
306351
{
307-
for (var i = 2; i < 100000; i += 30000)
352+
using(var compressor = new Compressor(compressionOptions))
353+
using(var decompressor = new Decompressor(decompressionOptions))
308354
{
309-
var data = GenerateBuffer(i);
355+
for(var i = 2; i < 100000; i += 30000)
356+
{
357+
var data = GenerateBuffer(i);
310358

311-
var decompressed = decompressor.Unwrap(compressor.Wrap(data));
359+
var decompressed = decompressor.Unwrap(compressor.Wrap(data));
312360

313-
CollectionAssert.AreEqual(data, decompressed);
361+
CollectionAssert.AreEqual(data, decompressed);
362+
}
314363
}
315-
}
316-
});
364+
});
317365
}
318366

319367
private static byte[] BuildDictionary()

ZstdNet/CompressionOptions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
namespace ZstdNet
99
{
10-
public class CompressionOptions
10+
public class CompressionOptions : IDisposable
1111
{
1212
public CompressionOptions(byte[] dict, int compressionLevel = DefaultCompressionLevel)
1313
: this(compressionLevel)

ZstdNet/DecompressionOptions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
namespace ZstdNet
99
{
10-
public class DecompressionOptions
10+
public class DecompressionOptions : IDisposable
1111
{
1212
public DecompressionOptions(byte[] dict)
1313
{

0 commit comments

Comments
 (0)