test_modules.cpp revision 11986
111986Sandreas.sandberg@arm.com/* 211986Sandreas.sandberg@arm.com tests/test_modules.cpp -- nested modules, importing modules, and 311986Sandreas.sandberg@arm.com internal references 411986Sandreas.sandberg@arm.com 511986Sandreas.sandberg@arm.com Copyright (c) 2016 Wenzel Jakob <wenzel.jakob@epfl.ch> 611986Sandreas.sandberg@arm.com 711986Sandreas.sandberg@arm.com All rights reserved. Use of this source code is governed by a 811986Sandreas.sandberg@arm.com BSD-style license that can be found in the LICENSE file. 911986Sandreas.sandberg@arm.com*/ 1011986Sandreas.sandberg@arm.com 1111986Sandreas.sandberg@arm.com#include "pybind11_tests.h" 1211986Sandreas.sandberg@arm.com#include "constructor_stats.h" 1311986Sandreas.sandberg@arm.com 1411986Sandreas.sandberg@arm.comstd::string submodule_func() { 1511986Sandreas.sandberg@arm.com return "submodule_func()"; 1611986Sandreas.sandberg@arm.com} 1711986Sandreas.sandberg@arm.com 1811986Sandreas.sandberg@arm.comclass A { 1911986Sandreas.sandberg@arm.compublic: 2011986Sandreas.sandberg@arm.com A(int v) : v(v) { print_created(this, v); } 2111986Sandreas.sandberg@arm.com ~A() { print_destroyed(this); } 2211986Sandreas.sandberg@arm.com A(const A&) { print_copy_created(this); } 2311986Sandreas.sandberg@arm.com A& operator=(const A ©) { print_copy_assigned(this); v = copy.v; return *this; } 2411986Sandreas.sandberg@arm.com std::string toString() { return "A[" + std::to_string(v) + "]"; } 2511986Sandreas.sandberg@arm.comprivate: 2611986Sandreas.sandberg@arm.com int v; 2711986Sandreas.sandberg@arm.com}; 2811986Sandreas.sandberg@arm.com 2911986Sandreas.sandberg@arm.comclass B { 3011986Sandreas.sandberg@arm.compublic: 3111986Sandreas.sandberg@arm.com B() { print_default_created(this); } 3211986Sandreas.sandberg@arm.com ~B() { print_destroyed(this); } 3311986Sandreas.sandberg@arm.com B(const B&) { print_copy_created(this); } 3411986Sandreas.sandberg@arm.com B& operator=(const B ©) { print_copy_assigned(this); a1 = copy.a1; a2 = copy.a2; return *this; } 3511986Sandreas.sandberg@arm.com A &get_a1() { return a1; } 3611986Sandreas.sandberg@arm.com A &get_a2() { return a2; } 3711986Sandreas.sandberg@arm.com 3811986Sandreas.sandberg@arm.com A a1{1}; 3911986Sandreas.sandberg@arm.com A a2{2}; 4011986Sandreas.sandberg@arm.com}; 4111986Sandreas.sandberg@arm.com 4211986Sandreas.sandberg@arm.comtest_initializer modules([](py::module &m) { 4311986Sandreas.sandberg@arm.com py::module m_sub = m.def_submodule("submodule"); 4411986Sandreas.sandberg@arm.com m_sub.def("submodule_func", &submodule_func); 4511986Sandreas.sandberg@arm.com 4611986Sandreas.sandberg@arm.com py::class_<A>(m_sub, "A") 4711986Sandreas.sandberg@arm.com .def(py::init<int>()) 4811986Sandreas.sandberg@arm.com .def("__repr__", &A::toString); 4911986Sandreas.sandberg@arm.com 5011986Sandreas.sandberg@arm.com py::class_<B>(m_sub, "B") 5111986Sandreas.sandberg@arm.com .def(py::init<>()) 5211986Sandreas.sandberg@arm.com .def("get_a1", &B::get_a1, "Return the internal A 1", py::return_value_policy::reference_internal) 5311986Sandreas.sandberg@arm.com .def("get_a2", &B::get_a2, "Return the internal A 2", py::return_value_policy::reference_internal) 5411986Sandreas.sandberg@arm.com .def_readwrite("a1", &B::a1) // def_readonly uses an internal reference return policy by default 5511986Sandreas.sandberg@arm.com .def_readwrite("a2", &B::a2); 5611986Sandreas.sandberg@arm.com 5711986Sandreas.sandberg@arm.com m.attr("OD") = py::module::import("collections").attr("OrderedDict"); 5811986Sandreas.sandberg@arm.com}); 59