示例#1
0
        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));
            }
        }
示例#2
0
        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);
            }
        }