1# mode: run 2# ticket: 698 3# distutils: extra_compile_args=-fwrapv 4 5cdef extern from *: 6 int INT_MAX 7 long LONG_MAX 8 9max_int = INT_MAX 10max_long = LONG_MAX 11max_long_long = (<object>2) ** (sizeof(long long) * 8 - 1) - 1 12 13 14cimport cython 15 16def abs_as_name(): 17 """ 18 >>> _abs = abs_as_name() 19 >>> _abs(-5) 20 5 21 """ 22 x = abs 23 return x 24 25def py_abs(a): 26 """ 27 >>> py_abs(-5) 28 5 29 >>> py_abs(-5.5) 30 5.5 31 """ 32 return abs(a) 33 34@cython.test_assert_path_exists("//ReturnStatNode//NameNode[@entry.name = 'abs']", 35 "//ReturnStatNode//NameNode[@entry.cname = 'abs']") 36def sub_abs(int a): 37 """ 38 >>> sub_abs(5) 39 (-5, 95) 40 >>> sub_abs(105) 41 (-105, -5) 42 """ 43 return -abs(a), 100 - abs(a) 44 45@cython.overflowcheck(True) 46@cython.test_assert_path_exists("//ReturnStatNode//NameNode[@entry.name = 'abs']", 47 "//ReturnStatNode//NameNode[@entry.cname = 'abs']") 48def int_abs(int a): 49 """ 50 >>> int_abs(-5) == 5 51 True 52 >>> int_abs(-5.1) == 5 53 True 54 >>> int_abs(-max_int-1) #doctest: +ELLIPSIS 55 Traceback (most recent call last): 56 ... 57 OverflowError: ... 58 >>> int_abs(max_int) == abs(max_int) or (max_int, int_abs(max_int), abs(max_int)) 59 True 60 """ 61 return abs(a) 62 63@cython.test_assert_path_exists("//ReturnStatNode//NameNode[@entry.name = 'abs']") 64@cython.test_fail_if_path_exists("//ReturnStatNode//NameNode[@entry.cname = 'abs']", 65 "//ReturnStatNode//NameNode[@entry.cname = 'labs']") 66def uint_abs(unsigned int a): 67 """ 68 >>> uint_abs(max_int) == abs(max_int) or (max_int, uint_abs(max_int), abs(max_int)) 69 True 70 """ 71 return abs(a) 72 73@cython.overflowcheck(True) 74@cython.test_assert_path_exists("//ReturnStatNode//NameNode[@entry.name = 'abs']", 75 "//ReturnStatNode//NameNode[@entry.cname = 'labs']") 76def long_abs(long a): 77 """ 78 >>> long_abs(-5) == 5 79 True 80 >>> long_abs(-5.1) == 5 81 True 82 >>> long_abs(-max_long-1) #doctest: +ELLIPSIS 83 Traceback (most recent call last): 84 ... 85 OverflowError: ... 86 >>> long_abs(max_long) == abs(max_long) or (max_long, long_abs(max_long), abs(max_long)) 87 True 88 """ 89 return abs(a) 90 91@cython.test_assert_path_exists("//ReturnStatNode//NameNode[@entry.name = 'abs']") 92@cython.test_fail_if_path_exists("//ReturnStatNode//NameNode[@entry.cname = 'abs']", 93 "//ReturnStatNode//NameNode[@entry.cname = 'labs']") 94def ulong_abs(unsigned long a): 95 """ 96 >>> ulong_abs(max_long) == abs(max_long) or (max_int, ulong_abs(max_long), abs(max_long)) 97 True 98 >>> ulong_abs(max_long + 5) == abs(max_long + 5) or (max_long + 5, ulong_abs(max_long + 5), abs(max_long + 5)) 99 True 100 """ 101 return abs(a) 102 103@cython.overflowcheck(True) 104@cython.test_assert_path_exists("//ReturnStatNode//NameNode[@entry.name = 'abs']", 105 "//ReturnStatNode//NameNode[@entry.cname = '__Pyx_abs_longlong']") 106def long_long_abs(long long a): 107 """ 108 >>> long_long_abs(-(2**33)) == 2**33 109 True 110 >>> long_long_abs(-max_long_long-1) #doctest: +ELLIPSIS 111 Traceback (most recent call last): 112 ... 113 OverflowError: ... 114 >>> long_long_abs(max_long_long) == abs(max_long_long) or (max_long_long, long_long_abs(max_long_long), abs(max_long_long)) 115 True 116 """ 117 return abs(a) 118 119@cython.test_assert_path_exists("//ReturnStatNode//NameNode[@entry.name = 'abs']", 120 "//ReturnStatNode//NameNode[@entry.cname = 'fabs']") 121def double_abs(double a): 122 """ 123 >>> double_abs(-5) 124 5.0 125 >>> double_abs(-5.5) 126 5.5 127 """ 128 return abs(a) 129 130@cython.test_assert_path_exists("//ReturnStatNode//NameNode[@entry.name = 'abs']", 131 "//ReturnStatNode//NameNode[@entry.cname = 'fabsf']") 132def float_abs(float a): 133 """ 134 >>> float_abs(-5) 135 5.0 136 >>> float_abs(-5.5) 137 5.5 138 """ 139 return abs(a) 140 141@cython.test_assert_path_exists("//ReturnStatNode//NameNode[@entry.name = 'abs']", 142 "//ReturnStatNode//NameNode[@entry.cname = '__Pyx_c_abs_double']") 143def complex_abs(complex a): 144 """ 145 >>> complex_abs(-5j) 146 5.0 147 >>> complex_abs(-5.5j) 148 5.5 149 """ 150 return abs(a) 151