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