1275793eaSopenharmony_ci//
2275793eaSopenharmony_ci// © Copyright Henrik Ravn 2004
3275793eaSopenharmony_ci//
4275793eaSopenharmony_ci// Use, modification and distribution are subject to the Boost Software License, Version 1.0.
5275793eaSopenharmony_ci// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6275793eaSopenharmony_ci//
7275793eaSopenharmony_ci
8275793eaSopenharmony_ciusing System;
9275793eaSopenharmony_ciusing System.Collections;
10275793eaSopenharmony_ciusing System.IO;
11275793eaSopenharmony_ci
12275793eaSopenharmony_ci// uncomment the define below to include unit tests
13275793eaSopenharmony_ci//#define nunit
14275793eaSopenharmony_ci#if nunit
15275793eaSopenharmony_ciusing NUnit.Framework;
16275793eaSopenharmony_ci
17275793eaSopenharmony_ci// Unit tests for the DotZLib class library
18275793eaSopenharmony_ci// ----------------------------------------
19275793eaSopenharmony_ci//
20275793eaSopenharmony_ci// Use this with NUnit 2 from http://www.nunit.org
21275793eaSopenharmony_ci//
22275793eaSopenharmony_ci
23275793eaSopenharmony_cinamespace DotZLibTests
24275793eaSopenharmony_ci{
25275793eaSopenharmony_ci    using DotZLib;
26275793eaSopenharmony_ci
27275793eaSopenharmony_ci    // helper methods
28275793eaSopenharmony_ci    internal class Utils
29275793eaSopenharmony_ci    {
30275793eaSopenharmony_ci        public static bool byteArrEqual( byte[] lhs, byte[] rhs )
31275793eaSopenharmony_ci        {
32275793eaSopenharmony_ci            if (lhs.Length != rhs.Length)
33275793eaSopenharmony_ci                return false;
34275793eaSopenharmony_ci            for (int i = lhs.Length-1; i >= 0; --i)
35275793eaSopenharmony_ci                if (lhs[i] != rhs[i])
36275793eaSopenharmony_ci                    return false;
37275793eaSopenharmony_ci            return true;
38275793eaSopenharmony_ci        }
39275793eaSopenharmony_ci
40275793eaSopenharmony_ci    }
41275793eaSopenharmony_ci
42275793eaSopenharmony_ci
43275793eaSopenharmony_ci    [TestFixture]
44275793eaSopenharmony_ci    public class CircBufferTests
45275793eaSopenharmony_ci    {
46275793eaSopenharmony_ci        #region Circular buffer tests
47275793eaSopenharmony_ci        [Test]
48275793eaSopenharmony_ci        public void SinglePutGet()
49275793eaSopenharmony_ci        {
50275793eaSopenharmony_ci            CircularBuffer buf = new CircularBuffer(10);
51275793eaSopenharmony_ci            Assert.AreEqual( 0, buf.Size );
52275793eaSopenharmony_ci            Assert.AreEqual( -1, buf.Get() );
53275793eaSopenharmony_ci
54275793eaSopenharmony_ci            Assert.IsTrue(buf.Put( 1 ));
55275793eaSopenharmony_ci            Assert.AreEqual( 1, buf.Size );
56275793eaSopenharmony_ci            Assert.AreEqual( 1, buf.Get() );
57275793eaSopenharmony_ci            Assert.AreEqual( 0, buf.Size );
58275793eaSopenharmony_ci            Assert.AreEqual( -1, buf.Get() );
59275793eaSopenharmony_ci        }
60275793eaSopenharmony_ci
61275793eaSopenharmony_ci        [Test]
62275793eaSopenharmony_ci        public void BlockPutGet()
63275793eaSopenharmony_ci        {
64275793eaSopenharmony_ci            CircularBuffer buf = new CircularBuffer(10);
65275793eaSopenharmony_ci            byte[] arr = {1,2,3,4,5,6,7,8,9,10};
66275793eaSopenharmony_ci            Assert.AreEqual( 10, buf.Put(arr,0,10) );
67275793eaSopenharmony_ci            Assert.AreEqual( 10, buf.Size );
68275793eaSopenharmony_ci            Assert.IsFalse( buf.Put(11) );
69275793eaSopenharmony_ci            Assert.AreEqual( 1, buf.Get() );
70275793eaSopenharmony_ci            Assert.IsTrue( buf.Put(11) );
71275793eaSopenharmony_ci
72275793eaSopenharmony_ci            byte[] arr2 = (byte[])arr.Clone();
73275793eaSopenharmony_ci            Assert.AreEqual( 9, buf.Get(arr2,1,9) );
74275793eaSopenharmony_ci            Assert.IsTrue( Utils.byteArrEqual(arr,arr2) );
75275793eaSopenharmony_ci        }
76275793eaSopenharmony_ci
77275793eaSopenharmony_ci        #endregion
78275793eaSopenharmony_ci    }
79275793eaSopenharmony_ci
80275793eaSopenharmony_ci    [TestFixture]
81275793eaSopenharmony_ci    public class ChecksumTests
82275793eaSopenharmony_ci    {
83275793eaSopenharmony_ci        #region CRC32 Tests
84275793eaSopenharmony_ci        [Test]
85275793eaSopenharmony_ci        public void CRC32_Null()
86275793eaSopenharmony_ci        {
87275793eaSopenharmony_ci            CRC32Checksum crc32 = new CRC32Checksum();
88275793eaSopenharmony_ci            Assert.AreEqual( 0, crc32.Value );
89275793eaSopenharmony_ci
90275793eaSopenharmony_ci            crc32 = new CRC32Checksum(1);
91275793eaSopenharmony_ci            Assert.AreEqual( 1, crc32.Value );
92275793eaSopenharmony_ci
93275793eaSopenharmony_ci            crc32 = new CRC32Checksum(556);
94275793eaSopenharmony_ci            Assert.AreEqual( 556, crc32.Value );
95275793eaSopenharmony_ci        }
96275793eaSopenharmony_ci
97275793eaSopenharmony_ci        [Test]
98275793eaSopenharmony_ci        public void CRC32_Data()
99275793eaSopenharmony_ci        {
100275793eaSopenharmony_ci            CRC32Checksum crc32 = new CRC32Checksum();
101275793eaSopenharmony_ci            byte[] data = { 1,2,3,4,5,6,7 };
102275793eaSopenharmony_ci            crc32.Update(data);
103275793eaSopenharmony_ci            Assert.AreEqual( 0x70e46888, crc32.Value  );
104275793eaSopenharmony_ci
105275793eaSopenharmony_ci            crc32 = new CRC32Checksum();
106275793eaSopenharmony_ci            crc32.Update("penguin");
107275793eaSopenharmony_ci            Assert.AreEqual( 0x0e5c1a120, crc32.Value );
108275793eaSopenharmony_ci
109275793eaSopenharmony_ci            crc32 = new CRC32Checksum(1);
110275793eaSopenharmony_ci            crc32.Update("penguin");
111275793eaSopenharmony_ci            Assert.AreEqual(0x43b6aa94, crc32.Value);
112275793eaSopenharmony_ci
113275793eaSopenharmony_ci        }
114275793eaSopenharmony_ci        #endregion
115275793eaSopenharmony_ci
116275793eaSopenharmony_ci        #region Adler tests
117275793eaSopenharmony_ci
118275793eaSopenharmony_ci        [Test]
119275793eaSopenharmony_ci        public void Adler_Null()
120275793eaSopenharmony_ci        {
121275793eaSopenharmony_ci            AdlerChecksum adler = new AdlerChecksum();
122275793eaSopenharmony_ci            Assert.AreEqual(0, adler.Value);
123275793eaSopenharmony_ci
124275793eaSopenharmony_ci            adler = new AdlerChecksum(1);
125275793eaSopenharmony_ci            Assert.AreEqual( 1, adler.Value );
126275793eaSopenharmony_ci
127275793eaSopenharmony_ci            adler = new AdlerChecksum(556);
128275793eaSopenharmony_ci            Assert.AreEqual( 556, adler.Value );
129275793eaSopenharmony_ci        }
130275793eaSopenharmony_ci
131275793eaSopenharmony_ci        [Test]
132275793eaSopenharmony_ci        public void Adler_Data()
133275793eaSopenharmony_ci        {
134275793eaSopenharmony_ci            AdlerChecksum adler = new AdlerChecksum(1);
135275793eaSopenharmony_ci            byte[] data = { 1,2,3,4,5,6,7 };
136275793eaSopenharmony_ci            adler.Update(data);
137275793eaSopenharmony_ci            Assert.AreEqual( 0x5b001d, adler.Value  );
138275793eaSopenharmony_ci
139275793eaSopenharmony_ci            adler = new AdlerChecksum();
140275793eaSopenharmony_ci            adler.Update("penguin");
141275793eaSopenharmony_ci            Assert.AreEqual(0x0bcf02f6, adler.Value );
142275793eaSopenharmony_ci
143275793eaSopenharmony_ci            adler = new AdlerChecksum(1);
144275793eaSopenharmony_ci            adler.Update("penguin");
145275793eaSopenharmony_ci            Assert.AreEqual(0x0bd602f7, adler.Value);
146275793eaSopenharmony_ci
147275793eaSopenharmony_ci        }
148275793eaSopenharmony_ci        #endregion
149275793eaSopenharmony_ci    }
150275793eaSopenharmony_ci
151275793eaSopenharmony_ci    [TestFixture]
152275793eaSopenharmony_ci    public class InfoTests
153275793eaSopenharmony_ci    {
154275793eaSopenharmony_ci        #region Info tests
155275793eaSopenharmony_ci        [Test]
156275793eaSopenharmony_ci        public void Info_Version()
157275793eaSopenharmony_ci        {
158275793eaSopenharmony_ci            Info info = new Info();
159275793eaSopenharmony_ci            Assert.AreEqual("1.3.1", Info.Version);
160275793eaSopenharmony_ci            Assert.AreEqual(32, info.SizeOfUInt);
161275793eaSopenharmony_ci            Assert.AreEqual(32, info.SizeOfULong);
162275793eaSopenharmony_ci            Assert.AreEqual(32, info.SizeOfPointer);
163275793eaSopenharmony_ci            Assert.AreEqual(32, info.SizeOfOffset);
164275793eaSopenharmony_ci        }
165275793eaSopenharmony_ci        #endregion
166275793eaSopenharmony_ci    }
167275793eaSopenharmony_ci
168275793eaSopenharmony_ci    [TestFixture]
169275793eaSopenharmony_ci    public class DeflateInflateTests
170275793eaSopenharmony_ci    {
171275793eaSopenharmony_ci        #region Deflate tests
172275793eaSopenharmony_ci        [Test]
173275793eaSopenharmony_ci        public void Deflate_Init()
174275793eaSopenharmony_ci        {
175275793eaSopenharmony_ci            using (Deflater def = new Deflater(CompressLevel.Default))
176275793eaSopenharmony_ci            {
177275793eaSopenharmony_ci            }
178275793eaSopenharmony_ci        }
179275793eaSopenharmony_ci
180275793eaSopenharmony_ci        private ArrayList compressedData = new ArrayList();
181275793eaSopenharmony_ci        private uint adler1;
182275793eaSopenharmony_ci
183275793eaSopenharmony_ci        private ArrayList uncompressedData = new ArrayList();
184275793eaSopenharmony_ci        private uint adler2;
185275793eaSopenharmony_ci
186275793eaSopenharmony_ci        public void CDataAvail(byte[] data, int startIndex, int count)
187275793eaSopenharmony_ci        {
188275793eaSopenharmony_ci            for (int i = 0; i < count; ++i)
189275793eaSopenharmony_ci                compressedData.Add(data[i+startIndex]);
190275793eaSopenharmony_ci        }
191275793eaSopenharmony_ci
192275793eaSopenharmony_ci        [Test]
193275793eaSopenharmony_ci        public void Deflate_Compress()
194275793eaSopenharmony_ci        {
195275793eaSopenharmony_ci            compressedData.Clear();
196275793eaSopenharmony_ci
197275793eaSopenharmony_ci            byte[] testData = new byte[35000];
198275793eaSopenharmony_ci            for (int i = 0; i < testData.Length; ++i)
199275793eaSopenharmony_ci                testData[i] = 5;
200275793eaSopenharmony_ci
201275793eaSopenharmony_ci            using (Deflater def = new Deflater((CompressLevel)5))
202275793eaSopenharmony_ci            {
203275793eaSopenharmony_ci                def.DataAvailable += new DataAvailableHandler(CDataAvail);
204275793eaSopenharmony_ci                def.Add(testData);
205275793eaSopenharmony_ci                def.Finish();
206275793eaSopenharmony_ci                adler1 = def.Checksum;
207275793eaSopenharmony_ci            }
208275793eaSopenharmony_ci        }
209275793eaSopenharmony_ci        #endregion
210275793eaSopenharmony_ci
211275793eaSopenharmony_ci        #region Inflate tests
212275793eaSopenharmony_ci        [Test]
213275793eaSopenharmony_ci        public void Inflate_Init()
214275793eaSopenharmony_ci        {
215275793eaSopenharmony_ci            using (Inflater inf = new Inflater())
216275793eaSopenharmony_ci            {
217275793eaSopenharmony_ci            }
218275793eaSopenharmony_ci        }
219275793eaSopenharmony_ci
220275793eaSopenharmony_ci        private void DDataAvail(byte[] data, int startIndex, int count)
221275793eaSopenharmony_ci        {
222275793eaSopenharmony_ci            for (int i = 0; i < count; ++i)
223275793eaSopenharmony_ci                uncompressedData.Add(data[i+startIndex]);
224275793eaSopenharmony_ci        }
225275793eaSopenharmony_ci
226275793eaSopenharmony_ci        [Test]
227275793eaSopenharmony_ci        public void Inflate_Expand()
228275793eaSopenharmony_ci        {
229275793eaSopenharmony_ci            uncompressedData.Clear();
230275793eaSopenharmony_ci
231275793eaSopenharmony_ci            using (Inflater inf = new Inflater())
232275793eaSopenharmony_ci            {
233275793eaSopenharmony_ci                inf.DataAvailable += new DataAvailableHandler(DDataAvail);
234275793eaSopenharmony_ci                inf.Add((byte[])compressedData.ToArray(typeof(byte)));
235275793eaSopenharmony_ci                inf.Finish();
236275793eaSopenharmony_ci                adler2 = inf.Checksum;
237275793eaSopenharmony_ci            }
238275793eaSopenharmony_ci            Assert.AreEqual( adler1, adler2 );
239275793eaSopenharmony_ci        }
240275793eaSopenharmony_ci        #endregion
241275793eaSopenharmony_ci    }
242275793eaSopenharmony_ci
243275793eaSopenharmony_ci    [TestFixture]
244275793eaSopenharmony_ci    public class GZipStreamTests
245275793eaSopenharmony_ci    {
246275793eaSopenharmony_ci        #region GZipStream test
247275793eaSopenharmony_ci        [Test]
248275793eaSopenharmony_ci        public void GZipStream_WriteRead()
249275793eaSopenharmony_ci        {
250275793eaSopenharmony_ci            using (GZipStream gzOut = new GZipStream("gzstream.gz", CompressLevel.Best))
251275793eaSopenharmony_ci            {
252275793eaSopenharmony_ci                BinaryWriter writer = new BinaryWriter(gzOut);
253275793eaSopenharmony_ci                writer.Write("hi there");
254275793eaSopenharmony_ci                writer.Write(Math.PI);
255275793eaSopenharmony_ci                writer.Write(42);
256275793eaSopenharmony_ci            }
257275793eaSopenharmony_ci
258275793eaSopenharmony_ci            using (GZipStream gzIn = new GZipStream("gzstream.gz"))
259275793eaSopenharmony_ci            {
260275793eaSopenharmony_ci                BinaryReader reader = new BinaryReader(gzIn);
261275793eaSopenharmony_ci                string s = reader.ReadString();
262275793eaSopenharmony_ci                Assert.AreEqual("hi there",s);
263275793eaSopenharmony_ci                double d = reader.ReadDouble();
264275793eaSopenharmony_ci                Assert.AreEqual(Math.PI, d);
265275793eaSopenharmony_ci                int i = reader.ReadInt32();
266275793eaSopenharmony_ci                Assert.AreEqual(42,i);
267275793eaSopenharmony_ci            }
268275793eaSopenharmony_ci
269275793eaSopenharmony_ci        }
270275793eaSopenharmony_ci        #endregion
271275793eaSopenharmony_ci	}
272275793eaSopenharmony_ci}
273275793eaSopenharmony_ci
274275793eaSopenharmony_ci#endif
275