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