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()
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)
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)