summaryrefslogtreecommitdiff
path: root/tests/run/builtin_abs.pyx
diff options
context:
space:
mode:
Diffstat (limited to 'tests/run/builtin_abs.pyx')
-rw-r--r--tests/run/builtin_abs.pyx133
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)