|
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 http://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 http://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.2.3", 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 |