003 File Manager
Current Path:
/usr/local/lib/python3.8/ctypes/test
usr
/
local
/
lib
/
python3.8
/
ctypes
/
test
/
📁
..
📄
__init__.py
(399 B)
📄
__main__.py
(68 B)
📁
__pycache__
📄
test_anon.py
(2.48 KB)
📄
test_array_in_pointer.py
(1.7 KB)
📄
test_arrays.py
(7.33 KB)
📄
test_as_parameter.py
(6.76 KB)
📄
test_bitfields.py
(9.98 KB)
📄
test_buffers.py
(2.55 KB)
📄
test_bytes.py
(1.94 KB)
📄
test_byteswap.py
(11.14 KB)
📄
test_callbacks.py
(10.33 KB)
📄
test_cast.py
(3.64 KB)
📄
test_cfuncs.py
(7.5 KB)
📄
test_checkretval.py
(968 B)
📄
test_delattr.py
(533 B)
📄
test_errno.py
(2.12 KB)
📄
test_find.py
(4.33 KB)
📄
test_frombuffer.py
(5.09 KB)
📄
test_funcptr.py
(3.93 KB)
📄
test_functions.py
(12.26 KB)
📄
test_incomplete.py
(1023 B)
📄
test_init.py
(1.01 KB)
📄
test_internals.py
(2.57 KB)
📄
test_keeprefs.py
(3.96 KB)
📄
test_libc.py
(1005 B)
📄
test_loading.py
(6.91 KB)
📄
test_macholib.py
(2.07 KB)
📄
test_memfunctions.py
(3.22 KB)
📄
test_numbers.py
(9.3 KB)
📄
test_objects.py
(1.64 KB)
📄
test_parameters.py
(9.35 KB)
📄
test_pep3118.py
(8.32 KB)
📄
test_pickling.py
(2.17 KB)
📄
test_pointers.py
(7.07 KB)
📄
test_prototypes.py
(6.68 KB)
📄
test_python_api.py
(2.8 KB)
📄
test_random_things.py
(2.77 KB)
📄
test_refcounts.py
(2.52 KB)
📄
test_repr.py
(842 B)
📄
test_returnfuncptrs.py
(2.83 KB)
📄
test_simplesubclasses.py
(1.26 KB)
📄
test_sizes.py
(804 B)
📄
test_slicing.py
(5.88 KB)
📄
test_stringptr.py
(2.48 KB)
📄
test_strings.py
(7.13 KB)
📄
test_struct_fields.py
(2.36 KB)
📄
test_structures.py
(26.57 KB)
📄
test_unaligned_structures.py
(1.11 KB)
📄
test_unicode.py
(1.95 KB)
📄
test_values.py
(3.78 KB)
📄
test_varsize_struct.py
(1.8 KB)
📄
test_win32.py
(4.91 KB)
📄
test_wintypes.py
(1.36 KB)
Editing: test_pep3118.py
import unittest from ctypes import * import re, sys if sys.byteorder == "little": THIS_ENDIAN = "<" OTHER_ENDIAN = ">" else: THIS_ENDIAN = ">" OTHER_ENDIAN = "<" def normalize(format): # Remove current endian specifier and white space from a format # string if format is None: return "" format = format.replace(OTHER_ENDIAN, THIS_ENDIAN) return re.sub(r"\s", "", format) class Test(unittest.TestCase): def test_native_types(self): for tp, fmt, shape, itemtp in native_types: ob = tp() v = memoryview(ob) try: self.assertEqual(normalize(v.format), normalize(fmt)) if shape: self.assertEqual(len(v), shape[0]) else: self.assertEqual(len(v) * sizeof(itemtp), sizeof(ob)) self.assertEqual(v.itemsize, sizeof(itemtp)) self.assertEqual(v.shape, shape) # XXX Issue #12851: PyCData_NewGetBuffer() must provide strides # if requested. memoryview currently reconstructs missing # stride information, so this assert will fail. # self.assertEqual(v.strides, ()) # they are always read/write self.assertFalse(v.readonly) if v.shape: n = 1 for dim in v.shape: n = n * dim self.assertEqual(n * v.itemsize, len(v.tobytes())) except: # so that we can see the failing type print(tp) raise def test_endian_types(self): for tp, fmt, shape, itemtp in endian_types: ob = tp() v = memoryview(ob) try: self.assertEqual(v.format, fmt) if shape: self.assertEqual(len(v), shape[0]) else: self.assertEqual(len(v) * sizeof(itemtp), sizeof(ob)) self.assertEqual(v.itemsize, sizeof(itemtp)) self.assertEqual(v.shape, shape) # XXX Issue #12851 # self.assertEqual(v.strides, ()) # they are always read/write self.assertFalse(v.readonly) if v.shape: n = 1 for dim in v.shape: n = n * dim self.assertEqual(n, len(v)) except: # so that we can see the failing type print(tp) raise # define some structure classes class Point(Structure): _fields_ = [("x", c_long), ("y", c_long)] class PackedPoint(Structure): _pack_ = 2 _fields_ = [("x", c_long), ("y", c_long)] class Point2(Structure): pass Point2._fields_ = [("x", c_long), ("y", c_long)] class EmptyStruct(Structure): _fields_ = [] class aUnion(Union): _fields_ = [("a", c_int)] class StructWithArrays(Structure): _fields_ = [("x", c_long * 3 * 2), ("y", Point * 4)] class Incomplete(Structure): pass class Complete(Structure): pass PComplete = POINTER(Complete) Complete._fields_ = [("a", c_long)] ################################################################ # # This table contains format strings as they look on little endian # machines. The test replaces '<' with '>' on big endian machines. # # Platform-specific type codes s_bool = {1: '?', 2: 'H', 4: 'L', 8: 'Q'}[sizeof(c_bool)] s_short = {2: 'h', 4: 'l', 8: 'q'}[sizeof(c_short)] s_ushort = {2: 'H', 4: 'L', 8: 'Q'}[sizeof(c_ushort)] s_int = {2: 'h', 4: 'i', 8: 'q'}[sizeof(c_int)] s_uint = {2: 'H', 4: 'I', 8: 'Q'}[sizeof(c_uint)] s_long = {4: 'l', 8: 'q'}[sizeof(c_long)] s_ulong = {4: 'L', 8: 'Q'}[sizeof(c_ulong)] s_longlong = "q" s_ulonglong = "Q" s_float = "f" s_double = "d" s_longdouble = "g" # Alias definitions in ctypes/__init__.py if c_int is c_long: s_int = s_long if c_uint is c_ulong: s_uint = s_ulong if c_longlong is c_long: s_longlong = s_long if c_ulonglong is c_ulong: s_ulonglong = s_ulong if c_longdouble is c_double: s_longdouble = s_double native_types = [ # type format shape calc itemsize ## simple types (c_char, "<c", (), c_char), (c_byte, "<b", (), c_byte), (c_ubyte, "<B", (), c_ubyte), (c_short, "<" + s_short, (), c_short), (c_ushort, "<" + s_ushort, (), c_ushort), (c_int, "<" + s_int, (), c_int), (c_uint, "<" + s_uint, (), c_uint), (c_long, "<" + s_long, (), c_long), (c_ulong, "<" + s_ulong, (), c_ulong), (c_longlong, "<" + s_longlong, (), c_longlong), (c_ulonglong, "<" + s_ulonglong, (), c_ulonglong), (c_float, "<f", (), c_float), (c_double, "<d", (), c_double), (c_longdouble, "<" + s_longdouble, (), c_longdouble), (c_bool, "<" + s_bool, (), c_bool), (py_object, "<O", (), py_object), ## pointers (POINTER(c_byte), "&<b", (), POINTER(c_byte)), (POINTER(POINTER(c_long)), "&&<" + s_long, (), POINTER(POINTER(c_long))), ## arrays and pointers (c_double * 4, "<d", (4,), c_double), (c_float * 4 * 3 * 2, "<f", (2,3,4), c_float), (POINTER(c_short) * 2, "&<" + s_short, (2,), POINTER(c_short)), (POINTER(c_short) * 2 * 3, "&<" + s_short, (3,2,), POINTER(c_short)), (POINTER(c_short * 2), "&(2)<" + s_short, (), POINTER(c_short)), ## structures and unions (Point, "T{<l:x:<l:y:}".replace('l', s_long), (), Point), # packed structures do not implement the pep (PackedPoint, "B", (), PackedPoint), (Point2, "T{<l:x:<l:y:}".replace('l', s_long), (), Point2), (EmptyStruct, "T{}", (), EmptyStruct), # the pep doesn't support unions (aUnion, "B", (), aUnion), # structure with sub-arrays (StructWithArrays, "T{(2,3)<l:x:(4)T{<l:x:<l:y:}:y:}".replace('l', s_long), (), StructWithArrays), (StructWithArrays * 3, "T{(2,3)<l:x:(4)T{<l:x:<l:y:}:y:}".replace('l', s_long), (3,), StructWithArrays), ## pointer to incomplete structure (Incomplete, "B", (), Incomplete), (POINTER(Incomplete), "&B", (), POINTER(Incomplete)), # 'Complete' is a structure that starts incomplete, but is completed after the # pointer type to it has been created. (Complete, "T{<l:a:}".replace('l', s_long), (), Complete), # Unfortunately the pointer format string is not fixed... (POINTER(Complete), "&B", (), POINTER(Complete)), ## other # function signatures are not implemented (CFUNCTYPE(None), "X{}", (), CFUNCTYPE(None)), ] class BEPoint(BigEndianStructure): _fields_ = [("x", c_long), ("y", c_long)] class LEPoint(LittleEndianStructure): _fields_ = [("x", c_long), ("y", c_long)] ################################################################ # # This table contains format strings as they really look, on both big # and little endian machines. # endian_types = [ (BEPoint, "T{>l:x:>l:y:}".replace('l', s_long), (), BEPoint), (LEPoint, "T{<l:x:<l:y:}".replace('l', s_long), (), LEPoint), (POINTER(BEPoint), "&T{>l:x:>l:y:}".replace('l', s_long), (), POINTER(BEPoint)), (POINTER(LEPoint), "&T{<l:x:<l:y:}".replace('l', s_long), (), POINTER(LEPoint)), ] if __name__ == "__main__": unittest.main()
Upload File
Create Folder