Browse Source

test: run pytest under Python devmode (#5715)

* test: run pytest under Python devmode

* test: skip segfault bug with 3.14.0b1/2

* test: skip segfault bug with 3.14.0b1/2

* test: unset CMAKE_BUILD_PARALLEL_LEVEL
pull/5720/head
Xuehai Pan 1 month ago committed by GitHub
parent
commit
6c5d25aae2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 1
      .github/workflows/ci.yml
  2. 10
      .github/workflows/reusable-standard.yml
  3. 2
      tests/conftest.py
  4. 18
      tests/test_methods_and_attributes.py
  5. 8
      tests/test_pickling.py

1
.github/workflows/ci.yml

@ -16,6 +16,7 @@ concurrency: @@ -16,6 +16,7 @@ concurrency:
cancel-in-progress: true
env:
PYTHONDEVMODE: 1
PIP_BREAK_SYSTEM_PACKAGES: 1
PIP_ONLY_BINARY: numpy
FORCE_COLOR: 3

10
.github/workflows/reusable-standard.yml

@ -14,6 +14,16 @@ on: @@ -14,6 +14,16 @@ on:
required: true
type: string
env:
PYTHONDEVMODE: 1
PIP_BREAK_SYSTEM_PACKAGES: 1
PIP_ONLY_BINARY: numpy
FORCE_COLOR: 3
PYTEST_TIMEOUT: 300
# For cmake:
VERBOSE: 1
CMAKE_COLOR_DIAGNOSTICS: 1
jobs:
standard:
name: 🧪

2
tests/conftest.py

@ -206,6 +206,8 @@ def gc_collect(): @@ -206,6 +206,8 @@ def gc_collect():
gc.collect()
gc.collect()
gc.collect()
gc.collect()
gc.collect()
def pytest_configure():

18
tests/test_methods_and_attributes.py

@ -305,11 +305,9 @@ def test_property_rvalue_policy(): @@ -305,11 +305,9 @@ def test_property_rvalue_policy():
# https://foss.heptapod.net/pypy/pypy/-/issues/2447
@pytest.mark.xfail("env.PYPY")
@pytest.mark.xfail(
sys.version_info == (3, 14, 0, "beta", 1)
or sys.version_info == (3, 14, 0, "beta", 2),
reason="3.14.0b1/2 bug: https://github.com/python/cpython/issues/133912",
strict=True,
@pytest.mark.skipif(
sys.version_info in ((3, 14, 0, "beta", 1), (3, 14, 0, "beta", 2)),
reason="3.14.0b1/2 managed dict bug: https://github.com/python/cpython/issues/133912",
)
def test_dynamic_attributes():
instance = m.DynamicClass()
@ -337,25 +335,31 @@ def test_dynamic_attributes(): @@ -337,25 +335,31 @@ def test_dynamic_attributes():
cstats = ConstructorStats.get(m.DynamicClass)
assert cstats.alive() == 1
del instance
pytest.gc_collect()
assert cstats.alive() == 0
# Derived classes should work as well
class PythonDerivedDynamicClass(m.DynamicClass):
pass
for cls in m.CppDerivedDynamicClass, PythonDerivedDynamicClass:
for cls in (m.CppDerivedDynamicClass, PythonDerivedDynamicClass):
derived = cls()
derived.foobar = 100
assert derived.foobar == 100
assert cstats.alive() == 1
del derived
pytest.gc_collect()
assert cstats.alive() == 0
# https://foss.heptapod.net/pypy/pypy/-/issues/2447
@pytest.mark.xfail("env.PYPY")
@pytest.mark.skipif("env.GRAALPY", reason="Cannot reliably trigger GC")
@pytest.mark.skipif(
sys.version_info in ((3, 14, 0, "beta", 1), (3, 14, 0, "beta", 2)),
reason="3.14.0b1/2 managed dict bug: https://github.com/python/cpython/issues/133912",
)
def test_cyclic_gc():
# One object references itself
instance = m.DynamicClass()
@ -364,6 +368,7 @@ def test_cyclic_gc(): @@ -364,6 +368,7 @@ def test_cyclic_gc():
cstats = ConstructorStats.get(m.DynamicClass)
assert cstats.alive() == 1
del instance
pytest.gc_collect()
assert cstats.alive() == 0
# Two object reference each other
@ -374,6 +379,7 @@ def test_cyclic_gc(): @@ -374,6 +379,7 @@ def test_cyclic_gc():
assert cstats.alive() == 2
del i1, i2
pytest.gc_collect()
assert cstats.alive() == 0

8
tests/test_pickling.py

@ -68,11 +68,9 @@ def test_roundtrip(cls_name): @@ -68,11 +68,9 @@ def test_roundtrip(cls_name):
[
pytest.param(
"PickleableWithDict",
marks=pytest.mark.xfail(
sys.version_info == (3, 14, 0, "beta", 1)
or sys.version_info == (3, 14, 0, "beta", 2),
reason="3.14.0b1/2 bug: https://github.com/python/cpython/issues/133912",
strict=True,
marks=pytest.mark.skipif(
sys.version_info in ((3, 14, 0, "beta", 1), (3, 14, 0, "beta", 2)),
reason="3.14.0b1/2 managed dict bug: https://github.com/python/cpython/issues/133912",
),
),
"PickleableWithDictNew",

Loading…
Cancel
Save