diff options
Diffstat (limited to 'tests/run/builtin_abs.pyx')
-rw-r--r-- | tests/run/builtin_abs.pyx | 133 |
1 files changed, 132 insertions, 1 deletions
diff --git a/tests/run/builtin_abs.pyx b/tests/run/builtin_abs.pyx index ba6351d9b..e0b31b7e1 100644 --- a/tests/run/builtin_abs.pyx +++ b/tests/run/builtin_abs.pyx @@ -1,5 +1,5 @@ # mode: run -# ticket: 698 +# ticket: t698 # distutils: extra_compile_args=-fwrapv cdef extern from *: @@ -60,6 +60,27 @@ def int_abs(int a): """ return abs(a) +@cython.overflowcheck(True) +@cython.test_assert_path_exists("//ReturnStatNode//NameNode[@entry.name = 'abs']", + "//ReturnStatNode//NameNode[@entry.cname = 'abs']") +cdef int c_int_abs(int a) except * nogil: + return abs(a) + +def test_c_int_abs(int a): + """ + >>> test_c_int_abs(-5) == 5 + True + >>> test_c_int_abs(-5.1) == 5 + True + >>> test_c_int_abs(-max_int-1) #doctest: +ELLIPSIS + Traceback (most recent call last): + ... + OverflowError: ... + >>> test_c_int_abs(max_int) == abs(max_int) or (max_int, test_c_int_abs(max_int), abs(max_int)) + True + """ + return c_int_abs(a) + @cython.test_assert_path_exists("//ReturnStatNode//NameNode[@entry.name = 'abs']") @cython.test_fail_if_path_exists("//ReturnStatNode//NameNode[@entry.cname = 'abs']", "//ReturnStatNode//NameNode[@entry.cname = 'labs']") @@ -70,6 +91,19 @@ def uint_abs(unsigned int a): """ return abs(a) +@cython.test_assert_path_exists("//ReturnStatNode//NameNode[@entry.name = 'abs']") +@cython.test_fail_if_path_exists("//ReturnStatNode//NameNode[@entry.cname = 'abs']", + "//ReturnStatNode//NameNode[@entry.cname = 'labs']") +cdef unsigned int c_uint_abs(unsigned int a) nogil: + return abs(a) + +def test_c_uint_abs(unsigned int a): + """ + >>> test_c_uint_abs(max_int) == abs(max_int) or (max_int, test_c_uint_abs(max_int), abs(max_int)) + True + """ + return c_uint_abs(a) + @cython.overflowcheck(True) @cython.test_assert_path_exists("//ReturnStatNode//NameNode[@entry.name = 'abs']", "//ReturnStatNode//NameNode[@entry.cname = 'labs']") @@ -88,6 +122,27 @@ def long_abs(long a): """ return abs(a) +@cython.overflowcheck(True) +@cython.test_assert_path_exists("//ReturnStatNode//NameNode[@entry.name = 'abs']", + "//ReturnStatNode//NameNode[@entry.cname = 'labs']") +cdef long c_long_abs(long a) except * nogil: + return abs(a) + +def test_c_long_abs(long a): + """ + >>> test_c_long_abs(-5) == 5 + True + >>> test_c_long_abs(-5.1) == 5 + True + >>> test_c_long_abs(-max_long-1) #doctest: +ELLIPSIS + Traceback (most recent call last): + ... + OverflowError: ... + >>> test_c_long_abs(max_long) == abs(max_long) or (max_long, test_c_long_abs(max_long), abs(max_long)) + True + """ + return c_long_abs(a) + @cython.test_assert_path_exists("//ReturnStatNode//NameNode[@entry.name = 'abs']") @cython.test_fail_if_path_exists("//ReturnStatNode//NameNode[@entry.cname = 'abs']", "//ReturnStatNode//NameNode[@entry.cname = 'labs']") @@ -100,6 +155,21 @@ def ulong_abs(unsigned long a): """ return abs(a) +@cython.test_assert_path_exists("//ReturnStatNode//NameNode[@entry.name = 'abs']") +@cython.test_fail_if_path_exists("//ReturnStatNode//NameNode[@entry.cname = 'abs']", + "//ReturnStatNode//NameNode[@entry.cname = 'labs']") +cdef unsigned long c_ulong_abs(unsigned long a) nogil: + return abs(a) + +def test_c_ulong_abs(unsigned long a): + """ + >>> test_c_ulong_abs(max_long) == abs(max_long) or (max_int, test_c_ulong_abs(max_long), abs(max_long)) + True + >>> test_c_ulong_abs(max_long + 5) == abs(max_long + 5) or (max_long + 5, test_c_ulong_abs(max_long + 5), abs(max_long + 5)) + True + """ + return c_ulong_abs(a) + @cython.overflowcheck(True) @cython.test_assert_path_exists("//ReturnStatNode//NameNode[@entry.name = 'abs']", "//ReturnStatNode//NameNode[@entry.cname = '__Pyx_abs_longlong']") @@ -116,6 +186,25 @@ def long_long_abs(long long a): """ return abs(a) +@cython.overflowcheck(True) +@cython.test_assert_path_exists("//ReturnStatNode//NameNode[@entry.name = 'abs']", + "//ReturnStatNode//NameNode[@entry.cname = '__Pyx_abs_longlong']") +cdef long long c_long_long_abs(long long a) except * nogil: + return abs(a) + +def test_c_long_long_abs(long long a): + """ + >>> test_c_long_long_abs(-(2**33)) == 2**33 + True + >>> test_c_long_long_abs(-max_long_long-1) #doctest: +ELLIPSIS + Traceback (most recent call last): + ... + OverflowError: ... + >>> test_c_long_long_abs(max_long_long) == abs(max_long_long) or (max_long_long, test_c_long_long_abs(max_long_long), abs(max_long_long)) + True + """ + return c_long_long_abs(a) + @cython.test_assert_path_exists("//ReturnStatNode//NameNode[@entry.name = 'abs']", "//ReturnStatNode//NameNode[@entry.cname = 'fabs']") def double_abs(double a): @@ -128,6 +217,20 @@ def double_abs(double a): return abs(a) @cython.test_assert_path_exists("//ReturnStatNode//NameNode[@entry.name = 'abs']", + "//ReturnStatNode//NameNode[@entry.cname = 'fabs']") +cdef double c_double_abs(double a) nogil: + return abs(a) + +def test_c_double_abs(double a): + """ + >>> test_c_double_abs(-5) + 5.0 + >>> test_c_double_abs(-5.5) + 5.5 + """ + return c_double_abs(a) + +@cython.test_assert_path_exists("//ReturnStatNode//NameNode[@entry.name = 'abs']", "//ReturnStatNode//NameNode[@entry.cname = 'fabsf']") def float_abs(float a): """ @@ -139,6 +242,20 @@ def float_abs(float a): return abs(a) @cython.test_assert_path_exists("//ReturnStatNode//NameNode[@entry.name = 'abs']", + "//ReturnStatNode//NameNode[@entry.cname = 'fabsf']") +cdef float c_float_abs(float a) nogil: + return abs(a) + +def test_c_float_abs(float a): + """ + >>> test_c_float_abs(-5) + 5.0 + >>> test_c_float_abs(-5.5) + 5.5 + """ + return c_float_abs(a) + +@cython.test_assert_path_exists("//ReturnStatNode//NameNode[@entry.name = 'abs']", "//ReturnStatNode//NameNode[@entry.cname = '__Pyx_c_abs_double']") def complex_abs(complex a): """ @@ -148,3 +265,17 @@ def complex_abs(complex a): 5.5 """ return abs(a) + +@cython.test_assert_path_exists("//ReturnStatNode//NameNode[@entry.name = 'abs']", + "//ReturnStatNode//NameNode[@entry.cname = '__Pyx_c_abs_double']") +cdef double c_complex_abs(complex a) nogil: + return abs(a) + +def test_c_complex_abs(complex a): + """ + >>> test_c_complex_abs(-5j) + 5.0 + >>> test_c_complex_abs(-5.5j) + 5.5 + """ + return c_complex_abs(a) |