1cimport cython 2 3 4def bigint(x): 5 print(str(x).rstrip('L')) 6 7 8def mixed_test(): 9 """ 10 >>> mixed_test() 11 (30, 22) 12 """ 13 cdef int int1, int2, int3 14 cdef char *ptr1, *ptr2 = "test", *ptr3 = "toast" 15 int2 = 10 16 int3 = 20 17 obj1 = 1 18 obj2 = 2 19 obj3 = 3 20 int1 = int2 + int3 21 ptr1 = ptr2 + int3 22 ptr1 = int2 + ptr3 23 obj1 = obj2 + int3 24 return int1, obj1 25 26 27@cython.test_fail_if_path_exists('//AddNode') 28def add_x_1(x): 29 """ 30 >>> add_x_1(0) 31 1 32 >>> add_x_1(1) 33 2 34 >>> add_x_1(-1) 35 0 36 >>> bigint(2**50 + 1) 37 1125899906842625 38 >>> bigint(add_x_1(2**50)) 39 1125899906842625 40 >>> add_x_1(1.5) 41 2.5 42 >>> add_x_1(-1.5) 43 -0.5 44 >>> try: add_x_1("abc") 45 ... except TypeError: pass 46 """ 47 return x + 1 48 49 50@cython.test_fail_if_path_exists('//AddNode') 51def add_x_1f(x): 52 """ 53 >>> add_x_1f(0) 54 1.0 55 >>> add_x_1f(1) 56 2.0 57 >>> add_x_1f(-1) 58 0.0 59 >>> add_x_1f(1.5) 60 2.5 61 >>> add_x_1f(-1.5) 62 -0.5 63 >>> try: add_x_1f("abc") 64 ... except TypeError: pass 65 """ 66 return x + 1.0 67 68 69@cython.test_fail_if_path_exists('//AddNode') 70def add_x_large(x): 71 """ 72 >>> add_x_large(0) 73 1073741824 74 >>> add_x_large(1) 75 1073741825 76 >>> add_x_large(-1) 77 1073741823 78 >>> add_x_large(1.5) 79 1073741825.5 80 >>> add_x_large(-2.0**31) 81 -1073741824.0 82 >>> bigint(add_x_large(2**30 + 1)) 83 2147483649 84 >>> bigint(2**50 + 1 + 2**30) 85 1125900980584449 86 >>> bigint(add_x_large(2**50 + 1)) 87 1125900980584449 88 >>> bigint(2**31 + 2**30) 89 3221225472 90 >>> bigint(add_x_large(2**31)) 91 3221225472 92 >>> bigint(2**66 + 2**30) 93 73786976295911948288 94 >>> bigint(add_x_large(2**66)) 95 73786976295911948288 96 >>> try: add_x_large("abc") 97 ... except TypeError: pass 98 """ 99 return x + 2**30 100 101 102@cython.test_fail_if_path_exists('//AddNode') 103def add_1_x(x): 104 """ 105 >>> add_1_x(0) 106 1 107 >>> add_1_x(1) 108 2 109 >>> add_1_x(-1) 110 0 111 >>> bigint(2**50 + 1) 112 1125899906842625 113 >>> bigint(add_1_x(2**50)) 114 1125899906842625 115 >>> add_1_x(1.5) 116 2.5 117 >>> add_1_x(-1.5) 118 -0.5 119 >>> try: add_1_x("abc") 120 ... except TypeError: pass 121 """ 122 return 1 + x 123 124 125@cython.test_fail_if_path_exists('//AddNode') 126def add_1f_x(x): 127 """ 128 >>> add_1f_x(0) 129 1.0 130 >>> add_1f_x(1) 131 2.0 132 >>> add_1f_x(-1) 133 0.0 134 >>> 1.0 + 2**52 135 4503599627370497.0 136 >>> add_1f_x(2**52) 137 4503599627370497.0 138 >>> add_1f_x(2**60) == 1.0 + 2**60 or add_1f_x(2**60) 139 True 140 >>> add_1f_x(1.5) 141 2.5 142 >>> add_1f_x(-1.5) 143 -0.5 144 >>> try: add_1f_x("abc") 145 ... except TypeError: pass 146 """ 147 return 1.0 + x 148 149 150@cython.test_fail_if_path_exists('//AddNode') 151def add_large_x(x): 152 """ 153 >>> add_large_x(0) 154 1073741824 155 >>> add_large_x(1) 156 1073741825 157 >>> add_large_x(-1) 158 1073741823 159 >>> add_large_x(1.5) 160 1073741825.5 161 >>> add_large_x(-2.0**30) 162 0.0 163 >>> add_large_x(-2.0**31) 164 -1073741824.0 165 >>> try: add_large_x("abc") 166 ... except TypeError: pass 167 """ 168 return 2**30 + x 169