10a8c90248264a8b26970b4473770bcc3df8515fJosh Gao# Test properties of bool promised by PEP 285
20a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
30a8c90248264a8b26970b4473770bcc3df8515fJosh Gaoimport unittest
40a8c90248264a8b26970b4473770bcc3df8515fJosh Gaofrom test import test_support
50a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
60a8c90248264a8b26970b4473770bcc3df8515fJosh Gaoimport os
70a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
80a8c90248264a8b26970b4473770bcc3df8515fJosh Gaoclass BoolTest(unittest.TestCase):
90a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
100a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def test_subclass(self):
110a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        try:
120a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            class C(bool):
130a8c90248264a8b26970b4473770bcc3df8515fJosh Gao                pass
140a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        except TypeError:
150a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            pass
160a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        else:
170a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            self.fail("bool should not be subclassable")
180a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
190a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertRaises(TypeError, int.__new__, bool, 0)
200a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
210a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def test_print(self):
220a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        try:
230a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            fo = open(test_support.TESTFN, "wb")
240a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            print >> fo, False, True
250a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            fo.close()
260a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            fo = open(test_support.TESTFN, "rb")
270a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            self.assertEqual(fo.read(), 'False True\n')
280a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        finally:
290a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            fo.close()
300a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            os.remove(test_support.TESTFN)
310a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
320a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def test_repr(self):
330a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(repr(False), 'False')
340a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(repr(True), 'True')
350a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(eval(repr(False)), False)
360a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(eval(repr(True)), True)
370a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
380a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def test_str(self):
390a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(str(False), 'False')
400a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(str(True), 'True')
410a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
420a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def test_int(self):
430a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(int(False), 0)
440a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIsNot(int(False), False)
450a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(int(True), 1)
460a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIsNot(int(True), True)
470a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
480a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def test_float(self):
490a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(float(False), 0.0)
500a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIsNot(float(False), False)
510a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(float(True), 1.0)
520a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIsNot(float(True), True)
530a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
540a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def test_long(self):
550a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(long(False), 0L)
560a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIsNot(long(False), False)
570a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(long(True), 1L)
580a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIsNot(long(True), True)
590a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
600a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def test_math(self):
610a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(+False, 0)
620a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIsNot(+False, False)
630a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(-False, 0)
640a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIsNot(-False, False)
650a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(abs(False), 0)
660a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIsNot(abs(False), False)
670a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(+True, 1)
680a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIsNot(+True, True)
690a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(-True, -1)
700a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(abs(True), 1)
710a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIsNot(abs(True), True)
720a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(~False, -1)
730a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(~True, -2)
740a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
750a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(False+2, 2)
760a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(True+2, 3)
770a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(2+False, 2)
780a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(2+True, 3)
790a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
800a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(False+False, 0)
810a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIsNot(False+False, False)
820a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(False+True, 1)
830a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIsNot(False+True, True)
840a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(True+False, 1)
850a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIsNot(True+False, True)
860a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(True+True, 2)
870a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
880a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(True-True, 0)
890a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIsNot(True-True, False)
900a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(False-False, 0)
910a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIsNot(False-False, False)
920a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(True-False, 1)
930a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIsNot(True-False, True)
940a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(False-True, -1)
950a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
960a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(True*1, 1)
970a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(False*1, 0)
980a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIsNot(False*1, False)
990a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
1000a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(True//1, 1)
1010a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIsNot(True//1, True)
1020a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(False//1, 0)
1030a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIsNot(False//1, False)
1040a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
1050a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        for b in False, True:
1060a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            for i in 0, 1, 2:
1070a8c90248264a8b26970b4473770bcc3df8515fJosh Gao                self.assertEqual(b**i, int(b)**i)
1080a8c90248264a8b26970b4473770bcc3df8515fJosh Gao                self.assertIsNot(b**i, bool(int(b)**i))
1090a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
1100a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        for a in False, True:
1110a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            for b in False, True:
1120a8c90248264a8b26970b4473770bcc3df8515fJosh Gao                self.assertIs(a&b, bool(int(a)&int(b)))
1130a8c90248264a8b26970b4473770bcc3df8515fJosh Gao                self.assertIs(a|b, bool(int(a)|int(b)))
1140a8c90248264a8b26970b4473770bcc3df8515fJosh Gao                self.assertIs(a^b, bool(int(a)^int(b)))
1150a8c90248264a8b26970b4473770bcc3df8515fJosh Gao                self.assertEqual(a&int(b), int(a)&int(b))
1160a8c90248264a8b26970b4473770bcc3df8515fJosh Gao                self.assertIsNot(a&int(b), bool(int(a)&int(b)))
1170a8c90248264a8b26970b4473770bcc3df8515fJosh Gao                self.assertEqual(a|int(b), int(a)|int(b))
1180a8c90248264a8b26970b4473770bcc3df8515fJosh Gao                self.assertIsNot(a|int(b), bool(int(a)|int(b)))
1190a8c90248264a8b26970b4473770bcc3df8515fJosh Gao                self.assertEqual(a^int(b), int(a)^int(b))
1200a8c90248264a8b26970b4473770bcc3df8515fJosh Gao                self.assertIsNot(a^int(b), bool(int(a)^int(b)))
1210a8c90248264a8b26970b4473770bcc3df8515fJosh Gao                self.assertEqual(int(a)&b, int(a)&int(b))
1220a8c90248264a8b26970b4473770bcc3df8515fJosh Gao                self.assertIsNot(int(a)&b, bool(int(a)&int(b)))
1230a8c90248264a8b26970b4473770bcc3df8515fJosh Gao                self.assertEqual(int(a)|b, int(a)|int(b))
1240a8c90248264a8b26970b4473770bcc3df8515fJosh Gao                self.assertIsNot(int(a)|b, bool(int(a)|int(b)))
1250a8c90248264a8b26970b4473770bcc3df8515fJosh Gao                self.assertEqual(int(a)^b, int(a)^int(b))
1260a8c90248264a8b26970b4473770bcc3df8515fJosh Gao                self.assertIsNot(int(a)^b, bool(int(a)^int(b)))
1270a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
1280a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(1==1, True)
1290a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(1==0, False)
1300a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(0<1, True)
1310a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(1<0, False)
1320a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(0<=0, True)
1330a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(1<=0, False)
1340a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(1>0, True)
1350a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(1>1, False)
1360a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(1>=1, True)
1370a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(0>=1, False)
1380a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(0!=1, True)
1390a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(0!=0, False)
1400a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
1410a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        x = [1]
1420a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(x is x, True)
1430a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(x is not x, False)
1440a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
1450a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(1 in x, True)
1460a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(0 in x, False)
1470a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(1 not in x, False)
1480a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(0 not in x, True)
1490a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
1500a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        x = {1: 2}
1510a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(x is x, True)
1520a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(x is not x, False)
1530a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
1540a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(1 in x, True)
1550a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(0 in x, False)
1560a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(1 not in x, False)
1570a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(0 not in x, True)
1580a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
1590a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(not True, False)
1600a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(not False, True)
1610a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
1620a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def test_convert(self):
1630a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertRaises(TypeError, bool, 42, 42)
1640a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(bool(10), True)
1650a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(bool(1), True)
1660a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(bool(-1), True)
1670a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(bool(0), False)
1680a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(bool("hello"), True)
1690a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(bool(""), False)
1700a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(bool(), False)
1710a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
1720a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def test_format(self):
1730a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual("%d" % False, "0")
1740a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual("%d" % True, "1")
1750a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual("%x" % False, "0")
1760a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual("%x" % True, "1")
1770a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
1780a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def test_hasattr(self):
1790a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(hasattr([], "append"), True)
1800a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(hasattr([], "wobble"), False)
1810a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
1820a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def test_callable(self):
1830a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(callable(len), True)
1840a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(callable(1), False)
1850a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
1860a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def test_isinstance(self):
1870a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(isinstance(True, bool), True)
1880a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(isinstance(False, bool), True)
1890a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(isinstance(True, int), True)
1900a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(isinstance(False, int), True)
1910a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(isinstance(1, bool), False)
1920a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(isinstance(0, bool), False)
1930a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
1940a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def test_issubclass(self):
1950a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(issubclass(bool, int), True)
1960a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(issubclass(int, bool), False)
1970a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
1980a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def test_haskey(self):
1990a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(1 in {}, False)
2000a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(1 in {1:1}, True)
2010a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        with test_support.check_py3k_warnings():
2020a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            self.assertIs({}.has_key(1), False)
2030a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            self.assertIs({1:1}.has_key(1), True)
2040a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
2050a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def test_string(self):
2060a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs("xyz".endswith("z"), True)
2070a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs("xyz".endswith("x"), False)
2080a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs("xyz0123".isalnum(), True)
2090a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs("@#$%".isalnum(), False)
2100a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs("xyz".isalpha(), True)
2110a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs("@#$%".isalpha(), False)
2120a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs("0123".isdigit(), True)
2130a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs("xyz".isdigit(), False)
2140a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs("xyz".islower(), True)
2150a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs("XYZ".islower(), False)
2160a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(" ".isspace(), True)
2170a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs("XYZ".isspace(), False)
2180a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs("X".istitle(), True)
2190a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs("x".istitle(), False)
2200a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs("XYZ".isupper(), True)
2210a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs("xyz".isupper(), False)
2220a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs("xyz".startswith("x"), True)
2230a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs("xyz".startswith("z"), False)
2240a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
2250a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        if test_support.have_unicode:
2260a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            self.assertIs(unicode("xyz", 'ascii').endswith(unicode("z", 'ascii')), True)
2270a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            self.assertIs(unicode("xyz", 'ascii').endswith(unicode("x", 'ascii')), False)
2280a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            self.assertIs(unicode("xyz0123", 'ascii').isalnum(), True)
2290a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            self.assertIs(unicode("@#$%", 'ascii').isalnum(), False)
2300a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            self.assertIs(unicode("xyz", 'ascii').isalpha(), True)
2310a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            self.assertIs(unicode("@#$%", 'ascii').isalpha(), False)
2320a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            self.assertIs(unicode("0123", 'ascii').isdecimal(), True)
2330a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            self.assertIs(unicode("xyz", 'ascii').isdecimal(), False)
2340a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            self.assertIs(unicode("0123", 'ascii').isdigit(), True)
2350a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            self.assertIs(unicode("xyz", 'ascii').isdigit(), False)
2360a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            self.assertIs(unicode("xyz", 'ascii').islower(), True)
2370a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            self.assertIs(unicode("XYZ", 'ascii').islower(), False)
2380a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            self.assertIs(unicode("0123", 'ascii').isnumeric(), True)
2390a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            self.assertIs(unicode("xyz", 'ascii').isnumeric(), False)
2400a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            self.assertIs(unicode(" ", 'ascii').isspace(), True)
2410a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            self.assertIs(unicode("XYZ", 'ascii').isspace(), False)
2420a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            self.assertIs(unicode("X", 'ascii').istitle(), True)
2430a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            self.assertIs(unicode("x", 'ascii').istitle(), False)
2440a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            self.assertIs(unicode("XYZ", 'ascii').isupper(), True)
2450a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            self.assertIs(unicode("xyz", 'ascii').isupper(), False)
2460a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            self.assertIs(unicode("xyz", 'ascii').startswith(unicode("x", 'ascii')), True)
2470a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            self.assertIs(unicode("xyz", 'ascii').startswith(unicode("z", 'ascii')), False)
2480a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
2490a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def test_boolean(self):
2500a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(True & 1, 1)
2510a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertNotIsInstance(True & 1, bool)
2520a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(True & True, True)
2530a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
2540a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(True | 1, 1)
2550a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertNotIsInstance(True | 1, bool)
2560a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(True | True, True)
2570a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
2580a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(True ^ 1, 0)
2590a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertNotIsInstance(True ^ 1, bool)
2600a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(True ^ True, False)
2610a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
2620a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def test_fileclosed(self):
2630a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        try:
2640a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            f = file(test_support.TESTFN, "w")
2650a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            self.assertIs(f.closed, False)
2660a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            f.close()
2670a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            self.assertIs(f.closed, True)
2680a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        finally:
2690a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            os.remove(test_support.TESTFN)
2700a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
2710a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def test_types(self):
2720a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        # types are always true.
2730a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        for t in [bool, complex, dict, file, float, int, list, long, object,
2740a8c90248264a8b26970b4473770bcc3df8515fJosh Gao                  set, str, tuple, type]:
2750a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            self.assertIs(bool(t), True)
2760a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
2770a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def test_operator(self):
2780a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        import operator
2790a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(operator.truth(0), False)
2800a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(operator.truth(1), True)
2810a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        with test_support.check_py3k_warnings():
2820a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            self.assertIs(operator.isCallable(0), False)
2830a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            self.assertIs(operator.isCallable(len), True)
2840a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(operator.isNumberType(None), False)
2850a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(operator.isNumberType(0), True)
2860a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(operator.not_(1), False)
2870a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(operator.not_(0), True)
2880a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(operator.isSequenceType(0), False)
2890a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(operator.isSequenceType([]), True)
2900a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(operator.contains([], 1), False)
2910a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(operator.contains([1], 1), True)
2920a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(operator.isMappingType(1), False)
2930a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(operator.isMappingType({}), True)
2940a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(operator.lt(0, 0), False)
2950a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(operator.lt(0, 1), True)
2960a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(operator.is_(True, True), True)
2970a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(operator.is_(True, False), False)
2980a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(operator.is_not(True, True), False)
2990a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(operator.is_not(True, False), True)
3000a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
3010a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def test_marshal(self):
3020a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        import marshal
3030a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(marshal.loads(marshal.dumps(True)), True)
3040a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(marshal.loads(marshal.dumps(False)), False)
3050a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
3060a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def test_pickle(self):
3070a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        import pickle
3080a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(pickle.loads(pickle.dumps(True)), True)
3090a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(pickle.loads(pickle.dumps(False)), False)
3100a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(pickle.loads(pickle.dumps(True, True)), True)
3110a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(pickle.loads(pickle.dumps(False, True)), False)
3120a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
3130a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def test_cpickle(self):
3140a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        import cPickle
3150a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(cPickle.loads(cPickle.dumps(True)), True)
3160a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(cPickle.loads(cPickle.dumps(False)), False)
3170a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(cPickle.loads(cPickle.dumps(True, True)), True)
3180a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(cPickle.loads(cPickle.dumps(False, True)), False)
3190a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
3200a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def test_mixedpickle(self):
3210a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        import pickle, cPickle
3220a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(pickle.loads(cPickle.dumps(True)), True)
3230a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(pickle.loads(cPickle.dumps(False)), False)
3240a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(pickle.loads(cPickle.dumps(True, True)), True)
3250a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(pickle.loads(cPickle.dumps(False, True)), False)
3260a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
3270a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(cPickle.loads(pickle.dumps(True)), True)
3280a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(cPickle.loads(pickle.dumps(False)), False)
3290a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(cPickle.loads(pickle.dumps(True, True)), True)
3300a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(cPickle.loads(pickle.dumps(False, True)), False)
3310a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
3320a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def test_picklevalues(self):
3330a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        import pickle, cPickle
3340a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
3350a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        # Test for specific backwards-compatible pickle values
3360a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(pickle.dumps(True), "I01\n.")
3370a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(pickle.dumps(False), "I00\n.")
3380a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(cPickle.dumps(True), "I01\n.")
3390a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(cPickle.dumps(False), "I00\n.")
3400a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(pickle.dumps(True, True), "I01\n.")
3410a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(pickle.dumps(False, True), "I00\n.")
3420a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(cPickle.dumps(True, True), "I01\n.")
3430a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(cPickle.dumps(False, True), "I00\n.")
3440a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
3450a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def test_convert_to_bool(self):
3460a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        # Verify that TypeError occurs when bad things are returned
3470a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        # from __nonzero__().  This isn't really a bool test, but
3480a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        # it's related.
3490a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        check = lambda o: self.assertRaises(TypeError, bool, o)
3500a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        class Foo(object):
3510a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            def __nonzero__(self):
3520a8c90248264a8b26970b4473770bcc3df8515fJosh Gao                return self
3530a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        check(Foo())
3540a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
3550a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        class Bar(object):
3560a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            def __nonzero__(self):
3570a8c90248264a8b26970b4473770bcc3df8515fJosh Gao                return "Yes"
3580a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        check(Bar())
3590a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
3600a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        class Baz(int):
3610a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            def __nonzero__(self):
3620a8c90248264a8b26970b4473770bcc3df8515fJosh Gao                return self
3630a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        check(Baz())
3640a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
3650a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
3660a8c90248264a8b26970b4473770bcc3df8515fJosh Gaodef test_main():
3670a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    test_support.run_unittest(BoolTest)
3680a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
3690a8c90248264a8b26970b4473770bcc3df8515fJosh Gaoif __name__ == "__main__":
3700a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    test_main()
371