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