xref: /netbsd-src/external/gpl3/binutils.old/dist/zlib/contrib/dotzlib/DotZLib/UnitTests.cs (revision e992f068c547fd6e84b3f104dc2340adcc955732)
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