Skip to content

Commit

Permalink
pythongh-105751, test_ctypes: Remove disabled tests (python#105826)
Browse files Browse the repository at this point in the history
* The following tests were disabled since the initial ctypes commit
  in 2006, commit babddfc:

  * Callbacks.test_char_p()
  * DeletePointerTestCase.test_X()
  * NumberTestCase.test_perf()
  * StructureTestCase.test_subclass_creation()
  * Tests.test_X() of test_byteswap

* NumberTestCase.test_bool_from_address() was disabled in 2007 by
  commit 5dc4fe0.
* Remove check_perf() and run_test() of test_numbers.
  • Loading branch information
vstinner authored Jun 15, 2023
1 parent 09ce8c3 commit 8f10140
Show file tree
Hide file tree
Showing 5 changed files with 2 additions and 131 deletions.
8 changes: 0 additions & 8 deletions Lib/test/test_ctypes/test_byteswap.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,14 +25,6 @@ def bin(s):
# For Structures and Unions, these types are created on demand.

class Test(unittest.TestCase):
@unittest.skip('test disabled')
def test_X(self):
print(sys.byteorder, file=sys.stderr)
for i in range(32):
bits = BITS()
setattr(bits, "i%s" % i, 1)
dump(bits)

def test_slots(self):
class BigPoint(BigEndianStructure):
__slots__ = ()
Expand Down
10 changes: 1 addition & 9 deletions Lib/test/test_ctypes/test_callbacks.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
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)
Expand Down Expand Up @@ -92,14 +92,6 @@ def test_char(self):
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():
Expand Down
28 changes: 0 additions & 28 deletions Lib/test/test_ctypes/test_keeprefs.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
import gc
import sys
import unittest
from ctypes import (Structure, POINTER, pointer, _pointer_type_cache,
c_char_p, c_int)
Expand Down Expand Up @@ -101,32 +99,6 @@ def test_p_cint(self):
self.assertEqual(x._objects, {'1': i})


class DeletePointerTestCase(unittest.TestCase):
@unittest.skip('test disabled')
def test_X(self):
class X(Structure):
_fields_ = [("p", POINTER(c_char_p))]
x = X()
i = c_char_p("abc def")
print("2?", sys.getrefcount(i))
x.p = pointer(i)
print("3?", sys.getrefcount(i))
for i in range(320):
c_int(99)
x.p[0]
print(x.p[0])
gc.collect()
for i in range(320):
c_int(99)
x.p[0]
print(x.p[0])
print(x.p.contents)

x.p[0] = "spam spam"
print("+" * 42)
print(x._objects)


class PointerToStructure(unittest.TestCase):
def test(self):
class POINT(Structure):
Expand Down
78 changes: 1 addition & 77 deletions Lib/test/test_ctypes/test_numbers.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
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)
Expand Down Expand Up @@ -70,14 +70,6 @@ def test_typeerror(self):
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
Expand Down Expand Up @@ -188,17 +180,6 @@ def test_char_from_address(self):
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
Expand All @@ -214,63 +195,6 @@ def test_float_overflow(self):
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()
9 changes: 0 additions & 9 deletions Lib/test/test_ctypes/test_structures.py
Original file line number Diff line number Diff line change
Expand Up @@ -357,15 +357,6 @@ def get_except(self, func, *args):
except Exception as detail:
return detail.__class__, str(detail)

@unittest.skip('test disabled')
def test_subclass_creation(self):
meta = type(Structure)
# same as 'class X(Structure): pass'
# fails, since we need either a _fields_ or a _abstract_ attribute
cls, msg = self.get_except(meta, "X", (Structure,), {})
self.assertEqual((cls, msg),
(AttributeError, "class must define a '_fields_' attribute"))

def test_abstract_class(self):
class X(Structure):
_abstract_ = "something"
Expand Down

0 comments on commit 8f10140

Please sign in to comment.