1*44bedb31SLionel Sambuc // 2*44bedb31SLionel Sambuc // � Copyright Henrik Ravn 2004 3*44bedb31SLionel Sambuc // 4*44bedb31SLionel Sambuc // Use, modification and distribution are subject to the Boost Software License, Version 1.0. 5*44bedb31SLionel Sambuc // (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 6*44bedb31SLionel Sambuc // 7*44bedb31SLionel Sambuc 8*44bedb31SLionel Sambuc using System; 9*44bedb31SLionel Sambuc using System.Collections; 10*44bedb31SLionel Sambuc using System.IO; 11*44bedb31SLionel Sambuc 12*44bedb31SLionel Sambuc // uncomment the define below to include unit tests 13*44bedb31SLionel Sambuc //#define nunit 14*44bedb31SLionel Sambuc #if nunit 15*44bedb31SLionel Sambuc using NUnit.Framework; 16*44bedb31SLionel Sambuc 17*44bedb31SLionel Sambuc // Unit tests for the DotZLib class library 18*44bedb31SLionel Sambuc // ---------------------------------------- 19*44bedb31SLionel Sambuc // 20*44bedb31SLionel Sambuc // Use this with NUnit 2 from http://www.nunit.org 21*44bedb31SLionel Sambuc // 22*44bedb31SLionel Sambuc 23*44bedb31SLionel Sambuc namespace DotZLibTests 24*44bedb31SLionel Sambuc { 25*44bedb31SLionel Sambuc using DotZLib; 26*44bedb31SLionel Sambuc 27*44bedb31SLionel Sambuc // helper methods 28*44bedb31SLionel Sambuc internal class Utils 29*44bedb31SLionel Sambuc { byteArrEqual( byte[] lhs, byte[] rhs )30*44bedb31SLionel Sambuc public static bool byteArrEqual( byte[] lhs, byte[] rhs ) 31*44bedb31SLionel Sambuc { 32*44bedb31SLionel Sambuc if (lhs.Length != rhs.Length) 33*44bedb31SLionel Sambuc return false; 34*44bedb31SLionel Sambuc for (int i = lhs.Length-1; i >= 0; --i) 35*44bedb31SLionel Sambuc if (lhs[i] != rhs[i]) 36*44bedb31SLionel Sambuc return false; 37*44bedb31SLionel Sambuc return true; 38*44bedb31SLionel Sambuc } 39*44bedb31SLionel Sambuc 40*44bedb31SLionel Sambuc } 41*44bedb31SLionel Sambuc 42*44bedb31SLionel Sambuc 43*44bedb31SLionel Sambuc [TestFixture] 44*44bedb31SLionel Sambuc public class CircBufferTests 45*44bedb31SLionel Sambuc { 46*44bedb31SLionel Sambuc #region Circular buffer tests 47*44bedb31SLionel Sambuc [Test] SinglePutGet()48*44bedb31SLionel Sambuc public void SinglePutGet() 49*44bedb31SLionel Sambuc { 50*44bedb31SLionel Sambuc CircularBuffer buf = new CircularBuffer(10); 51*44bedb31SLionel Sambuc Assert.AreEqual( 0, buf.Size ); 52*44bedb31SLionel Sambuc Assert.AreEqual( -1, buf.Get() ); 53*44bedb31SLionel Sambuc 54*44bedb31SLionel Sambuc Assert.IsTrue(buf.Put( 1 )); 55*44bedb31SLionel Sambuc Assert.AreEqual( 1, buf.Size ); 56*44bedb31SLionel Sambuc Assert.AreEqual( 1, buf.Get() ); 57*44bedb31SLionel Sambuc Assert.AreEqual( 0, buf.Size ); 58*44bedb31SLionel Sambuc Assert.AreEqual( -1, buf.Get() ); 59*44bedb31SLionel Sambuc } 60*44bedb31SLionel Sambuc 61*44bedb31SLionel Sambuc [Test] BlockPutGet()62*44bedb31SLionel Sambuc public void BlockPutGet() 63*44bedb31SLionel Sambuc { 64*44bedb31SLionel Sambuc CircularBuffer buf = new CircularBuffer(10); 65*44bedb31SLionel Sambuc byte[] arr = {1,2,3,4,5,6,7,8,9,10}; 66*44bedb31SLionel Sambuc Assert.AreEqual( 10, buf.Put(arr,0,10) ); 67*44bedb31SLionel Sambuc Assert.AreEqual( 10, buf.Size ); 68*44bedb31SLionel Sambuc Assert.IsFalse( buf.Put(11) ); 69*44bedb31SLionel Sambuc Assert.AreEqual( 1, buf.Get() ); 70*44bedb31SLionel Sambuc Assert.IsTrue( buf.Put(11) ); 71*44bedb31SLionel Sambuc 72*44bedb31SLionel Sambuc byte[] arr2 = (byte[])arr.Clone(); 73*44bedb31SLionel Sambuc Assert.AreEqual( 9, buf.Get(arr2,1,9) ); 74*44bedb31SLionel Sambuc Assert.IsTrue( Utils.byteArrEqual(arr,arr2) ); 75*44bedb31SLionel Sambuc } 76*44bedb31SLionel Sambuc 77*44bedb31SLionel Sambuc #endregion 78*44bedb31SLionel Sambuc } 79*44bedb31SLionel Sambuc 80*44bedb31SLionel Sambuc [TestFixture] 81*44bedb31SLionel Sambuc public class ChecksumTests 82*44bedb31SLionel Sambuc { 83*44bedb31SLionel Sambuc #region CRC32 Tests 84*44bedb31SLionel Sambuc [Test] CRC32_Null()85*44bedb31SLionel Sambuc public void CRC32_Null() 86*44bedb31SLionel Sambuc { 87*44bedb31SLionel Sambuc CRC32Checksum crc32 = new CRC32Checksum(); 88*44bedb31SLionel Sambuc Assert.AreEqual( 0, crc32.Value ); 89*44bedb31SLionel Sambuc 90*44bedb31SLionel Sambuc crc32 = new CRC32Checksum(1); 91*44bedb31SLionel Sambuc Assert.AreEqual( 1, crc32.Value ); 92*44bedb31SLionel Sambuc 93*44bedb31SLionel Sambuc crc32 = new CRC32Checksum(556); 94*44bedb31SLionel Sambuc Assert.AreEqual( 556, crc32.Value ); 95*44bedb31SLionel Sambuc } 96*44bedb31SLionel Sambuc 97*44bedb31SLionel Sambuc [Test] CRC32_Data()98*44bedb31SLionel Sambuc public void CRC32_Data() 99*44bedb31SLionel Sambuc { 100*44bedb31SLionel Sambuc CRC32Checksum crc32 = new CRC32Checksum(); 101*44bedb31SLionel Sambuc byte[] data = { 1,2,3,4,5,6,7 }; 102*44bedb31SLionel Sambuc crc32.Update(data); 103*44bedb31SLionel Sambuc Assert.AreEqual( 0x70e46888, crc32.Value ); 104*44bedb31SLionel Sambuc 105*44bedb31SLionel Sambuc crc32 = new CRC32Checksum(); 106*44bedb31SLionel Sambuc crc32.Update("penguin"); 107*44bedb31SLionel Sambuc Assert.AreEqual( 0x0e5c1a120, crc32.Value ); 108*44bedb31SLionel Sambuc 109*44bedb31SLionel Sambuc crc32 = new CRC32Checksum(1); 110*44bedb31SLionel Sambuc crc32.Update("penguin"); 111*44bedb31SLionel Sambuc Assert.AreEqual(0x43b6aa94, crc32.Value); 112*44bedb31SLionel Sambuc 113*44bedb31SLionel Sambuc } 114*44bedb31SLionel Sambuc #endregion 115*44bedb31SLionel Sambuc 116*44bedb31SLionel Sambuc #region Adler tests 117*44bedb31SLionel Sambuc 118*44bedb31SLionel Sambuc [Test] Adler_Null()119*44bedb31SLionel Sambuc public void Adler_Null() 120*44bedb31SLionel Sambuc { 121*44bedb31SLionel Sambuc AdlerChecksum adler = new AdlerChecksum(); 122*44bedb31SLionel Sambuc Assert.AreEqual(0, adler.Value); 123*44bedb31SLionel Sambuc 124*44bedb31SLionel Sambuc adler = new AdlerChecksum(1); 125*44bedb31SLionel Sambuc Assert.AreEqual( 1, adler.Value ); 126*44bedb31SLionel Sambuc 127*44bedb31SLionel Sambuc adler = new AdlerChecksum(556); 128*44bedb31SLionel Sambuc Assert.AreEqual( 556, adler.Value ); 129*44bedb31SLionel Sambuc } 130*44bedb31SLionel Sambuc 131*44bedb31SLionel Sambuc [Test] Adler_Data()132*44bedb31SLionel Sambuc public void Adler_Data() 133*44bedb31SLionel Sambuc { 134*44bedb31SLionel Sambuc AdlerChecksum adler = new AdlerChecksum(1); 135*44bedb31SLionel Sambuc byte[] data = { 1,2,3,4,5,6,7 }; 136*44bedb31SLionel Sambuc adler.Update(data); 137*44bedb31SLionel Sambuc Assert.AreEqual( 0x5b001d, adler.Value ); 138*44bedb31SLionel Sambuc 139*44bedb31SLionel Sambuc adler = new AdlerChecksum(); 140*44bedb31SLionel Sambuc adler.Update("penguin"); 141*44bedb31SLionel Sambuc Assert.AreEqual(0x0bcf02f6, adler.Value ); 142*44bedb31SLionel Sambuc 143*44bedb31SLionel Sambuc adler = new AdlerChecksum(1); 144*44bedb31SLionel Sambuc adler.Update("penguin"); 145*44bedb31SLionel Sambuc Assert.AreEqual(0x0bd602f7, adler.Value); 146*44bedb31SLionel Sambuc 147*44bedb31SLionel Sambuc } 148*44bedb31SLionel Sambuc #endregion 149*44bedb31SLionel Sambuc } 150*44bedb31SLionel Sambuc 151*44bedb31SLionel Sambuc [TestFixture] 152*44bedb31SLionel Sambuc public class InfoTests 153*44bedb31SLionel Sambuc { 154*44bedb31SLionel Sambuc #region Info tests 155*44bedb31SLionel Sambuc [Test] Info_Version()156*44bedb31SLionel Sambuc public void Info_Version() 157*44bedb31SLionel Sambuc { 158*44bedb31SLionel Sambuc Info info = new Info(); 159*44bedb31SLionel Sambuc Assert.AreEqual("1.2.3", Info.Version); 160*44bedb31SLionel Sambuc Assert.AreEqual(32, info.SizeOfUInt); 161*44bedb31SLionel Sambuc Assert.AreEqual(32, info.SizeOfULong); 162*44bedb31SLionel Sambuc Assert.AreEqual(32, info.SizeOfPointer); 163*44bedb31SLionel Sambuc Assert.AreEqual(32, info.SizeOfOffset); 164*44bedb31SLionel Sambuc } 165*44bedb31SLionel Sambuc #endregion 166*44bedb31SLionel Sambuc } 167*44bedb31SLionel Sambuc 168*44bedb31SLionel Sambuc [TestFixture] 169*44bedb31SLionel Sambuc public class DeflateInflateTests 170*44bedb31SLionel Sambuc { 171*44bedb31SLionel Sambuc #region Deflate tests 172*44bedb31SLionel Sambuc [Test] Deflate_Init()173*44bedb31SLionel Sambuc public void Deflate_Init() 174*44bedb31SLionel Sambuc { 175*44bedb31SLionel Sambuc using (Deflater def = new Deflater(CompressLevel.Default)) 176*44bedb31SLionel Sambuc { 177*44bedb31SLionel Sambuc } 178*44bedb31SLionel Sambuc } 179*44bedb31SLionel Sambuc 180*44bedb31SLionel Sambuc private ArrayList compressedData = new ArrayList(); 181*44bedb31SLionel Sambuc private uint adler1; 182*44bedb31SLionel Sambuc 183*44bedb31SLionel Sambuc private ArrayList uncompressedData = new ArrayList(); 184*44bedb31SLionel Sambuc private uint adler2; 185*44bedb31SLionel Sambuc CDataAvail(byte[] data, int startIndex, int count)186*44bedb31SLionel Sambuc public void CDataAvail(byte[] data, int startIndex, int count) 187*44bedb31SLionel Sambuc { 188*44bedb31SLionel Sambuc for (int i = 0; i < count; ++i) 189*44bedb31SLionel Sambuc compressedData.Add(data[i+startIndex]); 190*44bedb31SLionel Sambuc } 191*44bedb31SLionel Sambuc 192*44bedb31SLionel Sambuc [Test] Deflate_Compress()193*44bedb31SLionel Sambuc public void Deflate_Compress() 194*44bedb31SLionel Sambuc { 195*44bedb31SLionel Sambuc compressedData.Clear(); 196*44bedb31SLionel Sambuc 197*44bedb31SLionel Sambuc byte[] testData = new byte[35000]; 198*44bedb31SLionel Sambuc for (int i = 0; i < testData.Length; ++i) 199*44bedb31SLionel Sambuc testData[i] = 5; 200*44bedb31SLionel Sambuc 201*44bedb31SLionel Sambuc using (Deflater def = new Deflater((CompressLevel)5)) 202*44bedb31SLionel Sambuc { 203*44bedb31SLionel Sambuc def.DataAvailable += new DataAvailableHandler(CDataAvail); 204*44bedb31SLionel Sambuc def.Add(testData); 205*44bedb31SLionel Sambuc def.Finish(); 206*44bedb31SLionel Sambuc adler1 = def.Checksum; 207*44bedb31SLionel Sambuc } 208*44bedb31SLionel Sambuc } 209*44bedb31SLionel Sambuc #endregion 210*44bedb31SLionel Sambuc 211*44bedb31SLionel Sambuc #region Inflate tests 212*44bedb31SLionel Sambuc [Test] Inflate_Init()213*44bedb31SLionel Sambuc public void Inflate_Init() 214*44bedb31SLionel Sambuc { 215*44bedb31SLionel Sambuc using (Inflater inf = new Inflater()) 216*44bedb31SLionel Sambuc { 217*44bedb31SLionel Sambuc } 218*44bedb31SLionel Sambuc } 219*44bedb31SLionel Sambuc DDataAvail(byte[] data, int startIndex, int count)220*44bedb31SLionel Sambuc private void DDataAvail(byte[] data, int startIndex, int count) 221*44bedb31SLionel Sambuc { 222*44bedb31SLionel Sambuc for (int i = 0; i < count; ++i) 223*44bedb31SLionel Sambuc uncompressedData.Add(data[i+startIndex]); 224*44bedb31SLionel Sambuc } 225*44bedb31SLionel Sambuc 226*44bedb31SLionel Sambuc [Test] Inflate_Expand()227*44bedb31SLionel Sambuc public void Inflate_Expand() 228*44bedb31SLionel Sambuc { 229*44bedb31SLionel Sambuc uncompressedData.Clear(); 230*44bedb31SLionel Sambuc 231*44bedb31SLionel Sambuc using (Inflater inf = new Inflater()) 232*44bedb31SLionel Sambuc { 233*44bedb31SLionel Sambuc inf.DataAvailable += new DataAvailableHandler(DDataAvail); 234*44bedb31SLionel Sambuc inf.Add((byte[])compressedData.ToArray(typeof(byte))); 235*44bedb31SLionel Sambuc inf.Finish(); 236*44bedb31SLionel Sambuc adler2 = inf.Checksum; 237*44bedb31SLionel Sambuc } 238*44bedb31SLionel Sambuc Assert.AreEqual( adler1, adler2 ); 239*44bedb31SLionel Sambuc } 240*44bedb31SLionel Sambuc #endregion 241*44bedb31SLionel Sambuc } 242*44bedb31SLionel Sambuc 243*44bedb31SLionel Sambuc [TestFixture] 244*44bedb31SLionel Sambuc public class GZipStreamTests 245*44bedb31SLionel Sambuc { 246*44bedb31SLionel Sambuc #region GZipStream test 247*44bedb31SLionel Sambuc [Test] GZipStream_WriteRead()248*44bedb31SLionel Sambuc public void GZipStream_WriteRead() 249*44bedb31SLionel Sambuc { 250*44bedb31SLionel Sambuc using (GZipStream gzOut = new GZipStream("gzstream.gz", CompressLevel.Best)) 251*44bedb31SLionel Sambuc { 252*44bedb31SLionel Sambuc BinaryWriter writer = new BinaryWriter(gzOut); 253*44bedb31SLionel Sambuc writer.Write("hi there"); 254*44bedb31SLionel Sambuc writer.Write(Math.PI); 255*44bedb31SLionel Sambuc writer.Write(42); 256*44bedb31SLionel Sambuc } 257*44bedb31SLionel Sambuc 258*44bedb31SLionel Sambuc using (GZipStream gzIn = new GZipStream("gzstream.gz")) 259*44bedb31SLionel Sambuc { 260*44bedb31SLionel Sambuc BinaryReader reader = new BinaryReader(gzIn); 261*44bedb31SLionel Sambuc string s = reader.ReadString(); 262*44bedb31SLionel Sambuc Assert.AreEqual("hi there",s); 263*44bedb31SLionel Sambuc double d = reader.ReadDouble(); 264*44bedb31SLionel Sambuc Assert.AreEqual(Math.PI, d); 265*44bedb31SLionel Sambuc int i = reader.ReadInt32(); 266*44bedb31SLionel Sambuc Assert.AreEqual(42,i); 267*44bedb31SLionel Sambuc } 268*44bedb31SLionel Sambuc 269*44bedb31SLionel Sambuc } 270*44bedb31SLionel Sambuc #endregion 271*44bedb31SLionel Sambuc } 272*44bedb31SLionel Sambuc } 273*44bedb31SLionel Sambuc 274*44bedb31SLionel Sambuc #endif