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

Function TEST_SUBMODULE

tests/test_class_sh_mi_thunks.cpp:141–230  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

139} // namespace test_class_sh_mi_thunks
140
141TEST_SUBMODULE(class_sh_mi_thunks, m) {
142 using namespace test_class_sh_mi_thunks;
143
144 m.def("ptrdiff_drvd_base0", []() {
145 auto drvd = std::unique_ptr<Derived>(new Derived);
146 auto *base0 = dynamic_cast<Base0 *>(drvd.get());
147 return std::ptrdiff_t(reinterpret_cast<char *>(drvd.get())
148 - reinterpret_cast<char *>(base0));
149 });
150
151 py::classh<Base0>(m, "Base0");
152 py::classh<Base1>(m, "Base1");
153 py::classh<Derived, Base1, Base0>(m, "Derived");
154
155 m.def(
156 "get_drvd_as_base0_raw_ptr",
157 []() {
158 auto *drvd = new Derived;
159 auto *base0 = dynamic_cast<Base0 *>(drvd);
160 return base0;
161 },
162 py::return_value_policy::take_ownership);
163
164 m.def("get_drvd_as_base0_shared_ptr", []() {
165 auto drvd = std::make_shared<Derived>();
166 auto base0 = std::dynamic_pointer_cast<Base0>(drvd);
167 return base0;
168 });
169
170 m.def("get_drvd_as_base0_unique_ptr", []() {
171 auto drvd = std::unique_ptr<Derived>(new Derived);
172 auto base0 = std::unique_ptr<Base0>(std::move(drvd));
173 return base0;
174 });
175
176 m.def("vec_size_base0_raw_ptr", [](const Base0 *obj) {
177 const auto *obj_der = dynamic_cast<const Derived *>(obj);
178 if (obj_der == nullptr) {
179 return std::size_t(0);
180 }
181 return obj_der->vec.size();
182 });
183
184 m.def("vec_size_base0_shared_ptr", [](const std::shared_ptr<Base0> &obj) -> std::size_t {
185 const auto obj_der = std::dynamic_pointer_cast<Derived>(obj);
186 if (!obj_der) {
187 return std::size_t(0);
188 }
189 return obj_der->vec.size();
190 });
191
192 m.def("vec_size_base0_unique_ptr", [](std::unique_ptr<Base0> obj) -> std::size_t {
193 const auto *obj_der = dynamic_cast<const Derived *>(obj.get());
194 if (obj_der == nullptr) {
195 return std::size_t(0);
196 }
197 return obj_der->vec.size();
198 });

Callers

nothing calls this directly

Calls 4

moveFunction · 0.85
getMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected