cython
1from cython cimport typeof
2
3def test(ptrdiff_t i):
4"""
5>>> int(test(0))
60
7>>> int(test(1))
81
9>>> int(test(2))
102
11>>> int(test(-1))
12-1
13>>> int(test(-2))
14-2
15>>> int(test((1<<31)-1))
162147483647
17"""
18return i
19
20cdef class A:
21"""
22>>> try: test(1<<200)
23... except (OverflowError, TypeError): print("ERROR")
24ERROR
25
26>>> a = A(1,2)
27>>> a.a == 1
28True
29>>> a.b == 2
30True
31>>> print(a.foo(5))
325
33>>> try: a.foo(1<<200)
34... except (OverflowError, TypeError): print("ERROR")
35ERROR
36"""
37cdef public ptrdiff_t a
38cdef readonly ptrdiff_t b
39
40def __init__(self, ptrdiff_t a, object b):
41self.a = a
42self.b = b
43
44cpdef ptrdiff_t foo(self, ptrdiff_t x):
45cdef object o = x
46return o
47
48def test_types():
49"""
50>>> test_types()
51"""
52cdef int a = 1, b = 2
53assert typeof(&a - &b) == "ptrdiff_t", typeof(&a - &b)
54assert typeof((&a - &b) + 1) == "ptrdiff_t", typeof((&a - &b) + 1)
55assert typeof(&a + (&b - &a)) == "int *", typeof(&a + (&b - &a))
56