mirror of
				https://github.com/python/cpython.git
				synced 2025-11-03 19:34:08 +00:00 
			
		
		
		
	See there for a description. Added test case. Bugfix candidate for 2.2.x, not sure about previous versions: probably low priority, because virtually no one runs debug builds.
		
			
				
	
	
		
			44 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			44 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
from test.test_support import TestFailed
 | 
						|
import marshal
 | 
						|
import sys
 | 
						|
 | 
						|
# XXX Much more needed here.
 | 
						|
 | 
						|
# Test the full range of Python ints.
 | 
						|
n = sys.maxint
 | 
						|
while n:
 | 
						|
    for expected in (-n, n):
 | 
						|
        s = marshal.dumps(expected)
 | 
						|
        got = marshal.loads(s)
 | 
						|
        if expected != got:
 | 
						|
            raise TestFailed("for int %d, marshal string is %r, loaded "
 | 
						|
                             "back as %d" % (expected, s, got))
 | 
						|
    n = n >> 1
 | 
						|
 | 
						|
# Simulate int marshaling on a 64-bit box.  This is most interesting if
 | 
						|
# we're running the test on a 32-bit box, of course.
 | 
						|
 | 
						|
def to_little_endian_string(value, nbytes):
 | 
						|
    bytes = []
 | 
						|
    for i in range(nbytes):
 | 
						|
        bytes.append(chr(value & 0xff))
 | 
						|
        value >>= 8
 | 
						|
    return ''.join(bytes)
 | 
						|
 | 
						|
maxint64 = (1L << 63) - 1
 | 
						|
minint64 = -maxint64-1
 | 
						|
 | 
						|
for base in maxint64, minint64, -maxint64, -(minint64 >> 1):
 | 
						|
    while base:
 | 
						|
        s = 'I' + to_little_endian_string(base, 8)
 | 
						|
        got = marshal.loads(s)
 | 
						|
        if base != got:
 | 
						|
            raise TestFailed("for int %d, simulated marshal string is %r, "
 | 
						|
                             "loaded back as %d" % (base, s, got))
 | 
						|
        if base == -1:  # a fixed-point for shifting right 1
 | 
						|
            base = 0
 | 
						|
        else:
 | 
						|
            base >>= 1
 | 
						|
 | 
						|
# Simple-minded check for SF 588452: Debug build crashes
 | 
						|
marshal.dumps([128] * 1000)
 |