Merge pull request #409 from jagerman/dynamic-cast-test

Added a test to detect invalid RTTI caching
This commit is contained in:
Wenzel Jakob 2016-09-12 08:17:52 +09:00 committed by GitHub
commit 591a9999c2
2 changed files with 14 additions and 1 deletions

View File

@ -77,5 +77,10 @@ test_initializer inheritance([](py::module &m) {
m.def("return_class_1", []() -> BaseClass* { return new DerivedClass1(); });
m.def("return_class_2", []() -> BaseClass* { return new DerivedClass2(); });
m.def("return_class_n", [](int n) -> BaseClass* {
if (n == 1) return new DerivedClass1();
if (n == 2) return new DerivedClass2();
return new BaseClass();
});
m.def("return_none", []() -> BaseClass* { return nullptr; });
});

View File

@ -31,8 +31,16 @@ def test_inheritance(msg):
def test_automatic_upcasting():
from pybind11_tests import return_class_1, return_class_2, return_none
from pybind11_tests import return_class_1, return_class_2, return_class_n, return_none
assert type(return_class_1()).__name__ == "DerivedClass1"
assert type(return_class_2()).__name__ == "DerivedClass2"
assert type(return_none()).__name__ == "NoneType"
# Repeat these a few times in a random order to ensure no invalid caching is applied
assert type(return_class_n(1)).__name__ == "DerivedClass1"
assert type(return_class_n(2)).__name__ == "DerivedClass2"
assert type(return_class_n(0)).__name__ == "BaseClass"
assert type(return_class_n(2)).__name__ == "DerivedClass2"
assert type(return_class_n(2)).__name__ == "DerivedClass2"
assert type(return_class_n(0)).__name__ == "BaseClass"
assert type(return_class_n(1)).__name__ == "DerivedClass1"