275 lines
		
	
	
		
			7.2 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			275 lines
		
	
	
		
			7.2 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| //
 | |
| // © Copyright Henrik Ravn 2004
 | |
| //
 | |
| // Use, modification and distribution are subject to the Boost Software License, Version 1.0.
 | |
| // (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 | |
| //
 | |
| 
 | |
| using System;
 | |
| using System.Collections;
 | |
| using System.IO;
 | |
| 
 | |
| // uncomment the define below to include unit tests
 | |
| //#define nunit
 | |
| #if nunit
 | |
| using NUnit.Framework;
 | |
| 
 | |
| // Unit tests for the DotZLib class library
 | |
| // ----------------------------------------
 | |
| //
 | |
| // Use this with NUnit 2 from http://www.nunit.org
 | |
| //
 | |
| 
 | |
| namespace DotZLibTests
 | |
| {
 | |
|     using DotZLib;
 | |
| 
 | |
|     // helper methods
 | |
|     internal class Utils
 | |
|     {
 | |
|         public static bool byteArrEqual( byte[] lhs, byte[] rhs )
 | |
|         {
 | |
|             if (lhs.Length != rhs.Length)
 | |
|                 return false;
 | |
|             for (int i = lhs.Length-1; i >= 0; --i)
 | |
|                 if (lhs[i] != rhs[i])
 | |
|                     return false;
 | |
|             return true;
 | |
|         }
 | |
| 
 | |
|     }
 | |
| 
 | |
| 
 | |
|     [TestFixture]
 | |
|     public class CircBufferTests
 | |
|     {
 | |
|         #region Circular buffer tests
 | |
|         [Test]
 | |
|         public void SinglePutGet()
 | |
|         {
 | |
|             CircularBuffer buf = new CircularBuffer(10);
 | |
|             Assert.AreEqual( 0, buf.Size );
 | |
|             Assert.AreEqual( -1, buf.Get() );
 | |
| 
 | |
|             Assert.IsTrue(buf.Put( 1 ));
 | |
|             Assert.AreEqual( 1, buf.Size );
 | |
|             Assert.AreEqual( 1, buf.Get() );
 | |
|             Assert.AreEqual( 0, buf.Size );
 | |
|             Assert.AreEqual( -1, buf.Get() );
 | |
|         }
 | |
| 
 | |
|         [Test]
 | |
|         public void BlockPutGet()
 | |
|         {
 | |
|             CircularBuffer buf = new CircularBuffer(10);
 | |
|             byte[] arr = {1,2,3,4,5,6,7,8,9,10};
 | |
|             Assert.AreEqual( 10, buf.Put(arr,0,10) );
 | |
|             Assert.AreEqual( 10, buf.Size );
 | |
|             Assert.IsFalse( buf.Put(11) );
 | |
|             Assert.AreEqual( 1, buf.Get() );
 | |
|             Assert.IsTrue( buf.Put(11) );
 | |
| 
 | |
|             byte[] arr2 = (byte[])arr.Clone();
 | |
|             Assert.AreEqual( 9, buf.Get(arr2,1,9) );
 | |
|             Assert.IsTrue( Utils.byteArrEqual(arr,arr2) );
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
|     }
 | |
| 
 | |
|     [TestFixture]
 | |
|     public class ChecksumTests
 | |
|     {
 | |
|         #region CRC32 Tests
 | |
|         [Test]
 | |
|         public void CRC32_Null()
 | |
|         {
 | |
|             CRC32Checksum crc32 = new CRC32Checksum();
 | |
|             Assert.AreEqual( 0, crc32.Value );
 | |
| 
 | |
|             crc32 = new CRC32Checksum(1);
 | |
|             Assert.AreEqual( 1, crc32.Value );
 | |
| 
 | |
|             crc32 = new CRC32Checksum(556);
 | |
|             Assert.AreEqual( 556, crc32.Value );
 | |
|         }
 | |
| 
 | |
|         [Test]
 | |
|         public void CRC32_Data()
 | |
|         {
 | |
|             CRC32Checksum crc32 = new CRC32Checksum();
 | |
|             byte[] data = { 1,2,3,4,5,6,7 };
 | |
|             crc32.Update(data);
 | |
|             Assert.AreEqual( 0x70e46888, crc32.Value  );
 | |
| 
 | |
|             crc32 = new CRC32Checksum();
 | |
|             crc32.Update("penguin");
 | |
|             Assert.AreEqual( 0x0e5c1a120, crc32.Value );
 | |
| 
 | |
|             crc32 = new CRC32Checksum(1);
 | |
|             crc32.Update("penguin");
 | |
|             Assert.AreEqual(0x43b6aa94, crc32.Value);
 | |
| 
 | |
|         }
 | |
|         #endregion
 | |
| 
 | |
|         #region Adler tests
 | |
| 
 | |
|         [Test]
 | |
|         public void Adler_Null()
 | |
|         {
 | |
|             AdlerChecksum adler = new AdlerChecksum();
 | |
|             Assert.AreEqual(0, adler.Value);
 | |
| 
 | |
|             adler = new AdlerChecksum(1);
 | |
|             Assert.AreEqual( 1, adler.Value );
 | |
| 
 | |
|             adler = new AdlerChecksum(556);
 | |
|             Assert.AreEqual( 556, adler.Value );
 | |
|         }
 | |
| 
 | |
|         [Test]
 | |
|         public void Adler_Data()
 | |
|         {
 | |
|             AdlerChecksum adler = new AdlerChecksum(1);
 | |
|             byte[] data = { 1,2,3,4,5,6,7 };
 | |
|             adler.Update(data);
 | |
|             Assert.AreEqual( 0x5b001d, adler.Value  );
 | |
| 
 | |
|             adler = new AdlerChecksum();
 | |
|             adler.Update("penguin");
 | |
|             Assert.AreEqual(0x0bcf02f6, adler.Value );
 | |
| 
 | |
|             adler = new AdlerChecksum(1);
 | |
|             adler.Update("penguin");
 | |
|             Assert.AreEqual(0x0bd602f7, adler.Value);
 | |
| 
 | |
|         }
 | |
|         #endregion
 | |
|     }
 | |
| 
 | |
|     [TestFixture]
 | |
|     public class InfoTests
 | |
|     {
 | |
|         #region Info tests
 | |
|         [Test]
 | |
|         public void Info_Version()
 | |
|         {
 | |
|             Info info = new Info();
 | |
|             Assert.AreEqual("1.2.11", Info.Version);
 | |
|             Assert.AreEqual(32, info.SizeOfUInt);
 | |
|             Assert.AreEqual(32, info.SizeOfULong);
 | |
|             Assert.AreEqual(32, info.SizeOfPointer);
 | |
|             Assert.AreEqual(32, info.SizeOfOffset);
 | |
|         }
 | |
|         #endregion
 | |
|     }
 | |
| 
 | |
|     [TestFixture]
 | |
|     public class DeflateInflateTests
 | |
|     {
 | |
|         #region Deflate tests
 | |
|         [Test]
 | |
|         public void Deflate_Init()
 | |
|         {
 | |
|             using (Deflater def = new Deflater(CompressLevel.Default))
 | |
|             {
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         private ArrayList compressedData = new ArrayList();
 | |
|         private uint adler1;
 | |
| 
 | |
|         private ArrayList uncompressedData = new ArrayList();
 | |
|         private uint adler2;
 | |
| 
 | |
|         public void CDataAvail(byte[] data, int startIndex, int count)
 | |
|         {
 | |
|             for (int i = 0; i < count; ++i)
 | |
|                 compressedData.Add(data[i+startIndex]);
 | |
|         }
 | |
| 
 | |
|         [Test]
 | |
|         public void Deflate_Compress()
 | |
|         {
 | |
|             compressedData.Clear();
 | |
| 
 | |
|             byte[] testData = new byte[35000];
 | |
|             for (int i = 0; i < testData.Length; ++i)
 | |
|                 testData[i] = 5;
 | |
| 
 | |
|             using (Deflater def = new Deflater((CompressLevel)5))
 | |
|             {
 | |
|                 def.DataAvailable += new DataAvailableHandler(CDataAvail);
 | |
|                 def.Add(testData);
 | |
|                 def.Finish();
 | |
|                 adler1 = def.Checksum;
 | |
|             }
 | |
|         }
 | |
|         #endregion
 | |
| 
 | |
|         #region Inflate tests
 | |
|         [Test]
 | |
|         public void Inflate_Init()
 | |
|         {
 | |
|             using (Inflater inf = new Inflater())
 | |
|             {
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         private void DDataAvail(byte[] data, int startIndex, int count)
 | |
|         {
 | |
|             for (int i = 0; i < count; ++i)
 | |
|                 uncompressedData.Add(data[i+startIndex]);
 | |
|         }
 | |
| 
 | |
|         [Test]
 | |
|         public void Inflate_Expand()
 | |
|         {
 | |
|             uncompressedData.Clear();
 | |
| 
 | |
|             using (Inflater inf = new Inflater())
 | |
|             {
 | |
|                 inf.DataAvailable += new DataAvailableHandler(DDataAvail);
 | |
|                 inf.Add((byte[])compressedData.ToArray(typeof(byte)));
 | |
|                 inf.Finish();
 | |
|                 adler2 = inf.Checksum;
 | |
|             }
 | |
|             Assert.AreEqual( adler1, adler2 );
 | |
|         }
 | |
|         #endregion
 | |
|     }
 | |
| 
 | |
|     [TestFixture]
 | |
|     public class GZipStreamTests
 | |
|     {
 | |
|         #region GZipStream test
 | |
|         [Test]
 | |
|         public void GZipStream_WriteRead()
 | |
|         {
 | |
|             using (GZipStream gzOut = new GZipStream("gzstream.gz", CompressLevel.Best))
 | |
|             {
 | |
|                 BinaryWriter writer = new BinaryWriter(gzOut);
 | |
|                 writer.Write("hi there");
 | |
|                 writer.Write(Math.PI);
 | |
|                 writer.Write(42);
 | |
|             }
 | |
| 
 | |
|             using (GZipStream gzIn = new GZipStream("gzstream.gz"))
 | |
|             {
 | |
|                 BinaryReader reader = new BinaryReader(gzIn);
 | |
|                 string s = reader.ReadString();
 | |
|                 Assert.AreEqual("hi there",s);
 | |
|                 double d = reader.ReadDouble();
 | |
|                 Assert.AreEqual(Math.PI, d);
 | |
|                 int i = reader.ReadInt32();
 | |
|                 Assert.AreEqual(42,i);
 | |
|             }
 | |
| 
 | |
|         }
 | |
|         #endregion
 | |
| 	}
 | |
| }
 | |
| 
 | |
| #endif
 |