コード例 #1
0
        public void Decode_DecodesText_Decoded()
        {
            var tree = new HuffTree();
            var result = tree.Decode("T0h00i100s000 011111101111110100o1000r0000t1010111000a101100m111000p00100l00000e101000011010111000x1000101110011010111011101100n1011100c10110010000d0111100100.");

            Assert.AreEqual("This is short sample text to encode.", result);
        }
コード例 #2
0
        public void Encode_AddsThreeSymbol_Added()
        {
            var tree = new HuffTree();
            tree.Encode('a');
            tree.Encode('a');
            tree.Encode('b');
            tree.Encode('r');

            var r = tree.Root;
            Assert.AreEqual(512, r.Number);
            Assert.AreEqual(4, r.Weight);
            Assert.AreEqual(511, r.Right.Number);
            Assert.AreEqual(2, r.Right.Weight);
            Assert.AreEqual('a', r.Right.Symbol);
            Assert.AreEqual(510, r.Left.Number);
            Assert.AreEqual(2, r.Left.Weight);
            var n510 = r.Left;
            Assert.AreEqual(509, n510.Right.Number);
            Assert.AreEqual(1, n510.Right.Weight);
            Assert.AreEqual('b', n510.Right.Symbol);
            Assert.AreEqual(508, n510.Left.Number);
            Assert.AreEqual(1, n510.Left.Weight);
            var n508 = n510.Left;
            Assert.AreEqual(507, n508.Right.Number);
            Assert.AreEqual(1, n508.Right.Weight);
            Assert.AreEqual('r', n508.Right.Symbol);
            Assert.AreEqual(506, n508.Left.Number);
            Assert.AreEqual(0, n508.Left.Weight);
        }
コード例 #3
0
        public void Encode_AddsTwoOneSymbols_CodeReturned()
        {
            var tree = new HuffTree();

            Assert.AreEqual("a", tree.Encode('a'));
            Assert.AreEqual("1", tree.Encode('a'));
        }
コード例 #4
0
        public void TestHuffaman()
        {
            char[]   chars   = { 'a', 'b', 'c', 'd' };
            double[] weight  = { 7.0, 5.0, 2.0, 4.0 };
            HuffTree huffman = new HuffTree(chars, weight);

            Assert.AreEqual(huffman.Decode(huffman.Encode("abcd")), "abcd");
        }
コード例 #5
0
 public void Constructor_InitializesTree_Initialized()
 {
     var tree = new HuffTree();
     
     Assert.AreEqual(512, tree.Root.Number);
     Assert.AreEqual(0, tree.Root.Weight);
     Assert.IsNull(tree.Root.Right);
     Assert.IsNull(tree.Root.Left);
 }
コード例 #6
0
        public void Encode_AddsThreeSymbol_CodeReturned()
        {
            var tree = new HuffTree();

            Assert.AreEqual("a", tree.Encode('a'));
            Assert.AreEqual("1", tree.Encode('a'));
            Assert.AreEqual("0b", tree.Encode('b'));
            Assert.AreEqual("00r", tree.Encode('r'));
        }
コード例 #7
0
        public void Decode_DecodesFiveCodes_Decoded()
        {
            var tree = new HuffTree();

            Assert.AreEqual("a", tree.Decode("a"));
            Assert.AreEqual("a", tree.Decode("1"));
            Assert.AreEqual("b", tree.Decode("0b"));
            Assert.AreEqual("r", tree.Decode("00r"));
            Assert.AreEqual("d", tree.Decode("000d"));
        }
コード例 #8
0
        public void Encode_AddsZeroSymbol_Added()
        {
            var tree = new HuffTree();
            tree.Encode('z');

            Assert.AreEqual(512, tree.Root.Number);
            Assert.AreEqual(1, tree.Root.Weight);
            Assert.AreEqual(511, tree.Root.Right.Number);
            Assert.AreEqual(1, tree.Root.Right.Weight);
            Assert.AreEqual('z', tree.Root.Right.Symbol);
            Assert.AreEqual(510, tree.Root.Left.Number);
            Assert.AreEqual(0, tree.Root.Left.Weight);
        }
コード例 #9
0
        static void Main(string[] args)
        {
            string   in_f     = "C:/Users/chad/rep/encoder/test/files/ex-1.txt";
            string   out_temp = "C:/Users/chad/rep/encoder/test/files/ex.table";
            HuffTree tree     = new HuffTree();

            tree.Encode(in_f, out_temp);
            ///string out_f = "C:/Users/chad/rep/encoder/test/files/ex.dec";
            //huff.encode(in_f, out_temp);

            //huff.decode(out_temp, out_f);
            //Debug.Assert(FileCompare(in_f, out_f));
        }
コード例 #10
0
ファイル: HuffmanCodec.cs プロジェクト: maoap1/grcis-1
        private int setContextInner(int ctxId)
        {
            if (ctxId == currentContext)
            {
                return(currentContext);
            }

            int oldId = currentContext;

            HuffTree hf;

            if (!contexts.TryGetValue(ctxId, out hf))
            {
                hf = new HuffTree(maxSymbol);
                contexts[ctxId] = hf;
            }
            currentContext = ctxId;
            context        = hf;

            return(oldId);
        }
コード例 #11
0
        public void Encode_AddsFourSymbol_Added()
        {
            var tree = new HuffTree();
            tree.Encode('a');
            tree.Encode('a');
            tree.Encode('b');
            tree.Encode('r');
            tree.Encode('d');

            var r = tree.Root;
            Assert.AreEqual(512, r.Number);
            Assert.AreEqual(5, r.Weight);
            Assert.AreEqual(511, r.Right.Number);
            Assert.AreEqual(3, r.Right.Weight);
            Assert.AreEqual(510, r.Left.Number);
            Assert.AreEqual(2, r.Left.Weight);
            Assert.AreEqual('a', r.Left.Symbol);
            var n511 = r.Right;
            Assert.AreEqual(509, n511.Right.Number);
            Assert.AreEqual(2, n511.Right.Weight);
            Assert.AreEqual(508, n511.Left.Number);
            Assert.AreEqual(1, n511.Left.Weight);
            Assert.AreEqual('b', n511.Left.Symbol);
            var n509 = n511.Right;
            Assert.AreEqual(507, n509.Right.Number);
            Assert.AreEqual(1, n509.Right.Weight);
            Assert.AreEqual('r', n509.Right.Symbol);
            Assert.AreEqual(506, n509.Left.Number);
            Assert.AreEqual(1, n509.Left.Weight);
            var n506 = n509.Left;
            Assert.AreEqual(505, n506.Right.Number);
            Assert.AreEqual(1, n506.Right.Weight);
            Assert.AreEqual('d', n506.Right.Symbol);
            Assert.AreEqual(504, n506.Left.Number);
            Assert.AreEqual(0, n506.Left.Weight);
        }
コード例 #12
0
ファイル: HuffmanCodec.cs プロジェクト: maoap1/grcis-1
 /// <summary>
 /// Discards all contexts.
 /// </summary>
 protected void clearContexts()
 {
     contexts       = new Dictionary <int, HuffTree>(1);
     currentContext = int.MinValue;
     context        = null;
 }