Skip to content
GitLab
Explore
Projects
Groups
Snippets
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Register
Sign in
Toggle navigation
Menu
Open sidebar
pub
pybind11
Commits
6a194b56
Commit
6a194b56
authored
4 years ago
by
Ralf W. Grosse-Kunstleve
Browse files
Options
Download
Email Patches
Plain Diff
pass_shared_vrederived test
parent
a9470095
archive/xxx_value_ptr_xxx_holder
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
tests/test_smart_ptr_base_derived.cpp
+10
-0
tests/test_smart_ptr_base_derived.cpp
tests/test_smart_ptr_base_derived.py
+7
-4
tests/test_smart_ptr_base_derived.py
with
17 additions
and
4 deletions
+17
-4
tests/test_smart_ptr_base_derived.cpp
+
10
-
0
View file @
6a194b56
...
...
@@ -45,6 +45,8 @@ class vderived : public vbase {
int
base_get_int
(
const
vbase
&
base
)
{
return
get_int
()
+
base
.
get_int
();
}
};
class
vrederived
:
public
vderived
{};
inline
std
::
unique_ptr
<
cbase
>
make_unique_cderived_up_cast
()
{
// Undefined Behavior (pure C++ problem, NOT a pybind11 problem):
...
...
@@ -110,6 +112,10 @@ inline int pass_shared_vderived(std::shared_ptr<vderived> vd) {
return
vd
->
get_int
();
}
inline
int
pass_shared_vrederived
(
std
::
shared_ptr
<
vrederived
>
vr
)
{
return
vr
->
get_int
();
}
TEST_SUBMODULE
(
smart_ptr_base_derived
,
m
)
{
m
.
def
(
"to_cout"
,
to_cout
);
...
...
@@ -127,6 +133,9 @@ TEST_SUBMODULE(smart_ptr_base_derived, m) {
py
::
class_
<
vderived
,
vbase
,
std
::
shared_ptr
<
vderived
>>
(
m
,
"vderived"
)
.
def
(
py
::
init
<>
());
py
::
class_
<
vrederived
,
vderived
,
std
::
shared_ptr
<
vrederived
>>
(
m
,
"vrederived"
)
.
def
(
py
::
init
<>
());
m
.
def
(
"make_shared_cderived"
,
make_shared_cderived
,
py
::
arg
(
"use_custom_deleter"
)
=
false
);
...
...
@@ -144,6 +153,7 @@ TEST_SUBMODULE(smart_ptr_base_derived, m) {
py
::
arg
(
"use_custom_deleter"
)
=
false
);
m
.
def
(
"pass_shared_vbase"
,
pass_shared_vbase
);
m
.
def
(
"pass_shared_vderived"
,
pass_shared_vderived
);
m
.
def
(
"pass_shared_vrederived"
,
pass_shared_vrederived
);
}
}
// namespace smart_ptr_base_derived
...
...
This diff is collapsed.
Click to expand it.
tests/test_smart_ptr_base_derived.py
+
7
-
4
View file @
6a194b56
...
...
@@ -30,8 +30,11 @@ def test_virtual():
assert
vd
.
get_int
()
==
VDERIVED_GET_INT_RESULT
m
.
pass_shared_vderived
(
vd
)
m
.
pass_shared_vbase
(
vd
)
vb
=
m
.
make_shared_vderived_up_cast
()
assert
vb
.
get_int
()
==
VDERIVED_GET_INT_RESULT
m
.
pass_shared_vbase
(
vb
)
m
.
pass_shared_vderived
(
vb
)
vd_uc
=
m
.
make_shared_vderived_up_cast
()
assert
vd_uc
.
get_int
()
==
VDERIVED_GET_INT_RESULT
assert
isinstance
(
vd_uc
,
m
.
vderived
)
# pybind11 un-did upcast.
m
.
pass_shared_vbase
(
vd_uc
)
# HOW DOES THIS UPCAST HAPPEN?
m
.
pass_shared_vderived
(
vd_uc
)
with
pytest
.
raises
(
TypeError
):
m
.
pass_shared_vrederived
(
vd_uc
)
m
.
to_cout
(
""
)
This diff is collapsed.
Click to expand it.
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment
Menu
Explore
Projects
Groups
Snippets