1edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep# Test properties of bool promised by PEP 285
2edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
3edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoepimport unittest
4edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoepfrom test import test_support
5edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
6edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoepimport os
7edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
8edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoepclass BoolTest(unittest.TestCase):
9edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
10edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    def test_subclass(self):
11edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        try:
12edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            class C(bool):
13edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep                pass
14edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        except TypeError:
15edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            pass
16edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        else:
17edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            self.fail("bool should not be subclassable")
18edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
19edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertRaises(TypeError, int.__new__, bool, 0)
20edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
21edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    def test_print(self):
22edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        try:
23edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            fo = open(test_support.TESTFN, "wb")
24edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            print >> fo, False, True
25edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            fo.close()
26edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            fo = open(test_support.TESTFN, "rb")
27edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            self.assertEqual(fo.read(), 'False True\n')
28edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        finally:
29edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            fo.close()
30edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            os.remove(test_support.TESTFN)
31edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
32edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    def test_repr(self):
33edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(repr(False), 'False')
34edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(repr(True), 'True')
35edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(eval(repr(False)), False)
36edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(eval(repr(True)), True)
37edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
38edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    def test_str(self):
39edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(str(False), 'False')
40edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(str(True), 'True')
41edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
42edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    def test_int(self):
43edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(int(False), 0)
44edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIsNot(int(False), False)
45edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(int(True), 1)
46edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIsNot(int(True), True)
47edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
48edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    def test_float(self):
49edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(float(False), 0.0)
50edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIsNot(float(False), False)
51edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(float(True), 1.0)
52edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIsNot(float(True), True)
53edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
54edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    def test_long(self):
55edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(long(False), 0L)
56edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIsNot(long(False), False)
57edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(long(True), 1L)
58edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIsNot(long(True), True)
59edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
60edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    def test_math(self):
61edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(+False, 0)
62edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIsNot(+False, False)
63edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(-False, 0)
64edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIsNot(-False, False)
65edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(abs(False), 0)
66edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIsNot(abs(False), False)
67edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(+True, 1)
68edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIsNot(+True, True)
69edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(-True, -1)
70edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(abs(True), 1)
71edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIsNot(abs(True), True)
72edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(~False, -1)
73edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(~True, -2)
74edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
75edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(False+2, 2)
76edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(True+2, 3)
77edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(2+False, 2)
78edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(2+True, 3)
79edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
80edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(False+False, 0)
81edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIsNot(False+False, False)
82edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(False+True, 1)
83edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIsNot(False+True, True)
84edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(True+False, 1)
85edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIsNot(True+False, True)
86edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(True+True, 2)
87edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
88edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(True-True, 0)
89edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIsNot(True-True, False)
90edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(False-False, 0)
91edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIsNot(False-False, False)
92edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(True-False, 1)
93edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIsNot(True-False, True)
94edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(False-True, -1)
95edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
96edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(True*1, 1)
97edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(False*1, 0)
98edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIsNot(False*1, False)
99edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
100edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(True//1, 1)
101edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIsNot(True//1, True)
102edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(False//1, 0)
103edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIsNot(False//1, False)
104edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
105edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        for b in False, True:
106edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            for i in 0, 1, 2:
107edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep                self.assertEqual(b**i, int(b)**i)
108edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep                self.assertIsNot(b**i, bool(int(b)**i))
109edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
110edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        for a in False, True:
111edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            for b in False, True:
112edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep                self.assertIs(a&b, bool(int(a)&int(b)))
113edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep                self.assertIs(a|b, bool(int(a)|int(b)))
114edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep                self.assertIs(a^b, bool(int(a)^int(b)))
115edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep                self.assertEqual(a&int(b), int(a)&int(b))
116edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep                self.assertIsNot(a&int(b), bool(int(a)&int(b)))
117edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep                self.assertEqual(a|int(b), int(a)|int(b))
118edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep                self.assertIsNot(a|int(b), bool(int(a)|int(b)))
119edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep                self.assertEqual(a^int(b), int(a)^int(b))
120edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep                self.assertIsNot(a^int(b), bool(int(a)^int(b)))
121edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep                self.assertEqual(int(a)&b, int(a)&int(b))
122edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep                self.assertIsNot(int(a)&b, bool(int(a)&int(b)))
123edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep                self.assertEqual(int(a)|b, int(a)|int(b))
124edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep                self.assertIsNot(int(a)|b, bool(int(a)|int(b)))
125edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep                self.assertEqual(int(a)^b, int(a)^int(b))
126edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep                self.assertIsNot(int(a)^b, bool(int(a)^int(b)))
127edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
128edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(1==1, True)
129edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(1==0, False)
130edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(0<1, True)
131edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(1<0, False)
132edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(0<=0, True)
133edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(1<=0, False)
134edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(1>0, True)
135edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(1>1, False)
136edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(1>=1, True)
137edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(0>=1, False)
138edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(0!=1, True)
139edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(0!=0, False)
140edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
141edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        x = [1]
142edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(x is x, True)
143edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(x is not x, False)
144edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
145edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(1 in x, True)
146edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(0 in x, False)
147edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(1 not in x, False)
148edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(0 not in x, True)
149edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
150edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        x = {1: 2}
151edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(x is x, True)
152edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(x is not x, False)
153edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
154edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(1 in x, True)
155edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(0 in x, False)
156edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(1 not in x, False)
157edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(0 not in x, True)
158edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
159edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(not True, False)
160edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(not False, True)
161edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
162edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    def test_convert(self):
163edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertRaises(TypeError, bool, 42, 42)
164edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(bool(10), True)
165edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(bool(1), True)
166edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(bool(-1), True)
167edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(bool(0), False)
168edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(bool("hello"), True)
169edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(bool(""), False)
170edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(bool(), False)
171edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
172edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    def test_format(self):
173edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual("%d" % False, "0")
174edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual("%d" % True, "1")
175edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual("%x" % False, "0")
176edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual("%x" % True, "1")
177edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
178edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    def test_hasattr(self):
179edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(hasattr([], "append"), True)
180edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(hasattr([], "wobble"), False)
181edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
182edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    def test_callable(self):
183edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(callable(len), True)
184edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(callable(1), False)
185edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
186edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    def test_isinstance(self):
187edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(isinstance(True, bool), True)
188edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(isinstance(False, bool), True)
189edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(isinstance(True, int), True)
190edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(isinstance(False, int), True)
191edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(isinstance(1, bool), False)
192edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(isinstance(0, bool), False)
193edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
194edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    def test_issubclass(self):
195edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(issubclass(bool, int), True)
196edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(issubclass(int, bool), False)
197edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
198edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    def test_haskey(self):
199edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(1 in {}, False)
200edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(1 in {1:1}, True)
201edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        with test_support.check_py3k_warnings():
202edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            self.assertIs({}.has_key(1), False)
203edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            self.assertIs({1:1}.has_key(1), True)
204edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
205edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    def test_string(self):
206edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs("xyz".endswith("z"), True)
207edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs("xyz".endswith("x"), False)
208edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs("xyz0123".isalnum(), True)
209edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs("@#$%".isalnum(), False)
210edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs("xyz".isalpha(), True)
211edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs("@#$%".isalpha(), False)
212edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs("0123".isdigit(), True)
213edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs("xyz".isdigit(), False)
214edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs("xyz".islower(), True)
215edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs("XYZ".islower(), False)
216edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(" ".isspace(), True)
217edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs("XYZ".isspace(), False)
218edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs("X".istitle(), True)
219edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs("x".istitle(), False)
220edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs("XYZ".isupper(), True)
221edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs("xyz".isupper(), False)
222edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs("xyz".startswith("x"), True)
223edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs("xyz".startswith("z"), False)
224edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
225edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        if test_support.have_unicode:
226edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            self.assertIs(unicode("xyz", 'ascii').endswith(unicode("z", 'ascii')), True)
227edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            self.assertIs(unicode("xyz", 'ascii').endswith(unicode("x", 'ascii')), False)
228edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            self.assertIs(unicode("xyz0123", 'ascii').isalnum(), True)
229edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            self.assertIs(unicode("@#$%", 'ascii').isalnum(), False)
230edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            self.assertIs(unicode("xyz", 'ascii').isalpha(), True)
231edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            self.assertIs(unicode("@#$%", 'ascii').isalpha(), False)
232edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            self.assertIs(unicode("0123", 'ascii').isdecimal(), True)
233edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            self.assertIs(unicode("xyz", 'ascii').isdecimal(), False)
234edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            self.assertIs(unicode("0123", 'ascii').isdigit(), True)
235edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            self.assertIs(unicode("xyz", 'ascii').isdigit(), False)
236edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            self.assertIs(unicode("xyz", 'ascii').islower(), True)
237edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            self.assertIs(unicode("XYZ", 'ascii').islower(), False)
238edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            self.assertIs(unicode("0123", 'ascii').isnumeric(), True)
239edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            self.assertIs(unicode("xyz", 'ascii').isnumeric(), False)
240edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            self.assertIs(unicode(" ", 'ascii').isspace(), True)
241edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            self.assertIs(unicode("XYZ", 'ascii').isspace(), False)
242edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            self.assertIs(unicode("X", 'ascii').istitle(), True)
243edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            self.assertIs(unicode("x", 'ascii').istitle(), False)
244edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            self.assertIs(unicode("XYZ", 'ascii').isupper(), True)
245edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            self.assertIs(unicode("xyz", 'ascii').isupper(), False)
246edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            self.assertIs(unicode("xyz", 'ascii').startswith(unicode("x", 'ascii')), True)
247edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            self.assertIs(unicode("xyz", 'ascii').startswith(unicode("z", 'ascii')), False)
248edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
249edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    def test_boolean(self):
250edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(True & 1, 1)
251edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertNotIsInstance(True & 1, bool)
252edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(True & True, True)
253edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
254edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(True | 1, 1)
255edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertNotIsInstance(True | 1, bool)
256edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(True | True, True)
257edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
258edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(True ^ 1, 0)
259edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertNotIsInstance(True ^ 1, bool)
260edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(True ^ True, False)
261edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
262edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    def test_fileclosed(self):
263edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        try:
264edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            f = file(test_support.TESTFN, "w")
265edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            self.assertIs(f.closed, False)
266edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            f.close()
267edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            self.assertIs(f.closed, True)
268edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        finally:
269edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            os.remove(test_support.TESTFN)
270edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
271edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    def test_types(self):
272edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        # types are always true.
273edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        for t in [bool, complex, dict, file, float, int, list, long, object,
274edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep                  set, str, tuple, type]:
275edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            self.assertIs(bool(t), True)
276edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
277edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    def test_operator(self):
278edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        import operator
279edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(operator.truth(0), False)
280edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(operator.truth(1), True)
281edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        with test_support.check_py3k_warnings():
282edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            self.assertIs(operator.isCallable(0), False)
283edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            self.assertIs(operator.isCallable(len), True)
284edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(operator.isNumberType(None), False)
285edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(operator.isNumberType(0), True)
286edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(operator.not_(1), False)
287edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(operator.not_(0), True)
288edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(operator.isSequenceType(0), False)
289edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(operator.isSequenceType([]), True)
290edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(operator.contains([], 1), False)
291edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(operator.contains([1], 1), True)
292edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(operator.isMappingType(1), False)
293edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(operator.isMappingType({}), True)
294edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(operator.lt(0, 0), False)
295edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(operator.lt(0, 1), True)
296edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(operator.is_(True, True), True)
297edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(operator.is_(True, False), False)
298edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(operator.is_not(True, True), False)
299edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(operator.is_not(True, False), True)
300edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
301edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    def test_marshal(self):
302edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        import marshal
303edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(marshal.loads(marshal.dumps(True)), True)
304edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(marshal.loads(marshal.dumps(False)), False)
305edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
306edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    def test_pickle(self):
307edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        import pickle
308edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(pickle.loads(pickle.dumps(True)), True)
309edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(pickle.loads(pickle.dumps(False)), False)
310edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(pickle.loads(pickle.dumps(True, True)), True)
311edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(pickle.loads(pickle.dumps(False, True)), False)
312edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
313edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    def test_cpickle(self):
314edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        import cPickle
315edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(cPickle.loads(cPickle.dumps(True)), True)
316edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(cPickle.loads(cPickle.dumps(False)), False)
317edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(cPickle.loads(cPickle.dumps(True, True)), True)
318edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(cPickle.loads(cPickle.dumps(False, True)), False)
319edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
320edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    def test_mixedpickle(self):
321edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        import pickle, cPickle
322edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(pickle.loads(cPickle.dumps(True)), True)
323edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(pickle.loads(cPickle.dumps(False)), False)
324edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(pickle.loads(cPickle.dumps(True, True)), True)
325edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(pickle.loads(cPickle.dumps(False, True)), False)
326edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
327edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(cPickle.loads(pickle.dumps(True)), True)
328edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(cPickle.loads(pickle.dumps(False)), False)
329edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(cPickle.loads(pickle.dumps(True, True)), True)
330edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIs(cPickle.loads(pickle.dumps(False, True)), False)
331edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
332edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    def test_picklevalues(self):
333edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        import pickle, cPickle
334edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
335edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        # Test for specific backwards-compatible pickle values
336edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(pickle.dumps(True), "I01\n.")
337edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(pickle.dumps(False), "I00\n.")
338edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(cPickle.dumps(True), "I01\n.")
339edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(cPickle.dumps(False), "I00\n.")
340edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(pickle.dumps(True, True), "I01\n.")
341edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(pickle.dumps(False, True), "I00\n.")
342edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(cPickle.dumps(True, True), "I01\n.")
343edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(cPickle.dumps(False, True), "I00\n.")
344edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
345edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    def test_convert_to_bool(self):
346edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        # Verify that TypeError occurs when bad things are returned
347edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        # from __nonzero__().  This isn't really a bool test, but
348edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        # it's related.
349edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        check = lambda o: self.assertRaises(TypeError, bool, o)
350edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        class Foo(object):
351edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            def __nonzero__(self):
352edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep                return self
353edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        check(Foo())
354edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
355edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        class Bar(object):
356edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            def __nonzero__(self):
357edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep                return "Yes"
358edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        check(Bar())
359edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
360edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        class Baz(int):
361edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            def __nonzero__(self):
362edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep                return self
363edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        check(Baz())
364edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
365edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
366edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoepdef test_main():
367edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    test_support.run_unittest(BoolTest)
368edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
369edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoepif __name__ == "__main__":
370edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    test_main()
371