1cimport cython 2 3 4def bigint(x): 5 print(str(x).rstrip('L')) 6 7 8def mixed_test(): 9 """ 10 >>> mixed_test() 11 (-1, -1) 12 """ 13 cdef int int1, int2, int3 14 obj1 = 1 15 obj2 = 2 16 obj3 = 3 17 int2 = 2 18 int3 = 3 19 20 int1 = int2 - int3 21 obj1 = obj2 - int3 22 return int1, obj1 23 24 25def pointer_test(): 26 """ 27 >>> pointer_test() 28 0 29 """ 30 cdef int int1, int2, int3 31 cdef char *ptr1, *ptr2, *ptr3 32 int2 = 2 33 int3 = 3 34 ptr2 = "test" 35 ptr3 = ptr2 36 37 ptr1 = ptr2 - int3 38 int1 = ptr2 - ptr3 39 return int1 40 41 42@cython.test_fail_if_path_exists('//SubNode') 43def sub_x_1(x): 44 """ 45 >>> sub_x_1(0) 46 -1 47 >>> sub_x_1(1) 48 0 49 >>> sub_x_1(-1) 50 -2 51 >>> bigint(2**50 - 1) 52 1125899906842623 53 >>> bigint(sub_x_1(2**50)) 54 1125899906842623 55 >>> sub_x_1(1.5) 56 0.5 57 >>> sub_x_1(-1.5) 58 -2.5 59 >>> try: sub_x_1("abc") 60 ... except TypeError: pass 61 """ 62 return x - 1 63 64 65@cython.test_fail_if_path_exists('//SubNode') 66def sub_x_1f(x): 67 """ 68 >>> sub_x_1f(0) 69 -1.0 70 >>> sub_x_1f(1) 71 0.0 72 >>> sub_x_1f(-1) 73 -2.0 74 >>> 2**52 - 1.0 75 4503599627370495.0 76 >>> sub_x_1f(2**52) 77 4503599627370495.0 78 >>> sub_x_1f(2**60) == 2**60 - 1.0 or sub_x_1f(2**60) 79 True 80 >>> sub_x_1f(1.5) 81 0.5 82 >>> sub_x_1f(-1.5) 83 -2.5 84 >>> try: sub_x_1f("abc") 85 ... except TypeError: pass 86 """ 87 return x - 1.0 88 89 90@cython.test_fail_if_path_exists('//SubNode') 91def sub_x_large(x): 92 """ 93 >>> sub_x_large(0) 94 -1073741824 95 >>> sub_x_large(1) 96 -1073741823 97 >>> sub_x_large(-1) 98 -1073741825 99 >>> bigint(2**50 - 2**30) 100 1125898833100800 101 >>> bigint(sub_x_large(2**50)) 102 1125898833100800 103 >>> sub_x_large(2.0**30) 104 0.0 105 >>> sub_x_large(2.0**30 + 1) 106 1.0 107 >>> sub_x_large(2.0**30 - 1) 108 -1.0 109 >>> 2.0 ** 31 - 2**30 110 1073741824.0 111 >>> sub_x_large(2.0**31) 112 1073741824.0 113 >>> try: sub_x_large("abc") 114 ... except TypeError: pass 115 """ 116 return x - 2**30 117 118 119@cython.test_fail_if_path_exists('//SubNode') 120def sub_1_x(x): 121 """ 122 >>> sub_1_x(0) 123 1 124 >>> sub_1_x(-1) 125 2 126 >>> sub_1_x(1) 127 0 128 >>> bigint(1 - 2**50) 129 -1125899906842623 130 >>> bigint(sub_1_x(2**50)) 131 -1125899906842623 132 >>> sub_1_x(1.5) 133 -0.5 134 >>> sub_1_x(-1.5) 135 2.5 136 >>> try: sub_1_x("abc") 137 ... except TypeError: pass 138 """ 139 return 1 - x 140 141 142@cython.test_fail_if_path_exists('//SubNode') 143def sub_1f_x(x): 144 """ 145 >>> sub_1f_x(0) 146 1.0 147 >>> sub_1f_x(-1) 148 2.0 149 >>> sub_1f_x(1) 150 0.0 151 >>> 1.0 - 2**52 152 -4503599627370495.0 153 >>> sub_1f_x(2**52) 154 -4503599627370495.0 155 >>> sub_1f_x(2**60) == 1.0 - 2**60 or sub_1f_x(2**60) 156 True 157 >>> sub_1f_x(1.5) 158 -0.5 159 >>> sub_1f_x(-1.5) 160 2.5 161 >>> try: sub_1f_x("abc") 162 ... except TypeError: pass 163 """ 164 return 1.0 - x 165 166 167@cython.test_fail_if_path_exists('//SubNode') 168def sub_large_x(x): 169 """ 170 >>> sub_large_x(0) 171 1073741824 172 >>> sub_large_x(-1) 173 1073741825 174 >>> sub_large_x(1) 175 1073741823 176 >>> sub_large_x(2**30) 177 0 178 >>> bigint(2**30 - 2**31) 179 -1073741824 180 >>> bigint(sub_large_x(2**31)) 181 -1073741824 182 >>> sub_large_x(2.0**30) 183 0.0 184 >>> sub_large_x(2.0**31) 185 -1073741824.0 186 >>> sub_large_x(2.0**30 + 1) 187 -1.0 188 >>> sub_large_x(2.0**30 - 1) 189 1.0 190 >>> try: sub_large_x("abc") 191 ... except TypeError: pass 192 """ 193 return 2**30 - x 194 195 196def sub0(x): 197 """ 198 >>> sub0(0) 199 (0, 0) 200 >>> sub0(1) 201 (1, -1) 202 >>> sub0(-1) 203 (-1, 1) 204 >>> sub0(99) 205 (99, -99) 206 >>> a, b = sub0(2**32) 207 >>> bigint(a) 208 4294967296 209 >>> bigint(b) 210 -4294967296 211 >>> a, b = sub0(-2**32) 212 >>> bigint(a) 213 -4294967296 214 >>> bigint(b) 215 4294967296 216 """ 217 return x - 0, 0 - x 218