1275793eaSopenharmony_ci// 2275793eaSopenharmony_ci// © Copyright Henrik Ravn 2004 3275793eaSopenharmony_ci// 4275793eaSopenharmony_ci// Use, modification and distribution are subject to the Boost Software License, Version 1.0. 5275793eaSopenharmony_ci// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 6275793eaSopenharmony_ci// 7275793eaSopenharmony_ci 8275793eaSopenharmony_ciusing System; 9275793eaSopenharmony_ciusing System.Collections; 10275793eaSopenharmony_ciusing System.IO; 11275793eaSopenharmony_ci 12275793eaSopenharmony_ci// uncomment the define below to include unit tests 13275793eaSopenharmony_ci//#define nunit 14275793eaSopenharmony_ci#if nunit 15275793eaSopenharmony_ciusing NUnit.Framework; 16275793eaSopenharmony_ci 17275793eaSopenharmony_ci// Unit tests for the DotZLib class library 18275793eaSopenharmony_ci// ---------------------------------------- 19275793eaSopenharmony_ci// 20275793eaSopenharmony_ci// Use this with NUnit 2 from http://www.nunit.org 21275793eaSopenharmony_ci// 22275793eaSopenharmony_ci 23275793eaSopenharmony_cinamespace DotZLibTests 24275793eaSopenharmony_ci{ 25275793eaSopenharmony_ci using DotZLib; 26275793eaSopenharmony_ci 27275793eaSopenharmony_ci // helper methods 28275793eaSopenharmony_ci internal class Utils 29275793eaSopenharmony_ci { 30275793eaSopenharmony_ci public static bool byteArrEqual( byte[] lhs, byte[] rhs ) 31275793eaSopenharmony_ci { 32275793eaSopenharmony_ci if (lhs.Length != rhs.Length) 33275793eaSopenharmony_ci return false; 34275793eaSopenharmony_ci for (int i = lhs.Length-1; i >= 0; --i) 35275793eaSopenharmony_ci if (lhs[i] != rhs[i]) 36275793eaSopenharmony_ci return false; 37275793eaSopenharmony_ci return true; 38275793eaSopenharmony_ci } 39275793eaSopenharmony_ci 40275793eaSopenharmony_ci } 41275793eaSopenharmony_ci 42275793eaSopenharmony_ci 43275793eaSopenharmony_ci [TestFixture] 44275793eaSopenharmony_ci public class CircBufferTests 45275793eaSopenharmony_ci { 46275793eaSopenharmony_ci #region Circular buffer tests 47275793eaSopenharmony_ci [Test] 48275793eaSopenharmony_ci public void SinglePutGet() 49275793eaSopenharmony_ci { 50275793eaSopenharmony_ci CircularBuffer buf = new CircularBuffer(10); 51275793eaSopenharmony_ci Assert.AreEqual( 0, buf.Size ); 52275793eaSopenharmony_ci Assert.AreEqual( -1, buf.Get() ); 53275793eaSopenharmony_ci 54275793eaSopenharmony_ci Assert.IsTrue(buf.Put( 1 )); 55275793eaSopenharmony_ci Assert.AreEqual( 1, buf.Size ); 56275793eaSopenharmony_ci Assert.AreEqual( 1, buf.Get() ); 57275793eaSopenharmony_ci Assert.AreEqual( 0, buf.Size ); 58275793eaSopenharmony_ci Assert.AreEqual( -1, buf.Get() ); 59275793eaSopenharmony_ci } 60275793eaSopenharmony_ci 61275793eaSopenharmony_ci [Test] 62275793eaSopenharmony_ci public void BlockPutGet() 63275793eaSopenharmony_ci { 64275793eaSopenharmony_ci CircularBuffer buf = new CircularBuffer(10); 65275793eaSopenharmony_ci byte[] arr = {1,2,3,4,5,6,7,8,9,10}; 66275793eaSopenharmony_ci Assert.AreEqual( 10, buf.Put(arr,0,10) ); 67275793eaSopenharmony_ci Assert.AreEqual( 10, buf.Size ); 68275793eaSopenharmony_ci Assert.IsFalse( buf.Put(11) ); 69275793eaSopenharmony_ci Assert.AreEqual( 1, buf.Get() ); 70275793eaSopenharmony_ci Assert.IsTrue( buf.Put(11) ); 71275793eaSopenharmony_ci 72275793eaSopenharmony_ci byte[] arr2 = (byte[])arr.Clone(); 73275793eaSopenharmony_ci Assert.AreEqual( 9, buf.Get(arr2,1,9) ); 74275793eaSopenharmony_ci Assert.IsTrue( Utils.byteArrEqual(arr,arr2) ); 75275793eaSopenharmony_ci } 76275793eaSopenharmony_ci 77275793eaSopenharmony_ci #endregion 78275793eaSopenharmony_ci } 79275793eaSopenharmony_ci 80275793eaSopenharmony_ci [TestFixture] 81275793eaSopenharmony_ci public class ChecksumTests 82275793eaSopenharmony_ci { 83275793eaSopenharmony_ci #region CRC32 Tests 84275793eaSopenharmony_ci [Test] 85275793eaSopenharmony_ci public void CRC32_Null() 86275793eaSopenharmony_ci { 87275793eaSopenharmony_ci CRC32Checksum crc32 = new CRC32Checksum(); 88275793eaSopenharmony_ci Assert.AreEqual( 0, crc32.Value ); 89275793eaSopenharmony_ci 90275793eaSopenharmony_ci crc32 = new CRC32Checksum(1); 91275793eaSopenharmony_ci Assert.AreEqual( 1, crc32.Value ); 92275793eaSopenharmony_ci 93275793eaSopenharmony_ci crc32 = new CRC32Checksum(556); 94275793eaSopenharmony_ci Assert.AreEqual( 556, crc32.Value ); 95275793eaSopenharmony_ci } 96275793eaSopenharmony_ci 97275793eaSopenharmony_ci [Test] 98275793eaSopenharmony_ci public void CRC32_Data() 99275793eaSopenharmony_ci { 100275793eaSopenharmony_ci CRC32Checksum crc32 = new CRC32Checksum(); 101275793eaSopenharmony_ci byte[] data = { 1,2,3,4,5,6,7 }; 102275793eaSopenharmony_ci crc32.Update(data); 103275793eaSopenharmony_ci Assert.AreEqual( 0x70e46888, crc32.Value ); 104275793eaSopenharmony_ci 105275793eaSopenharmony_ci crc32 = new CRC32Checksum(); 106275793eaSopenharmony_ci crc32.Update("penguin"); 107275793eaSopenharmony_ci Assert.AreEqual( 0x0e5c1a120, crc32.Value ); 108275793eaSopenharmony_ci 109275793eaSopenharmony_ci crc32 = new CRC32Checksum(1); 110275793eaSopenharmony_ci crc32.Update("penguin"); 111275793eaSopenharmony_ci Assert.AreEqual(0x43b6aa94, crc32.Value); 112275793eaSopenharmony_ci 113275793eaSopenharmony_ci } 114275793eaSopenharmony_ci #endregion 115275793eaSopenharmony_ci 116275793eaSopenharmony_ci #region Adler tests 117275793eaSopenharmony_ci 118275793eaSopenharmony_ci [Test] 119275793eaSopenharmony_ci public void Adler_Null() 120275793eaSopenharmony_ci { 121275793eaSopenharmony_ci AdlerChecksum adler = new AdlerChecksum(); 122275793eaSopenharmony_ci Assert.AreEqual(0, adler.Value); 123275793eaSopenharmony_ci 124275793eaSopenharmony_ci adler = new AdlerChecksum(1); 125275793eaSopenharmony_ci Assert.AreEqual( 1, adler.Value ); 126275793eaSopenharmony_ci 127275793eaSopenharmony_ci adler = new AdlerChecksum(556); 128275793eaSopenharmony_ci Assert.AreEqual( 556, adler.Value ); 129275793eaSopenharmony_ci } 130275793eaSopenharmony_ci 131275793eaSopenharmony_ci [Test] 132275793eaSopenharmony_ci public void Adler_Data() 133275793eaSopenharmony_ci { 134275793eaSopenharmony_ci AdlerChecksum adler = new AdlerChecksum(1); 135275793eaSopenharmony_ci byte[] data = { 1,2,3,4,5,6,7 }; 136275793eaSopenharmony_ci adler.Update(data); 137275793eaSopenharmony_ci Assert.AreEqual( 0x5b001d, adler.Value ); 138275793eaSopenharmony_ci 139275793eaSopenharmony_ci adler = new AdlerChecksum(); 140275793eaSopenharmony_ci adler.Update("penguin"); 141275793eaSopenharmony_ci Assert.AreEqual(0x0bcf02f6, adler.Value ); 142275793eaSopenharmony_ci 143275793eaSopenharmony_ci adler = new AdlerChecksum(1); 144275793eaSopenharmony_ci adler.Update("penguin"); 145275793eaSopenharmony_ci Assert.AreEqual(0x0bd602f7, adler.Value); 146275793eaSopenharmony_ci 147275793eaSopenharmony_ci } 148275793eaSopenharmony_ci #endregion 149275793eaSopenharmony_ci } 150275793eaSopenharmony_ci 151275793eaSopenharmony_ci [TestFixture] 152275793eaSopenharmony_ci public class InfoTests 153275793eaSopenharmony_ci { 154275793eaSopenharmony_ci #region Info tests 155275793eaSopenharmony_ci [Test] 156275793eaSopenharmony_ci public void Info_Version() 157275793eaSopenharmony_ci { 158275793eaSopenharmony_ci Info info = new Info(); 159275793eaSopenharmony_ci Assert.AreEqual("1.3.1", Info.Version); 160275793eaSopenharmony_ci Assert.AreEqual(32, info.SizeOfUInt); 161275793eaSopenharmony_ci Assert.AreEqual(32, info.SizeOfULong); 162275793eaSopenharmony_ci Assert.AreEqual(32, info.SizeOfPointer); 163275793eaSopenharmony_ci Assert.AreEqual(32, info.SizeOfOffset); 164275793eaSopenharmony_ci } 165275793eaSopenharmony_ci #endregion 166275793eaSopenharmony_ci } 167275793eaSopenharmony_ci 168275793eaSopenharmony_ci [TestFixture] 169275793eaSopenharmony_ci public class DeflateInflateTests 170275793eaSopenharmony_ci { 171275793eaSopenharmony_ci #region Deflate tests 172275793eaSopenharmony_ci [Test] 173275793eaSopenharmony_ci public void Deflate_Init() 174275793eaSopenharmony_ci { 175275793eaSopenharmony_ci using (Deflater def = new Deflater(CompressLevel.Default)) 176275793eaSopenharmony_ci { 177275793eaSopenharmony_ci } 178275793eaSopenharmony_ci } 179275793eaSopenharmony_ci 180275793eaSopenharmony_ci private ArrayList compressedData = new ArrayList(); 181275793eaSopenharmony_ci private uint adler1; 182275793eaSopenharmony_ci 183275793eaSopenharmony_ci private ArrayList uncompressedData = new ArrayList(); 184275793eaSopenharmony_ci private uint adler2; 185275793eaSopenharmony_ci 186275793eaSopenharmony_ci public void CDataAvail(byte[] data, int startIndex, int count) 187275793eaSopenharmony_ci { 188275793eaSopenharmony_ci for (int i = 0; i < count; ++i) 189275793eaSopenharmony_ci compressedData.Add(data[i+startIndex]); 190275793eaSopenharmony_ci } 191275793eaSopenharmony_ci 192275793eaSopenharmony_ci [Test] 193275793eaSopenharmony_ci public void Deflate_Compress() 194275793eaSopenharmony_ci { 195275793eaSopenharmony_ci compressedData.Clear(); 196275793eaSopenharmony_ci 197275793eaSopenharmony_ci byte[] testData = new byte[35000]; 198275793eaSopenharmony_ci for (int i = 0; i < testData.Length; ++i) 199275793eaSopenharmony_ci testData[i] = 5; 200275793eaSopenharmony_ci 201275793eaSopenharmony_ci using (Deflater def = new Deflater((CompressLevel)5)) 202275793eaSopenharmony_ci { 203275793eaSopenharmony_ci def.DataAvailable += new DataAvailableHandler(CDataAvail); 204275793eaSopenharmony_ci def.Add(testData); 205275793eaSopenharmony_ci def.Finish(); 206275793eaSopenharmony_ci adler1 = def.Checksum; 207275793eaSopenharmony_ci } 208275793eaSopenharmony_ci } 209275793eaSopenharmony_ci #endregion 210275793eaSopenharmony_ci 211275793eaSopenharmony_ci #region Inflate tests 212275793eaSopenharmony_ci [Test] 213275793eaSopenharmony_ci public void Inflate_Init() 214275793eaSopenharmony_ci { 215275793eaSopenharmony_ci using (Inflater inf = new Inflater()) 216275793eaSopenharmony_ci { 217275793eaSopenharmony_ci } 218275793eaSopenharmony_ci } 219275793eaSopenharmony_ci 220275793eaSopenharmony_ci private void DDataAvail(byte[] data, int startIndex, int count) 221275793eaSopenharmony_ci { 222275793eaSopenharmony_ci for (int i = 0; i < count; ++i) 223275793eaSopenharmony_ci uncompressedData.Add(data[i+startIndex]); 224275793eaSopenharmony_ci } 225275793eaSopenharmony_ci 226275793eaSopenharmony_ci [Test] 227275793eaSopenharmony_ci public void Inflate_Expand() 228275793eaSopenharmony_ci { 229275793eaSopenharmony_ci uncompressedData.Clear(); 230275793eaSopenharmony_ci 231275793eaSopenharmony_ci using (Inflater inf = new Inflater()) 232275793eaSopenharmony_ci { 233275793eaSopenharmony_ci inf.DataAvailable += new DataAvailableHandler(DDataAvail); 234275793eaSopenharmony_ci inf.Add((byte[])compressedData.ToArray(typeof(byte))); 235275793eaSopenharmony_ci inf.Finish(); 236275793eaSopenharmony_ci adler2 = inf.Checksum; 237275793eaSopenharmony_ci } 238275793eaSopenharmony_ci Assert.AreEqual( adler1, adler2 ); 239275793eaSopenharmony_ci } 240275793eaSopenharmony_ci #endregion 241275793eaSopenharmony_ci } 242275793eaSopenharmony_ci 243275793eaSopenharmony_ci [TestFixture] 244275793eaSopenharmony_ci public class GZipStreamTests 245275793eaSopenharmony_ci { 246275793eaSopenharmony_ci #region GZipStream test 247275793eaSopenharmony_ci [Test] 248275793eaSopenharmony_ci public void GZipStream_WriteRead() 249275793eaSopenharmony_ci { 250275793eaSopenharmony_ci using (GZipStream gzOut = new GZipStream("gzstream.gz", CompressLevel.Best)) 251275793eaSopenharmony_ci { 252275793eaSopenharmony_ci BinaryWriter writer = new BinaryWriter(gzOut); 253275793eaSopenharmony_ci writer.Write("hi there"); 254275793eaSopenharmony_ci writer.Write(Math.PI); 255275793eaSopenharmony_ci writer.Write(42); 256275793eaSopenharmony_ci } 257275793eaSopenharmony_ci 258275793eaSopenharmony_ci using (GZipStream gzIn = new GZipStream("gzstream.gz")) 259275793eaSopenharmony_ci { 260275793eaSopenharmony_ci BinaryReader reader = new BinaryReader(gzIn); 261275793eaSopenharmony_ci string s = reader.ReadString(); 262275793eaSopenharmony_ci Assert.AreEqual("hi there",s); 263275793eaSopenharmony_ci double d = reader.ReadDouble(); 264275793eaSopenharmony_ci Assert.AreEqual(Math.PI, d); 265275793eaSopenharmony_ci int i = reader.ReadInt32(); 266275793eaSopenharmony_ci Assert.AreEqual(42,i); 267275793eaSopenharmony_ci } 268275793eaSopenharmony_ci 269275793eaSopenharmony_ci } 270275793eaSopenharmony_ci #endregion 271275793eaSopenharmony_ci } 272275793eaSopenharmony_ci} 273275793eaSopenharmony_ci 274275793eaSopenharmony_ci#endif 275