Home | History | Annotate | Download | only in test
      1 import sys, unittest
      2 from ctypes import *
      3 
      4 structures = []
      5 byteswapped_structures = []
      6 
      7 
      8 if sys.byteorder == "little":
      9     SwappedStructure = BigEndianStructure
     10 else:
     11     SwappedStructure = LittleEndianStructure
     12 
     13 for typ in [c_short, c_int, c_long, c_longlong,
     14             c_float, c_double,
     15             c_ushort, c_uint, c_ulong, c_ulonglong]:
     16     class X(Structure):
     17         _pack_ = 1
     18         _fields_ = [("pad", c_byte),
     19                     ("value", typ)]
     20     class Y(SwappedStructure):
     21         _pack_ = 1
     22         _fields_ = [("pad", c_byte),
     23                     ("value", typ)]
     24     structures.append(X)
     25     byteswapped_structures.append(Y)
     26 
     27 class TestStructures(unittest.TestCase):
     28     def test_native(self):
     29         for typ in structures:
     30 ##            print typ.value
     31             self.assertEqual(typ.value.offset, 1)
     32             o = typ()
     33             o.value = 4
     34             self.assertEqual(o.value, 4)
     35 
     36     def test_swapped(self):
     37         for typ in byteswapped_structures:
     38 ##            print >> sys.stderr, typ.value
     39             self.assertEqual(typ.value.offset, 1)
     40             o = typ()
     41             o.value = 4
     42             self.assertEqual(o.value, 4)
     43 
     44 if __name__ == '__main__':
     45     unittest.main()
     46