mirror of
https://github.com/pybind/pybind11.git
synced 2026-03-14 20:27:47 +00:00
Propagate py::multiple_inheritance to all children (#3650)
* Add tests demonstrating smart_holder issues with multiple inheritance * Propagate C++ multiple inheritance markers to all children - Makes py::multiple_inheritance only needed in base classes hidden from pybind11
This commit is contained in:
@@ -358,3 +358,117 @@ def test_diamond_inheritance():
|
||||
assert d is d.c0().b()
|
||||
assert d is d.c1().b()
|
||||
assert d is d.c0().c1().b().c0().b()
|
||||
|
||||
|
||||
def test_pr3635_diamond_b():
|
||||
o = m.MVB()
|
||||
assert o.b == 1
|
||||
|
||||
assert o.get_b_b() == 1
|
||||
|
||||
|
||||
def test_pr3635_diamond_c():
|
||||
o = m.MVC()
|
||||
assert o.b == 1
|
||||
assert o.c == 2
|
||||
|
||||
assert o.get_b_b() == 1
|
||||
assert o.get_c_b() == 1
|
||||
|
||||
assert o.get_c_c() == 2
|
||||
|
||||
|
||||
def test_pr3635_diamond_d0():
|
||||
o = m.MVD0()
|
||||
assert o.b == 1
|
||||
assert o.c == 2
|
||||
assert o.d0 == 3
|
||||
|
||||
assert o.get_b_b() == 1
|
||||
assert o.get_c_b() == 1
|
||||
assert o.get_d0_b() == 1
|
||||
|
||||
assert o.get_c_c() == 2
|
||||
assert o.get_d0_c() == 2
|
||||
|
||||
assert o.get_d0_d0() == 3
|
||||
|
||||
|
||||
def test_pr3635_diamond_d1():
|
||||
o = m.MVD1()
|
||||
assert o.b == 1
|
||||
assert o.c == 2
|
||||
assert o.d1 == 4
|
||||
|
||||
assert o.get_b_b() == 1
|
||||
assert o.get_c_b() == 1
|
||||
assert o.get_d1_b() == 1
|
||||
|
||||
assert o.get_c_c() == 2
|
||||
assert o.get_d1_c() == 2
|
||||
|
||||
assert o.get_d1_d1() == 4
|
||||
|
||||
|
||||
def test_pr3635_diamond_e():
|
||||
o = m.MVE()
|
||||
assert o.b == 1
|
||||
assert o.c == 2
|
||||
assert o.d0 == 3
|
||||
assert o.d1 == 4
|
||||
assert o.e == 5
|
||||
|
||||
assert o.get_b_b() == 1
|
||||
assert o.get_c_b() == 1
|
||||
assert o.get_d0_b() == 1
|
||||
assert o.get_d1_b() == 1
|
||||
assert o.get_e_b() == 1
|
||||
|
||||
assert o.get_c_c() == 2
|
||||
assert o.get_d0_c() == 2
|
||||
assert o.get_d1_c() == 2
|
||||
assert o.get_e_c() == 2
|
||||
|
||||
assert o.get_d0_d0() == 3
|
||||
assert o.get_e_d0() == 3
|
||||
|
||||
assert o.get_d1_d1() == 4
|
||||
assert o.get_e_d1() == 4
|
||||
|
||||
assert o.get_e_e() == 5
|
||||
|
||||
|
||||
def test_pr3635_diamond_f():
|
||||
o = m.MVF()
|
||||
assert o.b == 1
|
||||
assert o.c == 2
|
||||
assert o.d0 == 3
|
||||
assert o.d1 == 4
|
||||
assert o.e == 5
|
||||
assert o.f == 6
|
||||
|
||||
assert o.get_b_b() == 1
|
||||
assert o.get_c_b() == 1
|
||||
assert o.get_d0_b() == 1
|
||||
assert o.get_d1_b() == 1
|
||||
assert o.get_e_b() == 1
|
||||
assert o.get_f_b() == 1
|
||||
|
||||
assert o.get_c_c() == 2
|
||||
assert o.get_d0_c() == 2
|
||||
assert o.get_d1_c() == 2
|
||||
assert o.get_e_c() == 2
|
||||
assert o.get_f_c() == 2
|
||||
|
||||
assert o.get_d0_d0() == 3
|
||||
assert o.get_e_d0() == 3
|
||||
assert o.get_f_d0() == 3
|
||||
|
||||
assert o.get_d1_d1() == 4
|
||||
assert o.get_e_d1() == 4
|
||||
assert o.get_f_d1() == 4
|
||||
|
||||
assert o.get_e_e() == 5
|
||||
assert o.get_f_e() == 5
|
||||
|
||||
assert o.get_f_f() == 6
|
||||
|
||||
Reference in New Issue
Block a user