[ctypes-commit] ctypes/ctypes/test test_byteswap.py,1.1.2.2,1.1.2.3
Brought to you by:
theller
From: Thomas H. <th...@us...> - 2005-11-29 20:15:18
|
Update of /cvsroot/ctypes/ctypes/ctypes/test In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv12323 Modified Files: Tag: branch_1_0 test_byteswap.py Log Message: Implement simple data types with different byte order (endian). Index: test_byteswap.py =================================================================== RCS file: /cvsroot/ctypes/ctypes/ctypes/test/Attic/test_byteswap.py,v retrieving revision 1.1.2.2 retrieving revision 1.1.2.3 diff -C2 -d -r1.1.2.2 -r1.1.2.3 *** test_byteswap.py 10 Nov 2005 21:14:55 -0000 1.1.2.2 --- test_byteswap.py 29 Nov 2005 20:15:05 -0000 1.1.2.3 *************** *** 7,21 **** requires("swap") ! class BITS(Structure): ! _fields_ = [("i%d" % i, c_uint, 1) for i in range(32)] ! for i in range(32): ! print getattr(BITS, "i%d" % i) ! def dump(s): ! print hexlify(buffer(s)) class Test(unittest.TestCase): ! def test(self): print sys.byteorder for i in range(32): --- 7,31 ---- requires("swap") ! ##class BITS(Structure): ! ## _fields_ = [("i%d" % i, c_uint, 1) for i in range(32)] ! ##for i in range(32): ! ## print getattr(BITS, "i%d" % i) ! ##def dump(s): ! ## print hexlify(buffer(s)) ! ! def bin(s): ! return hexlify(buffer(s)).upper() ! ! # Each *simple* type that supports different byte orders has an ! # __ctype_be__ attribute that specifies the same type in BIG ENDIAN ! # byte order, and a __ctype_le__ attribute that is the same type in ! # LITTLE ENDIAN byte order. ! # ! # For Structures and Unions, these types are created on demand. class Test(unittest.TestCase): ! def X_test(self): print sys.byteorder for i in range(32): *************** *** 24,27 **** --- 34,119 ---- dump(bits) + def test_endian_short(self): + if sys.byteorder == "little": + self.failUnless(c_short.__ctype_le__ is c_short) + self.failUnless(c_short.__ctype_be__.__ctype_le__ is c_short) + else: + self.failUnless(c_short.__ctype_be__ is c_short) + self.failUnless(c_short.__ctype_le__.__ctype_be__ is c_short) + s = c_short.__ctype_be__(0x1234) + self.failUnlessEqual(bin(s), "1234") + self.failUnlessEqual(s.value, 0x1234) + + s = c_short.__ctype_le__(0x1234) + self.failUnlessEqual(bin(s), "3412") + self.failUnlessEqual(s.value, 0x1234) + + s = c_ushort.__ctype_be__(0x1234) + self.failUnlessEqual(bin(s), "1234") + self.failUnlessEqual(s.value, 0x1234) + + s = c_ushort.__ctype_le__(0x1234) + self.failUnlessEqual(bin(s), "3412") + self.failUnlessEqual(s.value, 0x1234) + + def test_endian_int(self): + if sys.byteorder == "little": + self.failUnless(c_int.__ctype_le__ is c_int) + self.failUnless(c_int.__ctype_be__.__ctype_le__ is c_int) + else: + self.failUnless(c_int.__ctype_be__ is c_int) + self.failUnless(c_int.__ctype_le__.__ctype_be__ is c_int) + + s = c_int.__ctype_be__(0x12345678) + self.failUnlessEqual(bin(s), "12345678") + self.failUnlessEqual(s.value, 0x12345678) + + s = c_int.__ctype_le__(0x12345678) + self.failUnlessEqual(bin(s), "78563412") + self.failUnlessEqual(s.value, 0x12345678) + + s = c_uint.__ctype_be__(0x12345678) + self.failUnlessEqual(bin(s), "12345678") + self.failUnlessEqual(s.value, 0x12345678) + + s = c_uint.__ctype_le__(0x12345678) + self.failUnlessEqual(bin(s), "78563412") + self.failUnlessEqual(s.value, 0x12345678) + + def test_endian_longlong(self): + if sys.byteorder == "little": + self.failUnless(c_longlong.__ctype_le__ is c_longlong) + self.failUnless(c_longlong.__ctype_be__.__ctype_le__ is c_longlong) + else: + self.failUnless(c_longlong.__ctype_be__ is c_longlong) + self.failUnless(c_longlong.__ctype_le__.__ctype_be__ is c_longlong) + + s = c_longlong.__ctype_be__(0x1234567890ABCDEF) + self.failUnlessEqual(bin(s), "1234567890ABCDEF") + self.failUnlessEqual(s.value, 0x1234567890ABCDEF) + + s = c_longlong.__ctype_le__(0x1234567890ABCDEF) + self.failUnlessEqual(bin(s), "EFCDAB9078563412") + self.failUnlessEqual(s.value, 0x1234567890ABCDEF) + + s = c_ulonglong.__ctype_be__(0x1234567890ABCDEF) + self.failUnlessEqual(bin(s), "1234567890ABCDEF") + self.failUnlessEqual(s.value, 0x1234567890ABCDEF) + + s = c_ulonglong.__ctype_le__(0x1234567890ABCDEF) + self.failUnlessEqual(bin(s), "EFCDAB9078563412") + self.failUnlessEqual(s.value, 0x1234567890ABCDEF) + + def test_endian_other(self): + self.failUnless(c_byte.__ctype_le__ is c_byte) + self.failUnless(c_byte.__ctype_be__ is c_byte) + + self.failUnless(c_ubyte.__ctype_le__ is c_ubyte) + self.failUnless(c_ubyte.__ctype_be__ is c_ubyte) + + self.failUnless(c_char.__ctype_le__ is c_char) + self.failUnless(c_char.__ctype_be__ is c_char) + + if __name__ == "__main__": unittest.main() |