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

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. from ctypes import *
  5. import unittest
  6. import struct
  7.  
  8. def valid_ranges(*types):
  9.     result = []
  10.     for t in types:
  11.         fmt = t._type_
  12.         size = struct.calcsize(fmt)
  13.         a = struct.unpack(fmt, '\x00' * 32[:size])[0]
  14.         b = struct.unpack(fmt, '\xff' * 32[:size])[0]
  15.         c = struct.unpack(fmt, '\x7f' + '\x00' * 32[:size])[0]
  16.         d = struct.unpack(fmt, '\x80' + '\xff' * 32[:size])[0]
  17.         result.append((min(a, b, c, d), max(a, b, c, d)))
  18.     
  19.     return result
  20.  
  21. ArgType = type(byref(c_int(0)))
  22. unsigned_types = [
  23.     c_ubyte,
  24.     c_ushort,
  25.     c_uint,
  26.     c_ulong]
  27. signed_types = [
  28.     c_byte,
  29.     c_short,
  30.     c_int,
  31.     c_long,
  32.     c_longlong]
  33. bool_types = []
  34. float_types = [
  35.     c_double,
  36.     c_float]
  37.  
  38. try:
  39.     c_ulonglong
  40.     c_longlong
  41. except NameError:
  42.     pass
  43.  
  44. unsigned_types.append(c_ulonglong)
  45. signed_types.append(c_longlong)
  46.  
  47. try:
  48.     c_bool
  49. except NameError:
  50.     pass
  51.  
  52. bool_types.append(c_bool)
  53. unsigned_ranges = valid_ranges(*unsigned_types)
  54. signed_ranges = valid_ranges(*signed_types)
  55. bool_values = [
  56.     True,
  57.     False,
  58.     0,
  59.     1,
  60.     -1,
  61.     5000,
  62.     'test',
  63.     [],
  64.     [
  65.         1]]
  66.  
  67. class NumberTestCase(unittest.TestCase):
  68.     
  69.     def test_default_init(self):
  70.         for t in signed_types + unsigned_types + float_types:
  71.             self.failUnlessEqual(t().value, 0)
  72.         
  73.  
  74.     
  75.     def test_unsigned_values(self):
  76.         for l, h in zip(unsigned_types, unsigned_ranges):
  77.             self.failUnlessEqual(t(l).value, l)
  78.             self.failUnlessEqual(t(h).value, h)
  79.         
  80.  
  81.     
  82.     def test_signed_values(self):
  83.         for l, h in zip(signed_types, signed_ranges):
  84.             self.failUnlessEqual(t(l).value, l)
  85.             self.failUnlessEqual(t(h).value, h)
  86.         
  87.  
  88.     
  89.     def test_bool_values(self):
  90.         truth = truth
  91.         import operator
  92.         for t, v in zip(bool_types, bool_values):
  93.             self.failUnlessEqual(t(v).value, truth(v))
  94.         
  95.  
  96.     
  97.     def test_typeerror(self):
  98.         for t in signed_types + unsigned_types + float_types:
  99.             self.assertRaises(TypeError, t, '')
  100.             self.assertRaises(TypeError, t, None)
  101.         
  102.  
  103.     
  104.     def test_from_param(self):
  105.         for t in signed_types + unsigned_types + float_types:
  106.             self.failUnlessEqual(ArgType, type(t.from_param(0)))
  107.         
  108.  
  109.     
  110.     def test_byref(self):
  111.         for t in signed_types + unsigned_types + float_types + bool_types:
  112.             parm = byref(t())
  113.             self.failUnlessEqual(ArgType, type(parm))
  114.         
  115.  
  116.     
  117.     def test_floats(self):
  118.         
  119.         class FloatLike(object):
  120.             
  121.             def __float__(self):
  122.                 return 2
  123.  
  124.  
  125.         f = FloatLike()
  126.         for t in float_types:
  127.             self.failUnlessEqual(t(2).value, 2)
  128.             self.failUnlessEqual(t(2).value, 2)
  129.             self.failUnlessEqual(t(0x2L).value, 2)
  130.             self.failUnlessEqual(t(f).value, 2)
  131.         
  132.  
  133.     
  134.     def test_integers(self):
  135.         
  136.         class FloatLike(object):
  137.             
  138.             def __float__(self):
  139.                 return 2
  140.  
  141.  
  142.         f = FloatLike()
  143.         
  144.         class IntLike(object):
  145.             
  146.             def __int__(self):
  147.                 return 2
  148.  
  149.  
  150.         i = IntLike()
  151.         for t in signed_types + unsigned_types:
  152.             self.assertRaises(TypeError, t, 3.14)
  153.             self.assertRaises(TypeError, t, f)
  154.             self.failUnlessEqual(t(i).value, 2)
  155.         
  156.  
  157.     
  158.     def test_sizes(self):
  159.         for t in signed_types + unsigned_types + float_types + bool_types:
  160.             
  161.             try:
  162.                 size = struct.calcsize(t._type_)
  163.             except struct.error:
  164.                 continue
  165.  
  166.             self.failUnlessEqual(sizeof(t), size)
  167.             self.failUnlessEqual(sizeof(t()), size)
  168.         
  169.  
  170.     
  171.     def test_alignments(self):
  172.         for t in signed_types + unsigned_types + float_types:
  173.             code = t._type_
  174.             align = struct.calcsize('c%c' % code) - struct.calcsize(code)
  175.             self.failUnlessEqual((code, alignment(t)), (code, align))
  176.             self.failUnlessEqual((code, alignment(t())), (code, align))
  177.         
  178.  
  179.     
  180.     def test_int_from_address(self):
  181.         array = array
  182.         import array
  183.         for t in signed_types + unsigned_types:
  184.             
  185.             try:
  186.                 array(t._type_)
  187.             except ValueError:
  188.                 continue
  189.  
  190.             a = array(t._type_, [
  191.                 100])
  192.             v = t.from_address(a.buffer_info()[0])
  193.             self.failUnlessEqual(v.value, a[0])
  194.             self.failUnlessEqual(type(v), t)
  195.             a[0] = 42
  196.             self.failUnlessEqual(v.value, a[0])
  197.         
  198.  
  199.     
  200.     def test_float_from_address(self):
  201.         array = array
  202.         import array
  203.         for t in float_types:
  204.             a = array(t._type_, [
  205.                 3.14])
  206.             v = t.from_address(a.buffer_info()[0])
  207.             self.failUnlessEqual(v.value, a[0])
  208.             self.failUnless(type(v) is t)
  209.             a[0] = 2.3456e+17
  210.             self.failUnlessEqual(v.value, a[0])
  211.             self.failUnless(type(v) is t)
  212.         
  213.  
  214.     
  215.     def test_char_from_address(self):
  216.         c_char = c_char
  217.         import ctypes
  218.         array = array
  219.         import array
  220.         a = array('c', 'x')
  221.         v = c_char.from_address(a.buffer_info()[0])
  222.         self.failUnlessEqual(v.value, a[0])
  223.         self.failUnless(type(v) is c_char)
  224.         a[0] = '?'
  225.         self.failUnlessEqual(v.value, a[0])
  226.  
  227.     
  228.     def test_init(self):
  229.         self.assertRaises(TypeError, c_int, c_long(42))
  230.  
  231.  
  232. from ctypes import _SimpleCData
  233.  
  234. class c_int_S(_SimpleCData):
  235.     _type_ = 'i'
  236.     __slots__ = []
  237.  
  238.  
  239. def run_test(rep, msg, func, arg = None):
  240.     items = range(rep)
  241.     clock = clock
  242.     import time
  243.     if arg is not None:
  244.         start = clock()
  245.         for i in items:
  246.             func(arg)
  247.             func(arg)
  248.             func(arg)
  249.             func(arg)
  250.             func(arg)
  251.         
  252.         stop = clock()
  253.     else:
  254.         start = clock()
  255.         for i in items:
  256.             func()
  257.             func()
  258.             func()
  259.             func()
  260.             func()
  261.         
  262.         stop = clock()
  263.     print '%15s: %.2f us' % (msg, (stop - start) * 1e+06 / 5 / rep)
  264.  
  265.  
  266. def check_perf():
  267.     c_int = c_int
  268.     import ctypes
  269.     REP = 200000
  270.     run_test(REP, 'int()', int)
  271.     run_test(REP, 'int(999)', int)
  272.     run_test(REP, 'c_int()', c_int)
  273.     run_test(REP, 'c_int(999)', c_int)
  274.     run_test(REP, 'c_int_S()', c_int_S)
  275.     run_test(REP, 'c_int_S(999)', c_int_S)
  276.  
  277. if __name__ == '__main__':
  278.     unittest.main()
  279.  
  280.