1
2# tests copied from test/test_bool.py in Py2.7
3
4cdef assertEqual(a,b):
5    assert a == b, '%r != %r' % (a,b)
6
7cdef assertIs(a,b):
8    assert a is b, '%r is not %r' % (a,b)
9
10cdef assertIsNot(a,b):
11    assert a is not b, '%r is %r' % (a,b)
12
13cdef assertNotIsInstance(a,b):
14    assert not isinstance(a,b), 'isinstance(%r, %s)' % (a,b)
15
16
17def test_int():
18    """
19    >>> test_int()
20    """
21    assertEqual(int(False), 0)
22    assertIsNot(int(False), False)
23    assertEqual(int(True), 1)
24    assertIsNot(int(True), True)
25
26def test_float():
27    """
28    >>> test_float()
29    """
30    assertEqual(float(False), 0.0)
31    assertIsNot(float(False), False)
32    assertEqual(float(True), 1.0)
33    assertIsNot(float(True), True)
34
35def test_repr():
36    """
37    >>> test_repr()
38    """
39    assertEqual(repr(False), 'False')
40    assertEqual(repr(True), 'True')
41    assertEqual(eval(repr(False)), False)
42    assertEqual(eval(repr(True)), True)
43
44def test_str():
45    """
46    >>> test_str()
47    """
48    assertEqual(str(False), 'False')
49    assertEqual(str(True), 'True')
50
51def test_math():
52    """
53    >>> test_math()
54    """
55    assertEqual(+False, 0)
56    assertIsNot(+False, False)
57    assertEqual(-False, 0)
58    assertIsNot(-False, False)
59    assertEqual(abs(False), 0)
60    assertIsNot(abs(False), False)
61    assertEqual(+True, 1)
62    assertIsNot(+True, True)
63    assertEqual(-True, -1)
64    assertEqual(abs(True), 1)
65    assertIsNot(abs(True), True)
66    assertEqual(~False, -1)
67    assertEqual(~True, -2)
68
69    assertEqual(False+2, 2)
70    assertEqual(True+2, 3)
71    assertEqual(2+False, 2)
72    assertEqual(2+True, 3)
73
74    assertEqual(False+False, 0)
75    assertIsNot(False+False, False)
76    assertEqual(False+True, 1)
77    assertIsNot(False+True, True)
78    assertEqual(True+False, 1)
79    assertIsNot(True+False, True)
80    assertEqual(True+True, 2)
81
82    assertEqual(True-True, 0)
83    assertIsNot(True-True, False)
84    assertEqual(False-False, 0)
85    assertIsNot(False-False, False)
86    assertEqual(True-False, 1)
87    assertIsNot(True-False, True)
88    assertEqual(False-True, -1)
89
90    assertEqual(True*1, 1)
91    assertEqual(False*1, 0)
92    assertIsNot(False*1, False)
93
94    assertEqual(True/1, 1)
95    assertIsNot(True/1, True)
96    assertEqual(False/1, 0)
97    assertIsNot(False/1, False)
98
99    for b in False, True:
100        for i in 0, 1, 2:
101            assertEqual(b**i, int(b)**i)
102            assertIsNot(b**i, bool(int(b)**i))
103
104    for a in False, True:
105        for b in False, True:
106            assertIs(a&b, bool(int(a)&int(b)))
107            assertIs(a|b, bool(int(a)|int(b)))
108            assertIs(a^b, bool(int(a)^int(b)))
109            assertEqual(a&int(b), int(a)&int(b))
110            assertIsNot(a&int(b), bool(int(a)&int(b)))
111            assertEqual(a|int(b), int(a)|int(b))
112            assertIsNot(a|int(b), bool(int(a)|int(b)))
113            assertEqual(a^int(b), int(a)^int(b))
114            assertIsNot(a^int(b), bool(int(a)^int(b)))
115            assertEqual(int(a)&b, int(a)&int(b))
116            assertIsNot(int(a)&b, bool(int(a)&int(b)))
117            assertEqual(int(a)|b, int(a)|int(b))
118            assertIsNot(int(a)|b, bool(int(a)|int(b)))
119            assertEqual(int(a)^b, int(a)^int(b))
120            assertIsNot(int(a)^b, bool(int(a)^int(b)))
121
122    assertIs(1==1, True)
123    assertIs(1==0, False)
124    assertIs(0<1, True)
125    assertIs(1<0, False)
126    assertIs(0<=0, True)
127    assertIs(1<=0, False)
128    assertIs(1>0, True)
129    assertIs(1>1, False)
130    assertIs(1>=1, True)
131    assertIs(0>=1, False)
132    assertIs(0!=1, True)
133    assertIs(0!=0, False)
134
135    y = x = [1]
136    assertIs(x is y, True)
137    assertIs(x is not y, False)
138
139    assertIs(1 in x, True)
140    assertIs(0 in x, False)
141    assertIs(1 not in x, False)
142    assertIs(0 not in x, True)
143
144    y = x = {1: 2}
145    assertIs(x is y, True)
146    assertIs(x is not y, False)
147
148    assertIs(1 in x, True)
149    assertIs(0 in x, False)
150    assertIs(1 not in x, False)
151    assertIs(0 not in x, True)
152
153    assertIs(not True, False)
154    assertIs(not False, True)
155
156def test_convert():
157    """
158    >>> test_convert()
159    """
160    assertIs(bool(10), True)
161    assertIs(bool(1), True)
162    assertIs(bool(-1), True)
163    assertIs(bool(0), False)
164    assertIs(bool("hello"), True)
165    assertIs(bool(""), False)
166    assertIs(bool(), False)
167
168def test_isinstance():
169    """
170    >>> test_isinstance()
171    """
172    assertIs(isinstance(True, bool), True)
173    assertIs(isinstance(False, bool), True)
174    assertIs(isinstance(True, int), True)
175    assertIs(isinstance(False, int), True)
176    assertIs(isinstance(1, bool), False)
177    assertIs(isinstance(0, bool), False)
178
179def test_issubclass():
180    """
181    >>> test_issubclass()
182    """
183    assertIs(issubclass(bool, int), True)
184    assertIs(issubclass(int, bool), False)
185
186def test_boolean():
187    """
188    >>> test_boolean()
189    """
190    assertEqual(True & 1, 1)
191    assertNotIsInstance(True & 1, bool)
192    assertIs(True & True, True)
193
194    assertEqual(True | 1, 1)
195    assertNotIsInstance(True | 1, bool)
196    assertIs(True | True, True)
197
198    assertEqual(True ^ 1, 0)
199    assertNotIsInstance(True ^ 1, bool)
200    assertIs(True ^ True, False)
201