Commit 5de4e6bd authored by Robert Bradshaw's avatar Robert Bradshaw

More overflow testing.

parent 9d493a05
...@@ -106,12 +106,12 @@ def test_mul(INT a, INT b): ...@@ -106,12 +106,12 @@ def test_mul(INT a, INT b):
return int(a * b) return int(a * b)
@cython.overflowcheck(True) @cython.overflowcheck(True)
def test_nested(INT a, INT b, INT c): def test_nested_add(INT a, INT b, INT c):
""" """
>>> test_nested(1, 2, 3) >>> test_nested_add(1, 2, 3)
6 6
>>> expect_overflow(test_nested, half + 1, half + 1, half + 1) >>> expect_overflow(test_nested_add, half + 1, half + 1, half + 1)
>>> expect_overflow(test_nested, half - 1, half - 1, half - 1) >>> expect_overflow(test_nested_add, half - 1, half - 1, half - 1)
""" """
return int(a + b + c) return int(a + b + c)
...@@ -154,6 +154,25 @@ cdef INT called(INT value): ...@@ -154,6 +154,25 @@ cdef INT called(INT value):
print("called(%s)" % format(value)) print("called(%s)" % format(value))
return value return value
@cython.overflowcheck(True)
def test_nested(INT a, INT b, INT c, INT d):
"""
>>> test_nested_func(1, 2, 3)
called(5)
6
>>> expect_overflow(test_nested, half, half, 1, 1)
>>> expect_overflow(test_nested, half, 1, half, half)
>>> expect_overflow(test_nested, half, 2, half, 2)
>>> print(format(test_nested(half, 2, 0, 1)))
half + half - 0
>>> print(format(test_nested(1, 0, half, 2)))
half + half - 0
>>> print(format(test_nested(half, 1, 1, half)))
half + half - 0
"""
return int(a * b + c * d)
@cython.overflowcheck(True) @cython.overflowcheck(True)
def test_nested_func(INT a, INT b, INT c): def test_nested_func(INT a, INT b, INT c):
""" """
...@@ -166,7 +185,6 @@ def test_nested_func(INT a, INT b, INT c): ...@@ -166,7 +185,6 @@ def test_nested_func(INT a, INT b, INT c):
>>> print(format(test_nested_func(1, half - 1, half - 1))) >>> print(format(test_nested_func(1, half - 1, half - 1)))
called(half + half - 2) called(half + half - 2)
half + half - 1 half + half - 1
>>>
""" """
return int(a + called(b + c)) return int(a + called(b + c))
......
# cython: overflowcheck.fold = True
ctypedef int INT ctypedef int INT
include "overflow_check.pxi" include "overflow_check.pxi"
# cython: overflowcheck.fold = False
ctypedef long long INT ctypedef long long INT
include "overflow_check.pxi" include "overflow_check.pxi"
# cython: overflowcheck.fold = False
ctypedef unsigned int INT ctypedef unsigned int INT
include "overflow_check.pxi" include "overflow_check.pxi"
# cython: overflowcheck.fold = True
ctypedef unsigned long long INT ctypedef unsigned long long INT
include "overflow_check.pxi" include "overflow_check.pxi"
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment