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     {
byteArrEqual( byte[] lhs, byte[] rhs )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]
SinglePutGet()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]
BlockPutGet()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]
CRC32_Null()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]
CRC32_Data()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]
Adler_Null()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]
Adler_Data()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]
Info_Version()156         public void Info_Version()
157         {
158             Info info = new Info();
159             Assert.AreEqual("1.2.11", 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]
Deflate_Init()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 
CDataAvail(byte[] data, int startIndex, int count)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]
Deflate_Compress()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]
Inflate_Init()213         public void Inflate_Init()
214         {
215             using (Inflater inf = new Inflater())
216             {
217             }
218         }
219 
DDataAvail(byte[] data, int startIndex, int count)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]
Inflate_Expand()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]
GZipStream_WriteRead()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