from _ctypes import CTYPES_MAX_ARGCOUNT
from ctypes import (CDLL, cdll, Structure, CFUNCTYPE,
ArgumentError, POINTER, sizeof,
- c_byte, c_ubyte, c_char, c_char_p,
+ c_byte, c_ubyte, c_char,
c_short, c_ushort, c_int, c_uint,
c_long, c_longlong, c_ulonglong, c_ulong,
c_float, c_double, c_longdouble, py_object)
self.check_type(c_char, b"x")
self.check_type(c_char, b"a")
- # disabled: would now (correctly) raise a RuntimeWarning about
- # a memory leak. A callback function cannot return a non-integral
- # C type without causing a memory leak.
- @unittest.skip('test disabled')
- def test_char_p(self):
- self.check_type(c_char_p, "abc")
- self.check_type(c_char_p, "def")
-
def test_pyobject(self):
o = ()
for o in (), [], object():
import sys
import unittest
from operator import truth
-from ctypes import (byref, sizeof, alignment, _SimpleCData,
+from ctypes import (byref, sizeof, alignment,
c_char, c_byte, c_ubyte, c_short, c_ushort, c_int, c_uint,
c_long, c_ulong, c_longlong, c_ulonglong,
c_float, c_double, c_longdouble, c_bool)
self.assertRaises(TypeError, t, "")
self.assertRaises(TypeError, t, None)
- @unittest.skip('test disabled')
- def test_valid_ranges(self):
- # invalid values of the correct type
- # raise ValueError (not OverflowError)
- for t, (l, h) in zip(unsigned_types, unsigned_ranges):
- self.assertRaises(ValueError, t, l-1)
- self.assertRaises(ValueError, t, h+1)
-
def test_from_param(self):
# the from_param class method attribute always
# returns PyCArgObject instances
a[0] = ord('?')
self.assertEqual(v.value, b'?')
- # array does not support c_bool / 't'
- @unittest.skip('test disabled')
- def test_bool_from_address(self):
- a = array.array(c_bool._type_, [True])
- v = t.from_address(a.buffer_info()[0])
- self.assertEqual(v.value, a[0])
- self.assertEqual(type(v) is t)
- a[0] = False
- self.assertEqual(v.value, a[0])
- self.assertEqual(type(v) is t)
-
def test_init(self):
# c_int() can be initialized from Python's int, and c_int.
# Not from c_long or so, which seems strange, abc should
if (hasattr(t, "__ctype_le__")):
self.assertRaises(OverflowError, t.__ctype_le__, big_int)
- @unittest.skip('test disabled')
- def test_perf(self):
- check_perf()
-
-
-class c_int_S(_SimpleCData):
- _type_ = "i"
- __slots__ = []
-
-
-def run_test(rep, msg, func, arg=None):
- items = range(rep)
- from time import perf_counter as clock
- if arg is not None:
- start = clock()
- for i in items:
- func(arg); func(arg); func(arg); func(arg); func(arg)
- stop = clock()
- else:
- start = clock()
- for i in items:
- func(); func(); func(); func(); func()
- stop = clock()
- print("%15s: %.2f us" % (msg, ((stop-start)*1e6/5/rep)))
-
-
-def check_perf():
- # Construct 5 objects
-
- REP = 200000
-
- run_test(REP, "int()", int)
- run_test(REP, "int(999)", int)
- run_test(REP, "c_int()", c_int)
- run_test(REP, "c_int(999)", c_int)
- run_test(REP, "c_int_S()", c_int_S)
- run_test(REP, "c_int_S(999)", c_int_S)
-
-# Python 2.3 -OO, win2k, P4 700 MHz:
-#
-# int(): 0.87 us
-# int(999): 0.87 us
-# c_int(): 3.35 us
-# c_int(999): 3.34 us
-# c_int_S(): 3.23 us
-# c_int_S(999): 3.24 us
-
-# Python 2.2 -OO, win2k, P4 700 MHz:
-#
-# int(): 0.89 us
-# int(999): 0.89 us
-# c_int(): 9.99 us
-# c_int(999): 10.02 us
-# c_int_S(): 9.87 us
-# c_int_S(999): 9.85 us
-
if __name__ == '__main__':
-## check_perf()
unittest.main()