6 from pybind11_tests
import call_policies
as m
7 from pybind11_tests
import ConstructorStats
10 @pytest.mark.xfail(
"env.PYPY", reason=
"sometimes comes out 1 off on PyPy", strict=
False)
12 n_inst = ConstructorStats.detail_reg_inst()
15 assert capture ==
"Allocating parent."
18 assert ConstructorStats.detail_reg_inst() == n_inst + 1
28 assert ConstructorStats.detail_reg_inst() == n_inst
29 assert capture ==
"Releasing parent."
33 assert capture ==
"Allocating parent."
35 p.addChildKeepAlive(m.Child())
36 assert ConstructorStats.detail_reg_inst() == n_inst + 2
37 assert capture ==
"Allocating child."
40 assert ConstructorStats.detail_reg_inst() == n_inst
51 n_inst = ConstructorStats.detail_reg_inst()
54 assert capture ==
"Allocating parent."
57 assert ConstructorStats.detail_reg_inst() == n_inst + 1
67 assert ConstructorStats.detail_reg_inst() == n_inst
68 assert capture ==
"Releasing parent."
72 assert capture ==
"Allocating parent."
74 p.returnChildKeepAlive()
75 assert ConstructorStats.detail_reg_inst() == n_inst + 2
76 assert capture ==
"Allocating child."
79 assert ConstructorStats.detail_reg_inst() == n_inst
90 @pytest.mark.xfail(
"env.PYPY", reason=
"_PyObject_GetDictPtr is unimplemented")
92 n_inst = ConstructorStats.detail_reg_inst()
94 p.addChildKeepAlive(m.Child())
95 assert ConstructorStats.detail_reg_inst() == n_inst + 2
100 assert ConstructorStats.detail_reg_inst() == n_inst
111 class Derived(m.Parent):
114 n_inst = ConstructorStats.detail_reg_inst()
116 p.addChildKeepAlive(m.Child())
117 assert ConstructorStats.detail_reg_inst() == n_inst + 2
122 assert ConstructorStats.detail_reg_inst() == n_inst
133 class Derived(m.Parent, m.Child):
135 m.Parent.__init__(self)
136 m.Child.__init__(self)
138 n_inst = ConstructorStats.detail_reg_inst()
140 p.addChildKeepAlive(m.Child())
142 assert ConstructorStats.detail_reg_inst() == n_inst + 3
147 assert ConstructorStats.detail_reg_inst() == n_inst
159 n_inst = ConstructorStats.detail_reg_inst()
162 assert capture ==
"Allocating parent."
164 p.returnNullChildKeepAliveChild()
165 assert ConstructorStats.detail_reg_inst() == n_inst + 1
169 assert ConstructorStats.detail_reg_inst() == n_inst
170 assert capture ==
"Releasing parent."
174 assert capture ==
"Allocating parent."
176 p.returnNullChildKeepAliveParent()
177 assert ConstructorStats.detail_reg_inst() == n_inst + 1
181 assert ConstructorStats.detail_reg_inst() == n_inst
182 assert capture ==
"Releasing parent."
186 n_inst = ConstructorStats.detail_reg_inst()
189 p = m.Parent(m.Child())
190 assert ConstructorStats.detail_reg_inst() == n_inst + 2
200 assert ConstructorStats.detail_reg_inst() == n_inst
211 assert m.unguarded_call() ==
"unguarded"
212 assert m.guarded_call() ==
"guarded"
214 assert m.multiple_guards_correct_order() ==
"guarded & guarded"
215 assert m.multiple_guards_wrong_order() ==
"unguarded & guarded"
218 assert m.with_gil() ==
"GIL held"
219 assert m.without_gil() ==
"GIL released"