5from pybind11_tests
import ConstructorStats
6from pybind11_tests
import call_policies
as m
9@pytest.mark.xfail("env.PYPY", reason="sometimes comes out 1 off on PyPy", strict=False)
11 n_inst = ConstructorStats.detail_reg_inst()
14 assert capture ==
"Allocating parent."
17 assert ConstructorStats.detail_reg_inst() == n_inst + 1
27 assert ConstructorStats.detail_reg_inst() == n_inst
28 assert capture ==
"Releasing parent."
32 assert capture ==
"Allocating parent."
34 p.addChildKeepAlive(m.Child())
35 assert ConstructorStats.detail_reg_inst() == n_inst + 2
36 assert capture ==
"Allocating child."
39 assert ConstructorStats.detail_reg_inst() == n_inst
50 assert ConstructorStats.detail_reg_inst() == n_inst + 2
53 assert ConstructorStats.detail_reg_inst() == n_inst + 2
55 assert ConstructorStats.detail_reg_inst() == n_inst
57 with pytest.raises(RuntimeError)
as excinfo:
59 assert str(excinfo.value) ==
"Could not activate keep_alive!"
63 n_inst = ConstructorStats.detail_reg_inst()
66 assert capture ==
"Allocating parent."
69 assert ConstructorStats.detail_reg_inst() == n_inst + 1
79 assert ConstructorStats.detail_reg_inst() == n_inst
80 assert capture ==
"Releasing parent."
84 assert capture ==
"Allocating parent."
86 p.returnChildKeepAlive()
87 assert ConstructorStats.detail_reg_inst() == n_inst + 2
88 assert capture ==
"Allocating child."
91 assert ConstructorStats.detail_reg_inst() == n_inst
101 assert ConstructorStats.detail_reg_inst() == n_inst + 1
103 m.Parent.staticFunction(p)
104 assert ConstructorStats.detail_reg_inst() == n_inst + 2
105 assert capture ==
"Allocating child."
108 assert ConstructorStats.detail_reg_inst() == n_inst
119@pytest.mark.xfail("env.PYPY", reason="_PyObject_GetDictPtr is unimplemented")
121 n_inst = ConstructorStats.detail_reg_inst()
123 p.addChildKeepAlive(m.Child())
124 assert ConstructorStats.detail_reg_inst() == n_inst + 2
129 assert ConstructorStats.detail_reg_inst() == n_inst
140 class Derived(m.Parent):
143 n_inst = ConstructorStats.detail_reg_inst()
145 p.addChildKeepAlive(m.Child())
146 assert ConstructorStats.detail_reg_inst() == n_inst + 2
151 assert ConstructorStats.detail_reg_inst() == n_inst
162 class Derived(m.Parent, m.Child):
164 m.Parent.__init__(self)
165 m.Child.__init__(self)
167 n_inst = ConstructorStats.detail_reg_inst()
169 p.addChildKeepAlive(m.Child())
171 assert ConstructorStats.detail_reg_inst() == n_inst + 3
176 assert ConstructorStats.detail_reg_inst() == n_inst
188 n_inst = ConstructorStats.detail_reg_inst()
191 assert capture ==
"Allocating parent."
193 p.returnNullChildKeepAliveChild()
194 assert ConstructorStats.detail_reg_inst() == n_inst + 1
198 assert ConstructorStats.detail_reg_inst() == n_inst
199 assert capture ==
"Releasing parent."
203 assert capture ==
"Allocating parent."
205 p.returnNullChildKeepAliveParent()
206 assert ConstructorStats.detail_reg_inst() == n_inst + 1
210 assert ConstructorStats.detail_reg_inst() == n_inst
211 assert capture ==
"Releasing parent."
215 n_inst = ConstructorStats.detail_reg_inst()
218 p = m.Parent(m.Child())
219 assert ConstructorStats.detail_reg_inst() == n_inst + 2
229 assert ConstructorStats.detail_reg_inst() == n_inst
240 assert m.unguarded_call() ==
"unguarded"
241 assert m.guarded_call() ==
"guarded"
243 assert m.multiple_guards_correct_order() ==
"guarded & guarded"
244 assert m.multiple_guards_wrong_order() ==
"unguarded & guarded"
247 assert m.with_gil() ==
"GIL held"
248 assert m.without_gil() ==
"GIL released"
bool hasattr(handle obj, handle name)
def test_alive_gc(capture)
def test_keep_alive_constructor(capture)
def test_keep_alive_return_value(capture)
def test_alive_gc_derived(capture)
def test_keep_alive_argument(capture)
def test_return_none(capture)
def test_alive_gc_multi_derived(capture)