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 8using System; 9using System.Collections; 10using System.IO; 11 12// uncomment the define below to include unit tests 13//#define nunit 14#if nunit 15using 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 23namespace 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 275