Skip to content

Commit 90e8914

Browse files
committed
Add CppDrvd2, test_PPPCCC (needs more work).
1 parent f3bb31e commit 90e8914

File tree

2 files changed

+33
-0
lines changed

2 files changed

+33
-0
lines changed

tests/test_python_multiple_inheritance.cpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,18 @@ struct CppDrvd : CppBase {
2626
int drvd_value;
2727
};
2828

29+
struct CppDrvd2 : CppBase {
30+
explicit CppDrvd2(int value) : CppBase(value), drvd2_value(value * 5) {}
31+
int get_drvd2_value() const { return drvd2_value; }
32+
void reset_drvd2_value(int new_value) { drvd2_value = new_value; }
33+
34+
int get_base_value_from_drvd2() const { return get_base_value(); }
35+
void reset_base_value_from_drvd2(int new_value) { reset_base_value(new_value); }
36+
37+
private:
38+
int drvd2_value;
39+
};
40+
2941
} // namespace test_python_multiple_inheritance
3042

3143
TEST_SUBMODULE(python_multiple_inheritance, m) {
@@ -42,4 +54,11 @@ TEST_SUBMODULE(python_multiple_inheritance, m) {
4254
.def("reset_drvd_value", &CppDrvd::reset_drvd_value)
4355
.def("get_base_value_from_drvd", &CppDrvd::get_base_value_from_drvd)
4456
.def("reset_base_value_from_drvd", &CppDrvd::reset_base_value_from_drvd);
57+
58+
py::class_<CppDrvd2, CppBase>(m, "CppDrvd2")
59+
.def(py::init<int>())
60+
.def("get_drvd2_value", &CppDrvd2::get_drvd2_value)
61+
.def("reset_drvd2_value", &CppDrvd2::reset_drvd2_value)
62+
.def("get_base_value_from_drvd2", &CppDrvd2::get_base_value_from_drvd2)
63+
.def("reset_base_value_from_drvd2", &CppDrvd2::reset_base_value_from_drvd2);
4564
}

tests/test_python_multiple_inheritance.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
# Adapted from:
22
# https://github.com/google/clif/blob/5718e4d0807fd3b6a8187dde140069120b81ecef/clif/testing/python/python_multiple_inheritance_test.py
33

4+
import pytest
5+
46
from pybind11_tests import python_multiple_inheritance as m
57

68

@@ -12,6 +14,10 @@ class PPCC(PC, m.CppDrvd):
1214
pass
1315

1416

17+
class PPPCCC(PPCC, m.CppDrvd2):
18+
pass
19+
20+
1521
def test_PC():
1622
d = PC(11)
1723
assert d.get_base_value() == 11
@@ -33,3 +39,11 @@ def test_PPCC():
3339
d.reset_base_value_from_drvd(30)
3440
assert d.get_base_value() == 30
3541
assert d.get_base_value_from_drvd() == 30
42+
43+
44+
def test_PPPCCC():
45+
with pytest.raises(
46+
TypeError,
47+
match=r"CppDrvd2\.__init__\(\) must be called when overriding __init__$",
48+
):
49+
PPPCCC(11)

0 commit comments

Comments
 (0)