2 from pybind11_tests
import smart_ptr
as m
3 from pybind11_tests
import ConstructorStats
8 for i, o
in enumerate([m.make_object_1(), m.make_object_2(), m.MyObject1(3)], start=1):
9 assert o.getRefCount() == 1
15 assert capture ==
"MyObject1[{i}]\n".
format(i=i) * 4
17 for i, o
in enumerate([m.make_myobject1_1(), m.make_myobject1_2(), m.MyObject1(6), 7],
26 m.print_myobject1_1(o)
27 m.print_myobject1_2(o)
28 m.print_myobject1_3(o)
29 m.print_myobject1_4(o)
30 assert capture ==
"MyObject1[{i}]\n".
format(i=i) * (4
if isinstance(o, int)
else 8)
33 assert cstats.alive() == 0
34 expected_values = [
'MyObject1[{}]'.
format(i)
for i
in range(1, 7)] + [
'MyObject1[7]'] * 4
35 assert cstats.values() == expected_values
36 assert cstats.default_constructions == 0
37 assert cstats.copy_constructions == 0
39 assert cstats.copy_assignments == 0
40 assert cstats.move_assignments == 0
43 for i, o
in zip([8, 6, 7], [m.MyObject2(8), m.make_myobject2_1(), m.make_myobject2_2()]):
46 m.print_myobject2_1(o)
47 m.print_myobject2_2(o)
48 m.print_myobject2_3(o)
49 m.print_myobject2_4(o)
50 assert capture ==
"MyObject2[{i}]\n".
format(i=i) * 4
53 assert cstats.alive() == 1
55 assert cstats.alive() == 0
56 assert cstats.values() == [
'MyObject2[8]',
'MyObject2[6]',
'MyObject2[7]']
57 assert cstats.default_constructions == 0
58 assert cstats.copy_constructions == 0
60 assert cstats.copy_assignments == 0
61 assert cstats.move_assignments == 0
64 for i, o
in zip([9, 8, 9], [m.MyObject3(9), m.make_myobject3_1(), m.make_myobject3_2()]):
67 m.print_myobject3_1(o)
68 m.print_myobject3_2(o)
69 m.print_myobject3_3(o)
70 m.print_myobject3_4(o)
71 assert capture ==
"MyObject3[{i}]\n".
format(i=i) * 4
74 assert cstats.alive() == 1
76 assert cstats.alive() == 0
77 assert cstats.values() == [
'MyObject3[9]',
'MyObject3[8]',
'MyObject3[9]']
78 assert cstats.default_constructions == 0
79 assert cstats.copy_constructions == 0
81 assert cstats.copy_assignments == 0
82 assert cstats.move_assignments == 0
86 assert cstats.alive() == 0
87 assert cstats.values() == []
88 assert cstats.default_constructions == 10
89 assert cstats.copy_constructions == 0
91 assert cstats.copy_assignments == 0
92 assert cstats.move_assignments == 0
95 cstats = m.cstats_ref()
96 assert cstats.alive() == 0
97 assert cstats.values() == [
'from pointer'] * 10
98 assert cstats.default_constructions == 30
99 assert cstats.copy_constructions == 12
101 assert cstats.copy_assignments == 30
102 assert cstats.move_assignments == 0
106 assert m.test_object1_refcounting()
113 assert cstats.alive() == 1
115 assert cstats.alive() == 1
122 assert cstats.alive() == 1
124 assert cstats.alive() == 1
131 assert cstats4a.alive() == 2
133 assert cstats4b.alive() == 1
135 assert cstats4a.alive() == 1
136 assert cstats4b.alive() == 0
143 assert cstats.alive() == 1
145 assert cstats.alive() == 0
151 assert stats.alive() == 2
154 assert stats.alive() == 2
155 assert s.set_ref(ref)
156 with pytest.raises(RuntimeError)
as excinfo:
157 assert s.set_holder(ref)
158 assert "Unable to cast from non-held to held instance" in str(excinfo.value)
161 assert stats.alive() == 3
162 assert s.set_ref(copy)
163 assert s.set_holder(copy)
165 holder_ref = s.holder_ref
166 assert stats.alive() == 3
167 assert s.set_ref(holder_ref)
168 assert s.set_holder(holder_ref)
170 holder_copy = s.holder_copy
171 assert stats.alive() == 3
172 assert s.set_ref(holder_copy)
173 assert s.set_holder(holder_copy)
175 del ref, copy, holder_ref, holder_copy, s
176 assert stats.alive() == 0
180 s = m.SharedFromThisRef()
182 assert stats.alive() == 2
185 assert stats.alive() == 2
186 assert s.set_ref(ref)
187 assert s.set_holder(ref)
190 assert stats.alive() == 2
191 assert s.set_ref(bad_wp)
192 with pytest.raises(RuntimeError)
as excinfo:
193 assert s.set_holder(bad_wp)
194 assert "Unable to cast from non-held to held instance" in str(excinfo.value)
197 assert stats.alive() == 3
198 assert s.set_ref(copy)
199 assert s.set_holder(copy)
201 holder_ref = s.holder_ref
202 assert stats.alive() == 3
203 assert s.set_ref(holder_ref)
204 assert s.set_holder(holder_ref)
206 holder_copy = s.holder_copy
207 assert stats.alive() == 3
208 assert s.set_ref(holder_copy)
209 assert s.set_holder(holder_copy)
211 del ref, bad_wp, copy, holder_ref, holder_copy, s
212 assert stats.alive() == 0
214 z = m.SharedFromThisVirt.get()
215 y = m.SharedFromThisVirt.get()
220 a = m.TypeWithMoveOnlyHolder.make()
222 assert stats.alive() == 1
224 assert stats.alive() == 0
229 a = m.TypeForHolderWithAddressOf.make()
236 assert stats.alive() == 1
238 np = m.TypeForHolderWithAddressOf.make()
239 assert stats.alive() == 2
241 assert stats.alive() == 1
243 assert stats.alive() == 0
245 b = m.TypeForHolderWithAddressOf.make()
247 assert b.get()
is c.get()
248 assert stats.alive() == 1
251 assert stats.alive() == 1
254 assert stats.alive() == 0
258 a = m.TypeForMoveOnlyHolderWithAddressOf.make()
262 assert stats.alive() == 1
268 assert stats.alive() == 0
272 instance = m.HeldByDefaultHolder()
273 with pytest.raises(RuntimeError)
as excinfo:
274 m.HeldByDefaultHolder.load_shared_ptr(instance)
275 assert "Unable to load a custom holder type from a " \
276 "default-holder instance" in str(excinfo.value)
280 """#187: issue involving std::shared_ptr<> return value policy & garbage collection""" 283 el.add(m.ElementA(i))
285 for i, v
in enumerate(el.get()):
286 assert i == v.value()
def test_shared_ptr_and_references()
def test_smart_ptr_refcounting()
def test_smart_ptr(capture)
static ConstructorStats & get(std::type_index type)
def test_smart_ptr_from_default()
def test_unique_nodelete4a()
auto format(const std::locale &loc, const CharT *fmt, const Streamable &tp) -> decltype(to_stream(std::declval< std::basic_ostream< CharT > &>(), fmt, tp), std::basic_string< CharT >
def test_holder_with_addressof_operator()
def test_move_only_holder_with_addressof_operator()
return isinstance(obj, type)
def test_move_only_holder()
def test_shared_ptr_from_this_and_references()
def test_unique_deleter()
void print(Args &&...args)
def test_unique_nodelete()