Пример #1
0

def BinaryTreeToString(root):
    if root.symbol is not None: return root.symbol
    else:
        return "(%s%s)" % (BinaryTreeToString(
            root.left), BinaryTreeToString(root.right))


if __name__ == "__main__":
    f = open("testcases_huffman.txt", 'r')
    num_tests = 0
    for l in f.readlines():
        l = l.strip()
        (testname, symbols, weights, tree, encode_input, encode_output,
         decode_input, decode_output) = l.split(";")
        decode_output = None if decode_output == '!' else decode_output
        symbols = symbols.split(",")
        weights = [int(w) for w in weights.split(",")]
        try:
            h = HuffmanTree(list(zip(symbols, weights)))
            assert (BinaryTreeToString(h.root) == tree)
            assert (h.encode(encode_input) == encode_output)
            assert (h.decode(decode_input) == decode_output)
        except:
            print("Failed test %s" % testname)
            break
        num_tests += 1
    print("Ran %d tests" % num_tests)
    f.close()
Пример #2
0
 def test_encode(self):
     code = {'a': '0', 'b': '1'}
     self.assertEqual(HuffmanTree.encode("ababbab", code), "0101101")
     self.assertEqual(HuffmanTree.encode("", code), "")
     code = {'a': '0', 'b': '1'}
     self.assertRaises(Exception, HuffmanTree.encode, "abcabbab", code)
Пример #3
0
from huffman import FreqTable, HuffmanTree

if __name__ == '__main__':
    ft = FreqTable()
    table = ft.get_table_for_file('text.txt')
    huffman_tree = HuffmanTree()
    priority_queue = huffman_tree.make(table)
    code_table = huffman_tree.encode()
    compressed_string = huffman_tree.get_compressed_string(ft.data)