test_bool.py revision 5f8203679d113b3963180da6380ebd69f9f8cd44
1# 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 227if verbose: 228 print "All OK" 229