from struct import * #unsigned long check try: pack('Q',-1) print 'Error: unsigned long should not work' except error: pass big_long=0x10000000000000000L #oversized unsigned long check try: print 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('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('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(' %s ==> %s"%(`u_data`,`s`,`unpack('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(' %s ==> %s"%(`s_data`,`s`,`unpack('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 !'