|
1
|
//
|
|
2
|
// © Copyright Henrik Ravn 2004
|
|
3
|
//
|
|
4
|
// Use, modification and distribution are subject to the Boost Software License, Version 1.0.
|
|
5
|
// (See accompanying file LICENSE_1_0.txt or copy at https://www.boost.org/LICENSE_1_0.txt)
|
|
6
|
//
|
|
7
|
|
|
8
|
using System;
|
|
9
|
using System.Collections;
|
|
10
|
using System.IO;
|
|
11
|
|
|
12
|
// uncomment the define below to include unit tests
|
|
13
|
//#define nunit
|
|
14
|
#if nunit
|
|
15
|
using NUnit.Framework;
|
|
16
|
|
|
17
|
// Unit tests for the DotZLib class library
|
|
18
|
// ----------------------------------------
|
|
19
|
//
|
|
20
|
// Use this with NUnit 2 from https://www.nunit.org
|
|
21
|
//
|
|
22
|
|
|
23
|
namespace DotZLibTests
|
|
24
|
{
|
|
25
|
using DotZLib;
|
|
26
|
|
|
27
|
// helper methods
|
|
28
|
internal class Utils
|
|
29
|
{
|
|
30
|
public static bool byteArrEqual( byte[] lhs, byte[] rhs )
|
|
31
|
{
|
|
32
|
if (lhs.Length != rhs.Length)
|
|
33
|
return false;
|
|
34
|
for (int i = lhs.Length-1; i >= 0; --i)
|
|
35
|
if (lhs[i] != rhs[i])
|
|
36
|
return false;
|
|
37
|
return true;
|
|
38
|
}
|
|
39
|
|
|
40
|
}
|
|
41
|
|
|
42
|
|
|
43
|
[TestFixture]
|
|
44
|
public class CircBufferTests
|
|
45
|
{
|
|
46
|
#region Circular buffer tests
|
|
47
|
[Test]
|
|
48
|
public void SinglePutGet()
|
|
49
|
{
|
|
50
|
CircularBuffer buf = new CircularBuffer(10);
|
|
51
|
Assert.AreEqual( 0, buf.Size );
|
|
52
|
Assert.AreEqual( -1, buf.Get() );
|
|
53
|
|
|
54
|
Assert.IsTrue(buf.Put( 1 ));
|
|
55
|
Assert.AreEqual( 1, buf.Size );
|
|
56
|
Assert.AreEqual( 1, buf.Get() );
|
|
57
|
Assert.AreEqual( 0, buf.Size );
|
|
58
|
Assert.AreEqual( -1, buf.Get() );
|
|
59
|
}
|
|
60
|
|
|
61
|
[Test]
|
|
62
|
public void BlockPutGet()
|
|
63
|
{
|
|
64
|
CircularBuffer buf = new CircularBuffer(10);
|
|
65
|
byte[] arr = {1,2,3,4,5,6,7,8,9,10};
|
|
66
|
Assert.AreEqual( 10, buf.Put(arr,0,10) );
|
|
67
|
Assert.AreEqual( 10, buf.Size );
|
|
68
|
Assert.IsFalse( buf.Put(11) );
|
|
69
|
Assert.AreEqual( 1, buf.Get() );
|
|
70
|
Assert.IsTrue( buf.Put(11) );
|
|
71
|
|
|
72
|
byte[] arr2 = (byte[])arr.Clone();
|
|
73
|
Assert.AreEqual( 9, buf.Get(arr2,1,9) );
|
|
74
|
Assert.IsTrue( Utils.byteArrEqual(arr,arr2) );
|
|
75
|
}
|
|
76
|
|
|
77
|
#endregion
|
|
78
|
}
|
|
79
|
|
|
80
|
[TestFixture]
|
|
81
|
public class ChecksumTests
|
|
82
|
{
|
|
83
|
#region CRC32 Tests
|
|
84
|
[Test]
|
|
85
|
public void CRC32_Null()
|
|
86
|
{
|
|
87
|
CRC32Checksum crc32 = new CRC32Checksum();
|
|
88
|
Assert.AreEqual( 0, crc32.Value );
|
|
89
|
|
|
90
|
crc32 = new CRC32Checksum(1);
|
|
91
|
Assert.AreEqual( 1, crc32.Value );
|
|
92
|
|
|
93
|
crc32 = new CRC32Checksum(556);
|
|
94
|
Assert.AreEqual( 556, crc32.Value );
|
|
95
|
}
|
|
96
|
|
|
97
|
[Test]
|
|
98
|
public void CRC32_Data()
|
|
99
|
{
|
|
100
|
CRC32Checksum crc32 = new CRC32Checksum();
|
|
101
|
byte[] data = { 1,2,3,4,5,6,7 };
|
|
102
|
crc32.Update(data);
|
|
103
|
Assert.AreEqual( 0x70e46888, crc32.Value );
|
|
104
|
|
|
105
|
crc32 = new CRC32Checksum();
|
|
106
|
crc32.Update("penguin");
|
|
107
|
Assert.AreEqual( 0x0e5c1a120, crc32.Value );
|
|
108
|
|
|
109
|
crc32 = new CRC32Checksum(1);
|
|
110
|
crc32.Update("penguin");
|
|
111
|
Assert.AreEqual(0x43b6aa94, crc32.Value);
|
|
112
|
|
|
113
|
}
|
|
114
|
#endregion
|
|
115
|
|
|
116
|
#region Adler tests
|
|
117
|
|
|
118
|
[Test]
|
|
119
|
public void Adler_Null()
|
|
120
|
{
|
|
121
|
AdlerChecksum adler = new AdlerChecksum();
|
|
122
|
Assert.AreEqual(0, adler.Value);
|
|
123
|
|
|
124
|
adler = new AdlerChecksum(1);
|
|
125
|
Assert.AreEqual( 1, adler.Value );
|
|
126
|
|
|
127
|
adler = new AdlerChecksum(556);
|
|
128
|
Assert.AreEqual( 556, adler.Value );
|
|
129
|
}
|
|
130
|
|
|
131
|
[Test]
|
|
132
|
public void Adler_Data()
|
|
133
|
{
|
|
134
|
AdlerChecksum adler = new AdlerChecksum(1);
|
|
135
|
byte[] data = { 1,2,3,4,5,6,7 };
|
|
136
|
adler.Update(data);
|
|
137
|
Assert.AreEqual( 0x5b001d, adler.Value );
|
|
138
|
|
|
139
|
adler = new AdlerChecksum();
|
|
140
|
adler.Update("penguin");
|
|
141
|
Assert.AreEqual(0x0bcf02f6, adler.Value );
|
|
142
|
|
|
143
|
adler = new AdlerChecksum(1);
|
|
144
|
adler.Update("penguin");
|
|
145
|
Assert.AreEqual(0x0bd602f7, adler.Value);
|
|
146
|
|
|
147
|
}
|
|
148
|
#endregion
|
|
149
|
}
|
|
150
|
|
|
151
|
[TestFixture]
|
|
152
|
public class InfoTests
|
|
153
|
{
|
|
154
|
#region Info tests
|
|
155
|
[Test]
|
|
156
|
public void Info_Version()
|
|
157
|
{
|
|
158
|
Info info = new Info();
|
|
159
|
Assert.AreEqual("1.3.2", Info.Version);
|
|
160
|
Assert.AreEqual(32, info.SizeOfUInt);
|
|
161
|
Assert.AreEqual(32, info.SizeOfULong);
|
|
162
|
Assert.AreEqual(32, info.SizeOfPointer);
|
|
163
|
Assert.AreEqual(32, info.SizeOfOffset);
|
|
164
|
}
|
|
165
|
#endregion
|
|
166
|
}
|
|
167
|
|
|
168
|
[TestFixture]
|
|
169
|
public class DeflateInflateTests
|
|
170
|
{
|
|
171
|
#region Deflate tests
|
|
172
|
[Test]
|
|
173
|
public void Deflate_Init()
|
|
174
|
{
|
|
175
|
using (Deflater def = new Deflater(CompressLevel.Default))
|
|
176
|
{
|
|
177
|
}
|
|
178
|
}
|
|
179
|
|
|
180
|
private ArrayList compressedData = new ArrayList();
|
|
181
|
private uint adler1;
|
|
182
|
|
|
183
|
private ArrayList uncompressedData = new ArrayList();
|
|
184
|
private uint adler2;
|
|
185
|
|
|
186
|
public void CDataAvail(byte[] data, int startIndex, int count)
|
|
187
|
{
|
|
188
|
for (int i = 0; i < count; ++i)
|
|
189
|
compressedData.Add(data[i+startIndex]);
|
|
190
|
}
|
|
191
|
|
|
192
|
[Test]
|
|
193
|
public void Deflate_Compress()
|
|
194
|
{
|
|
195
|
compressedData.Clear();
|
|
196
|
|
|
197
|
byte[] testData = new byte[35000];
|
|
198
|
for (int i = 0; i < testData.Length; ++i)
|
|
199
|
testData[i] = 5;
|
|
200
|
|
|
201
|
using (Deflater def = new Deflater((CompressLevel)5))
|
|
202
|
{
|
|
203
|
def.DataAvailable += new DataAvailableHandler(CDataAvail);
|
|
204
|
def.Add(testData);
|
|
205
|
def.Finish();
|
|
206
|
adler1 = def.Checksum;
|
|
207
|
}
|
|
208
|
}
|
|
209
|
#endregion
|
|
210
|
|
|
211
|
#region Inflate tests
|
|
212
|
[Test]
|
|
213
|
public void Inflate_Init()
|
|
214
|
{
|
|
215
|
using (Inflater inf = new Inflater())
|
|
216
|
{
|
|
217
|
}
|
|
218
|
}
|
|
219
|
|
|
220
|
private void DDataAvail(byte[] data, int startIndex, int count)
|
|
221
|
{
|
|
222
|
for (int i = 0; i < count; ++i)
|
|
223
|
uncompressedData.Add(data[i+startIndex]);
|
|
224
|
}
|
|
225
|
|
|
226
|
[Test]
|
|
227
|
public void Inflate_Expand()
|
|
228
|
{
|
|
229
|
uncompressedData.Clear();
|
|
230
|
|
|
231
|
using (Inflater inf = new Inflater())
|
|
232
|
{
|
|
233
|
inf.DataAvailable += new DataAvailableHandler(DDataAvail);
|
|
234
|
inf.Add((byte[])compressedData.ToArray(typeof(byte)));
|
|
235
|
inf.Finish();
|
|
236
|
adler2 = inf.Checksum;
|
|
237
|
}
|
|
238
|
Assert.AreEqual( adler1, adler2 );
|
|
239
|
}
|
|
240
|
#endregion
|
|
241
|
}
|
|
242
|
|
|
243
|
[TestFixture]
|
|
244
|
public class GZipStreamTests
|
|
245
|
{
|
|
246
|
#region GZipStream test
|
|
247
|
[Test]
|
|
248
|
public void GZipStream_WriteRead()
|
|
249
|
{
|
|
250
|
using (GZipStream gzOut = new GZipStream("gzstream.gz", CompressLevel.Best))
|
|
251
|
{
|
|
252
|
BinaryWriter writer = new BinaryWriter(gzOut);
|
|
253
|
writer.Write("hi there");
|
|
254
|
writer.Write(Math.PI);
|
|
255
|
writer.Write(42);
|
|
256
|
}
|
|
257
|
|
|
258
|
using (GZipStream gzIn = new GZipStream("gzstream.gz"))
|
|
259
|
{
|
|
260
|
BinaryReader reader = new BinaryReader(gzIn);
|
|
261
|
string s = reader.ReadString();
|
|
262
|
Assert.AreEqual("hi there",s);
|
|
263
|
double d = reader.ReadDouble();
|
|
264
|
Assert.AreEqual(Math.PI, d);
|
|
265
|
int i = reader.ReadInt32();
|
|
266
|
Assert.AreEqual(42,i);
|
|
267
|
}
|
|
268
|
|
|
269
|
}
|
|
270
|
#endregion
|
|
271
|
}
|
|
272
|
}
|
|
273
|
|
|
274
|
#endif
|
|
275
|
|