public void VerifyCompression_astrachan_() { var stream = new MemoryStream(); string input = "astrachan_"; var compressor = new StaticHuffman<char>(CharacterFrequencies(input)); // Node ids: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 // Weights: 1 1 1 1 1 1 1 3 2 2 2 3 4 6 10 var state = new TreeState(8, '_', 'c', 'h', 'n', 'r', 's', 't', 'a', 0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 7, 11, 12, 13); compressor.WriteTable(state.WriteSymbol, state.WriteUInt32); state.Final(); var writer = new BitStreamWriter(stream, true); foreach (char ch in input) { compressor.WriteCode(ch, writer.Write); } writer.Flush(); state.Reset(); var decompressor = new StaticHuffman<char>(state.ReadSymbol, state.ReadUInt32); state.Final(); state.Reset(); decompressor.WriteTable(state.WriteSymbol, state.WriteUInt32); state.Final(); stream.Position = 0; var reader = new BitStreamReader(stream, true); foreach (char ch in input) { Assert.AreEqual(ch, decompressor.GetSymbol(reader.ReadBoolean)); } }
public void VerifyCompression_LargeCorpus() { var stream = new MemoryStream(); var writer = new BitStreamWriter(stream, true); var reader = new BitStreamReader(stream, true); string input = TestResources.RFC5_Text; var state = new TreeStateStore(); var compressor = new StaticHuffman<char>(CharacterFrequencies(input)); compressor.WriteTable(state.WriteSymbol, state.WriteUInt32); foreach (char ch in input) { compressor.WriteCode(ch, writer.Write); } writer.Flush(); state.Reset(); var decompressor = new StaticHuffman<char>(state.ReadSymbol, state.ReadUInt32); stream.Position = 0; foreach (char ch in input) { Assert.AreEqual(ch, decompressor.GetSymbol(reader.ReadBoolean)); } }
public void EightBitsAndOneByteRead() { var data = new byte[] {0x3c, 0x4b, 0x1a, 0x54, 0x22, 0x10, 0xaf, 0x89, 0x97, 0x65}; var stream = new MemoryStream(data); var reader = new BitStreamReader(stream); Assert.AreEqual(true, reader.CanRead); Assert.AreEqual(true, reader.CanSeek); Assert.AreEqual(false, reader.CanWrite); Assert.AreEqual(80, reader.BitLength); Assert.AreEqual(0, reader.BitPosition); Assert.AreEqual(10, reader.Length); Assert.AreEqual(0, reader.Position); Assert.AreEqual(false, reader.ReadBoolean()); Assert.AreEqual(false, reader.ReadBoolean()); Assert.AreEqual(true, reader.ReadBoolean()); Assert.AreEqual(true, reader.ReadBoolean()); Assert.AreEqual(true, reader.ReadBoolean()); Assert.AreEqual(true, reader.ReadBoolean()); Assert.AreEqual(false, reader.ReadBoolean()); Assert.AreEqual(false, reader.ReadBoolean()); Assert.AreEqual(0x4b, reader.ReadByte()); Assert.AreEqual(80, reader.BitLength); Assert.AreEqual(16, reader.BitPosition); Assert.AreEqual(10, reader.Length); Assert.AreEqual(2, reader.Position); }
public void BaseStream_IsBitStream() { var data = new byte[] {0x23, 0x72, 0x64, 0xe3, 0x11, 0xd1, 0x4a, 0x9c, 0xb6, 0x02}; var stream = new MemoryStream(data); BitStream bitStream = new BitStreamReader(stream); var reader = new BitBinaryReader(bitStream); Assert.AreEqual(bitStream, reader.BaseStream); }
public void CompletelyRead() { var data = new byte[] {0x3c, 0x4b, 0x1a, 0x54, 0x22, 0x10, 0xaf, 0x89, 0x97, 0x65}; var stream = new MemoryStream(data); var reader = new BitStreamReader(stream); Assert.AreEqual(true, reader.CanRead); Assert.AreEqual(true, reader.CanSeek); Assert.AreEqual(false, reader.CanWrite); Assert.AreEqual(80, reader.BitLength); Assert.AreEqual(0, reader.BitPosition); Assert.AreEqual(10, reader.Length); Assert.AreEqual(0, reader.Position); Assert.AreEqual(false, reader.ReadBoolean()); Assert.AreEqual(false, reader.ReadBoolean()); Assert.AreEqual(true, reader.ReadBoolean()); Assert.AreEqual(true, reader.ReadBoolean()); Assert.AreEqual(true, reader.ReadBoolean()); Assert.AreEqual(true, reader.ReadBoolean()); Assert.AreEqual(false, reader.ReadBoolean()); Assert.AreEqual(false, reader.ReadBoolean()); Assert.AreEqual(0x4b, reader.ReadByte()); var expected = new byte[8]; Array.Copy(data, 2, expected, 0, 8); var result = new byte[8]; int toRead = 8; while (toRead > 0) { int read = reader.Read(result, 8 - toRead, toRead); toRead -= read; } CollectionAssert.AreEqual(expected, result); Assert.AreEqual(80, reader.BitLength); Assert.AreEqual(80, reader.BitPosition); Assert.AreEqual(10, reader.Length); Assert.AreEqual(10, reader.Position); }
public void WriteByte_NotSupported() { var data = new byte[] {0x3c, 0x4b, 0x1a, 0x54, 0x22, 0x10, 0xaf, 0x89, 0x97, 0x65}; var stream = new MemoryStream(data); var reader = new BitStreamReader(stream); reader.WriteByte(0x31); }
public void SetPosition() { var data = new byte[] {0x3c, 0x4b, 0x1a, 0x54, 0x22, 0x10, 0xaf, 0x89, 0x97, 0x65}; var stream = new MemoryStream(data); var reader = new BitStreamReader(stream); Assert.AreEqual(true, reader.CanRead); Assert.AreEqual(true, reader.CanSeek); Assert.AreEqual(false, reader.CanWrite); Assert.AreEqual(80, reader.BitLength); Assert.AreEqual(0, reader.BitPosition); Assert.AreEqual(10, reader.Length); Assert.AreEqual(0, reader.Position); reader.Position = 7; Assert.AreEqual(56, reader.BitPosition); Assert.AreEqual(7, reader.Position); Assert.AreEqual(0x89, reader.ReadByte()); Assert.AreEqual(true, reader.ReadBoolean()); Assert.AreEqual(7, reader.Position = 7); Assert.AreEqual(true, reader.ReadBoolean()); Assert.AreEqual(0x13, reader.ReadByte()); var buffer = new byte[10]; Assert.AreEqual(1, reader.Read(buffer, 0, 10)); Assert.AreEqual(0x2e, buffer[0]); Assert.AreEqual(-1, reader.ReadByte()); Assert.AreEqual(73, reader.BitPosition); Assert.AreEqual(9, reader.Position); }
public void SetLength_NotSupported() { var data = new byte[] {0x3c, 0x4b, 0x1a, 0x54, 0x22, 0x10, 0xaf, 0x89, 0x97, 0x65}; var stream = new MemoryStream(data); var reader = new BitStreamReader(stream); reader.SetLength(12); }
public void ReadBoolean_EndOfStream() { var data = new byte[] {0x3c, 0x4b, 0x1a, 0x54, 0x22, 0x10, 0xaf, 0x89, 0x97, 0x65}; var stream = new MemoryStream(data); var reader = new BitStreamReader(stream); reader.Seek(10, SeekOrigin.Begin); reader.ReadBoolean(); }
public void LeaveOpen_True() { var data = new byte[] {0x3c, 0x4b, 0x1a, 0x54, 0x22, 0x10, 0xaf, 0x89, 0x97, 0x65}; var stream = new MemoryStream(data); using (var reader = new BitStreamReader(stream, true)) { Assert.AreEqual(true, reader.CanRead); Assert.AreEqual(true, reader.CanSeek); Assert.AreEqual(false, reader.CanWrite); Assert.AreEqual(80, reader.BitLength); Assert.AreEqual(0, reader.BitPosition); Assert.AreEqual(10, reader.Length); Assert.AreEqual(0, reader.Position); reader.Seek(7, SeekOrigin.Begin); Assert.AreEqual(56, reader.BitPosition); Assert.AreEqual(7, reader.Position); Assert.AreEqual(0x89, reader.ReadByte()); Assert.AreEqual(true, reader.ReadBoolean()); Assert.AreEqual(7, reader.Position = 7); Assert.AreEqual(true, reader.ReadBoolean()); Assert.AreEqual(0x13, reader.ReadByte()); var buffer = new byte[10]; Assert.AreEqual(1, reader.Read(buffer, 0, 10)); Assert.AreEqual(0x2e, buffer[0]); Assert.AreEqual(-1, reader.ReadByte()); Assert.AreEqual(73, reader.BitPosition); Assert.AreEqual(9, reader.Position); } stream.Position = 0; using (var reader = new BitStreamReader(stream, false)) { Assert.AreEqual(true, reader.CanRead); Assert.AreEqual(true, reader.CanSeek); Assert.AreEqual(false, reader.CanWrite); Assert.AreEqual(80, reader.BitLength); Assert.AreEqual(0, reader.BitPosition); Assert.AreEqual(10, reader.Length); Assert.AreEqual(0, reader.Position); reader.Seek(7, SeekOrigin.Begin); Assert.AreEqual(56, reader.BitPosition); Assert.AreEqual(7, reader.Position); Assert.AreEqual(0x89, reader.ReadByte()); Assert.AreEqual(true, reader.ReadBoolean()); Assert.AreEqual(7, reader.Position = 7); Assert.AreEqual(true, reader.ReadBoolean()); Assert.AreEqual(0x13, reader.ReadByte()); var buffer = new byte[10]; Assert.AreEqual(1, reader.Read(buffer, 0, 10)); Assert.AreEqual(0x2e, buffer[0]); Assert.AreEqual(-1, reader.ReadByte()); Assert.AreEqual(73, reader.BitPosition); Assert.AreEqual(9, reader.Position); } }