Skip to content

Commit

Permalink
Add and test a generic "cppyy.default" object for use with builtin types
Browse files Browse the repository at this point in the history
  • Loading branch information
wlav committed Jul 1, 2022
1 parent 711e2f6 commit 8ffb308
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 0 deletions.
6 changes: 6 additions & 0 deletions doc/source/changelog.rst
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,12 @@ See :doc:`packages <packages>`, for details on the package structure.
PyPy support lags CPython support.


master: 2.5.0
-------------

* Added a generic "cppyy.default" object


2022-06-29: 2.4.0
-----------------

Expand Down
2 changes: 2 additions & 0 deletions python/cppyy/_cpython_cppyy.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
'addressof',
'bind_object',
'nullptr',
'default',
'_backend',
'_begin_capture_stderr',
'_end_capture_stderr'
Expand Down Expand Up @@ -171,6 +172,7 @@ def add_default_paths():
addressof = _backend.addressof
bind_object = _backend.bind_object
nullptr = _backend.nullptr
default = _backend.default

def load_reflection_info(name):
sc = gbl.gSystem.Load(name)
Expand Down
25 changes: 25 additions & 0 deletions test/test_datatypes.py
Original file line number Diff line number Diff line change
Expand Up @@ -262,6 +262,18 @@ def test02_instance_data_write_access(self):
getattr(c, 'set_'+names[i]+'_rv')(4*i)
assert eval('c.m_%s' % names[i]) == 4*i

for i in range(len(names)):
setattr(c, 'm_'+names[i], cppyy.default)
assert eval('c.get_%s()' % names[i]) == 0

for i in range(len(names)):
getattr(c, 'set_'+names[i])(cppyy.default)
assert eval('c.m_%s' % names[i]) == 0

for i in range(len(names)):
getattr(c, 'set_'+names[i]+'_cr')(cppyy.default)
assert eval('c.m_%s' % names[i]) == 0

# float types through functions
c.set_float(0.123); assert round(c.get_float() - 0.123, 5) == 0
c.set_double(0.456); assert round(c.get_double() - 0.456, 8) == 0
Expand All @@ -278,6 +290,19 @@ def test02_instance_data_write_access(self):
c.set_ldouble(0.098); assert round(c.m_ldouble - 0.098, 8) == 0
c.set_ldouble_cr(0.210); assert round(c.m_ldouble - 0.210, 8) == 0

names = ['float', 'double', 'ldouble']
for i in range(len(names)):
setattr(c, 'm_'+names[i], cppyy.default)
assert eval('c.get_%s()' % names[i]) == 0.

for i in range(len(names)):
getattr(c, 'set_'+names[i])(cppyy.default)
assert eval('c.m_%s' % names[i]) == 0.

for i in range(len(names)):
getattr(c, 'set_'+names[i]+'_cr')(cppyy.default)
assert eval('c.m_%s' % names[i]) == 0.

# (non-)writing of enum types
raises(TypeError, setattr, CppyyTestData, 'kNothing', 42)

Expand Down

0 comments on commit 8ffb308

Please sign in to comment.