Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
P
pybind11
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
open
pybind11
Commits
6a194b56
Commit
6a194b56
authored
Dec 17, 2020
by
Ralf W. Grosse-Kunstleve
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
pass_shared_vrederived test
parent
a9470095
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
17 additions
and
4 deletions
+17
-4
tests/test_smart_ptr_base_derived.cpp
+10
-0
tests/test_smart_ptr_base_derived.py
+7
-4
No files found.
tests/test_smart_ptr_base_derived.cpp
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
...
...
tests/test_smart_ptr_base_derived.py
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
(
""
)
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a 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