test_bool.py revision aa86e35c524275e1f6cca91c1f8fcfc15e8d8b30
1# Test properties of bool promised by PEP 285 2 3from test.test_support import verbose, TestFailed, TESTFN, vereq, have_unicode 4import os 5 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 29# 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 46vereq(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) 140veris(bool(), False) 141 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 180if 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) 203 204f = file(TESTFN, "w") 205veris(f.closed, False) 206f.close() 207veris(f.closed, True) 208os.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) 223veris(operator.isMappingType(1), False) 224veris(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) 235veris(pickle.loads(pickle.dumps(True, True)), True) 236veris(pickle.loads(pickle.dumps(False, True)), False) 237 238import cPickle 239veris(cPickle.loads(cPickle.dumps(True)), True) 240veris(cPickle.loads(cPickle.dumps(False)), False) 241veris(cPickle.loads(cPickle.dumps(True, True)), True) 242veris(cPickle.loads(cPickle.dumps(False, True)), False) 243 244veris(pickle.loads(cPickle.dumps(True)), True) 245veris(pickle.loads(cPickle.dumps(False)), False) 246veris(pickle.loads(cPickle.dumps(True, True)), True) 247veris(pickle.loads(cPickle.dumps(False, True)), False) 248 249veris(cPickle.loads(pickle.dumps(True)), True) 250veris(cPickle.loads(pickle.dumps(False)), False) 251veris(cPickle.loads(pickle.dumps(True, True)), True) 252veris(cPickle.loads(pickle.dumps(False, True)), False) 253 254# 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.") 259vereq(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.") 263 264if verbose: 265 print "All OK" 266