#
typecode_to_type = {
- 'c': ctypes.c_char, 'u': ctypes.c_wchar,
- 'b': ctypes.c_byte, 'B': ctypes.c_ubyte,
- 'h': ctypes.c_short, 'H': ctypes.c_ushort,
- 'i': ctypes.c_int, 'I': ctypes.c_uint,
- 'l': ctypes.c_long, 'L': ctypes.c_ulong,
- 'f': ctypes.c_float, 'd': ctypes.c_double
+ 'c': ctypes.c_char, 'u': ctypes.c_wchar,
+ 'b': ctypes.c_byte, 'B': ctypes.c_ubyte,
+ 'h': ctypes.c_short, 'H': ctypes.c_ushort,
+ 'i': ctypes.c_int, 'I': ctypes.c_uint,
+ 'l': ctypes.c_long, 'L': ctypes.c_ulong,
+ 'q': ctypes.c_longlong, 'Q': ctypes.c_ulonglong,
+ 'f': ctypes.c_float, 'd': ctypes.c_double
}
#
#
try:
- from ctypes import Structure, c_int, c_double
+ from ctypes import Structure, c_int, c_double, c_longlong
except ImportError:
Structure = object
c_int = c_double = None
('i', 4343, 24234),
('d', 3.625, -4.25),
('h', -232, 234),
+ ('q', 2 ** 33, 2 ** 34),
('c', latin('x'), latin('y'))
]
class _Foo(Structure):
_fields_ = [
('x', c_int),
- ('y', c_double)
+ ('y', c_double),
+ ('z', c_longlong,)
]
class _TestSharedCTypes(BaseTestCase):
self.skipTest("requires multiprocessing.sharedctypes")
@classmethod
- def _double(cls, x, y, foo, arr, string):
+ def _double(cls, x, y, z, foo, arr, string):
x.value *= 2
y.value *= 2
+ z.value *= 2
foo.x *= 2
foo.y *= 2
string.value *= 2
def test_sharedctypes(self, lock=False):
x = Value('i', 7, lock=lock)
y = Value(c_double, 1.0/3.0, lock=lock)
+ z = Value(c_longlong, 2 ** 33, lock=lock)
foo = Value(_Foo, 3, 2, lock=lock)
arr = self.Array('d', list(range(10)), lock=lock)
string = self.Array('c', 20, lock=lock)
string.value = latin('hello')
- p = self.Process(target=self._double, args=(x, y, foo, arr, string))
+ p = self.Process(target=self._double, args=(x, y, z, foo, arr, string))
p.daemon = True
p.start()
p.join()
self.assertEqual(x.value, 14)
self.assertAlmostEqual(y.value, 2.0/3.0)
+ self.assertEqual(z.value, 2 ** 34)
self.assertEqual(foo.x, 6)
self.assertAlmostEqual(foo.y, 4.0)
for i in range(10):
self.test_sharedctypes(lock=True)
def test_copy(self):
- foo = _Foo(2, 5.0)
+ foo = _Foo(2, 5.0, 2 ** 33)
bar = copy(foo)
foo.x = 0
foo.y = 0
+ foo.z = 0
self.assertEqual(bar.x, 2)
self.assertAlmostEqual(bar.y, 5.0)
+ self.assertEqual(bar.z, 2 ** 33)
#
#