Skip to content

Commit

Permalink
make tests runnable under p3
Browse files Browse the repository at this point in the history
  • Loading branch information
wlav committed Oct 12, 2017
1 parent 6d02305 commit 47008a3
Show file tree
Hide file tree
Showing 4 changed files with 68 additions and 63 deletions.
5 changes: 5 additions & 0 deletions test/support.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,8 @@ def setup_make(targetname):
stdout, _ = popen.communicate()
if popen.returncode:
raise OSError("'make' failed:\n%s" % (stdout,))

if sys.hexversion >= 0x3000000:
pylong = int
else:
pylong = long
108 changes: 54 additions & 54 deletions test/test_datatypes.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import py, os, sys
from pytest import raises
from .support import setup_make
from .support import setup_make, pylong

currpath = py.path.local(__file__).dirpath()
test_dct = str(currpath.join("datatypesDict.so"))
Expand Down Expand Up @@ -147,15 +147,15 @@ def test02_instance_data_write_access(self):
# integer types
names = ['short', 'ushort', 'int', 'uint', 'long', 'ulong', 'llong', 'ullong']
for i in range(len(names)):
exec 'c.m_%s = %d' % (names[i],i)
setattr(c, 'm_'+names[i], i)
assert eval('c.get_%s()' % names[i]) == i

for i in range(len(names)):
exec 'c.set_%s(%d)' % (names[i],2*i)
getattr(c, 'set_'+names[i])(2*i)
assert eval('c.m_%s' % names[i]) == 2*i

for i in range(len(names)):
exec 'c.set_%s_cr(%d)' % (names[i],3*i)
getattr(c, 'set_'+names[i]+'_cr')(3*i)
assert eval('c.m_%s' % names[i]) == 3*i

# float types through functions
Expand All @@ -180,11 +180,11 @@ def test02_instance_data_write_access(self):
atypes = ['h', 'H', 'i', 'I', 'l', 'L' ]
for j in range(len(names)):
b = array.array(atypes[j], a)
exec 'c.m_%s_array = b' % names[j] # buffer copies
setattr(c, 'm_'+names[j]+'_array', b) # buffer copies
for i in range(self.N):
assert eval('c.m_%s_array[i]' % names[j]) == b[i]

exec 'c.m_%s_array2 = b' % names[j] # pointer copies
setattr(c, 'm_'+names[j]+'_array2', b) # pointer copies
b[i] = 28
for i in range(self.N):
assert eval('c.m_%s_array2[i]' % names[j]) == b[i]
Expand Down Expand Up @@ -239,10 +239,10 @@ def test04_class_read_access(self):
assert isinstance(c, CppyyTestData)

# char types
assert CppyyTestData.s_char == 'c'
assert c.s_char == 'c'
assert c.s_uchar == 'u'
assert CppyyTestData.s_uchar == 'u'
assert CppyyTestData.s_char == 'c'
assert c.s_char == 'c'
assert c.s_uchar == 'u'
assert CppyyTestData.s_uchar == 'u'

# integer types
assert CppyyTestData.s_short == -101
Expand All @@ -253,20 +253,20 @@ def test04_class_read_access(self):
assert c.s_int == -202
assert c.s_uint == 202
assert CppyyTestData.s_uint == 202
assert CppyyTestData.s_long == -303L
assert c.s_long == -303L
assert c.s_ulong == 303L
assert CppyyTestData.s_ulong == 303L
assert CppyyTestData.s_llong == -404L
assert c.s_llong == -404L
assert c.s_ullong == 404L
assert CppyyTestData.s_ullong == 404L
assert CppyyTestData.s_long == -pylong(303)
assert c.s_long == -pylong(303)
assert c.s_ulong == pylong(303)
assert CppyyTestData.s_ulong == pylong(303)
assert CppyyTestData.s_llong == -pylong(404)
assert c.s_llong == -pylong(404)
assert c.s_ullong == pylong(404)
assert CppyyTestData.s_ullong == pylong(404)

# floating point types
assert round(CppyyTestData.s_float + 606., 5) == 0
assert round(c.s_float + 606., 5) == 0
assert round(CppyyTestData.s_double + 707., 8) == 0
assert round(c.s_double + 707., 8) == 0
assert round(CppyyTestData.s_float + 606., 5) == 0
assert round(c.s_float + 606., 5) == 0
assert round(CppyyTestData.s_double + 707., 8) == 0
assert round(c.s_double + 707., 8) == 0

c.__destruct__()

Expand All @@ -280,56 +280,56 @@ def test05_class_data_write_access(self):
assert isinstance(c, CppyyTestData)

# char types
CppyyTestData.s_char = 'a'
assert c.s_char == 'a'
c.s_char = 'b'
assert CppyyTestData.s_char == 'b'
CppyyTestData.s_uchar = 'c'
assert c.s_uchar == 'c'
c.s_uchar = 'd'
assert CppyyTestData.s_uchar == 'd'
CppyyTestData.s_char = 'a'
assert c.s_char == 'a'
c.s_char = 'b'
assert CppyyTestData.s_char == 'b'
CppyyTestData.s_uchar = 'c'
assert c.s_uchar == 'c'
c.s_uchar = 'd'
assert CppyyTestData.s_uchar == 'd'
raises(ValueError, setattr, CppyyTestData, 's_uchar', -1)
raises(ValueError, setattr, c, 's_uchar', -1)
raises(ValueError, setattr, c, 's_uchar', -1)

