예제 #1
0
        public void EncodeTest3()
        {
            byte[] data = { 1, 2, 2, 1, 1, 2, 2 };
            TestIEncodingInputStream  inputStream  = new TestIEncodingInputStream(data);
            TestIEncodingOutputStream outputStream = new TestIEncodingOutputStream();

            HuffmanEncoder encoder = new HuffmanEncoder();
            EncodingToken  token   = encoder.CreateEncodingToken(inputStream, CancellationToken.None);
            long           length  = encoder.Encode(inputStream, outputStream, token, CancellationToken.None, null);

            Assert.IsNotNull(token.HuffmanTree);
            Assert.IsNotNull(token.CodingTable);

            WeightedSymbol?[] expected =
            {
                new WeightedSymbol(0, 7),
                new WeightedSymbol(1, 3),
                new WeightedSymbol(2, 4),
                null,
                null,
                null,
                null,
            };
            Assert.AreEqual(expected, token.HuffmanTree.FlattenValues());
            Assert.AreEqual(7, length);
            AssertOutputStream(outputStream, "0110011");
        }
예제 #2
0
        public void BuildWeightsTableTest1()
        {
            HuffmanEncoder           encoder      = new HuffmanEncoder();
            TestIEncodingInputStream inputStream  = new TestIEncodingInputStream(new byte[0]);
            WeightsTable             weightsTable = encoder.BuildWeightsTable(inputStream, CancellationToken.None);

            Assert.IsNotNull(weightsTable);
            CollectionAssert.IsEmpty(weightsTable);
        }
예제 #3
0
        public void BuildWeightsTableTest2()
        {
            HuffmanEncoder           encoder      = new HuffmanEncoder();
            TestIEncodingInputStream inputStream  = new TestIEncodingInputStream(new byte[] { 1 });
            WeightsTable             weightsTable = encoder.BuildWeightsTable(inputStream, CancellationToken.None);

            Assert.IsNotNull(weightsTable);
            WeightedSymbol[] expected = { new WeightedSymbol(1, 1) };
            CollectionAssert.AreEqual(expected, weightsTable.ToArray());
        }
예제 #4
0
        public void EncodingProgressTest1(int size)
        {
            byte[] data = new byte[size];
            TestIEncodingInputStream  inputStream  = new TestIEncodingInputStream(data);
            TestIEncodingOutputStream outputStream = new TestIEncodingOutputStream();

            HuffmanEncoder       encoder  = new HuffmanEncoder();
            EncodingToken        token    = encoder.CreateEncodingToken(inputStream, CancellationToken.None);
            TestIProgressHandler progress = new TestIProgressHandler();

            encoder.Encode(inputStream, outputStream, token, CancellationToken.None, progress);
            CollectionAssert.IsEmpty(progress.ValueList);
        }
예제 #5
0
        public void EncodeTest4()
        {
            byte[] data = { 1, 2, 2, 2, 2, 1, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4 };
            TestIEncodingInputStream  inputStream  = new TestIEncodingInputStream(data);
            TestIEncodingOutputStream outputStream = new TestIEncodingOutputStream();

            HuffmanEncoder encoder = new HuffmanEncoder();
            EncodingToken  token   = encoder.CreateEncodingToken(inputStream, CancellationToken.None);
            long           length  = encoder.Encode(inputStream, outputStream, token, CancellationToken.None, null);

            Assert.IsNotNull(token.HuffmanTree);
            Assert.IsNotNull(token.CodingTable);
            Assert.AreEqual(54, length);
            AssertOutputStream(outputStream, "110111111111111110111111111101010101010001010000000000");
        }
예제 #6
0
        public void EncodeTest1()
        {
            TestIEncodingInputStream  inputStream  = new TestIEncodingInputStream(new byte[0]);
            TestIEncodingOutputStream outputStream = new TestIEncodingOutputStream();

            HuffmanEncoder encoder = new HuffmanEncoder();
            EncodingToken  token   = encoder.CreateEncodingToken(inputStream, CancellationToken.None);
            long           length  = encoder.Encode(inputStream, outputStream, token, CancellationToken.None, null);

            Assert.IsNotNull(token.HuffmanTree);
            Assert.IsNotNull(token.CodingTable);
            Assert.AreEqual(0, length);
            CollectionAssert.IsEmpty(token.HuffmanTree.FlattenValues());
            CollectionAssert.IsEmpty(outputStream.BitList);
        }
예제 #7
0
        public void EncodingProgressTest2()
        {
            byte[] data = new byte[27 * 1024];
            TestIEncodingInputStream  inputStream  = new TestIEncodingInputStream(data);
            TestIEncodingOutputStream outputStream = new TestIEncodingOutputStream();

            HuffmanEncoder       encoder  = new HuffmanEncoder();
            EncodingToken        token    = encoder.CreateEncodingToken(inputStream, CancellationToken.None);
            TestIProgressHandler progress = new TestIProgressHandler();

            for (int n = 0; n < 10; n++)
            {
                encoder.Encode(inputStream, outputStream, token, CancellationToken.None, progress);
                inputStream.Reset();
            }
            CollectionAssert.AreEqual(new long[] { 128 * 1024, 128 * 1024 }, progress.ValueList);
        }
예제 #8
0
        public void BuildWeightsTableTest3()
        {
            byte[]         data    = @"aaaabbbccedddddeeeaabdcefffeffadc".ToByteArray();
            HuffmanEncoder encoder = new HuffmanEncoder();

            TestIEncodingInputStream inputStream  = new TestIEncodingInputStream(data);
            WeightsTable             weightsTable = encoder.BuildWeightsTable(inputStream, CancellationToken.None);

            Assert.IsNotNull(weightsTable);
            WeightedSymbol[] expected =
            {
                new WeightedSymbol((byte)'a', 7),
                new WeightedSymbol((byte)'b', 4),
                new WeightedSymbol((byte)'c', 4),
                new WeightedSymbol((byte)'d', 7),
                new WeightedSymbol((byte)'e', 6),
                new WeightedSymbol((byte)'f', 5),
            };
            CollectionAssert.AreEqual(expected, weightsTable.ToArray());
        }
예제 #9
0
        public void EncodeTest2()
        {
            TestIEncodingInputStream  inputStream  = new TestIEncodingInputStream(new byte[] { 1 });
            TestIEncodingOutputStream outputStream = new TestIEncodingOutputStream();

            HuffmanEncoder encoder = new HuffmanEncoder();
            EncodingToken  token   = encoder.CreateEncodingToken(inputStream, CancellationToken.None);
            long           length  = encoder.Encode(inputStream, outputStream, token, CancellationToken.None, null);

            Assert.IsNotNull(token.HuffmanTree);
            Assert.IsNotNull(token.CodingTable);

            WeightedSymbol?[] expected =
            {
                new WeightedSymbol(1, 1),
                null,
                null,
            };
            Assert.AreEqual(expected, token.HuffmanTree.FlattenValues());
            Assert.AreEqual(1, length);
            AssertOutputStream(outputStream, "0");
        }
 private EncodingToken CreateEncodingToken(HuffmanEncoder encoder, byte[] data)
 {
     using (TestIEncodingInputStream inputStream = new TestIEncodingInputStream(data)) {
         return(encoder.CreateEncodingToken(inputStream, CancellationToken.None));
     }
 }