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