# integer types
c.s_short = -102
assert CppyyTestData.s_short == -102
CppyyTestData.s_short = -203
assert CppyyTestData.s_short == -102
CppyyTestData.s_short = -203
assert c.s_short == -203
c.s_ushort = 127
assert CppyyTestData.s_ushort == 127
CppyyTestData.s_ushort = 227
assert CppyyTestData.s_ushort == 127
CppyyTestData.s_ushort = 227
assert c.s_ushort == 227
CppyyTestData.s_int = -234
CppyyTestData.s_int = -234
assert c.s_int == -234
c.s_int = -321
assert CppyyTestData.s_int == -321
CppyyTestData.s_uint = 1234
assert CppyyTestData.s_int == -321
CppyyTestData.s_uint = 1234
assert c.s_uint == 1234
c.s_uint = 4321
assert CppyyTestData.s_uint == 4321
raises(ValueError, setattr, c, 's_uint', -1)
assert CppyyTestData.s_uint == 4321
raises(ValueError, setattr, c, 's_uint', -1)
raises(ValueError, setattr, CppyyTestData, 's_uint', -1)
CppyyTestData.s_long = -87L
assert c.s_long == -87L
c.s_long = 876L
assert CppyyTestData.s_long == 876L
CppyyTestData.s_ulong = 876L
assert c.s_ulong == 876L
c.s_ulong = 678L
assert CppyyTestData.s_ulong == 678L
CppyyTestData.s_long = -pylong(87)
assert c.s_long == -pylong(87)
c.s_long = pylong(876)
assert CppyyTestData.s_long == pylong(876)
CppyyTestData.s_ulong = pylong(876)
assert c.s_ulong == pylong(876)
c.s_ulong = pylong(678)
assert CppyyTestData.s_ulong == pylong(678)
raises(ValueError, setattr, CppyyTestData, 's_ulong', -1)
raises(ValueError, setattr, c, 's_ulong', -1)
raises(ValueError, setattr, c, 's_ulong', -1)

# floating point types
CppyyTestData.s_float = -3.1415
assert round(c.s_float, 5 ) == -3.1415
CppyyTestData.s_float = -3.1415
assert round(c.s_float, 5) == -3.1415
c.s_float = 3.1415
assert round(CppyyTestData.s_float, 5 ) == 3.1415
assert round(CppyyTestData.s_float, 5) == 3.1415
import math
c.s_double = -math.pi
assert CppyyTestData.s_double == -math.pi
CppyyTestData.s_double = math.pi
assert CppyyTestData.s_double == -math.pi
CppyyTestData.s_double = math.pi
assert c.s_double == math.pi

c.__destruct__()
Expand Down
12 changes: 6 additions & 6 deletions test/test_fragile.py
Original file line number Diff line number Diff line change
Expand Up @@ -179,20 +179,20 @@ def test10_documentation(self):
assert "TypeError: takes at most 0 arguments (1 given)" in str(e)
assert "TypeError: takes at least 2 arguments (1 given)" in str(e)

d.overload(None) # succeeds: accepted as nullptr on fragile::no_such_class*

try:
d.overload(3.14) # raises TypeError
d.overload(None) # raises TypeError
assert 0
except TypeError as e:
# TODO: pypy-c does not indicate which argument failed to convert, CPython does
# likewise there are still minor differences in descriptiveness of messages
assert "fragile::D::overload()" in str(e)
assert "TypeError: takes at most 0 arguments (1 given)" in str(e)
assert "fragile::D::overload(fragile::no_such_class*)" in str(e)
assert "TypeError: could not convert argument 1 (no converter available for 'fragile::no_such_class*')" in str(e)
#assert "no converter available for 'fragile::no_such_class*'" in str(e)
assert "void fragile::D::overload(char, int i = 0)" in str(e)
assert "TypeError: could not convert argument 1 (char or small int type expected)" in str(e)
#assert "char or small int type expected" in str(e)
assert "void fragile::D::overload(int, fragile::no_such_class* p = 0)" in str(e)
assert "TypeError: could not convert argument 1 (int/long conversion expects an integer object)" in str(e)
#assert "int/long conversion expects an integer object" in str(e)

j = fragile.J()
assert fragile.J.method1.__doc__ == j.method1.__doc__
Expand Down
6 changes: 3 additions & 3 deletions test/test_pythonify.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import py, os, sys
from pytest import raises
from .support import setup_make
from .support import setup_make, pylong

currpath = py.path.local(__file__).dirpath()
test_dct = str(currpath.join("example01Dict.so"))
Expand Down Expand Up @@ -37,7 +37,7 @@ def test03_calling_static_functions(self):
res = example01_class.staticAddOneToInt(1)
assert res == 2

res = example01_class.staticAddOneToInt(1L)
res = example01_class.staticAddOneToInt(pylong(1))
assert res == 2
res = example01_class.staticAddOneToInt(1, 2)
assert res == 4
Expand Down Expand Up @@ -109,7 +109,7 @@ def test04_constructing_and_calling(self):
res = instance.addToStringValue("-12") # TODO: this leaks
assert res == "30"

res = instance.staticAddOneToInt(1L)
res = instance.staticAddOneToInt(pylong(1))
assert res == 2

instance.__destruct__()
Expand Down

0 comments on commit 47008a3

Please sign in to comment.