blob: 0a60a3b4e265bdace6211fed944bbf53afbcb418 [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
4
5def veris(a, b):
6 if a is not b:
7 raise TestFailed, "%r is %r" % (a, b)
8
9def verisnot(a, b):
10 if a is b:
11 raise TestFailed, "%r is %r" % (a, b)
12
13try:
14 class C(bool):
15 pass
16except TypeError:
17 pass
18else:
19 raise TestFailed, "bool should not be subclassable"
20
21try:
22 int.__new__(bool, 0)
23except TypeError:
24 pass
25else:
26 raise TestFailed, "should not be able to create new bool instances"
27
28vereq(int(False), 0)
29verisnot(int(False), False)
30vereq(int(True), 1)
31verisnot(int(True), True)
32
33vereq(+False, 0)
34verisnot(+False, False)
35vereq(-False, 0)
36verisnot(-False, False)
37vereq(abs(False), 0)
38verisnot(abs(False), False)
39vereq(+True, 1)
40verisnot(+True, True)
41vereq(-True, -1)
42vereq(abs(True), 1)
43verisnot(abs(True), True)
44vereq(~False, -1)
45vereq(~True, -2)
46
47vereq(False+2, 2)
48vereq(True+2, 3)
49vereq(2+False, 2)
50vereq(2+True, 3)
51
52vereq(False+False, 0)
53verisnot(False+False, False)
54vereq(False+True, 1)
55verisnot(False+True, True)
56vereq(True+False, 1)
57verisnot(True+False, True)
58vereq(True+True, 2)
59
60vereq(True-True, 0)
61verisnot(True-True, False)
62vereq(False-False, 0)
63verisnot(False-False, False)
64vereq(True-False, 1)
65verisnot(True-False, True)
66vereq(False-True, -1)
67
68vereq(True*1, 1)
69vereq(False*1, 0)
70verisnot(False*1, False)
71
72vereq(True/1, 1)
73verisnot(True/1, True)
74vereq(False/1, 0)
75verisnot(False/1, False)
76
77for b in False, True:
78 for i in 0, 1, 2:
79 vereq(b**i, int(b)**i)
80 verisnot(b**i, bool(int(b)**i))
81
82for a in False, True:
83 for b in False, True:
84 veris(a&b, bool(int(a)&int(b)))
85 veris(a|b, bool(int(a)|int(b)))
86 veris(a^b, bool(int(a)^int(b)))
87 vereq(a&int(b), int(a)&int(b))
88 verisnot(a&int(b), bool(int(a)&int(b)))
89 vereq(a|int(b), int(a)|int(b))
90 verisnot(a|int(b), bool(int(a)|int(b)))
91 vereq(a^int(b), int(a)^int(b))
92 verisnot(a^int(b), bool(int(a)^int(b)))
93 vereq(int(a)&b, int(a)&int(b))
94 verisnot(int(a)&b, bool(int(a)&int(b)))
95 vereq(int(a)|b, int(a)|int(b))
96 verisnot(int(a)|b, bool(int(a)|int(b)))
97 vereq(int(a)^b, int(a)^int(b))
98 verisnot(int(a)^b, bool(int(a)^int(b)))
99
100veris(1==1, True)
101veris(1==0, False)
102# XXX <, <=, >, >=, !=
103
104x = [1]
105veris(x is x, True)
106veris(x is not x, False)
107
108veris(1 in x, True)
109veris(0 in x, False)
110veris(1 not in x, False)
111veris(0 not in x, True)
112
113veris(not True, False)
114veris(not False, True)
115
116veris(bool(10), True)
117veris(bool(1), True)
118veris(bool(-1), True)
119veris(bool(0), False)
120veris(bool("hello"), True)
121veris(bool(""), False)
122
123veris(hasattr([], "append"), True)
124veris(hasattr([], "wobble"), False)
125
126veris(callable(len), True)
127veris(callable(1), False)
128
129veris(isinstance(True, bool), True)
130veris(isinstance(False, bool), True)
131veris(isinstance(True, int), True)
132veris(isinstance(False, int), True)
133veris(isinstance(1, bool), False)
134veris(isinstance(0, bool), False)
135
136veris(issubclass(bool, int), True)
137veris(issubclass(int, bool), False)
138
139veris({}.has_key(1), False)
140veris({1:1}.has_key(1), True)
141
142veris("xyz".endswith("z"), True)
143veris("xyz".endswith("x"), False)
144veris("xyz0123".isalnum(), True)
145veris("@#$%".isalnum(), False)
146veris("xyz".isalpha(), True)
147veris("@#$%".isalpha(), False)
148veris("0123".isdigit(), True)
149veris("xyz".isdigit(), False)
150veris("xyz".islower(), True)
151veris("XYZ".islower(), False)
152veris(" ".isspace(), True)
153veris("XYZ".isspace(), False)
154veris("X".istitle(), True)
155veris("x".istitle(), False)
156veris("XYZ".isupper(), True)
157veris("xyz".isupper(), False)
158veris("xyz".startswith("x"), True)
159veris("xyz".startswith("z"), False)
160
161veris(u"xyz".endswith(u"z"), True)
162veris(u"xyz".endswith(u"x"), False)
163veris(u"xyz0123".isalnum(), True)
164veris(u"@#$%".isalnum(), False)
165veris(u"xyz".isalpha(), True)
166veris(u"@#$%".isalpha(), False)
167veris(u"0123".isdecimal(), True)
168veris(u"xyz".isdecimal(), False)
169veris(u"0123".isdigit(), True)
170veris(u"xyz".isdigit(), False)
171veris(u"xyz".islower(), True)
172veris(u"XYZ".islower(), False)
173veris(u"0123".isnumeric(), True)
174veris(u"xyz".isnumeric(), False)
175veris(u" ".isspace(), True)
176veris(u"XYZ".isspace(), False)
177veris(u"X".istitle(), True)
178veris(u"x".istitle(), False)
179veris(u"XYZ".isupper(), True)
180veris(u"xyz".isupper(), False)
181veris(u"xyz".startswith(u"x"), True)
182veris(u"xyz".startswith(u"z"), False)
183
184f = file(TESTFN, "w")
185veris(f.closed, False)
186f.close()
187veris(f.closed, True)
188import os
189os.remove(TESTFN)
190
191import operator
192veris(operator.truth(0), False)
193veris(operator.truth(1), True)
194veris(operator.isCallable(0), False)
195veris(operator.isCallable(len), True)
196veris(operator.isNumberType(None), False)
197veris(operator.isNumberType(0), True)
198veris(operator.not_(1), False)
199veris(operator.not_(0), True)
200veris(operator.isSequenceType(0), False)
201veris(operator.isSequenceType([]), True)
202veris(operator.contains([], 1), False)
203veris(operator.contains([1], 1), True)
204veris(operator.isMappingType([]), False)
205veris(operator.isMappingType({}), True)
206veris(operator.lt(0, 0), False)
207veris(operator.lt(0, 1), True)
208
209import marshal
210veris(marshal.loads(marshal.dumps(True)), True)
211veris(marshal.loads(marshal.dumps(False)), False)
212
213import pickle
214veris(pickle.loads(pickle.dumps(True)), True)
215veris(pickle.loads(pickle.dumps(False)), False)
216
217import cPickle
218veris(cPickle.loads(cPickle.dumps(True)), True)
219veris(cPickle.loads(cPickle.dumps(False)), False)
220
221veris(pickle.loads(cPickle.dumps(True)), True)
222veris(pickle.loads(cPickle.dumps(False)), False)
223
224veris(cPickle.loads(pickle.dumps(True)), True)
225veris(cPickle.loads(pickle.dumps(False)), False)
226
Guido van Rossume2763392002-04-05 19:30:08 +0000227# Test for specific backwards-compatible pickle values
228vereq(pickle.dumps(True), "I01\n.")
229vereq(pickle.dumps(False), "I00\n.")
230vereq(cPickle.dumps(True), "I01\n.")
231vereq(cPickle.dumps(False), "I00\n.")
232
Guido van Rossum5f820362002-04-03 23:01:45 +0000233if verbose:
234 print "All OK"