1DEF FLOAT = 12.5
2DEF EMFLOAT = 5e-1
3DEF EPFLOAT = 5e+1
4DEF FLOAT_NAN = float('nan')
5DEF FLOAT_INFP = float('+inf')
6DEF FLOAT_INFN = float('-inf')
7
8cdef double cdef_float_nan = float('nan')
9cdef double cdef_float_infp = float('+inf')
10cdef double cdef_float_infn = float('-inf')
11
12float_nan = FLOAT_NAN
13float_infp = FLOAT_INFP
14float_infn = FLOAT_INFN
15
16def f():
17    """
18    >>> f()
19    12.5
20    """
21    cdef float f = FLOAT
22    cdef object o = FLOAT
23    assert f == o
24    return f
25
26def emfloat():
27    """
28    >>> emfloat()
29    0.5
30    """
31    cdef float f = EMFLOAT
32    assert f == 5e-1
33    cdef object o = EMFLOAT
34    assert o == 5e-1
35    assert f == o
36    return f
37
38def epfloat():
39    """
40    >>> epfloat()
41    50.0
42    """
43    cdef float f = EPFLOAT
44    assert f == 5e+1
45    cdef object o = EPFLOAT
46    assert o == 5e+1
47    assert f == o
48    return f
49
50def nan1():
51    """
52    >>> nan1()
53    nan
54    """
55    cdef double f = FLOAT_NAN
56    cdef object o = FLOAT_NAN
57    assert str(f) == str(o)
58    return f
59
60def nan2():
61    """
62    >>> nan2()
63    nan
64    """
65    cdef double f = float('nan')
66    cdef object o = float('nan')
67    assert str(f) == str(o)
68    return f
69
70def nan3():
71    """
72    >>> nan3()
73    nan
74    >>> float_nan
75    nan
76    """
77    cdef float f = FLOAT_NAN
78    cdef object o = FLOAT_NAN
79    assert str(f) == str(o)
80    return f
81
82def infp1():
83    """
84    >>> infp1()
85    inf
86    >>> infp1() == float('inf')
87    True
88    """
89    cdef double f = FLOAT_INFP
90    cdef object o = FLOAT_INFP
91    assert f == o
92    return f
93
94def infp2():
95    """
96    >>> infp2()
97    inf
98    >>> infp2() == float('inf')
99    True
100    """
101    cdef double f = float('+inf')
102    cdef object o = float('+inf')
103    assert f == o
104    return f
105
106def infp3():
107    """
108    >>> infp3()
109    inf
110    >>> infp3() == float('inf')
111    True
112    >>> float_infp
113    inf
114    >>> float_infp == float('inf')
115    True
116    """
117    cdef float f = FLOAT_INFP
118    cdef object o = FLOAT_INFP
119    assert f == o
120    return f
121
122def infn1():
123    """
124    >>> infn1()
125    -inf
126    >>> infn1() == float('-inf')
127    True
128    """
129    cdef double f = FLOAT_INFN
130    cdef object o = FLOAT_INFN
131    assert f == o
132    return f
133
134def infn2():
135    """
136    >>> infn2()
137    -inf
138    >>> infn2() == float('-inf')
139    True
140    """
141    cdef double f = float('-inf')
142    cdef object o = float('-inf')
143    assert f == o
144    return f
145
146def infn3():
147    """
148    >>> infn3()
149    -inf
150    >>> infn3() == float('-inf')
151    True
152    >>> float_infn
153    -inf
154    >>> float_infn == float('-inf')
155    True
156    """
157    cdef float f = FLOAT_INFN
158    cdef object o = FLOAT_INFN
159    assert f == o
160    return f
161
162def global_floats():
163    """
164    >>> global_floats()[1:] == (float('+inf'), float('-inf'))
165    True
166    >>> global_floats()[0]
167    nan
168    """
169    return (cdef_float_nan, cdef_float_infp, cdef_float_infn)
170