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