blob: a0a03ee0cf59b856116a5c846674ea8874dbadf3 [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)
Guido van Rossumaa86e352003-04-19 18:15:10 +0000140veris(bool(), False)
Guido van Rossum5f820362002-04-03 23:01:45 +0000141
142veris(hasattr([], "append"), True)
143veris(hasattr([], "wobble"), False)
144
145veris(callable(len), True)
146veris(callable(1), False)
147
148veris(isinstance(True, bool), True)
149veris(isinstance(False, bool), True)
150veris(isinstance(True, int), True)
151veris(isinstance(False, int), True)
152veris(isinstance(1, bool), False)
153veris(isinstance(0, bool), False)
154
155veris(issubclass(bool, int), True)
156veris(issubclass(int, bool), False)
157
158veris({}.has_key(1), False)
159veris({1:1}.has_key(1), True)
160
161veris("xyz".endswith("z"), True)
162veris("xyz".endswith("x"), False)
163veris("xyz0123".isalnum(), True)
164veris("@#$%".isalnum(), False)
165veris("xyz".isalpha(), True)
166veris("@#$%".isalpha(), False)
167veris("0123".isdigit(), True)
168veris("xyz".isdigit(), False)
169veris("xyz".islower(), True)
170veris("XYZ".islower(), False)
171veris(" ".isspace(), True)
172veris("XYZ".isspace(), False)
173veris("X".istitle(), True)
174veris("x".istitle(), False)
175veris("XYZ".isupper(), True)
176veris("xyz".isupper(), False)
177veris("xyz".startswith("x"), True)
178veris("xyz".startswith("z"), False)
179
Michael W. Hudson7c6a4ad2002-05-20 14:22:28 +0000180if have_unicode:
181 veris(unicode("xyz", 'ascii').endswith(unicode("z", 'ascii')), True)
182 veris(unicode("xyz", 'ascii').endswith(unicode("x", 'ascii')), False)
183 veris(unicode("xyz0123", 'ascii').isalnum(), True)
184 veris(unicode("@#$%", 'ascii').isalnum(), False)
185 veris(unicode("xyz", 'ascii').isalpha(), True)
186 veris(unicode("@#$%", 'ascii').isalpha(), False)
187 veris(unicode("0123", 'ascii').isdecimal(), True)
188 veris(unicode("xyz", 'ascii').isdecimal(), False)
189 veris(unicode("0123", 'ascii').isdigit(), True)
190 veris(unicode("xyz", 'ascii').isdigit(), False)
191 veris(unicode("xyz", 'ascii').islower(), True)
192 veris(unicode("XYZ", 'ascii').islower(), False)
193 veris(unicode("0123", 'ascii').isnumeric(), True)
194 veris(unicode("xyz", 'ascii').isnumeric(), False)
195 veris(unicode(" ", 'ascii').isspace(), True)
196 veris(unicode("XYZ", 'ascii').isspace(), False)
197 veris(unicode("X", 'ascii').istitle(), True)
198 veris(unicode("x", 'ascii').istitle(), False)
199 veris(unicode("XYZ", 'ascii').isupper(), True)
200 veris(unicode("xyz", 'ascii').isupper(), False)
201 veris(unicode("xyz", 'ascii').startswith(unicode("x", 'ascii')), True)
202 veris(unicode("xyz", 'ascii').startswith(unicode("z", 'ascii')), False)
Guido van Rossum5f820362002-04-03 23:01:45 +0000203
204f = file(TESTFN, "w")
205veris(f.closed, False)
206f.close()
207veris(f.closed, True)
Guido van Rossum5f820362002-04-03 23:01:45 +0000208os.remove(TESTFN)
209
210import operator
211veris(operator.truth(0), False)
212veris(operator.truth(1), True)
213veris(operator.isCallable(0), False)
214veris(operator.isCallable(len), True)
215veris(operator.isNumberType(None), False)
216veris(operator.isNumberType(0), True)
217veris(operator.not_(1), False)
218veris(operator.not_(0), True)
219veris(operator.isSequenceType(0), False)
220veris(operator.isSequenceType([]), True)
221veris(operator.contains([], 1), False)
222veris(operator.contains([1], 1), True)
Michael W. Hudson5efaf7e2002-06-11 10:55:12 +0000223veris(operator.isMappingType(1), False)
Guido van Rossum5f820362002-04-03 23:01:45 +0000224veris(operator.isMappingType({}), True)
225veris(operator.lt(0, 0), False)
226veris(operator.lt(0, 1), True)
227
228import marshal
229veris(marshal.loads(marshal.dumps(True)), True)
230veris(marshal.loads(marshal.dumps(False)), False)
231
232import pickle
233veris(pickle.loads(pickle.dumps(True)), True)
234veris(pickle.loads(pickle.dumps(False)), False)
Guido van Rossumd1bfe5e2002-04-05 20:57:02 +0000235veris(pickle.loads(pickle.dumps(True, True)), True)
236veris(pickle.loads(pickle.dumps(False, True)), False)
Guido van Rossum5f820362002-04-03 23:01:45 +0000237
238import cPickle
239veris(cPickle.loads(cPickle.dumps(True)), True)
240veris(cPickle.loads(cPickle.dumps(False)), False)
Guido van Rossumd1bfe5e2002-04-05 20:57:02 +0000241veris(cPickle.loads(cPickle.dumps(True, True)), True)
242veris(cPickle.loads(cPickle.dumps(False, True)), False)
Guido van Rossum5f820362002-04-03 23:01:45 +0000243
244veris(pickle.loads(cPickle.dumps(True)), True)
245veris(pickle.loads(cPickle.dumps(False)), False)
Guido van Rossumd1bfe5e2002-04-05 20:57:02 +0000246veris(pickle.loads(cPickle.dumps(True, True)), True)
247veris(pickle.loads(cPickle.dumps(False, True)), False)
Guido van Rossum5f820362002-04-03 23:01:45 +0000248
249veris(cPickle.loads(pickle.dumps(True)), True)
250veris(cPickle.loads(pickle.dumps(False)), False)
Guido van Rossumd1bfe5e2002-04-05 20:57:02 +0000251veris(cPickle.loads(pickle.dumps(True, True)), True)
252veris(cPickle.loads(pickle.dumps(False, True)), False)
Guido van Rossum5f820362002-04-03 23:01:45 +0000253
Guido van Rossume2763392002-04-05 19:30:08 +0000254# Test for specific backwards-compatible pickle values
255vereq(pickle.dumps(True), "I01\n.")
256vereq(pickle.dumps(False), "I00\n.")
257vereq(cPickle.dumps(True), "I01\n.")
258vereq(cPickle.dumps(False), "I00\n.")
Guido van Rossumd1bfe5e2002-04-05 20:57:02 +0000259vereq(pickle.dumps(True, True), "I01\n.")
260vereq(pickle.dumps(False, True), "I00\n.")
261vereq(cPickle.dumps(True, True), "I01\n.")
262vereq(cPickle.dumps(False, True), "I00\n.")
Guido van Rossume2763392002-04-05 19:30:08 +0000263
Guido van Rossum5f820362002-04-03 23:01:45 +0000264if verbose:
265 print "All OK"