Message2238

Author pjosselin
Recipients
Date 2002-07-05.10:06:53
SpamBayes Score
Marked as misclassified
Message-id
In-reply-to
Content
In CPython, the struct module can manage 64 bits
integers in unsigned and signed form with the 'Q' or
'q' format code.

This patch duplicates this missing functionnality in
Jython.

Patch as attached file, simple test script folows

from struct import *

#unsigned long check
try:
	pack('<Q',-1)
	print 'Error: unsigned long should not work'
except error:
	pass
	
try:
	pack('>Q',-1)
	print 'Error: unsigned long should not work'
except error:
	pass

big_long=0x10000000000000000L
#oversized unsigned long check
try:
	print pack('<Q',big_long)
	print 'Error, should not try to pack >64bits ints'
except OverflowError:
	pass
	
try:
	print pack('>Q',big_long)
	print 'Error, should not try to pack >64bits ints'
except OverflowError:
	pass

#oversized positive signed long check
try:
	print pack('<q',big_long)
	print 'Error, should not try to pack >64bits ints'
except OverflowError:
	pass
	
try:
	print pack('>q',big_long)
	print 'Error, should not try to pack >64bits ints'
except OverflowError:
	pass

#oversized negative signed long check
big_long=-big_long
try:
	print pack('<q',big_long)
	print 'Error, should not try to pack >64bits ints'
except OverflowError:
	pass
	
try:
	print pack('>q',big_long)
	print 'Error, should not try to pack >64bits ints'
except OverflowError:
	pass

u_data=(0x1L,0x10000L,0x100000000L)
s_data=(0x1L,-0x10000L,0x0FFFFFFFFL,-0x100000000L)
#internal pack-unpack coherence check

s=pack('<QQQ',u_data[0],u_data[1],u_data[2])
if u_data!=unpack('<QQQ',s):
	print "internal coherence error:		%s ==> %s ==>
%s"%(`u_data`,`s`,`unpack('<QQQ',s)`)


s=pack('>QQQ',u_data[0],u_data[1],u_data[2])
if u_data!=unpack('>QQQ',s):
	print "internal coherence error:		%s ==> %s ==>
%s"%(`u_data`,`s`,`unpack('>QQQ',s)`)

s=pack('<qqqq',s_data[0],s_data[1],s_data[2],s_data[3])
if s_data!=unpack('<qqqq',s):
	print "internal coherence error:		%s ==> %s ==>
%s"%(`s_data`,`s`,`unpack('<qqqq',s)`)

s=pack('>qqqq',s_data[0],s_data[1],s_data[2],s_data[3])
if s_data!=unpack('>qqqq',s):
	print "internal coherence error:		%s ==> %s ==>
%s"%(`s_data`,`s`,`unpack('>qqqq',s)`)

#external unpack coherence check
string_from_CPython='\x00\x00\x00\x00\x00\x01\x11p\xff\xff\xff\xff\xff\xfe\xc7\x80\xff\xff\xff\xff\xff\xff\xff\xfb\x00\x00\x00\x00\x00\x018\x80'
if
(70000,-80000,-5,80000)!=unpack('!Qqqq',string_from_CPython):
	print 'Error unpacking from CPython !'
History
Date User Action Args
2008-02-20 17:18:18adminlinkissue577728 messages
2008-02-20 17:18:18admincreate