Py3 test fix
[cython.git] / tests / run / arithmetic_analyse_types.pyx
1 # ticket: 676
2 # tag: cpp
3
4 from cython cimport typeof
5
6 cdef extern from "arithmetic_analyse_types_helper.h":
7     cdef struct short_return:
8         char *msg
9     cdef struct int_return:
10         char *msg
11     cdef struct longlong_return:
12         char *msg
13     cdef short_return f(short)
14     cdef int_return f(int)
15     cdef longlong_return f(long long)
16
17 def short_binop(short val):
18     """
19     Arithmetic in C is always done with at least int precision.
20     
21     >>> print(short_binop(3))
22     int called
23     """
24     assert typeof(val + val) == "int", typeof(val + val)
25     assert typeof(val - val) == "int", typeof(val - val)
26     assert typeof(val & val) == "int", typeof(val & val)
27     cdef int_return x = f(val + val)
28     return x.msg.decode('ASCII')
29
30 def short_unnop(short val):
31     """
32     Arithmetic in C is always done with at least int precision.
33     
34     >>> print(short_unnop(3))
35     int called
36     """
37     cdef int_return x = f(-val)
38     return x.msg.decode('ASCII')
39
40 def longlong_binop(long long val):
41     """
42     >>> print(longlong_binop(3))
43     long long called
44     """
45     cdef longlong_return x = f(val * val)
46     return x.msg.decode('ASCII')
47
48 def longlong_unnop(long long val):
49     """
50     >>> print(longlong_unnop(3))
51     long long called
52     """
53     cdef longlong_return x = f(~val)
54     return x.msg.decode('ASCII')
55
56
57 def test_bint(bint a):
58     """
59     >>> test_bint(True)
60     """
61     assert typeof(a + a) == "int", typeof(a + a)
62     assert typeof(a & a) == "bint", typeof(a & a)