text: import unittest
  from ctypes import *
  
  class MyInt(c_int):
      def __cmp__(self, other):
          if type(other) != MyInt:
              return -1
          return cmp(self.value, other.value)
      def __hash__(self): # Silence Py3k warning
          return hash(self.value)
  
  class Test(unittest.TestCase):
  
      def test_compare(self):
          self.failUnlessEqual(MyInt(3), MyInt(3))
          self.failIfEqual(MyInt(42), MyInt(43))
  
      def test_ignore_retval(self):
          # Test if the return value of a callback is ignored
          # if restype is None
          proto = CFUNCTYPE(None)
          def func():
              return (1, "abc", None)
  
          cb = proto(func)
          self.failUnlessEqual(None, cb())
  
  
      def test_int_callback(self):
          args = []
          def func(arg):
              args.append(arg)
              return arg
  
          cb = CFUNCTYPE(None, MyInt)(func)
  
          self.failUnlessEqual(None, cb(42))
          self.failUnlessEqual(type(args[-1]), MyInt)
  
          cb = CFUNCTYPE(c_int, c_int)(func)
  
          self.failUnlessEqual(42, cb(42))
          self.failUnlessEqual(type(args[-1]), int)
  
      def test_int_struct(self):
          class X(Structure):
              _fields_ = [("x", MyInt)]
  
          self.failUnlessEqual(X().x, MyInt())
  
          s = X()
          s.x = MyInt(42)
  
          self.failUnlessEqual(s.x, MyInt(42))
  
  if __name__ == "__main__":
      unittest.main()
  