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