mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 02:15:10 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			185 lines
		
	
	
	
		
			4.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			185 lines
		
	
	
	
		
			4.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| import zlib
 | |
| from test_support import TestFailed
 | |
| import sys
 | |
| import imp
 | |
| 
 | |
| try:
 | |
|     t = imp.find_module('test_zlib')
 | |
|     file = t[0]
 | |
| except ImportError:
 | |
|     file = open(__file__)
 | |
| buf = file.read() * 8
 | |
| file.close()
 | |
| 
 | |
| # test the checksums (hex so the test doesn't break on 64-bit machines)
 | |
| print hex(zlib.crc32('penguin')), hex(zlib.crc32('penguin', 1))
 | |
| print hex(zlib.adler32('penguin')), hex(zlib.adler32('penguin', 1))
 | |
| 
 | |
| # make sure we generate some expected errors
 | |
| try:
 | |
|     zlib.compress('ERROR', zlib.MAX_WBITS + 1)
 | |
| except zlib.error, msg:
 | |
|     print "expecting", msg
 | |
| try:
 | |
|     zlib.compressobj(1, 8, 0)
 | |
| except ValueError, msg:
 | |
|     print "expecting", msg
 | |
| try:
 | |
|     zlib.decompressobj(0)
 | |
| except ValueError, msg:
 | |
|     print "expecting", msg
 | |
| 
 | |
| x = zlib.compress(buf)
 | |
| y = zlib.decompress(x)
 | |
| if buf != y:
 | |
|     print "normal compression/decompression failed"
 | |
| else:
 | |
|     print "normal compression/decompression succeeded"
 | |
| 
 | |
| buf = buf * 16
 | |
| 
 | |
| co = zlib.compressobj(8, 8, -15)
 | |
| x1 = co.compress(buf)
 | |
| x2 = co.flush()
 | |
| x = x1 + x2
 | |
| 
 | |
| dc = zlib.decompressobj(-15)
 | |
| y1 = dc.decompress(x)
 | |
| y2 = dc.flush()
 | |
| y = y1 + y2
 | |
| if buf != y:
 | |
|     print "compress/decompression obj failed"
 | |
| else:
 | |
|     print "compress/decompression obj succeeded"
 | |
| 
 | |
| co = zlib.compressobj(2, 8, -12, 9, 1)
 | |
| bufs = []
 | |
| for i in range(0, len(buf), 256):
 | |
|     bufs.append(co.compress(buf[i:i+256]))
 | |
| bufs.append(co.flush())
 | |
| combuf = ''.join(bufs)
 | |
| 
 | |
| decomp1 = zlib.decompress(combuf, -12, -5)
 | |
| if decomp1 != buf:
 | |
|     print "decompress with init options failed"
 | |
| else:
 | |
|     print "decompress with init options succeeded"
 | |
| 
 | |
| deco = zlib.decompressobj(-12)
 | |
| bufs = []
 | |
| for i in range(0, len(combuf), 128):
 | |
|     bufs.append(deco.decompress(combuf[i:i+128]))
 | |
| bufs.append(deco.flush())
 | |
| decomp2 = ''.join(bufs)
 | |
| if decomp2 != buf:
 | |
|     print "decompressobj with init options failed"
 | |
| else:
 | |
|     print "decompressobj with init options succeeded"
 | |
| 
 | |
| # Test flush() with the various options, using all the different levels
 | |
| # in order to provide more variations.
 | |
| for sync in [zlib.Z_NO_FLUSH, zlib.Z_SYNC_FLUSH, zlib.Z_FULL_FLUSH]:
 | |
|     for level in range(10):
 | |
|         obj = zlib.compressobj( level )
 | |
|         d = obj.compress( buf[:3000] )
 | |
|         d = d + obj.flush( sync )
 | |
|         d = d + obj.compress( buf[3000:] )
 | |
|         d = d + obj.flush()
 | |
|         if zlib.decompress(d) != buf:
 | |
