home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2010 November / maximum-cd-2010-11.iso / DiscContents / calibre-0.7.13.msi / file_383 (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2010-08-06  |  2.8 KB  |  89 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. import unittest
  5. import ctypes
  6. import gc
  7. MyCallback = ctypes.CFUNCTYPE(ctypes.c_int, ctypes.c_int)
  8. OtherCallback = ctypes.CFUNCTYPE(ctypes.c_int, ctypes.c_int, ctypes.c_ulonglong)
  9. import _ctypes_test
  10. dll = ctypes.CDLL(_ctypes_test.__file__)
  11.  
  12. class RefcountTestCase(unittest.TestCase):
  13.     
  14.     def test_1(self):
  15.         grc = getrefcount
  16.         import sys
  17.         f = dll._testfunc_callback_i_if
  18.         f.restype = ctypes.c_int
  19.         f.argtypes = [
  20.             ctypes.c_int,
  21.             MyCallback]
  22.         
  23.         def callback(value):
  24.             return value
  25.  
  26.         self.failUnlessEqual(grc(callback), 2)
  27.         cb = MyCallback(callback)
  28.         self.failUnless(grc(callback) > 2)
  29.         result = f(-10, cb)
  30.         self.failUnlessEqual(result, -18)
  31.         cb = None
  32.         gc.collect()
  33.         self.failUnlessEqual(grc(callback), 2)
  34.  
  35.     
  36.     def test_refcount(self):
  37.         grc = getrefcount
  38.         import sys
  39.         
  40.         def func(*args):
  41.             pass
  42.  
  43.         self.failUnlessEqual(grc(func), 2)
  44.         f = OtherCallback(func)
  45.         self.failUnless(grc(func) > 2)
  46.         del f
  47.         self.failUnless(grc(func) >= 2)
  48.         gc.collect()
  49.         self.failUnless(grc(func) == 2)
  50.         
  51.         class X(ctypes.Structure):
  52.             _fields_ = [
  53.                 ('a', OtherCallback)]
  54.  
  55.         x = X()
  56.         x.a = OtherCallback(func)
  57.         self.failUnless(grc(func) > 2)
  58.         del x
  59.         self.failUnless(grc(func) >= 2)
  60.         gc.collect()
  61.         self.failUnlessEqual(grc(func), 2)
  62.         f = OtherCallback(func)
  63.         self.failUnless(grc(func) > 2)
  64.         f.cycle = f
  65.         del f
  66.         gc.collect()
  67.         self.failUnlessEqual(grc(func), 2)
  68.  
  69.  
  70.  
  71. class AnotherLeak(unittest.TestCase):
  72.     
  73.     def test_callback(self):
  74.         import sys
  75.         proto = ctypes.CFUNCTYPE(ctypes.c_int, ctypes.c_int, ctypes.c_int)
  76.         
  77.         def func(a, b):
  78.             return a * b * 2
  79.  
  80.         f = proto(func)
  81.         a = sys.getrefcount(ctypes.c_int)
  82.         f(1, 2)
  83.         self.failUnlessEqual(sys.getrefcount(ctypes.c_int), a)
  84.  
  85.  
  86. if __name__ == '__main__':
  87.     unittest.main()
  88.  
  89.