blob: f5c91d5b3d08fd0d850a43b667886ce36366cdef [file] [log] [blame]
Guido van Rossum5f820362002-04-03 23:01:45 +00001# Test properties of bool promised by PEP 285
2
3from test_support import verbose, TestFailed, TESTFN, vereq
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
179veris(u"xyz".endswith(u"z"), True)
180veris(u"xyz".endswith(u"x"), False)
181veris(u"xyz0123".isalnum(), True)
182veris(u"@#$%".isalnum(), False)
183veris(u"xyz".isalpha(), True)
184veris(u"@#$%".isalpha(), False)
185veris(u"0123".isdecimal(), True)
186veris(u"xyz".isdecimal(), False)
187veris(u"0123".isdigit(), True)
188veris(u"xyz".isdigit(), False)
189veris(u"xyz".islower(), True)
190veris(u"XYZ".islower(), False)
191veris(u"0123".isnumeric(), True)
192veris(u"xyz".isnumeric(), False)
193veris(u" ".isspace(), True)
194veris(u"XYZ".isspace(), False)
195veris(u"X".istitle(), True)
196veris(u"x".istitle(), False)
197veris(u"XYZ".isupper(), True)
198veris(u"xyz".isupper(), False)
199veris(u"xyz".startswith(u"x"), True)
200veris(u"xyz".startswith(u"z"), False)
201
202f = file(TESTFN, "w")
203veris(f.closed, False)
204f.close()
205veris(f.closed, True)
Guido van Rossum5f820362002-04-03 23:01:45 +0000206os.remove(TESTFN)
207
208import operator
209veris(operator.truth(0), False)
210veris(operator.truth(1), True)
211veris(operator.isCallable(0), False)
212veris(operator.isCallable(len), True)
213veris(operator.isNumberType(None), False)
214veris(operator.isNumberType(0), True)
215veris(operator.not_(1), False)
216veris(operator.not_(0), True)
217veris(operator.isSequenceType(0), False)
218veris(operator.isSequenceType([]), True)
219veris(operator.contains([], 1), False)
220veris(operator.contains([1], 1), True)
221veris(operator.isMappingType([]), False)
222veris(operator.isMappingType({}), True)
223veris(operator.lt(0, 0), False)
224veris(operator.lt(0, 1), True)
225
226import marshal
227veris(marshal.loads(marshal.dumps(True)), True)
228veris(marshal.loads(marshal.dumps(False)), False)
229
230import pickle
231veris(pickle.loads(pickle.dumps(True)), True)
232veris(pickle.loads(pickle.dumps(False)), False)
Guido van Rossumd1bfe5e2002-04-05 20:57:02 +0000233veris(pickle.loads(pickle.dumps(True, True)), True)
234veris(pickle.loads(pickle.dumps(False, True)), False)
Guido van Rossum5f820362002-04-03 23:01:45 +0000235
236import cPickle
237veris(cPickle.loads(cPickle.dumps(True)), True)
238veris(cPickle.loads(cPickle.dumps(False)), False)
Guido van Rossumd1bfe5e2002-04-05 20:57:02 +0000239veris(cPickle.loads(cPickle.dumps(True, True)), True)
240veris(cPickle.loads(cPickle.dumps(False, True)), False)
Guido van Rossum5f820362002-04-03 23:01:45 +0000241
242veris(pickle.loads(cPickle.dumps(True)), True)
243veris(pickle.loads(cPickle.dumps(False)), False)
Guido van Rossumd1bfe5e2002-04-05 20:57:02 +0000244veris(pickle.loads(cPickle.dumps(True, True)), True)
245veris(pickle.loads(cPickle.dumps(False, True)), False)
Guido van Rossum5f820362002-04-03 23:01:45 +0000246
247veris(cPickle.loads(pickle.dumps(True)), True)
248veris(cPickle.loads(pickle.dumps(False)), False)
Guido van Rossumd1bfe5e2002-04-05 20:57:02 +0000249veris(cPickle.loads(pickle.dumps(True, True)), True)
250veris(cPickle.loads(pickle.dumps(False, True)), False)
Guido van Rossum5f820362002-04-03 23:01:45 +0000251
Guido van Rossume2763392002-04-05 19:30:08 +0000252# Test for specific backwards-compatible pickle values
253vereq(pickle.dumps(True), "I01\n.")
254vereq(pickle.dumps(False), "I00\n.")
255vereq(cPickle.dumps(True), "I01\n.")
256vereq(cPickle.dumps(False), "I00\n.")
Guido van Rossumd1bfe5e2002-04-05 20:57:02 +0000257vereq(pickle.dumps(True, True), "I01\n.")
258vereq(pickle.dumps(False, True), "I00\n.")
259vereq(cPickle.dumps(True, True), "I01\n.")
260vereq(cPickle.dumps(False, True), "I00\n.")
Guido van Rossume2763392002-04-05 19:30:08 +0000261
Guido van Rossum5f820362002-04-03 23:01:45 +0000262if verbose:
263 print "All OK"