blob: 388cd4b346ef76d2d19e2d261e2177918431ee4b [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)
Guido van Rossumd1bfe5e2002-04-05 20:57:02 +0000216veris(pickle.loads(pickle.dumps(True, True)), True)
217veris(pickle.loads(pickle.dumps(False, True)), False)
Guido van Rossum5f820362002-04-03 23:01:45 +0000218
219import cPickle
220veris(cPickle.loads(cPickle.dumps(True)), True)
221veris(cPickle.loads(cPickle.dumps(False)), False)
Guido van Rossumd1bfe5e2002-04-05 20:57:02 +0000222veris(cPickle.loads(cPickle.dumps(True, True)), True)
223veris(cPickle.loads(cPickle.dumps(False, True)), False)
Guido van Rossum5f820362002-04-03 23:01:45 +0000224
225veris(pickle.loads(cPickle.dumps(True)), True)
226veris(pickle.loads(cPickle.dumps(False)), False)
Guido van Rossumd1bfe5e2002-04-05 20:57:02 +0000227veris(pickle.loads(cPickle.dumps(True, True)), True)
228veris(pickle.loads(cPickle.dumps(False, True)), False)
Guido van Rossum5f820362002-04-03 23:01:45 +0000229
230veris(cPickle.loads(pickle.dumps(True)), True)
231veris(cPickle.loads(pickle.dumps(False)), False)
Guido van Rossumd1bfe5e2002-04-05 20:57:02 +0000232veris(cPickle.loads(pickle.dumps(True, True)), True)
233veris(cPickle.loads(pickle.dumps(False, True)), False)
Guido van Rossum5f820362002-04-03 23:01:45 +0000234
Guido van Rossume2763392002-04-05 19:30:08 +0000235# Test for specific backwards-compatible pickle values
236vereq(pickle.dumps(True), "I01\n.")
237vereq(pickle.dumps(False), "I00\n.")
238vereq(cPickle.dumps(True), "I01\n.")
239vereq(cPickle.dumps(False), "I00\n.")
Guido van Rossumd1bfe5e2002-04-05 20:57:02 +0000240vereq(pickle.dumps(True, True), "I01\n.")
241vereq(pickle.dumps(False, True), "I00\n.")
242vereq(cPickle.dumps(True, True), "I01\n.")
243vereq(cPickle.dumps(False, True), "I00\n.")
Guido van Rossume2763392002-04-05 19:30:08 +0000244
Guido van Rossum5f820362002-04-03 23:01:45 +0000245if verbose:
246 print "All OK"