1
|
|
|
import unittest |
2
|
|
|
|
3
|
|
|
from pycompressor.huffman import HuffmanCompressor |
4
|
|
|
|
5
|
|
|
|
6
|
|
|
class HuffmanCompressionUnitTest(unittest.TestCase): |
7
|
|
|
|
8
|
|
|
def test_huffman_binary(self): |
9
|
|
|
huffman = HuffmanCompressor() |
10
|
|
|
text = 'Hello World' |
11
|
|
|
bit_stream = huffman.compress_to_binary(text) |
12
|
|
|
self.assertFalse(bit_stream.is_empty()) |
13
|
|
|
print(bit_stream.size()) |
14
|
|
|
decompressed = huffman.decompress_from_binary(bit_stream) |
15
|
|
|
print(decompressed) |
16
|
|
|
self.assertEqual(text, decompressed) |
17
|
|
|
|
18
|
|
|
def test_huffman_string(self): |
19
|
|
|
huffman = HuffmanCompressor() |
20
|
|
|
original = 'Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been ' \ |
21
|
|
|
'the industry standard dummy text ever since the 1500s, when an unknown printer took a galley ' \ |
22
|
|
|
'of type and scrambled it to make a type specimen book. It has survived not only five centuries, ' \ |
23
|
|
|
'but also the leap into electronic typesetting, remaining essentially unchanged. It was ' \ |
24
|
|
|
'popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, ' \ |
25
|
|
|
'and more recently with desktop publishing software like Aldus PageMaker including versions of ' \ |
26
|
|
|
'Lorem Ipsum. ' |
27
|
|
|
print('before compression: ' + original) |
28
|
|
|
print('length: ' + str(len(original))) |
29
|
|
|
compressed = huffman.compress_to_string(original) |
30
|
|
|
print('after compression: ' + compressed) |
31
|
|
|
print('length: ' + str(len(compressed))) |
32
|
|
|
decompressed = huffman.decompress_from_string(compressed) |
33
|
|
|
print('after decompression: ' + decompressed) |
34
|
|
|
print('length: ' + str(len(decompressed))) |
35
|
|
|
self.assertEqual(original, decompressed) |
36
|
|
|
|
37
|
|
|
|
38
|
|
|
if __name__ == '__main__': |
39
|
|
|
unittest.main() |
40
|
|
|
|