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