17db96d56Sopenharmony_ci# Test properties of bool promised by PEP 285 27db96d56Sopenharmony_ci 37db96d56Sopenharmony_ciimport unittest 47db96d56Sopenharmony_cifrom test.support import os_helper 57db96d56Sopenharmony_ci 67db96d56Sopenharmony_ciimport os 77db96d56Sopenharmony_ci 87db96d56Sopenharmony_ciclass BoolTest(unittest.TestCase): 97db96d56Sopenharmony_ci 107db96d56Sopenharmony_ci def test_subclass(self): 117db96d56Sopenharmony_ci try: 127db96d56Sopenharmony_ci class C(bool): 137db96d56Sopenharmony_ci pass 147db96d56Sopenharmony_ci except TypeError: 157db96d56Sopenharmony_ci pass 167db96d56Sopenharmony_ci else: 177db96d56Sopenharmony_ci self.fail("bool should not be subclassable") 187db96d56Sopenharmony_ci 197db96d56Sopenharmony_ci self.assertRaises(TypeError, int.__new__, bool, 0) 207db96d56Sopenharmony_ci 217db96d56Sopenharmony_ci def test_repr(self): 227db96d56Sopenharmony_ci self.assertEqual(repr(False), 'False') 237db96d56Sopenharmony_ci self.assertEqual(repr(True), 'True') 247db96d56Sopenharmony_ci self.assertIs(eval(repr(False)), False) 257db96d56Sopenharmony_ci self.assertIs(eval(repr(True)), True) 267db96d56Sopenharmony_ci 277db96d56Sopenharmony_ci def test_str(self): 287db96d56Sopenharmony_ci self.assertEqual(str(False), 'False') 297db96d56Sopenharmony_ci self.assertEqual(str(True), 'True') 307db96d56Sopenharmony_ci 317db96d56Sopenharmony_ci def test_int(self): 327db96d56Sopenharmony_ci self.assertEqual(int(False), 0) 337db96d56Sopenharmony_ci self.assertIsNot(int(False), False) 347db96d56Sopenharmony_ci self.assertEqual(int(True), 1) 357db96d56Sopenharmony_ci self.assertIsNot(int(True), True) 367db96d56Sopenharmony_ci 377db96d56Sopenharmony_ci def test_float(self): 387db96d56Sopenharmony_ci self.assertEqual(float(False), 0.0) 397db96d56Sopenharmony_ci self.assertIsNot(float(False), False) 407db96d56Sopenharmony_ci self.assertEqual(float(True), 1.0) 417db96d56Sopenharmony_ci self.assertIsNot(float(True), True) 427db96d56Sopenharmony_ci 437db96d56Sopenharmony_ci def test_complex(self): 447db96d56Sopenharmony_ci self.assertEqual(complex(False), 0j) 457db96d56Sopenharmony_ci self.assertEqual(complex(False), False) 467db96d56Sopenharmony_ci self.assertEqual(complex(True), 1+0j) 477db96d56Sopenharmony_ci self.assertEqual(complex(True), True) 487db96d56Sopenharmony_ci 497db96d56Sopenharmony_ci def test_math(self): 507db96d56Sopenharmony_ci self.assertEqual(+False, 0) 517db96d56Sopenharmony_ci self.assertIsNot(+False, False) 527db96d56Sopenharmony_ci self.assertEqual(-False, 0) 537db96d56Sopenharmony_ci self.assertIsNot(-False, False) 547db96d56Sopenharmony_ci self.assertEqual(abs(False), 0) 557db96d56Sopenharmony_ci self.assertIsNot(abs(False), False) 567db96d56Sopenharmony_ci self.assertEqual(+True, 1) 577db96d56Sopenharmony_ci self.assertIsNot(+True, True) 587db96d56Sopenharmony_ci self.assertEqual(-True, -1) 597db96d56Sopenharmony_ci self.assertEqual(abs(True), 1) 607db96d56Sopenharmony_ci self.assertIsNot(abs(True), True) 617db96d56Sopenharmony_ci self.assertEqual(~False, -1) 627db96d56Sopenharmony_ci self.assertEqual(~True, -2) 637db96d56Sopenharmony_ci 647db96d56Sopenharmony_ci self.assertEqual(False+2, 2) 657db96d56Sopenharmony_ci self.assertEqual(True+2, 3) 667db96d56Sopenharmony_ci self.assertEqual(2+False, 2) 677db96d56Sopenharmony_ci self.assertEqual(2+True, 3) 687db96d56Sopenharmony_ci 697db96d56Sopenharmony_ci self.assertEqual(False+False, 0) 707db96d56Sopenharmony_ci self.assertIsNot(False+False, False) 717db96d56Sopenharmony_ci self.assertEqual(False+True, 1) 727db96d56Sopenharmony_ci self.assertIsNot(False+True, True) 737db96d56Sopenharmony_ci self.assertEqual(True+False, 1) 747db96d56Sopenharmony_ci self.assertIsNot(True+False, True) 757db96d56Sopenharmony_ci self.assertEqual(True+True, 2) 767db96d56Sopenharmony_ci 777db96d56Sopenharmony_ci self.assertEqual(True-True, 0) 787db96d56Sopenharmony_ci self.assertIsNot(True-True, False) 797db96d56Sopenharmony_ci self.assertEqual(False-False, 0) 807db96d56Sopenharmony_ci self.assertIsNot(False-False, False) 817db96d56Sopenharmony_ci self.assertEqual(True-False, 1) 827db96d56Sopenharmony_ci self.assertIsNot(True-False, True) 837db96d56Sopenharmony_ci self.assertEqual(False-True, -1) 847db96d56Sopenharmony_ci 857db96d56Sopenharmony_ci self.assertEqual(True*1, 1) 867db96d56Sopenharmony_ci self.assertEqual(False*1, 0) 877db96d56Sopenharmony_ci self.assertIsNot(False*1, False) 887db96d56Sopenharmony_ci 897db96d56Sopenharmony_ci self.assertEqual(True/1, 1) 907db96d56Sopenharmony_ci self.assertIsNot(True/1, True) 917db96d56Sopenharmony_ci self.assertEqual(False/1, 0) 927db96d56Sopenharmony_ci self.assertIsNot(False/1, False) 937db96d56Sopenharmony_ci 947db96d56Sopenharmony_ci self.assertEqual(True%1, 0) 957db96d56Sopenharmony_ci self.assertIsNot(True%1, False) 967db96d56Sopenharmony_ci self.assertEqual(True%2, 1) 977db96d56Sopenharmony_ci self.assertIsNot(True%2, True) 987db96d56Sopenharmony_ci self.assertEqual(False%1, 0) 997db96d56Sopenharmony_ci self.assertIsNot(False%1, False) 1007db96d56Sopenharmony_ci 1017db96d56Sopenharmony_ci for b in False, True: 1027db96d56Sopenharmony_ci for i in 0, 1, 2: 1037db96d56Sopenharmony_ci self.assertEqual(b**i, int(b)**i) 1047db96d56Sopenharmony_ci self.assertIsNot(b**i, bool(int(b)**i)) 1057db96d56Sopenharmony_ci 1067db96d56Sopenharmony_ci for a in False, True: 1077db96d56Sopenharmony_ci for b in False, True: 1087db96d56Sopenharmony_ci self.assertIs(a&b, bool(int(a)&int(b))) 1097db96d56Sopenharmony_ci self.assertIs(a|b, bool(int(a)|int(b))) 1107db96d56Sopenharmony_ci self.assertIs(a^b, bool(int(a)^int(b))) 1117db96d56Sopenharmony_ci self.assertEqual(a&int(b), int(a)&int(b)) 1127db96d56Sopenharmony_ci self.assertIsNot(a&int(b), bool(int(a)&int(b))) 1137db96d56Sopenharmony_ci self.assertEqual(a|int(b), int(a)|int(b)) 1147db96d56Sopenharmony_ci self.assertIsNot(a|int(b), bool(int(a)|int(b))) 1157db96d56Sopenharmony_ci self.assertEqual(a^int(b), int(a)^int(b)) 1167db96d56Sopenharmony_ci self.assertIsNot(a^int(b), bool(int(a)^int(b))) 1177db96d56Sopenharmony_ci self.assertEqual(int(a)&b, int(a)&int(b)) 1187db96d56Sopenharmony_ci self.assertIsNot(int(a)&b, bool(int(a)&int(b))) 1197db96d56Sopenharmony_ci self.assertEqual(int(a)|b, int(a)|int(b)) 1207db96d56Sopenharmony_ci self.assertIsNot(int(a)|b, bool(int(a)|int(b))) 1217db96d56Sopenharmony_ci self.assertEqual(int(a)^b, int(a)^int(b)) 1227db96d56Sopenharmony_ci self.assertIsNot(int(a)^b, bool(int(a)^int(b))) 1237db96d56Sopenharmony_ci 1247db96d56Sopenharmony_ci self.assertIs(1==1, True) 1257db96d56Sopenharmony_ci self.assertIs(1==0, False) 1267db96d56Sopenharmony_ci self.assertIs(0<1, True) 1277db96d56Sopenharmony_ci self.assertIs(1<0, False) 1287db96d56Sopenharmony_ci self.assertIs(0<=0, True) 1297db96d56Sopenharmony_ci self.assertIs(1<=0, False) 1307db96d56Sopenharmony_ci self.assertIs(1>0, True) 1317db96d56Sopenharmony_ci self.assertIs(1>1, False) 1327db96d56Sopenharmony_ci self.assertIs(1>=1, True) 1337db96d56Sopenharmony_ci self.assertIs(0>=1, False) 1347db96d56Sopenharmony_ci self.assertIs(0!=1, True) 1357db96d56Sopenharmony_ci self.assertIs(0!=0, False) 1367db96d56Sopenharmony_ci 1377db96d56Sopenharmony_ci x = [1] 1387db96d56Sopenharmony_ci self.assertIs(x is x, True) 1397db96d56Sopenharmony_ci self.assertIs(x is not x, False) 1407db96d56Sopenharmony_ci 1417db96d56Sopenharmony_ci self.assertIs(1 in x, True) 1427db96d56Sopenharmony_ci self.assertIs(0 in x, False) 1437db96d56Sopenharmony_ci self.assertIs(1 not in x, False) 1447db96d56Sopenharmony_ci self.assertIs(0 not in x, True) 1457db96d56Sopenharmony_ci 1467db96d56Sopenharmony_ci x = {1: 2} 1477db96d56Sopenharmony_ci self.assertIs(x is x, True) 1487db96d56Sopenharmony_ci self.assertIs(x is not x, False) 1497db96d56Sopenharmony_ci 1507db96d56Sopenharmony_ci self.assertIs(1 in x, True) 1517db96d56Sopenharmony_ci self.assertIs(0 in x, False) 1527db96d56Sopenharmony_ci self.assertIs(1 not in x, False) 1537db96d56Sopenharmony_ci self.assertIs(0 not in x, True) 1547db96d56Sopenharmony_ci 1557db96d56Sopenharmony_ci self.assertIs(not True, False) 1567db96d56Sopenharmony_ci self.assertIs(not False, True) 1577db96d56Sopenharmony_ci 1587db96d56Sopenharmony_ci def test_convert(self): 1597db96d56Sopenharmony_ci self.assertRaises(TypeError, bool, 42, 42) 1607db96d56Sopenharmony_ci self.assertIs(bool(10), True) 1617db96d56Sopenharmony_ci self.assertIs(bool(1), True) 1627db96d56Sopenharmony_ci self.assertIs(bool(-1), True) 1637db96d56Sopenharmony_ci self.assertIs(bool(0), False) 1647db96d56Sopenharmony_ci self.assertIs(bool("hello"), True) 1657db96d56Sopenharmony_ci self.assertIs(bool(""), False) 1667db96d56Sopenharmony_ci self.assertIs(bool(), False) 1677db96d56Sopenharmony_ci 1687db96d56Sopenharmony_ci def test_keyword_args(self): 1697db96d56Sopenharmony_ci with self.assertRaisesRegex(TypeError, 'keyword argument'): 1707db96d56Sopenharmony_ci bool(x=10) 1717db96d56Sopenharmony_ci 1727db96d56Sopenharmony_ci def test_format(self): 1737db96d56Sopenharmony_ci self.assertEqual("%d" % False, "0") 1747db96d56Sopenharmony_ci self.assertEqual("%d" % True, "1") 1757db96d56Sopenharmony_ci self.assertEqual("%x" % False, "0") 1767db96d56Sopenharmony_ci self.assertEqual("%x" % True, "1") 1777db96d56Sopenharmony_ci 1787db96d56Sopenharmony_ci def test_hasattr(self): 1797db96d56Sopenharmony_ci self.assertIs(hasattr([], "append"), True) 1807db96d56Sopenharmony_ci self.assertIs(hasattr([], "wobble"), False) 1817db96d56Sopenharmony_ci 1827db96d56Sopenharmony_ci def test_callable(self): 1837db96d56Sopenharmony_ci self.assertIs(callable(len), True) 1847db96d56Sopenharmony_ci self.assertIs(callable(1), False) 1857db96d56Sopenharmony_ci 1867db96d56Sopenharmony_ci def test_isinstance(self): 1877db96d56Sopenharmony_ci self.assertIs(isinstance(True, bool), True) 1887db96d56Sopenharmony_ci self.assertIs(isinstance(False, bool), True) 1897db96d56Sopenharmony_ci self.assertIs(isinstance(True, int), True) 1907db96d56Sopenharmony_ci self.assertIs(isinstance(False, int), True) 1917db96d56Sopenharmony_ci self.assertIs(isinstance(1, bool), False) 1927db96d56Sopenharmony_ci self.assertIs(isinstance(0, bool), False) 1937db96d56Sopenharmony_ci 1947db96d56Sopenharmony_ci def test_issubclass(self): 1957db96d56Sopenharmony_ci self.assertIs(issubclass(bool, int), True) 1967db96d56Sopenharmony_ci self.assertIs(issubclass(int, bool), False) 1977db96d56Sopenharmony_ci 1987db96d56Sopenharmony_ci def test_contains(self): 1997db96d56Sopenharmony_ci self.assertIs(1 in {}, False) 2007db96d56Sopenharmony_ci self.assertIs(1 in {1:1}, True) 2017db96d56Sopenharmony_ci 2027db96d56Sopenharmony_ci def test_string(self): 2037db96d56Sopenharmony_ci self.assertIs("xyz".endswith("z"), True) 2047db96d56Sopenharmony_ci self.assertIs("xyz".endswith("x"), False) 2057db96d56Sopenharmony_ci self.assertIs("xyz0123".isalnum(), True) 2067db96d56Sopenharmony_ci self.assertIs("@#$%".isalnum(), False) 2077db96d56Sopenharmony_ci self.assertIs("xyz".isalpha(), True) 2087db96d56Sopenharmony_ci self.assertIs("@#$%".isalpha(), False) 2097db96d56Sopenharmony_ci self.assertIs("0123".isdigit(), True) 2107db96d56Sopenharmony_ci self.assertIs("xyz".isdigit(), False) 2117db96d56Sopenharmony_ci self.assertIs("xyz".islower(), True) 2127db96d56Sopenharmony_ci self.assertIs("XYZ".islower(), False) 2137db96d56Sopenharmony_ci self.assertIs("0123".isdecimal(), True) 2147db96d56Sopenharmony_ci self.assertIs("xyz".isdecimal(), False) 2157db96d56Sopenharmony_ci self.assertIs("0123".isnumeric(), True) 2167db96d56Sopenharmony_ci self.assertIs("xyz".isnumeric(), False) 2177db96d56Sopenharmony_ci self.assertIs(" ".isspace(), True) 2187db96d56Sopenharmony_ci self.assertIs("\xa0".isspace(), True) 2197db96d56Sopenharmony_ci self.assertIs("\u3000".isspace(), True) 2207db96d56Sopenharmony_ci self.assertIs("XYZ".isspace(), False) 2217db96d56Sopenharmony_ci self.assertIs("X".istitle(), True) 2227db96d56Sopenharmony_ci self.assertIs("x".istitle(), False) 2237db96d56Sopenharmony_ci self.assertIs("XYZ".isupper(), True) 2247db96d56Sopenharmony_ci self.assertIs("xyz".isupper(), False) 2257db96d56Sopenharmony_ci self.assertIs("xyz".startswith("x"), True) 2267db96d56Sopenharmony_ci self.assertIs("xyz".startswith("z"), False) 2277db96d56Sopenharmony_ci 2287db96d56Sopenharmony_ci def test_boolean(self): 2297db96d56Sopenharmony_ci self.assertEqual(True & 1, 1) 2307db96d56Sopenharmony_ci self.assertNotIsInstance(True & 1, bool) 2317db96d56Sopenharmony_ci self.assertIs(True & True, True) 2327db96d56Sopenharmony_ci 2337db96d56Sopenharmony_ci self.assertEqual(True | 1, 1) 2347db96d56Sopenharmony_ci self.assertNotIsInstance(True | 1, bool) 2357db96d56Sopenharmony_ci self.assertIs(True | True, True) 2367db96d56Sopenharmony_ci 2377db96d56Sopenharmony_ci self.assertEqual(True ^ 1, 0) 2387db96d56Sopenharmony_ci self.assertNotIsInstance(True ^ 1, bool) 2397db96d56Sopenharmony_ci self.assertIs(True ^ True, False) 2407db96d56Sopenharmony_ci 2417db96d56Sopenharmony_ci def test_fileclosed(self): 2427db96d56Sopenharmony_ci try: 2437db96d56Sopenharmony_ci with open(os_helper.TESTFN, "w", encoding="utf-8") as f: 2447db96d56Sopenharmony_ci self.assertIs(f.closed, False) 2457db96d56Sopenharmony_ci self.assertIs(f.closed, True) 2467db96d56Sopenharmony_ci finally: 2477db96d56Sopenharmony_ci os.remove(os_helper.TESTFN) 2487db96d56Sopenharmony_ci 2497db96d56Sopenharmony_ci def test_types(self): 2507db96d56Sopenharmony_ci # types are always true. 2517db96d56Sopenharmony_ci for t in [bool, complex, dict, float, int, list, object, 2527db96d56Sopenharmony_ci set, str, tuple, type]: 2537db96d56Sopenharmony_ci self.assertIs(bool(t), True) 2547db96d56Sopenharmony_ci 2557db96d56Sopenharmony_ci def test_operator(self): 2567db96d56Sopenharmony_ci import operator 2577db96d56Sopenharmony_ci self.assertIs(operator.truth(0), False) 2587db96d56Sopenharmony_ci self.assertIs(operator.truth(1), True) 2597db96d56Sopenharmony_ci self.assertIs(operator.not_(1), False) 2607db96d56Sopenharmony_ci self.assertIs(operator.not_(0), True) 2617db96d56Sopenharmony_ci self.assertIs(operator.contains([], 1), False) 2627db96d56Sopenharmony_ci self.assertIs(operator.contains([1], 1), True) 2637db96d56Sopenharmony_ci self.assertIs(operator.lt(0, 0), False) 2647db96d56Sopenharmony_ci self.assertIs(operator.lt(0, 1), True) 2657db96d56Sopenharmony_ci self.assertIs(operator.is_(True, True), True) 2667db96d56Sopenharmony_ci self.assertIs(operator.is_(True, False), False) 2677db96d56Sopenharmony_ci self.assertIs(operator.is_not(True, True), False) 2687db96d56Sopenharmony_ci self.assertIs(operator.is_not(True, False), True) 2697db96d56Sopenharmony_ci 2707db96d56Sopenharmony_ci def test_marshal(self): 2717db96d56Sopenharmony_ci import marshal 2727db96d56Sopenharmony_ci self.assertIs(marshal.loads(marshal.dumps(True)), True) 2737db96d56Sopenharmony_ci self.assertIs(marshal.loads(marshal.dumps(False)), False) 2747db96d56Sopenharmony_ci 2757db96d56Sopenharmony_ci def test_pickle(self): 2767db96d56Sopenharmony_ci import pickle 2777db96d56Sopenharmony_ci for proto in range(pickle.HIGHEST_PROTOCOL + 1): 2787db96d56Sopenharmony_ci self.assertIs(pickle.loads(pickle.dumps(True, proto)), True) 2797db96d56Sopenharmony_ci self.assertIs(pickle.loads(pickle.dumps(False, proto)), False) 2807db96d56Sopenharmony_ci 2817db96d56Sopenharmony_ci def test_picklevalues(self): 2827db96d56Sopenharmony_ci # Test for specific backwards-compatible pickle values 2837db96d56Sopenharmony_ci import pickle 2847db96d56Sopenharmony_ci self.assertEqual(pickle.dumps(True, protocol=0), b"I01\n.") 2857db96d56Sopenharmony_ci self.assertEqual(pickle.dumps(False, protocol=0), b"I00\n.") 2867db96d56Sopenharmony_ci self.assertEqual(pickle.dumps(True, protocol=1), b"I01\n.") 2877db96d56Sopenharmony_ci self.assertEqual(pickle.dumps(False, protocol=1), b"I00\n.") 2887db96d56Sopenharmony_ci self.assertEqual(pickle.dumps(True, protocol=2), b'\x80\x02\x88.') 2897db96d56Sopenharmony_ci self.assertEqual(pickle.dumps(False, protocol=2), b'\x80\x02\x89.') 2907db96d56Sopenharmony_ci 2917db96d56Sopenharmony_ci def test_convert_to_bool(self): 2927db96d56Sopenharmony_ci # Verify that TypeError occurs when bad things are returned 2937db96d56Sopenharmony_ci # from __bool__(). This isn't really a bool test, but 2947db96d56Sopenharmony_ci # it's related. 2957db96d56Sopenharmony_ci check = lambda o: self.assertRaises(TypeError, bool, o) 2967db96d56Sopenharmony_ci class Foo(object): 2977db96d56Sopenharmony_ci def __bool__(self): 2987db96d56Sopenharmony_ci return self 2997db96d56Sopenharmony_ci check(Foo()) 3007db96d56Sopenharmony_ci 3017db96d56Sopenharmony_ci class Bar(object): 3027db96d56Sopenharmony_ci def __bool__(self): 3037db96d56Sopenharmony_ci return "Yes" 3047db96d56Sopenharmony_ci check(Bar()) 3057db96d56Sopenharmony_ci 3067db96d56Sopenharmony_ci class Baz(int): 3077db96d56Sopenharmony_ci def __bool__(self): 3087db96d56Sopenharmony_ci return self 3097db96d56Sopenharmony_ci check(Baz()) 3107db96d56Sopenharmony_ci 3117db96d56Sopenharmony_ci # __bool__() must return a bool not an int 3127db96d56Sopenharmony_ci class Spam(int): 3137db96d56Sopenharmony_ci def __bool__(self): 3147db96d56Sopenharmony_ci return 1 3157db96d56Sopenharmony_ci check(Spam()) 3167db96d56Sopenharmony_ci 3177db96d56Sopenharmony_ci class Eggs: 3187db96d56Sopenharmony_ci def __len__(self): 3197db96d56Sopenharmony_ci return -1 3207db96d56Sopenharmony_ci self.assertRaises(ValueError, bool, Eggs()) 3217db96d56Sopenharmony_ci 3227db96d56Sopenharmony_ci def test_from_bytes(self): 3237db96d56Sopenharmony_ci self.assertIs(bool.from_bytes(b'\x00'*8, 'big'), False) 3247db96d56Sopenharmony_ci self.assertIs(bool.from_bytes(b'abcd', 'little'), True) 3257db96d56Sopenharmony_ci 3267db96d56Sopenharmony_ci def test_sane_len(self): 3277db96d56Sopenharmony_ci # this test just tests our assumptions about __len__ 3287db96d56Sopenharmony_ci # this will start failing if __len__ changes assertions 3297db96d56Sopenharmony_ci for badval in ['illegal', -1, 1 << 32]: 3307db96d56Sopenharmony_ci class A: 3317db96d56Sopenharmony_ci def __len__(self): 3327db96d56Sopenharmony_ci return badval 3337db96d56Sopenharmony_ci try: 3347db96d56Sopenharmony_ci bool(A()) 3357db96d56Sopenharmony_ci except (Exception) as e_bool: 3367db96d56Sopenharmony_ci try: 3377db96d56Sopenharmony_ci len(A()) 3387db96d56Sopenharmony_ci except (Exception) as e_len: 3397db96d56Sopenharmony_ci self.assertEqual(str(e_bool), str(e_len)) 3407db96d56Sopenharmony_ci 3417db96d56Sopenharmony_ci def test_blocked(self): 3427db96d56Sopenharmony_ci class A: 3437db96d56Sopenharmony_ci __bool__ = None 3447db96d56Sopenharmony_ci self.assertRaises(TypeError, bool, A()) 3457db96d56Sopenharmony_ci 3467db96d56Sopenharmony_ci class B: 3477db96d56Sopenharmony_ci def __len__(self): 3487db96d56Sopenharmony_ci return 10 3497db96d56Sopenharmony_ci __bool__ = None 3507db96d56Sopenharmony_ci self.assertRaises(TypeError, bool, B()) 3517db96d56Sopenharmony_ci 3527db96d56Sopenharmony_ci def test_real_and_imag(self): 3537db96d56Sopenharmony_ci self.assertEqual(True.real, 1) 3547db96d56Sopenharmony_ci self.assertEqual(True.imag, 0) 3557db96d56Sopenharmony_ci self.assertIs(type(True.real), int) 3567db96d56Sopenharmony_ci self.assertIs(type(True.imag), int) 3577db96d56Sopenharmony_ci self.assertEqual(False.real, 0) 3587db96d56Sopenharmony_ci self.assertEqual(False.imag, 0) 3597db96d56Sopenharmony_ci self.assertIs(type(False.real), int) 3607db96d56Sopenharmony_ci self.assertIs(type(False.imag), int) 3617db96d56Sopenharmony_ci 3627db96d56Sopenharmony_ci def test_bool_called_at_least_once(self): 3637db96d56Sopenharmony_ci class X: 3647db96d56Sopenharmony_ci def __init__(self): 3657db96d56Sopenharmony_ci self.count = 0 3667db96d56Sopenharmony_ci def __bool__(self): 3677db96d56Sopenharmony_ci self.count += 1 3687db96d56Sopenharmony_ci return True 3697db96d56Sopenharmony_ci 3707db96d56Sopenharmony_ci def f(x): 3717db96d56Sopenharmony_ci if x or True: 3727db96d56Sopenharmony_ci pass 3737db96d56Sopenharmony_ci 3747db96d56Sopenharmony_ci x = X() 3757db96d56Sopenharmony_ci f(x) 3767db96d56Sopenharmony_ci self.assertGreaterEqual(x.count, 1) 3777db96d56Sopenharmony_ci 3787db96d56Sopenharmony_ci def test_bool_new(self): 3797db96d56Sopenharmony_ci self.assertIs(bool.__new__(bool), False) 3807db96d56Sopenharmony_ci self.assertIs(bool.__new__(bool, 1), True) 3817db96d56Sopenharmony_ci self.assertIs(bool.__new__(bool, 0), False) 3827db96d56Sopenharmony_ci self.assertIs(bool.__new__(bool, False), False) 3837db96d56Sopenharmony_ci self.assertIs(bool.__new__(bool, True), True) 3847db96d56Sopenharmony_ci 3857db96d56Sopenharmony_ci 3867db96d56Sopenharmony_ciif __name__ == "__main__": 3877db96d56Sopenharmony_ci unittest.main() 388