|             print "Decompress failed: flush mode=%i, level=%i" % (sync,level)
 | |
|         del obj
 | |
| 
 | |
| # Test for the odd flushing bugs noted in 2.0, and hopefully fixed in 2.1
 | |
| 
 | |
| import random
 | |
| random.seed(1)
 | |
| 
 | |
| print 'Testing on 17K of random data'
 | |
| 
 | |
| # Create compressor and decompressor objects
 | |
| c=zlib.compressobj(9)
 | |
| d=zlib.decompressobj()
 | |
| 
 | |
| # Try 17K of data
 | |
| # generate random data stream
 | |
| a=""
 | |
| for i in range(17*1024):
 | |
|     a=a+chr(random.randint(0,255))
 | |
| 
 | |
| # compress, sync-flush, and decompress
 | |
| t = d.decompress( c.compress(a)+c.flush(zlib.Z_SYNC_FLUSH) )
 | |
| 
 | |
| # if decompressed data is different from the input data, choke.
 | |
| if len(t) != len(a):
 | |
|     print len(a),len(t),len(d.unused_data)
 | |
|     raise TestFailed, "output of 17K doesn't match"
 | |
| 
 | |
| def ignore():
 | |
|     """An empty function with a big string.
 | |
| 
 | |
|     Make the compression algorithm work a little harder.
 | |
|     """
 | |
| 
 | |
|     """
 | |
| LAERTES
 | |
| 
 | |
|        O, fear me not.
 | |
|        I stay too long: but here my father comes.
 | |
| 
 | |
|        Enter POLONIUS
 | |
| 
 | |
|        A double blessing is a double grace,
 | |
|        Occasion smiles upon a second leave.
 | |
| 
 | |
| LORD POLONIUS
 | |
| 
 | |
|        Yet here, Laertes! aboard, aboard, for shame!
 | |
|        The wind sits in the shoulder of your sail,
 | |
|        And you are stay'd for. There; my blessing with thee!
 | |
|        And these few precepts in thy memory
 | |
|        See thou character. Give thy thoughts no tongue,
 | |
|        Nor any unproportioned thought his act.
 | |
|        Be thou familiar, but by no means vulgar.
 | |
|        Those friends thou hast, and their adoption tried,
 | |
|        Grapple them to thy soul with hoops of steel;
 | |
|        But do not dull thy palm with entertainment
 | |
|        Of each new-hatch'd, unfledged comrade. Beware
 | |
|        Of entrance to a quarrel, but being in,
 | |
|        Bear't that the opposed may beware of thee.
 | |
|        Give every man thy ear, but few thy voice;
 | |
|        Take each man's censure, but reserve thy judgment.
 | |
|        Costly thy habit as thy purse can buy,
 | |
|        But not express'd in fancy; rich, not gaudy;
 | |
|        For the apparel oft proclaims the man,
 | |
|        And they in France of the best rank and station
 | |
|        Are of a most select and generous chief in that.
 | |
|        Neither a borrower nor a lender be;
 | |
|        For loan oft loses both itself and friend,
 | |
|        And borrowing dulls the edge of husbandry.
 | |
|        This above all: to thine ownself be true,
 | |
|        And it must follow, as the night the day,
 | |
|        Thou canst not then be false to any man.
 | |
|        Farewell: my blessing season this in thee!
 | |
| 
 | |
| LAERTES
 | |
| 
 | |
|        Most humbly do I take my leave, my lord.
 | |
| 
 | |
| LORD POLONIUS
 | |
| 
 | |
|        The time invites you; go; your servants tend.
 | |
| 
 | |
| LAERTES
 | |
| 
 | |
|        Farewell, Ophelia; and remember well
 | |
|        What I have said to you.
 | |
| 
 | |
| OPHELIA
 | |
| 
 | |
|        'Tis in my memory lock'd,
 | |
|        And you yourself shall keep the key of it.
 | |
| 
 | |
| LAERTES
 | |
| 
 | |
|        Farewell.
 | |
| """
 | 
