Move reference_wrapper test from test_issues to test_python_types

test_issues is deprecated, and the following commit adds other, related
reference_wrapper tests.
This commit is contained in:
Jason Rhinelander 2017-05-12 13:11:08 -04:00
parent 005fde6a7f
commit 7cdf9f1a68
4 changed files with 31 additions and 21 deletions

View File

@ -117,19 +117,6 @@ void init_issues(py::module &m) {
.def(py::init<int>())
.def("__repr__", [](const Placeholder &p) { return "Placeholder[" + std::to_string(p.i) + "]"; });
// #171: Can't return reference wrappers (or STL datastructures containing them)
m2.def("return_vec_of_reference_wrapper", [](std::reference_wrapper<Placeholder> p4) {
Placeholder *p1 = new Placeholder{1};
Placeholder *p2 = new Placeholder{2};
Placeholder *p3 = new Placeholder{3};
std::vector<std::reference_wrapper<Placeholder>> v;
v.push_back(std::ref(*p1));
v.push_back(std::ref(*p2));
v.push_back(std::ref(*p3));
v.push_back(p4);
return v;
});
// #181: iterator passthrough did not compile
m2.def("iterator_passthrough", [](py::iterator s) -> py::iterator {
return py::make_iterator(std::begin(s), std::end(s));

View File

@ -32,14 +32,6 @@ def test_dispatch_issue(msg):
assert dispatch_issue_go(b) == "Yay.."
def test_reference_wrapper():
"""#171: Can't return reference wrappers (or STL data structures containing them)"""
from pybind11_tests.issues import Placeholder, return_vec_of_reference_wrapper
assert str(return_vec_of_reference_wrapper(Placeholder(4))) == \
"[Placeholder[1], Placeholder[2], Placeholder[3], Placeholder[4]]"
def test_iterator_passthrough():
"""#181: iterator passthrough did not compile"""
from pybind11_tests.issues import iterator_passthrough

View File

@ -560,6 +560,25 @@ test_initializer python_types([](py::module &m) {
m.def("load_nullptr_t", [](std::nullptr_t) {}); // not useful, but it should still compile
m.def("cast_nullptr_t", []() { return std::nullptr_t{}; });
struct IntWrapper { int i; IntWrapper(int i) : i(i) { } };
py::class_<IntWrapper>(m, "IntWrapper")
.def(py::init<int>())
.def("__repr__", [](const IntWrapper &p) { return "IntWrapper[" + std::to_string(p.i) + "]"; });
// #171: Can't return reference wrappers (or STL datastructures containing them)
m.def("return_vec_of_reference_wrapper", [](std::reference_wrapper<IntWrapper> p4) {
IntWrapper *p1 = new IntWrapper{1};
IntWrapper *p2 = new IntWrapper{2};
IntWrapper *p3 = new IntWrapper{3};
std::vector<std::reference_wrapper<IntWrapper>> v;
v.push_back(std::ref(*p1));
v.push_back(std::ref(*p2));
v.push_back(std::ref(*p3));
v.push_back(p4);
return v;
});
});
#if defined(_MSC_VER)

View File

@ -606,3 +606,15 @@ def test_void_caster():
assert m.load_nullptr_t(None) is None
assert m.cast_nullptr_t() is None
def test_reference_wrapper():
"""std::reference_wrapper<T> tests.
#171: Can't return reference wrappers (or STL data structures containing them)
"""
from pybind11_tests import IntWrapper, return_vec_of_reference_wrapper
# 171:
assert str(return_vec_of_reference_wrapper(IntWrapper(4))) == \
"[IntWrapper[1], IntWrapper[2], IntWrapper[3], IntWrapper[4]]"