1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- #!/usr/bin/python -u
- #
- # Python Bindings for LZMA
- #
- # Copyright (c) 2004-2006 by Joachim Bauch, mail@joachim-bauch.de
- # 7-Zip Copyright (C) 1999-2005 Igor Pavlov
- # LZMA SDK Copyright (C) 1999-2005 Igor Pavlov
- #
- # This library is free software; you can redistribute it and/or
- # modify it under the terms of the GNU Lesser General Public
- # License as published by the Free Software Foundation; either
- # version 2.1 of the License, or (at your option) any later version.
- #
- # This library is distributed in the hope that it will be useful,
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- # Lesser General Public License for more details.
- #
- # You should have received a copy of the GNU Lesser General Public
- # License along with this library; if not, write to the Free Software
- # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- #
- # $Id: test_compatibility.py 106 2006-01-08 18:19:04Z jojo $
- #
- import md5, random
- import pylzma
- import unittest
- from binascii import unhexlify
- if not hasattr(pylzma, 'decompress_compat'):
- raise ImportError, 'no compatibility support available'
- ALL_CHARS = ''.join([chr(x) for x in xrange(256)])
- # cache random strings to speed up tests
- _random_strings = {}
- def generate_random(size, choice=random.choice, ALL_CHARS=ALL_CHARS):
- global _random_strings
- if _random_strings.has_key(size):
- return _random_strings[size]
-
- s = ''.join([choice(ALL_CHARS) for x in xrange(size)])
- _random_strings[size] = s
- return s
- class TestPyLZMACompability(unittest.TestCase):
-
- def setUp(self):
- self.plain = 'hello, this is a test string'
- self.plain_with_eos = unhexlify('5d0000800000341949ee8def8c6b64909b1386e370bebeb1b656f5736d653c127731a214ff7031c000')
- self.plain_without_eos = unhexlify('5d0000800000341949ee8def8c6b64909b1386e370bebeb1b656f5736d653c115edbe9')
-
- def test_decompression_noeos(self):
- # test decompression without the end of stream marker
- decompressed = pylzma.decompress_compat(self.plain_without_eos)
- self.assertEqual(decompressed, self.plain)
- def test_compression_decompression_noeos(self):
- # call compression and decompression on random data of various sizes
- for i in xrange(18):
- size = 1 << i
- original = generate_random(size)
- result = pylzma.decompress_compat(pylzma.compress(original, eos=0))[:size]
- self.assertEqual(md5.new(original).hexdigest(), md5.new(result).hexdigest())
- def test_multi(self):
- # call compression and decompression multiple times to detect memory leaks...
- for x in xrange(4):
- self.test_compression_decompression_noeos()
- def test_main():
- from test import test_support
- test_support.run_unittest(TestPyLZMACompability)
- if __name__ == "__main__":
- unittest.main()
|