1# ticket: t399
2
3__doc__ = u"""
4>>> test(-2)
5-2
6>>> test(-1)
7-1
8>>> test(0)
90
10>>> test(1)
111
12>>> test(2)
132
14
15>>> test(SSIZE_T_MAX) == SSIZE_T_MAX
16True
17>>> test(SSIZE_T_MIN) == SSIZE_T_MIN
18True
19
20>>> test(SSIZE_T_MAX+1) #doctest: +ELLIPSIS
21Traceback (most recent call last):
22    ...
23OverflowError: ...
24>>> test(SSIZE_T_MIN-1) #doctest: +ELLIPSIS
25Traceback (most recent call last):
26    ...
27OverflowError: ...
28
29>>> test(1<<128) #doctest: +ELLIPSIS
30Traceback (most recent call last):
31    ...
32OverflowError: ...
33>>> test(-(1<<128)) #doctest: +ELLIPSIS
34Traceback (most recent call last):
35    ...
36OverflowError: ...
37
38>>> a = A(1,2)
39>>> a.a == 1
40True
41>>> a.b == 2
42True
43>>> a.foo(5)
445
45>>> a.foo(1 << 180) #doctest: +ELLIPSIS
46Traceback (most recent call last):
47    ...
48OverflowError: ...
49"""
50
51cdef extern from *:
52    ctypedef long ssize_t # XXX This should generate a warning !!!
53    ssize_t PY_SSIZE_T_MAX
54    ssize_t PY_SSIZE_T_MIN
55
56SSIZE_T_MAX = PY_SSIZE_T_MAX
57SSIZE_T_MIN = PY_SSIZE_T_MIN
58
59def test(ssize_t i):
60    return i
61
62cdef class A:
63    cdef public ssize_t a
64    cdef readonly ssize_t b
65
66    def __init__(self, ssize_t a, object b):
67        self.a = a
68        self.b = b
69
70    cpdef ssize_t foo(self, ssize_t x):
71        cdef object o = x
72        return o
73