test_bool.py revision 2f6d4da2784c79bfc8f3c38fda1ac4c95f6a3b11
1# Test properties of bool promised by PEP 285 2 3from test_support import verbose, TestFailed, TESTFN, vereq 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) 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) 206os.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) 233veris(pickle.loads(pickle.dumps(True, True)), True) 234veris(pickle.loads(pickle.dumps(False, True)), False) 235 236import cPickle 237veris(cPickle.loads(cPickle.dumps(True)), True) 238veris(cPickle.loads(cPickle.dumps(False)), False) 239veris(cPickle.loads(cPickle.dumps(True, True)), True) 240veris(cPickle.loads(cPickle.dumps(False, True)), False) 241 242veris(pickle.loads(cPickle.dumps(True)), True) 243veris(pickle.loads(cPickle.dumps(False)), False) 244veris(pickle.loads(cPickle.dumps(True, True)), True) 245veris(pickle.loads(cPickle.dumps(False, True)), False) 246 247veris(cPickle.loads(pickle.dumps(True)), True) 248veris(cPickle.loads(pickle.dumps(False)), False) 249veris(cPickle.loads(pickle.dumps(True, True)), True) 250veris(cPickle.loads(pickle.dumps(False, True)), False) 251 252# 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.") 257vereq(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.") 261 262if verbose: 263 print "All OK" 264