Пример #1
0
 def test_decode(self):
     self.assertEqual(
         HuffmanTree.decode("010110", {
             "t": "0",
             "e": "10",
             "s": "11"
         }), "test")
     self.assertEqual(
         HuffmanTree.decode("00101111100", {
             "t": "00",
             "e": "1011",
             "s": "111"
         }), "test")
     self.assertRaises(Exception, HuffmanTree.decode, "0101101", {
         "t": "0",
         "e": "10",
         "s": "11"
     })
Пример #2
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()