Rename examples files, as per #288
This renames example files from `exampleN` to `example-description`.
Specifically, the following renaming is applied:
example1 -> example-methods-and-attributes
example2 -> example-python-types
example3 -> example-operator-overloading
example4 -> example-constants-and-functions
example5 -> example-callbacks (*)
example6 -> example-sequence-and-iterators
example7 -> example-buffers
example8 -> example-custom-ref-counting
example9 -> example-modules
example10 -> example-numpy-vectorize
example11 -> example-arg-keywords-and-defaults
example12 -> example-virtual-functions
example13 -> example-keep-alive
example14 -> example-opaque-types
example15 -> example-pickling
example16 -> example-inheritance
example17 -> example-stl-binders
example18 -> example-eval
example19 -> example-custom-exceptions
* the inheritance parts of example5 are moved into example-inheritance
(previously example16), and the remainder is left as example-callbacks.
This commit also renames the internal variables ("Example1",
"Example2", "Example4", etc.) into non-numeric names ("ExampleMandA",
"ExamplePythonTypes", "ExampleWithEnum", etc.) to correspond to the
file renaming.
The order of tests is preserved, but this can easily be changed if
there is some more natural ordering by updating the list in
examples/CMakeLists.txt.
2016-07-18 20:43:18 +00:00
|
|
|
/*
|
2016-08-12 11:50:00 +00:00
|
|
|
tests/test_inheritance.cpp -- inheritance, automatic upcasting for polymorphic types
|
Rename examples files, as per #288
This renames example files from `exampleN` to `example-description`.
Specifically, the following renaming is applied:
example1 -> example-methods-and-attributes
example2 -> example-python-types
example3 -> example-operator-overloading
example4 -> example-constants-and-functions
example5 -> example-callbacks (*)
example6 -> example-sequence-and-iterators
example7 -> example-buffers
example8 -> example-custom-ref-counting
example9 -> example-modules
example10 -> example-numpy-vectorize
example11 -> example-arg-keywords-and-defaults
example12 -> example-virtual-functions
example13 -> example-keep-alive
example14 -> example-opaque-types
example15 -> example-pickling
example16 -> example-inheritance
example17 -> example-stl-binders
example18 -> example-eval
example19 -> example-custom-exceptions
* the inheritance parts of example5 are moved into example-inheritance
(previously example16), and the remainder is left as example-callbacks.
This commit also renames the internal variables ("Example1",
"Example2", "Example4", etc.) into non-numeric names ("ExampleMandA",
"ExamplePythonTypes", "ExampleWithEnum", etc.) to correspond to the
file renaming.
The order of tests is preserved, but this can easily be changed if
there is some more natural ordering by updating the list in
examples/CMakeLists.txt.
2016-07-18 20:43:18 +00:00
|
|
|
|
|
|
|
Copyright (c) 2016 Wenzel Jakob <wenzel.jakob@epfl.ch>
|
|
|
|
|
|
|
|
All rights reserved. Use of this source code is governed by a
|
|
|
|
BSD-style license that can be found in the LICENSE file.
|
|
|
|
*/
|
|
|
|
|
2016-08-12 11:50:00 +00:00
|
|
|
#include "pybind11_tests.h"
|
Rename examples files, as per #288
This renames example files from `exampleN` to `example-description`.
Specifically, the following renaming is applied:
example1 -> example-methods-and-attributes
example2 -> example-python-types
example3 -> example-operator-overloading
example4 -> example-constants-and-functions
example5 -> example-callbacks (*)
example6 -> example-sequence-and-iterators
example7 -> example-buffers
example8 -> example-custom-ref-counting
example9 -> example-modules
example10 -> example-numpy-vectorize
example11 -> example-arg-keywords-and-defaults
example12 -> example-virtual-functions
example13 -> example-keep-alive
example14 -> example-opaque-types
example15 -> example-pickling
example16 -> example-inheritance
example17 -> example-stl-binders
example18 -> example-eval
example19 -> example-custom-exceptions
* the inheritance parts of example5 are moved into example-inheritance
(previously example16), and the remainder is left as example-callbacks.
This commit also renames the internal variables ("Example1",
"Example2", "Example4", etc.) into non-numeric names ("ExampleMandA",
"ExamplePythonTypes", "ExampleWithEnum", etc.) to correspond to the
file renaming.
The order of tests is preserved, but this can easily be changed if
there is some more natural ordering by updating the list in
examples/CMakeLists.txt.
2016-07-18 20:43:18 +00:00
|
|
|
|
|
|
|
class Pet {
|
|
|
|
public:
|
|
|
|
Pet(const std::string &name, const std::string &species)
|
|
|
|
: m_name(name), m_species(species) {}
|
|
|
|
std::string name() const { return m_name; }
|
|
|
|
std::string species() const { return m_species; }
|
|
|
|
private:
|
|
|
|
std::string m_name;
|
|
|
|
std::string m_species;
|
|
|
|
};
|
|
|
|
|
|
|
|
class Dog : public Pet {
|
|
|
|
public:
|
|
|
|
Dog(const std::string &name) : Pet(name, "dog") {}
|
2016-08-12 20:28:31 +00:00
|
|
|
std::string bark() const { return "Woof!"; }
|
Rename examples files, as per #288
This renames example files from `exampleN` to `example-description`.
Specifically, the following renaming is applied:
example1 -> example-methods-and-attributes
example2 -> example-python-types
example3 -> example-operator-overloading
example4 -> example-constants-and-functions
example5 -> example-callbacks (*)
example6 -> example-sequence-and-iterators
example7 -> example-buffers
example8 -> example-custom-ref-counting
example9 -> example-modules
example10 -> example-numpy-vectorize
example11 -> example-arg-keywords-and-defaults
example12 -> example-virtual-functions
example13 -> example-keep-alive
example14 -> example-opaque-types
example15 -> example-pickling
example16 -> example-inheritance
example17 -> example-stl-binders
example18 -> example-eval
example19 -> example-custom-exceptions
* the inheritance parts of example5 are moved into example-inheritance
(previously example16), and the remainder is left as example-callbacks.
This commit also renames the internal variables ("Example1",
"Example2", "Example4", etc.) into non-numeric names ("ExampleMandA",
"ExamplePythonTypes", "ExampleWithEnum", etc.) to correspond to the
file renaming.
The order of tests is preserved, but this can easily be changed if
there is some more natural ordering by updating the list in
examples/CMakeLists.txt.
2016-07-18 20:43:18 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
class Rabbit : public Pet {
|
|
|
|
public:
|
|
|
|
Rabbit(const std::string &name) : Pet(name, "parrot") {}
|
|
|
|
};
|
|
|
|
|
2016-09-06 16:27:00 +00:00
|
|
|
class Hamster : public Pet {
|
|
|
|
public:
|
|
|
|
Hamster(const std::string &name) : Pet(name, "rodent") {}
|
|
|
|
};
|
|
|
|
|
2017-02-15 20:10:25 +00:00
|
|
|
class Chimera : public Pet {
|
|
|
|
Chimera() : Pet("Kimmy", "chimera") {}
|
|
|
|
};
|
|
|
|
|
2016-08-12 20:28:31 +00:00
|
|
|
std::string pet_name_species(const Pet &pet) {
|
|
|
|
return pet.name() + " is a " + pet.species();
|
Rename examples files, as per #288
This renames example files from `exampleN` to `example-description`.
Specifically, the following renaming is applied:
example1 -> example-methods-and-attributes
example2 -> example-python-types
example3 -> example-operator-overloading
example4 -> example-constants-and-functions
example5 -> example-callbacks (*)
example6 -> example-sequence-and-iterators
example7 -> example-buffers
example8 -> example-custom-ref-counting
example9 -> example-modules
example10 -> example-numpy-vectorize
example11 -> example-arg-keywords-and-defaults
example12 -> example-virtual-functions
example13 -> example-keep-alive
example14 -> example-opaque-types
example15 -> example-pickling
example16 -> example-inheritance
example17 -> example-stl-binders
example18 -> example-eval
example19 -> example-custom-exceptions
* the inheritance parts of example5 are moved into example-inheritance
(previously example16), and the remainder is left as example-callbacks.
This commit also renames the internal variables ("Example1",
"Example2", "Example4", etc.) into non-numeric names ("ExampleMandA",
"ExamplePythonTypes", "ExampleWithEnum", etc.) to correspond to the
file renaming.
The order of tests is preserved, but this can easily be changed if
there is some more natural ordering by updating the list in
examples/CMakeLists.txt.
2016-07-18 20:43:18 +00:00
|
|
|
}
|
|
|
|
|
2016-08-12 20:28:31 +00:00
|
|
|
std::string dog_bark(const Dog &dog) {
|
|
|
|
return dog.bark();
|
Rename examples files, as per #288
This renames example files from `exampleN` to `example-description`.
Specifically, the following renaming is applied:
example1 -> example-methods-and-attributes
example2 -> example-python-types
example3 -> example-operator-overloading
example4 -> example-constants-and-functions
example5 -> example-callbacks (*)
example6 -> example-sequence-and-iterators
example7 -> example-buffers
example8 -> example-custom-ref-counting
example9 -> example-modules
example10 -> example-numpy-vectorize
example11 -> example-arg-keywords-and-defaults
example12 -> example-virtual-functions
example13 -> example-keep-alive
example14 -> example-opaque-types
example15 -> example-pickling
example16 -> example-inheritance
example17 -> example-stl-binders
example18 -> example-eval
example19 -> example-custom-exceptions
* the inheritance parts of example5 are moved into example-inheritance
(previously example16), and the remainder is left as example-callbacks.
This commit also renames the internal variables ("Example1",
"Example2", "Example4", etc.) into non-numeric names ("ExampleMandA",
"ExamplePythonTypes", "ExampleWithEnum", etc.) to correspond to the
file renaming.
The order of tests is preserved, but this can easily be changed if
there is some more natural ordering by updating the list in
examples/CMakeLists.txt.
2016-07-18 20:43:18 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
struct BaseClass { virtual ~BaseClass() {} };
|
|
|
|
struct DerivedClass1 : BaseClass { };
|
|
|
|
struct DerivedClass2 : BaseClass { };
|
|
|
|
|
2017-01-31 15:52:11 +00:00
|
|
|
struct MismatchBase1 { };
|
|
|
|
struct MismatchDerived1 : MismatchBase1 { };
|
|
|
|
|
|
|
|
struct MismatchBase2 { };
|
|
|
|
struct MismatchDerived2 : MismatchBase2 { };
|
|
|
|
|
2016-09-03 18:54:22 +00:00
|
|
|
test_initializer inheritance([](py::module &m) {
|
Rename examples files, as per #288
This renames example files from `exampleN` to `example-description`.
Specifically, the following renaming is applied:
example1 -> example-methods-and-attributes
example2 -> example-python-types
example3 -> example-operator-overloading
example4 -> example-constants-and-functions
example5 -> example-callbacks (*)
example6 -> example-sequence-and-iterators
example7 -> example-buffers
example8 -> example-custom-ref-counting
example9 -> example-modules
example10 -> example-numpy-vectorize
example11 -> example-arg-keywords-and-defaults
example12 -> example-virtual-functions
example13 -> example-keep-alive
example14 -> example-opaque-types
example15 -> example-pickling
example16 -> example-inheritance
example17 -> example-stl-binders
example18 -> example-eval
example19 -> example-custom-exceptions
* the inheritance parts of example5 are moved into example-inheritance
(previously example16), and the remainder is left as example-callbacks.
This commit also renames the internal variables ("Example1",
"Example2", "Example4", etc.) into non-numeric names ("ExampleMandA",
"ExamplePythonTypes", "ExampleWithEnum", etc.) to correspond to the
file renaming.
The order of tests is preserved, but this can easily be changed if
there is some more natural ordering by updating the list in
examples/CMakeLists.txt.
2016-07-18 20:43:18 +00:00
|
|
|
py::class_<Pet> pet_class(m, "Pet");
|
|
|
|
pet_class
|
|
|
|
.def(py::init<std::string, std::string>())
|
|
|
|
.def("name", &Pet::name)
|
|
|
|
.def("species", &Pet::species);
|
|
|
|
|
|
|
|
/* One way of declaring a subclass relationship: reference parent's class_ object */
|
|
|
|
py::class_<Dog>(m, "Dog", pet_class)
|
|
|
|
.def(py::init<std::string>());
|
|
|
|
|
|
|
|
/* Another way of declaring a subclass relationship: reference parent's C++ type */
|
2016-09-11 11:00:40 +00:00
|
|
|
py::class_<Rabbit, Pet>(m, "Rabbit")
|
Rename examples files, as per #288
This renames example files from `exampleN` to `example-description`.
Specifically, the following renaming is applied:
example1 -> example-methods-and-attributes
example2 -> example-python-types
example3 -> example-operator-overloading
example4 -> example-constants-and-functions
example5 -> example-callbacks (*)
example6 -> example-sequence-and-iterators
example7 -> example-buffers
example8 -> example-custom-ref-counting
example9 -> example-modules
example10 -> example-numpy-vectorize
example11 -> example-arg-keywords-and-defaults
example12 -> example-virtual-functions
example13 -> example-keep-alive
example14 -> example-opaque-types
example15 -> example-pickling
example16 -> example-inheritance
example17 -> example-stl-binders
example18 -> example-eval
example19 -> example-custom-exceptions
* the inheritance parts of example5 are moved into example-inheritance
(previously example16), and the remainder is left as example-callbacks.
This commit also renames the internal variables ("Example1",
"Example2", "Example4", etc.) into non-numeric names ("ExampleMandA",
"ExamplePythonTypes", "ExampleWithEnum", etc.) to correspond to the
file renaming.
The order of tests is preserved, but this can easily be changed if
there is some more natural ordering by updating the list in
examples/CMakeLists.txt.
2016-07-18 20:43:18 +00:00
|
|
|
.def(py::init<std::string>());
|
|
|
|
|
2016-09-06 16:27:00 +00:00
|
|
|
/* And another: list parent in class template arguments */
|
|
|
|
py::class_<Hamster, Pet>(m, "Hamster")
|
|
|
|
.def(py::init<std::string>());
|
|
|
|
|
2017-02-15 20:10:25 +00:00
|
|
|
py::class_<Chimera, Pet>(m, "Chimera");
|
|
|
|
|
2016-08-12 20:28:31 +00:00
|
|
|
m.def("pet_name_species", pet_name_species);
|
Rename examples files, as per #288
This renames example files from `exampleN` to `example-description`.
Specifically, the following renaming is applied:
example1 -> example-methods-and-attributes
example2 -> example-python-types
example3 -> example-operator-overloading
example4 -> example-constants-and-functions
example5 -> example-callbacks (*)
example6 -> example-sequence-and-iterators
example7 -> example-buffers
example8 -> example-custom-ref-counting
example9 -> example-modules
example10 -> example-numpy-vectorize
example11 -> example-arg-keywords-and-defaults
example12 -> example-virtual-functions
example13 -> example-keep-alive
example14 -> example-opaque-types
example15 -> example-pickling
example16 -> example-inheritance
example17 -> example-stl-binders
example18 -> example-eval
example19 -> example-custom-exceptions
* the inheritance parts of example5 are moved into example-inheritance
(previously example16), and the remainder is left as example-callbacks.
This commit also renames the internal variables ("Example1",
"Example2", "Example4", etc.) into non-numeric names ("ExampleMandA",
"ExamplePythonTypes", "ExampleWithEnum", etc.) to correspond to the
file renaming.
The order of tests is preserved, but this can easily be changed if
there is some more natural ordering by updating the list in
examples/CMakeLists.txt.
2016-07-18 20:43:18 +00:00
|
|
|
m.def("dog_bark", dog_bark);
|
|
|
|
|
|
|
|
py::class_<BaseClass>(m, "BaseClass").def(py::init<>());
|
|
|
|
py::class_<DerivedClass1>(m, "DerivedClass1").def(py::init<>());
|
|
|
|
py::class_<DerivedClass2>(m, "DerivedClass2").def(py::init<>());
|
|
|
|
|
|
|
|
m.def("return_class_1", []() -> BaseClass* { return new DerivedClass1(); });
|
|
|
|
m.def("return_class_2", []() -> BaseClass* { return new DerivedClass2(); });
|
2016-09-11 22:41:28 +00:00
|
|
|
m.def("return_class_n", [](int n) -> BaseClass* {
|
|
|
|
if (n == 1) return new DerivedClass1();
|
|
|
|
if (n == 2) return new DerivedClass2();
|
|
|
|
return new BaseClass();
|
|
|
|
});
|
Rename examples files, as per #288
This renames example files from `exampleN` to `example-description`.
Specifically, the following renaming is applied:
example1 -> example-methods-and-attributes
example2 -> example-python-types
example3 -> example-operator-overloading
example4 -> example-constants-and-functions
example5 -> example-callbacks (*)
example6 -> example-sequence-and-iterators
example7 -> example-buffers
example8 -> example-custom-ref-counting
example9 -> example-modules
example10 -> example-numpy-vectorize
example11 -> example-arg-keywords-and-defaults
example12 -> example-virtual-functions
example13 -> example-keep-alive
example14 -> example-opaque-types
example15 -> example-pickling
example16 -> example-inheritance
example17 -> example-stl-binders
example18 -> example-eval
example19 -> example-custom-exceptions
* the inheritance parts of example5 are moved into example-inheritance
(previously example16), and the remainder is left as example-callbacks.
This commit also renames the internal variables ("Example1",
"Example2", "Example4", etc.) into non-numeric names ("ExampleMandA",
"ExamplePythonTypes", "ExampleWithEnum", etc.) to correspond to the
file renaming.
The order of tests is preserved, but this can easily be changed if
there is some more natural ordering by updating the list in
examples/CMakeLists.txt.
2016-07-18 20:43:18 +00:00
|
|
|
m.def("return_none", []() -> BaseClass* { return nullptr; });
|
2016-10-23 12:50:08 +00:00
|
|
|
|
|
|
|
m.def("test_isinstance", [](py::list l) {
|
|
|
|
struct Unregistered { }; // checks missing type_info code path
|
|
|
|
|
|
|
|
return py::make_tuple(
|
|
|
|
py::isinstance<py::tuple>(l[0]),
|
|
|
|
py::isinstance<py::dict>(l[1]),
|
|
|
|
py::isinstance<Pet>(l[2]),
|
|
|
|
py::isinstance<Pet>(l[3]),
|
|
|
|
py::isinstance<Dog>(l[4]),
|
|
|
|
py::isinstance<Rabbit>(l[5]),
|
|
|
|
py::isinstance<Unregistered>(l[6])
|
|
|
|
);
|
|
|
|
});
|
2017-01-31 15:52:11 +00:00
|
|
|
|
|
|
|
m.def("test_mismatched_holder_type_1", []() {
|
|
|
|
auto m = py::module::import("__main__");
|
|
|
|
py::class_<MismatchBase1, std::shared_ptr<MismatchBase1>>(m, "MismatchBase1");
|
|
|
|
py::class_<MismatchDerived1, MismatchBase1>(m, "MismatchDerived1");
|
|
|
|
});
|
|
|
|
m.def("test_mismatched_holder_type_2", []() {
|
|
|
|
auto m = py::module::import("__main__");
|
|
|
|
py::class_<MismatchBase2>(m, "MismatchBase2");
|
|
|
|
py::class_<MismatchDerived2, std::shared_ptr<MismatchDerived2>, MismatchBase2>(m, "MismatchDerived2");
|
|
|
|
});
|
2016-09-03 18:54:22 +00:00
|
|
|
});
|