2 // © Copyright Henrik Ravn 2004
\r
4 // Use, modification and distribution are subject to the Boost Software License, Version 1.0.
\r
5 // (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
\r
9 using System.Collections;
\r
12 // uncomment the define below to include unit tests
\r
15 using NUnit.Framework;
\r
17 // Unit tests for the DotZLib class library
\r
18 // ----------------------------------------
\r
20 // Use this with NUnit 2 from http://www.nunit.org
\r
23 namespace DotZLibTests
\r
28 internal class Utils
\r
30 public static bool byteArrEqual( byte[] lhs, byte[] rhs )
\r
32 if (lhs.Length != rhs.Length)
\r
34 for (int i = lhs.Length-1; i >= 0; --i)
\r
35 if (lhs[i] != rhs[i])
\r
44 public class CircBufferTests
\r
46 #region Circular buffer tests
\r
48 public void SinglePutGet()
\r
50 CircularBuffer buf = new CircularBuffer(10);
\r
51 Assert.AreEqual( 0, buf.Size );
\r
52 Assert.AreEqual( -1, buf.Get() );
\r
54 Assert.IsTrue(buf.Put( 1 ));
\r
55 Assert.AreEqual( 1, buf.Size );
\r
56 Assert.AreEqual( 1, buf.Get() );
\r
57 Assert.AreEqual( 0, buf.Size );
\r
58 Assert.AreEqual( -1, buf.Get() );
\r
62 public void BlockPutGet()
\r
64 CircularBuffer buf = new CircularBuffer(10);
\r
65 byte[] arr = {1,2,3,4,5,6,7,8,9,10};
\r
66 Assert.AreEqual( 10, buf.Put(arr,0,10) );
\r
67 Assert.AreEqual( 10, buf.Size );
\r
68 Assert.IsFalse( buf.Put(11) );
\r
69 Assert.AreEqual( 1, buf.Get() );
\r
70 Assert.IsTrue( buf.Put(11) );
\r
72 byte[] arr2 = (byte[])arr.Clone();
\r
73 Assert.AreEqual( 9, buf.Get(arr2,1,9) );
\r
74 Assert.IsTrue( Utils.byteArrEqual(arr,arr2) );
\r
81 public class ChecksumTests
\r
85 public void CRC32_Null()
\r
87 CRC32Checksum crc32 = new CRC32Checksum();
\r
88 Assert.AreEqual( 0, crc32.Value );
\r
90 crc32 = new CRC32Checksum(1);
\r
91 Assert.AreEqual( 1, crc32.Value );
\r
93 crc32 = new CRC32Checksum(556);
\r
94 Assert.AreEqual( 556, crc32.Value );
\r
98 public void CRC32_Data()
\r
100 CRC32Checksum crc32 = new CRC32Checksum();
\r
101 byte[] data = { 1,2,3,4,5,6,7 };
\r
102 crc32.Update(data);
\r
103 Assert.AreEqual( 0x70e46888, crc32.Value );
\r
105 crc32 = new CRC32Checksum();
\r
106 crc32.Update("penguin");
\r
107 Assert.AreEqual( 0x0e5c1a120, crc32.Value );
\r
109 crc32 = new CRC32Checksum(1);
\r
110 crc32.Update("penguin");
\r
111 Assert.AreEqual(0x43b6aa94, crc32.Value);
\r
116 #region Adler tests
\r
119 public void Adler_Null()
\r
121 AdlerChecksum adler = new AdlerChecksum();
\r
122 Assert.AreEqual(0, adler.Value);
\r
124 adler = new AdlerChecksum(1);
\r
125 Assert.AreEqual( 1, adler.Value );
\r
127 adler = new AdlerChecksum(556);
\r
128 Assert.AreEqual( 556, adler.Value );
\r
132 public void Adler_Data()
\r
134 AdlerChecksum adler = new AdlerChecksum(1);
\r
135 byte[] data = { 1,2,3,4,5,6,7 };
\r
136 adler.Update(data);
\r
137 Assert.AreEqual( 0x5b001d, adler.Value );
\r
139 adler = new AdlerChecksum();
\r
140 adler.Update("penguin");
\r
141 Assert.AreEqual(0x0bcf02f6, adler.Value );
\r
143 adler = new AdlerChecksum(1);
\r
144 adler.Update("penguin");
\r
145 Assert.AreEqual(0x0bd602f7, adler.Value);
\r
152 public class InfoTests
\r
156 public void Info_Version()
\r
158 Info info = new Info();
\r
159 Assert.AreEqual("1.2.8", Info.Version);
\r
160 Assert.AreEqual(32, info.SizeOfUInt);
\r
161 Assert.AreEqual(32, info.SizeOfULong);
\r
162 Assert.AreEqual(32, info.SizeOfPointer);
\r
163 Assert.AreEqual(32, info.SizeOfOffset);
\r
169 public class DeflateInflateTests
\r
171 #region Deflate tests
\r
173 public void Deflate_Init()
\r
175 using (Deflater def = new Deflater(CompressLevel.Default))
\r
180 private ArrayList compressedData = new ArrayList();
\r
181 private uint adler1;
\r
183 private ArrayList uncompressedData = new ArrayList();
\r
184 private uint adler2;
\r
186 public void CDataAvail(byte[] data, int startIndex, int count)
\r
188 for (int i = 0; i < count; ++i)
\r
189 compressedData.Add(data[i+startIndex]);
\r
193 public void Deflate_Compress()
\r
195 compressedData.Clear();
\r
197 byte[] testData = new byte[35000];
\r
198 for (int i = 0; i < testData.Length; ++i)
\r
201 using (Deflater def = new Deflater((CompressLevel)5))
\r
203 def.DataAvailable += new DataAvailableHandler(CDataAvail);
\r
206 adler1 = def.Checksum;
\r
211 #region Inflate tests
\r
213 public void Inflate_Init()
\r
215 using (Inflater inf = new Inflater())
\r
220 private void DDataAvail(byte[] data, int startIndex, int count)
\r
222 for (int i = 0; i < count; ++i)
\r
223 uncompressedData.Add(data[i+startIndex]);
\r
227 public void Inflate_Expand()
\r
229 uncompressedData.Clear();
\r
231 using (Inflater inf = new Inflater())
\r
233 inf.DataAvailable += new DataAvailableHandler(DDataAvail);
\r
234 inf.Add((byte[])compressedData.ToArray(typeof(byte)));
\r
236 adler2 = inf.Checksum;
\r
238 Assert.AreEqual( adler1, adler2 );
\r
244 public class GZipStreamTests
\r
246 #region GZipStream test
\r
248 public void GZipStream_WriteRead()
\r
250 using (GZipStream gzOut = new GZipStream("gzstream.gz", CompressLevel.Best))
\r
252 BinaryWriter writer = new BinaryWriter(gzOut);
\r
253 writer.Write("hi there");
\r
254 writer.Write(Math.PI);
\r
258 using (GZipStream gzIn = new GZipStream("gzstream.gz"))
\r
260 BinaryReader reader = new BinaryReader(gzIn);
\r
261 string s = reader.ReadString();
\r
262 Assert.AreEqual("hi there",s);
\r
263 double d = reader.ReadDouble();
\r
264 Assert.AreEqual(Math.PI, d);
\r
265 int i = reader.ReadInt32();
\r
266 Assert.AreEqual(42,i);
\r