15ba6b03cSchristos //
275f9f1baSchristos // © Copyright Henrik Ravn 2004
35ba6b03cSchristos //
45ba6b03cSchristos // Use, modification and distribution are subject to the Boost Software License, Version 1.0.
55ba6b03cSchristos // (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
65ba6b03cSchristos //
75ba6b03cSchristos 
85ba6b03cSchristos using System;
95ba6b03cSchristos using System.Collections;
105ba6b03cSchristos using System.IO;
115ba6b03cSchristos 
125ba6b03cSchristos // uncomment the define below to include unit tests
135ba6b03cSchristos //#define nunit
145ba6b03cSchristos #if nunit
155ba6b03cSchristos using NUnit.Framework;
165ba6b03cSchristos 
175ba6b03cSchristos // Unit tests for the DotZLib class library
185ba6b03cSchristos // ----------------------------------------
195ba6b03cSchristos //
205ba6b03cSchristos // Use this with NUnit 2 from http://www.nunit.org
215ba6b03cSchristos //
225ba6b03cSchristos 
235ba6b03cSchristos namespace DotZLibTests
245ba6b03cSchristos {
255ba6b03cSchristos     using DotZLib;
265ba6b03cSchristos 
275ba6b03cSchristos     // helper methods
285ba6b03cSchristos     internal class Utils
295ba6b03cSchristos     {
byteArrEqual( byte[] lhs, byte[] rhs )305ba6b03cSchristos         public static bool byteArrEqual( byte[] lhs, byte[] rhs )
315ba6b03cSchristos         {
325ba6b03cSchristos             if (lhs.Length != rhs.Length)
335ba6b03cSchristos                 return false;
345ba6b03cSchristos             for (int i = lhs.Length-1; i >= 0; --i)
355ba6b03cSchristos                 if (lhs[i] != rhs[i])
365ba6b03cSchristos                     return false;
375ba6b03cSchristos             return true;
385ba6b03cSchristos         }
395ba6b03cSchristos 
405ba6b03cSchristos     }
415ba6b03cSchristos 
425ba6b03cSchristos 
435ba6b03cSchristos     [TestFixture]
445ba6b03cSchristos     public class CircBufferTests
455ba6b03cSchristos     {
465ba6b03cSchristos         #region Circular buffer tests
475ba6b03cSchristos         [Test]
SinglePutGet()485ba6b03cSchristos         public void SinglePutGet()
495ba6b03cSchristos         {
505ba6b03cSchristos             CircularBuffer buf = new CircularBuffer(10);
515ba6b03cSchristos             Assert.AreEqual( 0, buf.Size );
525ba6b03cSchristos             Assert.AreEqual( -1, buf.Get() );
535ba6b03cSchristos 
545ba6b03cSchristos             Assert.IsTrue(buf.Put( 1 ));
555ba6b03cSchristos             Assert.AreEqual( 1, buf.Size );
565ba6b03cSchristos             Assert.AreEqual( 1, buf.Get() );
575ba6b03cSchristos             Assert.AreEqual( 0, buf.Size );
585ba6b03cSchristos             Assert.AreEqual( -1, buf.Get() );
595ba6b03cSchristos         }
605ba6b03cSchristos 
615ba6b03cSchristos         [Test]
BlockPutGet()625ba6b03cSchristos         public void BlockPutGet()
635ba6b03cSchristos         {
645ba6b03cSchristos             CircularBuffer buf = new CircularBuffer(10);
655ba6b03cSchristos             byte[] arr = {1,2,3,4,5,6,7,8,9,10};
665ba6b03cSchristos             Assert.AreEqual( 10, buf.Put(arr,0,10) );
675ba6b03cSchristos             Assert.AreEqual( 10, buf.Size );
685ba6b03cSchristos             Assert.IsFalse( buf.Put(11) );
695ba6b03cSchristos             Assert.AreEqual( 1, buf.Get() );
705ba6b03cSchristos             Assert.IsTrue( buf.Put(11) );
715ba6b03cSchristos 
725ba6b03cSchristos             byte[] arr2 = (byte[])arr.Clone();
735ba6b03cSchristos             Assert.AreEqual( 9, buf.Get(arr2,1,9) );
745ba6b03cSchristos             Assert.IsTrue( Utils.byteArrEqual(arr,arr2) );
755ba6b03cSchristos         }
765ba6b03cSchristos 
775ba6b03cSchristos         #endregion
785ba6b03cSchristos     }
795ba6b03cSchristos 
805ba6b03cSchristos     [TestFixture]
815ba6b03cSchristos     public class ChecksumTests
825ba6b03cSchristos     {
835ba6b03cSchristos         #region CRC32 Tests
845ba6b03cSchristos         [Test]
CRC32_Null()855ba6b03cSchristos         public void CRC32_Null()
865ba6b03cSchristos         {
875ba6b03cSchristos             CRC32Checksum crc32 = new CRC32Checksum();
885ba6b03cSchristos             Assert.AreEqual( 0, crc32.Value );
895ba6b03cSchristos 
905ba6b03cSchristos             crc32 = new CRC32Checksum(1);
915ba6b03cSchristos             Assert.AreEqual( 1, crc32.Value );
925ba6b03cSchristos 
935ba6b03cSchristos             crc32 = new CRC32Checksum(556);
945ba6b03cSchristos             Assert.AreEqual( 556, crc32.Value );
955ba6b03cSchristos         }
965ba6b03cSchristos 
975ba6b03cSchristos         [Test]
CRC32_Data()985ba6b03cSchristos         public void CRC32_Data()
995ba6b03cSchristos         {
1005ba6b03cSchristos             CRC32Checksum crc32 = new CRC32Checksum();
1015ba6b03cSchristos             byte[] data = { 1,2,3,4,5,6,7 };
1025ba6b03cSchristos             crc32.Update(data);
1035ba6b03cSchristos             Assert.AreEqual( 0x70e46888, crc32.Value  );
1045ba6b03cSchristos 
1055ba6b03cSchristos             crc32 = new CRC32Checksum();
1065ba6b03cSchristos             crc32.Update("penguin");
1075ba6b03cSchristos             Assert.AreEqual( 0x0e5c1a120, crc32.Value );
1085ba6b03cSchristos 
1095ba6b03cSchristos             crc32 = new CRC32Checksum(1);
1105ba6b03cSchristos             crc32.Update("penguin");
1115ba6b03cSchristos             Assert.AreEqual(0x43b6aa94, crc32.Value);
1125ba6b03cSchristos 
1135ba6b03cSchristos         }
1145ba6b03cSchristos         #endregion
1155ba6b03cSchristos 
1165ba6b03cSchristos         #region Adler tests
1175ba6b03cSchristos 
1185ba6b03cSchristos         [Test]
Adler_Null()1195ba6b03cSchristos         public void Adler_Null()
1205ba6b03cSchristos         {
1215ba6b03cSchristos             AdlerChecksum adler = new AdlerChecksum();
1225ba6b03cSchristos             Assert.AreEqual(0, adler.Value);
1235ba6b03cSchristos 
1245ba6b03cSchristos             adler = new AdlerChecksum(1);
1255ba6b03cSchristos             Assert.AreEqual( 1, adler.Value );
1265ba6b03cSchristos 
1275ba6b03cSchristos             adler = new AdlerChecksum(556);
1285ba6b03cSchristos             Assert.AreEqual( 556, adler.Value );
1295ba6b03cSchristos         }
1305ba6b03cSchristos 
1315ba6b03cSchristos         [Test]
Adler_Data()1325ba6b03cSchristos         public void Adler_Data()
1335ba6b03cSchristos         {
1345ba6b03cSchristos             AdlerChecksum adler = new AdlerChecksum(1);
1355ba6b03cSchristos             byte[] data = { 1,2,3,4,5,6,7 };
1365ba6b03cSchristos             adler.Update(data);
1375ba6b03cSchristos             Assert.AreEqual( 0x5b001d, adler.Value  );
1385ba6b03cSchristos 
1395ba6b03cSchristos             adler = new AdlerChecksum();
1405ba6b03cSchristos             adler.Update("penguin");
1415ba6b03cSchristos             Assert.AreEqual(0x0bcf02f6, adler.Value );
1425ba6b03cSchristos 
1435ba6b03cSchristos             adler = new AdlerChecksum(1);
1445ba6b03cSchristos             adler.Update("penguin");
1455ba6b03cSchristos             Assert.AreEqual(0x0bd602f7, adler.Value);
1465ba6b03cSchristos 
1475ba6b03cSchristos         }
1485ba6b03cSchristos         #endregion
1495ba6b03cSchristos     }
1505ba6b03cSchristos 
1515ba6b03cSchristos     [TestFixture]
1525ba6b03cSchristos     public class InfoTests
1535ba6b03cSchristos     {
1545ba6b03cSchristos         #region Info tests
1555ba6b03cSchristos         [Test]
Info_Version()1565ba6b03cSchristos         public void Info_Version()
1575ba6b03cSchristos         {
1585ba6b03cSchristos             Info info = new Info();
159*f22f0ef4Schristos             Assert.AreEqual("1.2.12", Info.Version);
1605ba6b03cSchristos             Assert.AreEqual(32, info.SizeOfUInt);
1615ba6b03cSchristos             Assert.AreEqual(32, info.SizeOfULong);
1625ba6b03cSchristos             Assert.AreEqual(32, info.SizeOfPointer);
1635ba6b03cSchristos             Assert.AreEqual(32, info.SizeOfOffset);
1645ba6b03cSchristos         }
1655ba6b03cSchristos         #endregion
1665ba6b03cSchristos     }
1675ba6b03cSchristos 
1685ba6b03cSchristos     [TestFixture]
1695ba6b03cSchristos     public class DeflateInflateTests
1705ba6b03cSchristos     {
1715ba6b03cSchristos         #region Deflate tests
1725ba6b03cSchristos         [Test]
Deflate_Init()1735ba6b03cSchristos         public void Deflate_Init()
1745ba6b03cSchristos         {
1755ba6b03cSchristos             using (Deflater def = new Deflater(CompressLevel.Default))
1765ba6b03cSchristos             {
1775ba6b03cSchristos             }
1785ba6b03cSchristos         }
1795ba6b03cSchristos 
1805ba6b03cSchristos         private ArrayList compressedData = new ArrayList();
1815ba6b03cSchristos         private uint adler1;
1825ba6b03cSchristos 
1835ba6b03cSchristos         private ArrayList uncompressedData = new ArrayList();
1845ba6b03cSchristos         private uint adler2;
1855ba6b03cSchristos 
CDataAvail(byte[] data, int startIndex, int count)1865ba6b03cSchristos         public void CDataAvail(byte[] data, int startIndex, int count)
1875ba6b03cSchristos         {
1885ba6b03cSchristos             for (int i = 0; i < count; ++i)
1895ba6b03cSchristos                 compressedData.Add(data[i+startIndex]);
1905ba6b03cSchristos         }
1915ba6b03cSchristos 
1925ba6b03cSchristos         [Test]
Deflate_Compress()1935ba6b03cSchristos         public void Deflate_Compress()
1945ba6b03cSchristos         {
1955ba6b03cSchristos             compressedData.Clear();
1965ba6b03cSchristos 
1975ba6b03cSchristos             byte[] testData = new byte[35000];
1985ba6b03cSchristos             for (int i = 0; i < testData.Length; ++i)
1995ba6b03cSchristos                 testData[i] = 5;
2005ba6b03cSchristos 
2015ba6b03cSchristos             using (Deflater def = new Deflater((CompressLevel)5))
2025ba6b03cSchristos             {
2035ba6b03cSchristos                 def.DataAvailable += new DataAvailableHandler(CDataAvail);
2045ba6b03cSchristos                 def.Add(testData);
2055ba6b03cSchristos                 def.Finish();
2065ba6b03cSchristos                 adler1 = def.Checksum;
2075ba6b03cSchristos             }
2085ba6b03cSchristos         }
2095ba6b03cSchristos         #endregion
2105ba6b03cSchristos 
2115ba6b03cSchristos         #region Inflate tests
2125ba6b03cSchristos         [Test]
Inflate_Init()2135ba6b03cSchristos         public void Inflate_Init()
2145ba6b03cSchristos         {
2155ba6b03cSchristos             using (Inflater inf = new Inflater())
2165ba6b03cSchristos             {
2175ba6b03cSchristos             }
2185ba6b03cSchristos         }
2195ba6b03cSchristos 
DDataAvail(byte[] data, int startIndex, int count)2205ba6b03cSchristos         private void DDataAvail(byte[] data, int startIndex, int count)
2215ba6b03cSchristos         {
2225ba6b03cSchristos             for (int i = 0; i < count; ++i)
2235ba6b03cSchristos                 uncompressedData.Add(data[i+startIndex]);
2245ba6b03cSchristos         }
2255ba6b03cSchristos 
2265ba6b03cSchristos         [Test]
Inflate_Expand()2275ba6b03cSchristos         public void Inflate_Expand()
2285ba6b03cSchristos         {
2295ba6b03cSchristos             uncompressedData.Clear();
2305ba6b03cSchristos 
2315ba6b03cSchristos             using (Inflater inf = new Inflater())
2325ba6b03cSchristos             {
2335ba6b03cSchristos                 inf.DataAvailable += new DataAvailableHandler(DDataAvail);
2345ba6b03cSchristos                 inf.Add((byte[])compressedData.ToArray(typeof(byte)));
2355ba6b03cSchristos                 inf.Finish();
2365ba6b03cSchristos                 adler2 = inf.Checksum;
2375ba6b03cSchristos             }
2385ba6b03cSchristos             Assert.AreEqual( adler1, adler2 );
2395ba6b03cSchristos         }
2405ba6b03cSchristos         #endregion
2415ba6b03cSchristos     }
2425ba6b03cSchristos 
2435ba6b03cSchristos     [TestFixture]
2445ba6b03cSchristos     public class GZipStreamTests
2455ba6b03cSchristos     {
2465ba6b03cSchristos         #region GZipStream test
2475ba6b03cSchristos         [Test]
GZipStream_WriteRead()2485ba6b03cSchristos         public void GZipStream_WriteRead()
2495ba6b03cSchristos         {
2505ba6b03cSchristos             using (GZipStream gzOut = new GZipStream("gzstream.gz", CompressLevel.Best))
2515ba6b03cSchristos             {
2525ba6b03cSchristos                 BinaryWriter writer = new BinaryWriter(gzOut);
2535ba6b03cSchristos                 writer.Write("hi there");
2545ba6b03cSchristos                 writer.Write(Math.PI);
2555ba6b03cSchristos                 writer.Write(42);
2565ba6b03cSchristos             }
2575ba6b03cSchristos 
2585ba6b03cSchristos             using (GZipStream gzIn = new GZipStream("gzstream.gz"))
2595ba6b03cSchristos             {
2605ba6b03cSchristos                 BinaryReader reader = new BinaryReader(gzIn);
2615ba6b03cSchristos                 string s = reader.ReadString();
2625ba6b03cSchristos                 Assert.AreEqual("hi there",s);
2635ba6b03cSchristos                 double d = reader.ReadDouble();
2645ba6b03cSchristos                 Assert.AreEqual(Math.PI, d);
2655ba6b03cSchristos                 int i = reader.ReadInt32();
2665ba6b03cSchristos                 Assert.AreEqual(42,i);
2675ba6b03cSchristos             }
2685ba6b03cSchristos 
2695ba6b03cSchristos         }
2705ba6b03cSchristos         #endregion
2715ba6b03cSchristos 	}
2725ba6b03cSchristos }
2735ba6b03cSchristos 
2745ba6b03cSchristos #endif
275