import sys, unittest

from ctypes import *



structures = []

byteswapped_structures = []





if sys.byteorder == "little":

    SwappedStructure = BigEndianStructure

else:

    SwappedStructure = LittleEndianStructure



for typ in [c_short, c_int, c_long, c_longlong,

            c_float, c_double,

            c_ushort, c_uint, c_ulong, c_ulonglong]:

    class X(Structure):

        _pack_ = 1

        _fields_ = [("pad", c_byte),

                    ("value", typ)]

    class Y(SwappedStructure):

        _pack_ = 1

        _fields_ = [("pad", c_byte),

                    ("value", typ)]

    structures.append(X)

    byteswapped_structures.append(Y)



class TestStructures(unittest.TestCase):

    def test_native(self):

        for typ in structures:

##            print typ.value

            self.failUnlessEqual(typ.value.offset, 1)

            o = typ()

            o.value = 4

            self.failUnlessEqual(o.value, 4)



    def test_swapped(self):

        for typ in byteswapped_structures:

##            print >> sys.stderr, typ.value

            self.failUnlessEqual(typ.value.offset, 1)

            o = typ()

            o.value = 4

            self.failUnlessEqual(o.value, 4)



if __name__ == '__main__':

    unittest.main()

