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