blob: 404b4e85ebe31eba41af529fdc843cf84108690a [file] [log] [blame]
Guido van Rossum5f820362002-04-03 23:01:45 +00001# Test properties of bool promised by PEP 285
2
Barry Warsaw04f357c2002-07-23 19:04:11 +00003from test.test_support import verbose, TestFailed, TESTFN, vereq, have_unicode
Martin v. Löwis2f6d4da2002-04-14 10:22:29 +00004import os
Guido van Rossum5f820362002-04-03 23:01:45 +00005
6def veris(a, b):
7 if a is not b:
8 raise TestFailed, "%r is %r" % (a, b)
9
10def verisnot(a, b):
11 if a is b:
12 raise TestFailed, "%r is %r" % (a, b)
13
14try:
15 class C(bool):
16 pass
17except TypeError:
18 pass
19else:
20 raise TestFailed, "bool should not be subclassable"
21
22try:
23 int.__new__(bool, 0)
24except TypeError:
25 pass
26else:
27 raise TestFailed, "should not be able to create new bool instances"
28
Martin v. Löwis2f6d4da2002-04-14 10:22:29 +000029# checking tp_print slot
30fo = open(TESTFN, "wb")
31print >> fo, False, True
32fo.close()
33fo = open(TESTFN, "rb")
34vereq(fo.read(), 'False True\n')
35fo.close()
36os.remove(TESTFN)
37
38# checking repr and str
39vereq(str(False), 'False')
40vereq(str(True), 'True')
41vereq(repr(False), 'False')
42vereq(repr(True), 'True')
43vereq(eval(repr(False)), False)
44vereq(eval(repr(True)), True)
45
Guido van Rossum5f820362002-04-03 23:01:45 +000046vereq(int(False), 0)
47verisnot(int(False), False)
48vereq(int(True), 1)
49verisnot(int(True), True)
50
51vereq(+False, 0)
52verisnot(+False, False)
53vereq(-False, 0)
54verisnot(-False, False)
55vereq(abs(False), 0)
56verisnot(abs(False), False)
57vereq(+True, 1)
58verisnot(+True, True)
59vereq(-True, -1)
60vereq(abs(True), 1)
61verisnot(abs(True), True)
62vereq(~False, -1)
63vereq(~True, -2)
64
65vereq(False+2, 2)
66vereq(True+2, 3)
67vereq(2+False, 2)
68vereq(2+True, 3)
69
70vereq(False+False, 0)
71verisnot(False+False, False)
72vereq(False+True, 1)
73verisnot(False+True, True)
74vereq(True+False, 1)
75verisnot(True+False, True)
76vereq(True+True, 2)
77
78vereq(True-True, 0)
79verisnot(True-True, False)
80vereq(False-False, 0)
81verisnot(False-False, False)
82vereq(True-False, 1)
83verisnot(True-False, True)
84vereq(False-True, -1)
85
86vereq(True*1, 1)
87vereq(False*1, 0)
88verisnot(False*1, False)
89
90vereq(True/1, 1)
91verisnot(True/1, True)
92vereq(False/1, 0)
93verisnot(False/1, False)
94
95for b in False, True:
96 for i in 0, 1, 2:
97 vereq(b**i, int(b)**i)
98 verisnot(b**i, bool(int(b)**i))
99
100for a in False, True:
101 for b in False, True:
102 veris(a&b, bool(int(a)&int(b)))
103 veris(a|b, bool(int(a)|int(b)))
104 veris(a^b, bool(int(a)^int(b)))
105 vereq(a&int(b), int(a)&int(b))
106 verisnot(a&int(b), bool(int(a)&int(b)))
107 vereq(a|int(b), int(a)|int(b))
108 verisnot(a|int(b), bool(int(a)|int(b)))
109 vereq(a^int(b), int(a)^int(b))
110 verisnot(a^int(b), bool(int(a)^int(b)))
111 vereq(int(a)&b, int(a)&int(b))
112 verisnot(int(a)&b, bool(int(a)&int(b)))
113 vereq(int(a)|b, int(a)|int(b))
114 verisnot(int(a)|b, bool(int(a)|int(b)))
115 vereq(int(a)^b, int(a)^int(b))
116 verisnot(int(a)^b, bool(int(a)^int(b)))
117
118veris(1==1, True)
119veris(1==0, False)
120# XXX <, <=, >, >=, !=
121
122x = [1]
123veris(x is x, True)
124veris(x is not x, False)
125
126veris(1 in x, True)
127veris(0 in x, False)
128veris(1 not in x, False)
129veris(0 not in x, True)
130
131veris(not True, False)
132veris(not False, True)
133
134veris(bool(10), True)
135veris(bool(1), True)
136veris(bool(-1), True)
137veris(bool(0), False)
138veris(bool("hello"), True)
139veris(bool(""), False)
140
141veris(hasattr([], "append"), True)
142veris(hasattr([], "wobble"), False)
143
144veris(callable(len), True)
145veris(callable(1), False)
146
147veris(isinstance(True, bool), True)
148veris(isinstance(False, bool), True)
149veris(isinstance(True, int), True)
150veris(isinstance(False, int), True)
151veris(isinstance(1, bool), False)
152veris(isinstance(0, bool), False)
153
154veris(issubclass(bool, int), True)
155veris(issubclass(int, bool), False)
156
157veris({}.has_key(1), False)
158veris({1:1}.has_key(1), True)
159
160veris("xyz".endswith("z"), True)
161veris("xyz".endswith("x"), False)
162veris("xyz0123".isalnum(), True)
163veris("@#$%".isalnum(), False)
164veris("xyz".isalpha(), True)
165veris("@#$%".isalpha(), False)
166veris("0123".isdigit(), True)
167veris("xyz".isdigit(), False)
168veris("xyz".islower(), True)
169veris("XYZ".islower(), False)
170veris(" ".isspace(), True)
171veris("XYZ".isspace(), False)
172veris("X".istitle(), True)
173veris("x".istitle(), False)
174veris("XYZ".isupper(), True)
175veris("xyz".isupper(), False)
176veris("xyz".startswith("x"), True)
177veris("xyz".startswith("z"), False)
178
Michael W. Hudson7c6a4ad2002-05-20 14:22:28 +0000179if have_unicode:
180 veris(unicode("xyz", 'ascii').endswith(unicode("z", 'ascii')), True)
181 veris(unicode("xyz", 'ascii').endswith(unicode("x", 'ascii')), False)
182 veris(unicode("xyz0123", 'ascii').isalnum(), True)
183 veris(unicode("@#$%", 'ascii').isalnum(), False)
184 veris(unicode("xyz", 'ascii').isalpha(), True)
185 veris(unicode("@#$%", 'ascii').isalpha(), False)
186 veris(unicode("0123", 'ascii').isdecimal(), True)
187 veris(unicode("xyz", 'ascii').isdecimal(), False)
188 veris(unicode("0123", 'ascii').isdigit(), True)
189 veris(unicode("xyz", 'ascii').isdigit(), False)
190 veris(unicode("xyz", 'ascii').islower(), True)
191 veris(unicode("XYZ", 'ascii').islower(), False)
192 veris(unicode("0123", 'ascii').isnumeric(), True)
193 veris(unicode("xyz", 'ascii').isnumeric(), False)
194 veris(unicode(" ", 'ascii').isspace(), True)
195 veris(unicode("XYZ", 'ascii').isspace(), False)
196 veris(unicode("X", 'ascii').istitle(), True)
197 veris(unicode("x", 'ascii').istitle(), False)
198 veris(unicode("XYZ", 'ascii').isupper(), True)
199 veris(unicode("xyz", 'ascii').isupper(), False)
200 veris(unicode("xyz", 'ascii').startswith(unicode("x", 'ascii')), True)
201 veris(unicode("xyz", 'ascii').startswith(unicode("z", 'ascii')), False)
Guido van Rossum5f820362002-04-03 23:01:45 +0000202
203f = file(TESTFN, "w")
204veris(f.closed, False)
205f.close()
206veris(f.closed, True)
Guido van Rossum5f820362002-04-03 23:01:45 +0000207os.remove(TESTFN)
208
209import operator
210veris(operator.truth(0), False)
211veris(operator.truth(1), True)
212veris(operator.isCallable(0), False)
213veris(operator.isCallable(len), True)
214veris(operator.isNumberType(None), False)
215veris(operator.isNumberType(0), True)
216veris(operator.not_(1), False)
217veris(operator.not_(0), True)
218veris(operator.isSequenceType(0), False)
219veris(operator.isSequenceType([]), True)
220veris(operator.contains([], 1), False)
221veris(operator.contains([1], 1), True)
Michael W. Hudson5efaf7e2002-06-11 10:55:12 +0000222veris(operator.isMappingType(1), False)
Guido van Rossum5f820362002-04-03 23:01:45 +0000223veris(operator.isMappingType({}), True)
224veris(operator.lt(0, 0), False)
225veris(operator.lt(0, 1), True)
226
227import marshal
228veris(marshal.loads(marshal.dumps(True)), True)
229veris(marshal.loads(marshal.dumps(False)), False)
230
231import pickle
232veris(pickle.loads(pickle.dumps(True)), True)
233veris(pickle.loads(pickle.dumps(False)), False)
Guido van Rossumd1bfe5e2002-04-05 20:57:02 +0000234veris(pickle.loads(pickle.dumps(True, True)), True)
235veris(pickle.loads(pickle.dumps(False, True)), False)
Guido van Rossum5f820362002-04-03 23:01:45 +0000236
237import cPickle
238veris(cPickle.loads(cPickle.dumps(True)), True)
239veris(cPickle.loads(cPickle.dumps(False)), False)
Guido van Rossumd1bfe5e2002-04-05 20:57:02 +0000240veris(cPickle.loads(cPickle.dumps(True, True)), True)
241veris(cPickle.loads(cPickle.dumps(False, True)), False)
Guido van Rossum5f820362002-04-03 23:01:45 +0000242
243veris(pickle.loads(cPickle.dumps(True)), True)
244veris(pickle.loads(cPickle.dumps(False)), False)
Guido van Rossumd1bfe5e2002-04-05 20:57:02 +0000245veris(pickle.loads(cPickle.dumps(True, True)), True)
246veris(pickle.loads(cPickle.dumps(False, True)), False)
Guido van Rossum5f820362002-04-03 23:01:45 +0000247
248veris(cPickle.loads(pickle.dumps(True)), True)
249veris(cPickle.loads(pickle.dumps(False)), False)
Guido van Rossumd1bfe5e2002-04-05 20:57:02 +0000250veris(cPickle.loads(pickle.dumps(True, True)), True)
251veris(cPickle.loads(pickle.dumps(False, True)), False)
Guido van Rossum5f820362002-04-03 23:01:45 +0000252
Guido van Rossume2763392002-04-05 19:30:08 +0000253# Test for specific backwards-compatible pickle values
254vereq(pickle.dumps(True), "I01\n.")
255vereq(pickle.dumps(False), "I00\n.")
256vereq(cPickle.dumps(True), "I01\n.")
257vereq(cPickle.dumps(False), "I00\n.")
Guido van Rossumd1bfe5e2002-04-05 20:57:02 +0000258vereq(pickle.dumps(True, True), "I01\n.")
259vereq(pickle.dumps(False, True), "I00\n.")
260vereq(cPickle.dumps(True, True), "I01\n.")
261vereq(cPickle.dumps(False, True), "I00\n.")
Guido van Rossume2763392002-04-05 19:30:08 +0000262
Guido van Rossum5f820362002-04-03 23:01:45 +0000263if verbose:
264 print "All OK"