116dce513Schristos // 216dce513Schristos // © Copyright Henrik Ravn 2004 316dce513Schristos // 416dce513Schristos // Use, modification and distribution are subject to the Boost Software License, Version 1.0. 516dce513Schristos // (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 616dce513Schristos // 716dce513Schristos 816dce513Schristos using System; 916dce513Schristos using System.Collections; 1016dce513Schristos using System.IO; 1116dce513Schristos 1216dce513Schristos // uncomment the define below to include unit tests 1316dce513Schristos //#define nunit 1416dce513Schristos #if nunit 1516dce513Schristos using NUnit.Framework; 1616dce513Schristos 1716dce513Schristos // Unit tests for the DotZLib class library 1816dce513Schristos // ---------------------------------------- 1916dce513Schristos // 2016dce513Schristos // Use this with NUnit 2 from http://www.nunit.org 2116dce513Schristos // 2216dce513Schristos 2316dce513Schristos namespace DotZLibTests 2416dce513Schristos { 2516dce513Schristos using DotZLib; 2616dce513Schristos 2716dce513Schristos // helper methods 2816dce513Schristos internal class Utils 2916dce513Schristos { byteArrEqual( byte[] lhs, byte[] rhs )3016dce513Schristos public static bool byteArrEqual( byte[] lhs, byte[] rhs ) 3116dce513Schristos { 3216dce513Schristos if (lhs.Length != rhs.Length) 3316dce513Schristos return false; 3416dce513Schristos for (int i = lhs.Length-1; i >= 0; --i) 3516dce513Schristos if (lhs[i] != rhs[i]) 3616dce513Schristos return false; 3716dce513Schristos return true; 3816dce513Schristos } 3916dce513Schristos 4016dce513Schristos } 4116dce513Schristos 4216dce513Schristos 4316dce513Schristos [TestFixture] 4416dce513Schristos public class CircBufferTests 4516dce513Schristos { 4616dce513Schristos #region Circular buffer tests 4716dce513Schristos [Test] SinglePutGet()4816dce513Schristos public void SinglePutGet() 4916dce513Schristos { 5016dce513Schristos CircularBuffer buf = new CircularBuffer(10); 5116dce513Schristos Assert.AreEqual( 0, buf.Size ); 5216dce513Schristos Assert.AreEqual( -1, buf.Get() ); 5316dce513Schristos 5416dce513Schristos Assert.IsTrue(buf.Put( 1 )); 5516dce513Schristos Assert.AreEqual( 1, buf.Size ); 5616dce513Schristos Assert.AreEqual( 1, buf.Get() ); 5716dce513Schristos Assert.AreEqual( 0, buf.Size ); 5816dce513Schristos Assert.AreEqual( -1, buf.Get() ); 5916dce513Schristos } 6016dce513Schristos 6116dce513Schristos [Test] BlockPutGet()6216dce513Schristos public void BlockPutGet() 6316dce513Schristos { 6416dce513Schristos CircularBuffer buf = new CircularBuffer(10); 6516dce513Schristos byte[] arr = {1,2,3,4,5,6,7,8,9,10}; 6616dce513Schristos Assert.AreEqual( 10, buf.Put(arr,0,10) ); 6716dce513Schristos Assert.AreEqual( 10, buf.Size ); 6816dce513Schristos Assert.IsFalse( buf.Put(11) ); 6916dce513Schristos Assert.AreEqual( 1, buf.Get() ); 7016dce513Schristos Assert.IsTrue( buf.Put(11) ); 7116dce513Schristos 7216dce513Schristos byte[] arr2 = (byte[])arr.Clone(); 7316dce513Schristos Assert.AreEqual( 9, buf.Get(arr2,1,9) ); 7416dce513Schristos Assert.IsTrue( Utils.byteArrEqual(arr,arr2) ); 7516dce513Schristos } 7616dce513Schristos 7716dce513Schristos #endregion 7816dce513Schristos } 7916dce513Schristos 8016dce513Schristos [TestFixture] 8116dce513Schristos public class ChecksumTests 8216dce513Schristos { 8316dce513Schristos #region CRC32 Tests 8416dce513Schristos [Test] CRC32_Null()8516dce513Schristos public void CRC32_Null() 8616dce513Schristos { 8716dce513Schristos CRC32Checksum crc32 = new CRC32Checksum(); 8816dce513Schristos Assert.AreEqual( 0, crc32.Value ); 8916dce513Schristos 9016dce513Schristos crc32 = new CRC32Checksum(1); 9116dce513Schristos Assert.AreEqual( 1, crc32.Value ); 9216dce513Schristos 9316dce513Schristos crc32 = new CRC32Checksum(556); 9416dce513Schristos Assert.AreEqual( 556, crc32.Value ); 9516dce513Schristos } 9616dce513Schristos 9716dce513Schristos [Test] CRC32_Data()9816dce513Schristos public void CRC32_Data() 9916dce513Schristos { 10016dce513Schristos CRC32Checksum crc32 = new CRC32Checksum(); 10116dce513Schristos byte[] data = { 1,2,3,4,5,6,7 }; 10216dce513Schristos crc32.Update(data); 10316dce513Schristos Assert.AreEqual( 0x70e46888, crc32.Value ); 10416dce513Schristos 10516dce513Schristos crc32 = new CRC32Checksum(); 10616dce513Schristos crc32.Update("penguin"); 10716dce513Schristos Assert.AreEqual( 0x0e5c1a120, crc32.Value ); 10816dce513Schristos 10916dce513Schristos crc32 = new CRC32Checksum(1); 11016dce513Schristos crc32.Update("penguin"); 11116dce513Schristos Assert.AreEqual(0x43b6aa94, crc32.Value); 11216dce513Schristos 11316dce513Schristos } 11416dce513Schristos #endregion 11516dce513Schristos 11616dce513Schristos #region Adler tests 11716dce513Schristos 11816dce513Schristos [Test] Adler_Null()11916dce513Schristos public void Adler_Null() 12016dce513Schristos { 12116dce513Schristos AdlerChecksum adler = new AdlerChecksum(); 12216dce513Schristos Assert.AreEqual(0, adler.Value); 12316dce513Schristos 12416dce513Schristos adler = new AdlerChecksum(1); 12516dce513Schristos Assert.AreEqual( 1, adler.Value ); 12616dce513Schristos 12716dce513Schristos adler = new AdlerChecksum(556); 12816dce513Schristos Assert.AreEqual( 556, adler.Value ); 12916dce513Schristos } 13016dce513Schristos 13116dce513Schristos [Test] Adler_Data()13216dce513Schristos public void Adler_Data() 13316dce513Schristos { 13416dce513Schristos AdlerChecksum adler = new AdlerChecksum(1); 13516dce513Schristos byte[] data = { 1,2,3,4,5,6,7 }; 13616dce513Schristos adler.Update(data); 13716dce513Schristos Assert.AreEqual( 0x5b001d, adler.Value ); 13816dce513Schristos 13916dce513Schristos adler = new AdlerChecksum(); 14016dce513Schristos adler.Update("penguin"); 14116dce513Schristos Assert.AreEqual(0x0bcf02f6, adler.Value ); 14216dce513Schristos 14316dce513Schristos adler = new AdlerChecksum(1); 14416dce513Schristos adler.Update("penguin"); 14516dce513Schristos Assert.AreEqual(0x0bd602f7, adler.Value); 14616dce513Schristos 14716dce513Schristos } 14816dce513Schristos #endregion 14916dce513Schristos } 15016dce513Schristos 15116dce513Schristos [TestFixture] 15216dce513Schristos public class InfoTests 15316dce513Schristos { 15416dce513Schristos #region Info tests 15516dce513Schristos [Test] Info_Version()15616dce513Schristos public void Info_Version() 15716dce513Schristos { 15816dce513Schristos Info info = new Info(); 159*e992f068Schristos Assert.AreEqual("1.2.12", Info.Version); 16016dce513Schristos Assert.AreEqual(32, info.SizeOfUInt); 16116dce513Schristos Assert.AreEqual(32, info.SizeOfULong); 16216dce513Schristos Assert.AreEqual(32, info.SizeOfPointer); 16316dce513Schristos Assert.AreEqual(32, info.SizeOfOffset); 16416dce513Schristos } 16516dce513Schristos #endregion 16616dce513Schristos } 16716dce513Schristos 16816dce513Schristos [TestFixture] 16916dce513Schristos public class DeflateInflateTests 17016dce513Schristos { 17116dce513Schristos #region Deflate tests 17216dce513Schristos [Test] Deflate_Init()17316dce513Schristos public void Deflate_Init() 17416dce513Schristos { 17516dce513Schristos using (Deflater def = new Deflater(CompressLevel.Default)) 17616dce513Schristos { 17716dce513Schristos } 17816dce513Schristos } 17916dce513Schristos 18016dce513Schristos private ArrayList compressedData = new ArrayList(); 18116dce513Schristos private uint adler1; 18216dce513Schristos 18316dce513Schristos private ArrayList uncompressedData = new ArrayList(); 18416dce513Schristos private uint adler2; 18516dce513Schristos CDataAvail(byte[] data, int startIndex, int count)18616dce513Schristos public void CDataAvail(byte[] data, int startIndex, int count) 18716dce513Schristos { 18816dce513Schristos for (int i = 0; i < count; ++i) 18916dce513Schristos compressedData.Add(data[i+startIndex]); 19016dce513Schristos } 19116dce513Schristos 19216dce513Schristos [Test] Deflate_Compress()19316dce513Schristos public void Deflate_Compress() 19416dce513Schristos { 19516dce513Schristos compressedData.Clear(); 19616dce513Schristos 19716dce513Schristos byte[] testData = new byte[35000]; 19816dce513Schristos for (int i = 0; i < testData.Length; ++i) 19916dce513Schristos testData[i] = 5; 20016dce513Schristos 20116dce513Schristos using (Deflater def = new Deflater((CompressLevel)5)) 20216dce513Schristos { 20316dce513Schristos def.DataAvailable += new DataAvailableHandler(CDataAvail); 20416dce513Schristos def.Add(testData); 20516dce513Schristos def.Finish(); 20616dce513Schristos adler1 = def.Checksum; 20716dce513Schristos } 20816dce513Schristos } 20916dce513Schristos #endregion 21016dce513Schristos 21116dce513Schristos #region Inflate tests 21216dce513Schristos [Test] Inflate_Init()21316dce513Schristos public void Inflate_Init() 21416dce513Schristos { 21516dce513Schristos using (Inflater inf = new Inflater()) 21616dce513Schristos { 21716dce513Schristos } 21816dce513Schristos } 21916dce513Schristos DDataAvail(byte[] data, int startIndex, int count)22016dce513Schristos private void DDataAvail(byte[] data, int startIndex, int count) 22116dce513Schristos { 22216dce513Schristos for (int i = 0; i < count; ++i) 22316dce513Schristos uncompressedData.Add(data[i+startIndex]); 22416dce513Schristos } 22516dce513Schristos 22616dce513Schristos [Test] Inflate_Expand()22716dce513Schristos public void Inflate_Expand() 22816dce513Schristos { 22916dce513Schristos uncompressedData.Clear(); 23016dce513Schristos 23116dce513Schristos using (Inflater inf = new Inflater()) 23216dce513Schristos { 23316dce513Schristos inf.DataAvailable += new DataAvailableHandler(DDataAvail); 23416dce513Schristos inf.Add((byte[])compressedData.ToArray(typeof(byte))); 23516dce513Schristos inf.Finish(); 23616dce513Schristos adler2 = inf.Checksum; 23716dce513Schristos } 23816dce513Schristos Assert.AreEqual( adler1, adler2 ); 23916dce513Schristos } 24016dce513Schristos #endregion 24116dce513Schristos } 24216dce513Schristos 24316dce513Schristos [TestFixture] 24416dce513Schristos public class GZipStreamTests 24516dce513Schristos { 24616dce513Schristos #region GZipStream test 24716dce513Schristos [Test] GZipStream_WriteRead()24816dce513Schristos public void GZipStream_WriteRead() 24916dce513Schristos { 25016dce513Schristos using (GZipStream gzOut = new GZipStream("gzstream.gz", CompressLevel.Best)) 25116dce513Schristos { 25216dce513Schristos BinaryWriter writer = new BinaryWriter(gzOut); 25316dce513Schristos writer.Write("hi there"); 25416dce513Schristos writer.Write(Math.PI); 25516dce513Schristos writer.Write(42); 25616dce513Schristos } 25716dce513Schristos 25816dce513Schristos using (GZipStream gzIn = new GZipStream("gzstream.gz")) 25916dce513Schristos { 26016dce513Schristos BinaryReader reader = new BinaryReader(gzIn); 26116dce513Schristos string s = reader.ReadString(); 26216dce513Schristos Assert.AreEqual("hi there",s); 26316dce513Schristos double d = reader.ReadDouble(); 26416dce513Schristos Assert.AreEqual(Math.PI, d); 26516dce513Schristos int i = reader.ReadInt32(); 26616dce513Schristos Assert.AreEqual(42,i); 26716dce513Schristos } 26816dce513Schristos 26916dce513Schristos } 27016dce513Schristos #endregion 27116dce513Schristos } 27216dce513Schristos } 27316dce513Schristos 27416dce513Schristos #endif 275