MCPcopy Create free account
hub / github.com/pybind/pybind11 / TEST_SUBMODULE

Function TEST_SUBMODULE

tests/test_class_sh_shared_ptr_copy_move.cpp:43–101  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

41} // namespace
42
43TEST_SUBMODULE(class_sh_shared_ptr_copy_move, m) {
44 namespace py = pybind11;
45
46 py::class_<FooShPtr, std::shared_ptr<FooShPtr>>(m, "FooShPtr")
47 .def("get_history", &FooShPtr::get_history);
48 py::classh<FooSmHld>(m, "FooSmHld").def("get_history", &FooSmHld::get_history);
49
50 auto outer = py::class_<Outer>(m, "Outer").def(py::init());
51#define MAKE_PROP(PropTyp) \
52 MAKE_PROP_FOO(ShPtr, PropTyp) \
53 MAKE_PROP_FOO(SmHld, PropTyp)
54
55#define MAKE_PROP_FOO(FooTyp, PropTyp) \
56 .def_##PropTyp(#FooTyp "_" #PropTyp "_default", &Outer::FooTyp) \
57 .def_##PropTyp( \
58 #FooTyp "_" #PropTyp "_copy", &Outer::FooTyp, py::return_value_policy::copy) \
59 .def_##PropTyp( \
60 #FooTyp "_" #PropTyp "_move", &Outer::FooTyp, py::return_value_policy::move)
61 outer MAKE_PROP(readonly) MAKE_PROP(readwrite);
62#undef MAKE_PROP_FOO
63
64#define MAKE_PROP_FOO(FooTyp, PropTyp) \
65 .def_##PropTyp(#FooTyp "_property_" #PropTyp "_default", &Outer::FooTyp) \
66 .def_property_##PropTyp(#FooTyp "_property_" #PropTyp "_copy", \
67 &Outer::get##FooTyp, \
68 py::return_value_policy::copy) \
69 .def_property_##PropTyp(#FooTyp "_property_" #PropTyp "_move", \
70 &Outer::get##FooTyp, \
71 py::return_value_policy::move)
72 outer MAKE_PROP(readonly);
73#undef MAKE_PROP_FOO
74#undef MAKE_PROP
75
76 m.def("test_ShPtr_copy", []() {
77 auto o = std::make_shared<FooShPtr>("copy");
78 auto l = py::list();
79 l.append(o);
80 return l;
81 });
82 m.def("test_SmHld_copy", []() {
83 auto o = std::make_shared<FooSmHld>("copy");
84 auto l = py::list();
85 l.append(o);
86 return l;
87 });
88
89 m.def("test_ShPtr_move", []() {
90 auto o = std::make_shared<FooShPtr>("move");
91 auto l = py::list();
92 l.append(std::move(o));
93 return l;
94 });
95 m.def("test_SmHld_move", []() {
96 auto o = std::make_shared<FooSmHld>("move");
97 auto l = py::list();
98 l.append(std::move(o));
99 return l;
100 });

Callers

nothing calls this directly

Calls 4

initFunction · 0.85
listClass · 0.85
moveFunction · 0.85
appendMethod · 0.45

Tested by

no test coverage detected