test_set.py revision 610a93ea2623ff324c99c52147d78838335ae900
1a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerimport unittest
2a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerfrom test import test_support
3691d80532b0a0204e92de35ecba1472d87af6e94Raymond Hettingerfrom weakref import proxy
4a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerimport operator
5a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerimport copy
6a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerimport pickle
7eae05de91be776d141e531a11cb169dd30a8241dRaymond Hettingerimport os
882cb9a235de45074d578d46bbf6680e726b13efdRaymond Hettingerfrom random import randrange, shuffle
9c47e01d02021253dd9f8fd4ced6eb663436431bbRaymond Hettingerimport sys
106170874f9c16b45a60851821c599898f51ba02d2Raymond Hettingerimport collections
11a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
12a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass PassThru(Exception):
13a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    pass
14a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
15a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerdef check_pass_thru():
16a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    raise PassThru
17a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    yield 1
18a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
199bda1d6f645bd0f3e76c14f27bbbac919814cd38Raymond Hettingerclass BadCmp:
209bda1d6f645bd0f3e76c14f27bbbac919814cd38Raymond Hettinger    def __hash__(self):
219bda1d6f645bd0f3e76c14f27bbbac919814cd38Raymond Hettinger        return 1
229bda1d6f645bd0f3e76c14f27bbbac919814cd38Raymond Hettinger    def __cmp__(self, other):
239bda1d6f645bd0f3e76c14f27bbbac919814cd38Raymond Hettinger        raise RuntimeError
249bda1d6f645bd0f3e76c14f27bbbac919814cd38Raymond Hettinger
255399910eba1ef3580aebf49482b1367f14fa6c48Raymond Hettingerclass ReprWrapper:
265399910eba1ef3580aebf49482b1367f14fa6c48Raymond Hettinger    'Used to test self-referential repr() calls'
275399910eba1ef3580aebf49482b1367f14fa6c48Raymond Hettinger    def __repr__(self):
285399910eba1ef3580aebf49482b1367f14fa6c48Raymond Hettinger        return repr(self.value)
295399910eba1ef3580aebf49482b1367f14fa6c48Raymond Hettinger
30d6fc72a5ae27048dae56c773896ccbd6152d9b9bRaymond Hettingerclass HashCountingInt(int):
31d6fc72a5ae27048dae56c773896ccbd6152d9b9bRaymond Hettinger    'int-like object that counts the number of times __hash__ is called'
32d6fc72a5ae27048dae56c773896ccbd6152d9b9bRaymond Hettinger    def __init__(self, *args):
33d6fc72a5ae27048dae56c773896ccbd6152d9b9bRaymond Hettinger        self.hash_count = 0
34d6fc72a5ae27048dae56c773896ccbd6152d9b9bRaymond Hettinger    def __hash__(self):
35d6fc72a5ae27048dae56c773896ccbd6152d9b9bRaymond Hettinger        self.hash_count += 1
36d6fc72a5ae27048dae56c773896ccbd6152d9b9bRaymond Hettinger        return int.__hash__(self)
37d6fc72a5ae27048dae56c773896ccbd6152d9b9bRaymond Hettinger
38a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestJointOps(unittest.TestCase):
39a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    # Tests common to both set and frozenset
40a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
41a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def setUp(self):
42a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.word = word = 'simsalabim'
43a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.otherword = 'madagascar'
44a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.letters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
45a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.s = self.thetype(word)
46a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.d = dict.fromkeys(word)
47a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
486429a4727e4bb8bcb0d3deefaefe195e63e6bb6eRaymond Hettinger    def test_new_or_init(self):
496429a4727e4bb8bcb0d3deefaefe195e63e6bb6eRaymond Hettinger        self.assertRaises(TypeError, self.thetype, [], 2)
506429a4727e4bb8bcb0d3deefaefe195e63e6bb6eRaymond Hettinger
51a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_uniquification(self):
5264958a15d7c03efdc3d2eddf247666e18d1fd910Raymond Hettinger        actual = sorted(self.s)
5364958a15d7c03efdc3d2eddf247666e18d1fd910Raymond Hettinger        expected = sorted(self.d)
54a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(actual, expected)
55a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(PassThru, self.thetype, check_pass_thru())
56a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, self.thetype, [[]])
57a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
58a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_len(self):
59a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(len(self.s), len(self.d))
60a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
61a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_contains(self):
62a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        for c in self.letters:
63a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.assertEqual(c in self.s, c in self.d)
64a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, self.s.__contains__, [[]])
6519c2d77842290af9b5f470c1eea2a71d1f77c9feRaymond Hettinger        s = self.thetype([frozenset(self.letters)])
6619c2d77842290af9b5f470c1eea2a71d1f77c9feRaymond Hettinger        self.assert_(self.thetype(self.letters) in s)
67a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
68a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_union(self):
69a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        u = self.s.union(self.otherword)
70a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        for c in self.letters:
71a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.assertEqual(c in u, c in self.d or c in self.otherword)
7249ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        self.assertEqual(self.s, self.thetype(self.word))
73a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(type(u), self.thetype)
74a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(PassThru, self.s.union, check_pass_thru())
75a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, self.s.union, [[]])
76f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger        for C in set, frozenset, dict.fromkeys, str, unicode, list, tuple:
77f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger            self.assertEqual(self.thetype('abcba').union(C('cdc')), set('abcd'))
78f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger            self.assertEqual(self.thetype('abcba').union(C('efgfe')), set('abcefg'))
79f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger            self.assertEqual(self.thetype('abcba').union(C('ccb')), set('abc'))
80f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger            self.assertEqual(self.thetype('abcba').union(C('ef')), set('abcef'))
81ee4bcad68ec383c0140d0a21f4ac296073c0f938Raymond Hettinger            self.assertEqual(self.thetype('abcba').union(C('ef'), C('fg')), set('abcefg'))
82a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
83a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_or(self):
84a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        i = self.s.union(self.otherword)
85a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.s | set(self.otherword), i)
86a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.s | frozenset(self.otherword), i)
87a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        try:
88a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.s | self.otherword
89a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        except TypeError:
90a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            pass
91a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        else:
92a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.fail("s|t did not screen-out general iterables")
93a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
94a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_intersection(self):
95a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        i = self.s.intersection(self.otherword)
96a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        for c in self.letters:
97a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.assertEqual(c in i, c in self.d and c in self.otherword)
9849ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        self.assertEqual(self.s, self.thetype(self.word))
99a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(type(i), self.thetype)
100a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(PassThru, self.s.intersection, check_pass_thru())
101f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger        for C in set, frozenset, dict.fromkeys, str, unicode, list, tuple:
102f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger            self.assertEqual(self.thetype('abcba').intersection(C('cdc')), set('cc'))
103f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger            self.assertEqual(self.thetype('abcba').intersection(C('efgfe')), set(''))
104f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger            self.assertEqual(self.thetype('abcba').intersection(C('ccb')), set('bc'))
105f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger            self.assertEqual(self.thetype('abcba').intersection(C('ef')), set(''))
1065c4d3d0e4c6b533dbfbab36ad8034010fe90cf69Raymond Hettinger            self.assertEqual(self.thetype('abcba').intersection(C('cbcf'), C('bag')), set('b'))
107610a93ea2623ff324c99c52147d78838335ae900Raymond Hettinger        s = self.thetype('abcba')
108610a93ea2623ff324c99c52147d78838335ae900Raymond Hettinger        z = s.intersection()
109610a93ea2623ff324c99c52147d78838335ae900Raymond Hettinger        if self.thetype == frozenset():
110610a93ea2623ff324c99c52147d78838335ae900Raymond Hettinger            self.assertEqual(id(s), id(z))
111610a93ea2623ff324c99c52147d78838335ae900Raymond Hettinger        else:
112610a93ea2623ff324c99c52147d78838335ae900Raymond Hettinger            self.assertNotEqual(id(s), id(z))
113a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1141760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger    def test_isdisjoint(self):
1151760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger        def f(s1, s2):
1161760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger            'Pure python equivalent of isdisjoint()'
1171760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger            return not set(s1).intersection(s2)
1181760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger        for larg in '', 'a', 'ab', 'abc', 'ababac', 'cdc', 'cc', 'efgfe', 'ccb', 'ef':
1191760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger            s1 = self.thetype(larg)
1201760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger            for rarg in '', 'a', 'ab', 'abc', 'ababac', 'cdc', 'cc', 'efgfe', 'ccb', 'ef':
1211760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger                for C in set, frozenset, dict.fromkeys, str, unicode, list, tuple:
1221760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger                    s2 = C(rarg)
1231760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger                    actual = s1.isdisjoint(s2)
1241760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger                    expected = f(s1, s2)
1251760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger                    self.assertEqual(actual, expected)
1261760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger                    self.assert_(actual is True or actual is False)
1271760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger
128a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_and(self):
129a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        i = self.s.intersection(self.otherword)
130a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.s & set(self.otherword), i)
131a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.s & frozenset(self.otherword), i)
132a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        try:
133a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.s & self.otherword
134a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        except TypeError:
135a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            pass
136a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        else:
137a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.fail("s&t did not screen-out general iterables")
138a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
139a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_difference(self):
140a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        i = self.s.difference(self.otherword)
141a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        for c in self.letters:
142a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.assertEqual(c in i, c in self.d and c not in self.otherword)
14349ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        self.assertEqual(self.s, self.thetype(self.word))
144a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(type(i), self.thetype)
145a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(PassThru, self.s.difference, check_pass_thru())
146a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, self.s.difference, [[]])
147f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger        for C in set, frozenset, dict.fromkeys, str, unicode, list, tuple:
148f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger            self.assertEqual(self.thetype('abcba').difference(C('cdc')), set('ab'))
149f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger            self.assertEqual(self.thetype('abcba').difference(C('efgfe')), set('abc'))
150f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger            self.assertEqual(self.thetype('abcba').difference(C('ccb')), set('a'))
151f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger            self.assertEqual(self.thetype('abcba').difference(C('ef')), set('abc'))
152a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
153a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_sub(self):
154a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        i = self.s.difference(self.otherword)
155a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.s - set(self.otherword), i)
156a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.s - frozenset(self.otherword), i)
157a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        try:
158a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.s - self.otherword
159a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        except TypeError:
160a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            pass
161a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        else:
162a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.fail("s-t did not screen-out general iterables")
163a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
164a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_symmetric_difference(self):
165a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        i = self.s.symmetric_difference(self.otherword)
166a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        for c in self.letters:
167a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.assertEqual(c in i, (c in self.d) ^ (c in self.otherword))
16849ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        self.assertEqual(self.s, self.thetype(self.word))
169a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(type(i), self.thetype)
170a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(PassThru, self.s.symmetric_difference, check_pass_thru())
171a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, self.s.symmetric_difference, [[]])
172f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger        for C in set, frozenset, dict.fromkeys, str, unicode, list, tuple:
173f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger            self.assertEqual(self.thetype('abcba').symmetric_difference(C('cdc')), set('abd'))
174f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger            self.assertEqual(self.thetype('abcba').symmetric_difference(C('efgfe')), set('abcefg'))
175f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger            self.assertEqual(self.thetype('abcba').symmetric_difference(C('ccb')), set('a'))
176f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger            self.assertEqual(self.thetype('abcba').symmetric_difference(C('ef')), set('abcef'))
177a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
178a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_xor(self):
179a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        i = self.s.symmetric_difference(self.otherword)
180a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.s ^ set(self.otherword), i)
181a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.s ^ frozenset(self.otherword), i)
182a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        try:
183a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.s ^ self.otherword
184a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        except TypeError:
185a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            pass
186a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        else:
187a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.fail("s^t did not screen-out general iterables")
188a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
189a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_equality(self):
190a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.s, set(self.word))
191a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.s, frozenset(self.word))
192a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.s == self.word, False)
193a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertNotEqual(self.s, set(self.otherword))
194a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertNotEqual(self.s, frozenset(self.otherword))
195a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.s != self.word, True)
196a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
197a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_setOfFrozensets(self):
198a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        t = map(frozenset, ['abcdef', 'bcd', 'bdcb', 'fed', 'fedccba'])
199a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        s = self.thetype(t)
200a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(len(s), 3)
201a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
202a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_compare(self):
203a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, self.s.__cmp__, self.s)
204a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
205a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_sub_and_super(self):
206a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        p, q, r = map(self.thetype, ['ab', 'abcde', 'def'])
207a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assert_(p < q)
208a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assert_(p <= q)
209a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assert_(q <= q)
210a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assert_(q > p)
211a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assert_(q >= p)
212a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.failIf(q < r)
213a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.failIf(q <= r)
214a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.failIf(q > r)
215a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.failIf(q >= r)
2163fbec701cae361de6beca55bc926e0540635f165Raymond Hettinger        self.assert_(set('a').issubset('abc'))
2173fbec701cae361de6beca55bc926e0540635f165Raymond Hettinger        self.assert_(set('abc').issuperset('a'))
2183fbec701cae361de6beca55bc926e0540635f165Raymond Hettinger        self.failIf(set('a').issubset('cbs'))
2193fbec701cae361de6beca55bc926e0540635f165Raymond Hettinger        self.failIf(set('cbs').issuperset('a'))
220a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
221a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_pickling(self):
22215056a5202c89846d75006d66541d5a634ac79b5Raymond Hettinger        for i in (0, 1, 2):
22315056a5202c89846d75006d66541d5a634ac79b5Raymond Hettinger            p = pickle.dumps(self.s, i)
22415056a5202c89846d75006d66541d5a634ac79b5Raymond Hettinger            dup = pickle.loads(p)
22515056a5202c89846d75006d66541d5a634ac79b5Raymond Hettinger            self.assertEqual(self.s, dup, "%s != %s" % (self.s, dup))
22615056a5202c89846d75006d66541d5a634ac79b5Raymond Hettinger            if type(self.s) not in (set, frozenset):
22715056a5202c89846d75006d66541d5a634ac79b5Raymond Hettinger                self.s.x = 10
22815056a5202c89846d75006d66541d5a634ac79b5Raymond Hettinger                p = pickle.dumps(self.s)
22915056a5202c89846d75006d66541d5a634ac79b5Raymond Hettinger                dup = pickle.loads(p)
23015056a5202c89846d75006d66541d5a634ac79b5Raymond Hettinger                self.assertEqual(self.s.x, dup.x)
231a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
23249ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger    def test_deepcopy(self):
23349ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        class Tracer:
23449ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger            def __init__(self, value):
23549ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger                self.value = value
23649ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger            def __hash__(self):
23758eb11cf62dd04ccc2c364b62fd51b4265e2e203Tim Peters                return self.value
23849ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger            def __deepcopy__(self, memo=None):
23949ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger                return Tracer(self.value + 1)
24049ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        t = Tracer(10)
24149ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        s = self.thetype([t])
24249ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        dup = copy.deepcopy(s)
24349ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        self.assertNotEqual(id(s), id(dup))
24449ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        for elem in dup:
24549ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger            newt = elem
24649ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        self.assertNotEqual(id(t), id(newt))
24749ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        self.assertEqual(t.value + 1, newt.value)
24849ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger
249bb999b5925ae65d19282c3781cdbb678f92c410fRaymond Hettinger    def test_gc(self):
250bb999b5925ae65d19282c3781cdbb678f92c410fRaymond Hettinger        # Create a nest of cycles to exercise overall ref count check
251bb999b5925ae65d19282c3781cdbb678f92c410fRaymond Hettinger        class A:
252bb999b5925ae65d19282c3781cdbb678f92c410fRaymond Hettinger            pass
253bb999b5925ae65d19282c3781cdbb678f92c410fRaymond Hettinger        s = set(A() for i in xrange(1000))
254bb999b5925ae65d19282c3781cdbb678f92c410fRaymond Hettinger        for elem in s:
255bb999b5925ae65d19282c3781cdbb678f92c410fRaymond Hettinger            elem.cycle = s
256bb999b5925ae65d19282c3781cdbb678f92c410fRaymond Hettinger            elem.sub = elem
257bb999b5925ae65d19282c3781cdbb678f92c410fRaymond Hettinger            elem.set = set([elem])
258bb999b5925ae65d19282c3781cdbb678f92c410fRaymond Hettinger
25997979ddc141b88cfd81bdf02404d0337a603f7cfRaymond Hettinger    def test_subclass_with_custom_hash(self):
26097979ddc141b88cfd81bdf02404d0337a603f7cfRaymond Hettinger        # Bug #1257731
26197979ddc141b88cfd81bdf02404d0337a603f7cfRaymond Hettinger        class H(self.thetype):
26297979ddc141b88cfd81bdf02404d0337a603f7cfRaymond Hettinger            def __hash__(self):
2636902b44406ba2940dd7f34b7ec77e2ea13ff2e66Tim Peters                return int(id(self) & 0x7fffffff)
26497979ddc141b88cfd81bdf02404d0337a603f7cfRaymond Hettinger        s=H()
26597979ddc141b88cfd81bdf02404d0337a603f7cfRaymond Hettinger        f=set()
26697979ddc141b88cfd81bdf02404d0337a603f7cfRaymond Hettinger        f.add(s)
26797979ddc141b88cfd81bdf02404d0337a603f7cfRaymond Hettinger        self.assert_(s in f)
26897979ddc141b88cfd81bdf02404d0337a603f7cfRaymond Hettinger        f.remove(s)
26997979ddc141b88cfd81bdf02404d0337a603f7cfRaymond Hettinger        f.add(s)
27097979ddc141b88cfd81bdf02404d0337a603f7cfRaymond Hettinger        f.discard(s)
27197979ddc141b88cfd81bdf02404d0337a603f7cfRaymond Hettinger
2729bda1d6f645bd0f3e76c14f27bbbac919814cd38Raymond Hettinger    def test_badcmp(self):
2739bda1d6f645bd0f3e76c14f27bbbac919814cd38Raymond Hettinger        s = self.thetype([BadCmp()])
2749bda1d6f645bd0f3e76c14f27bbbac919814cd38Raymond Hettinger        # Detect comparison errors during insertion and lookup
2759bda1d6f645bd0f3e76c14f27bbbac919814cd38Raymond Hettinger        self.assertRaises(RuntimeError, self.thetype, [BadCmp(), BadCmp()])
2769bda1d6f645bd0f3e76c14f27bbbac919814cd38Raymond Hettinger        self.assertRaises(RuntimeError, s.__contains__, BadCmp())
2779bda1d6f645bd0f3e76c14f27bbbac919814cd38Raymond Hettinger        # Detect errors during mutating operations
2789bda1d6f645bd0f3e76c14f27bbbac919814cd38Raymond Hettinger        if hasattr(s, 'add'):
2799bda1d6f645bd0f3e76c14f27bbbac919814cd38Raymond Hettinger            self.assertRaises(RuntimeError, s.add, BadCmp())
2809bda1d6f645bd0f3e76c14f27bbbac919814cd38Raymond Hettinger            self.assertRaises(RuntimeError, s.discard, BadCmp())
2819bda1d6f645bd0f3e76c14f27bbbac919814cd38Raymond Hettinger            self.assertRaises(RuntimeError, s.remove, BadCmp())
2829bda1d6f645bd0f3e76c14f27bbbac919814cd38Raymond Hettinger
2835399910eba1ef3580aebf49482b1367f14fa6c48Raymond Hettinger    def test_cyclical_repr(self):
2845399910eba1ef3580aebf49482b1367f14fa6c48Raymond Hettinger        w = ReprWrapper()
2855399910eba1ef3580aebf49482b1367f14fa6c48Raymond Hettinger        s = self.thetype([w])
2865399910eba1ef3580aebf49482b1367f14fa6c48Raymond Hettinger        w.value = s
2875399910eba1ef3580aebf49482b1367f14fa6c48Raymond Hettinger        name = repr(s).partition('(')[0]    # strip class name from repr string
2885399910eba1ef3580aebf49482b1367f14fa6c48Raymond Hettinger        self.assertEqual(repr(s), '%s([%s(...)])' % (name, name))
2895399910eba1ef3580aebf49482b1367f14fa6c48Raymond Hettinger
2905399910eba1ef3580aebf49482b1367f14fa6c48Raymond Hettinger    def test_cyclical_print(self):
2915399910eba1ef3580aebf49482b1367f14fa6c48Raymond Hettinger        w = ReprWrapper()
2925399910eba1ef3580aebf49482b1367f14fa6c48Raymond Hettinger        s = self.thetype([w])
2935399910eba1ef3580aebf49482b1367f14fa6c48Raymond Hettinger        w.value = s
294be9160b035449b00ff4aee1837c510ec518b08bcNeal Norwitz        fo = open(test_support.TESTFN, "wb")
2955399910eba1ef3580aebf49482b1367f14fa6c48Raymond Hettinger        try:
2965399910eba1ef3580aebf49482b1367f14fa6c48Raymond Hettinger            print >> fo, s,
2975399910eba1ef3580aebf49482b1367f14fa6c48Raymond Hettinger            fo.close()
2985399910eba1ef3580aebf49482b1367f14fa6c48Raymond Hettinger            fo = open(test_support.TESTFN, "rb")
2995399910eba1ef3580aebf49482b1367f14fa6c48Raymond Hettinger            self.assertEqual(fo.read(), repr(s))
3005399910eba1ef3580aebf49482b1367f14fa6c48Raymond Hettinger        finally:
3015399910eba1ef3580aebf49482b1367f14fa6c48Raymond Hettinger            fo.close()
302be9160b035449b00ff4aee1837c510ec518b08bcNeal Norwitz            test_support.unlink(test_support.TESTFN)
3035399910eba1ef3580aebf49482b1367f14fa6c48Raymond Hettinger
304d6fc72a5ae27048dae56c773896ccbd6152d9b9bRaymond Hettinger    def test_do_not_rehash_dict_keys(self):
305d6fc72a5ae27048dae56c773896ccbd6152d9b9bRaymond Hettinger        n = 10
306d6fc72a5ae27048dae56c773896ccbd6152d9b9bRaymond Hettinger        d = dict.fromkeys(map(HashCountingInt, xrange(n)))
307d6fc72a5ae27048dae56c773896ccbd6152d9b9bRaymond Hettinger        self.assertEqual(sum(elem.hash_count for elem in d), n)
308d6fc72a5ae27048dae56c773896ccbd6152d9b9bRaymond Hettinger        s = self.thetype(d)
309d6fc72a5ae27048dae56c773896ccbd6152d9b9bRaymond Hettinger        self.assertEqual(sum(elem.hash_count for elem in d), n)
310d6fc72a5ae27048dae56c773896ccbd6152d9b9bRaymond Hettinger        s.difference(d)
311ea5962f86e8550978446724dadcacd60e03feef2Tim Peters        self.assertEqual(sum(elem.hash_count for elem in d), n)
312d6fc72a5ae27048dae56c773896ccbd6152d9b9bRaymond Hettinger        if hasattr(s, 'symmetric_difference_update'):
313d6fc72a5ae27048dae56c773896ccbd6152d9b9bRaymond Hettinger            s.symmetric_difference_update(d)
3140d4c06e06e5ee1f3bb1fa8068114bd700d74864aNeal Norwitz        self.assertEqual(sum(elem.hash_count for elem in d), n)
3150bbbfc4c0b0cf84a23d2644080d09fb8af5324d2Raymond Hettinger        d2 = dict.fromkeys(set(d))
3160bbbfc4c0b0cf84a23d2644080d09fb8af5324d2Raymond Hettinger        self.assertEqual(sum(elem.hash_count for elem in d), n)
3170bbbfc4c0b0cf84a23d2644080d09fb8af5324d2Raymond Hettinger        d3 = dict.fromkeys(frozenset(d))
318ea5962f86e8550978446724dadcacd60e03feef2Tim Peters        self.assertEqual(sum(elem.hash_count for elem in d), n)
319e3146f5aa3cbb8d28a6a429b5ccc07002e339ff2Raymond Hettinger        d3 = dict.fromkeys(frozenset(d), 123)
320e3146f5aa3cbb8d28a6a429b5ccc07002e339ff2Raymond Hettinger        self.assertEqual(sum(elem.hash_count for elem in d), n)
321e3146f5aa3cbb8d28a6a429b5ccc07002e339ff2Raymond Hettinger        self.assertEqual(d3, dict.fromkeys(d, 123))
322d6fc72a5ae27048dae56c773896ccbd6152d9b9bRaymond Hettinger
323a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestSet(TestJointOps):
324a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    thetype = set
325a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
32650a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger    def test_init(self):
32749ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        s = self.thetype()
32850a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger        s.__init__(self.word)
32950a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger        self.assertEqual(s, set(self.word))
33050a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger        s.__init__(self.otherword)
33150a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger        self.assertEqual(s, set(self.otherword))
332eae05de91be776d141e531a11cb169dd30a8241dRaymond Hettinger        self.assertRaises(TypeError, s.__init__, s, 2);
333eae05de91be776d141e531a11cb169dd30a8241dRaymond Hettinger        self.assertRaises(TypeError, s.__init__, 1);
33450a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger
33549ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger    def test_constructor_identity(self):
33649ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        s = self.thetype(range(3))
33749ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        t = self.thetype(s)
33849ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        self.assertNotEqual(id(s), id(t))
33949ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger
340a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_hash(self):
341a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, hash, self.s)
342a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
343a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_clear(self):
344a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.s.clear()
345f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger        self.assertEqual(self.s, set())
346f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger        self.assertEqual(len(self.s), 0)
347a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
34849ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger    def test_copy(self):
34949ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        dup = self.s.copy()
35049ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        self.assertEqual(self.s, dup)
35149ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        self.assertNotEqual(id(self.s), id(dup))
35249ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger
353a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_add(self):
354a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.s.add('Q')
355a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assert_('Q' in self.s)
356f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger        dup = self.s.copy()
357f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger        self.s.add('Q')
358f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger        self.assertEqual(self.s, dup)
359a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, self.s.add, [])
360a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
361a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_remove(self):
362a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.s.remove('a')
363a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assert_('a' not in self.s)
364a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(KeyError, self.s.remove, 'Q')
365a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, self.s.remove, [])
366bfd334a42d35e58369e3a53e16733234e2741975Raymond Hettinger        s = self.thetype([frozenset(self.word)])
367bfd334a42d35e58369e3a53e16733234e2741975Raymond Hettinger        self.assert_(self.thetype(self.word) in s)
368bfd334a42d35e58369e3a53e16733234e2741975Raymond Hettinger        s.remove(self.thetype(self.word))
369bfd334a42d35e58369e3a53e16733234e2741975Raymond Hettinger        self.assert_(self.thetype(self.word) not in s)
370bfd334a42d35e58369e3a53e16733234e2741975Raymond Hettinger        self.assertRaises(KeyError, self.s.remove, self.thetype(self.word))
371a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
372c789f341bb3d1a7689110238669360fc8f379c44Raymond Hettinger    def test_remove_keyerror_unpacking(self):
373c789f341bb3d1a7689110238669360fc8f379c44Raymond Hettinger        # bug:  www.python.org/sf/1576657
374c789f341bb3d1a7689110238669360fc8f379c44Raymond Hettinger        for v1 in ['Q', (1,)]:
375c789f341bb3d1a7689110238669360fc8f379c44Raymond Hettinger            try:
376c789f341bb3d1a7689110238669360fc8f379c44Raymond Hettinger                self.s.remove(v1)
377c789f341bb3d1a7689110238669360fc8f379c44Raymond Hettinger            except KeyError, e:
378c789f341bb3d1a7689110238669360fc8f379c44Raymond Hettinger                v2 = e.args[0]
379c789f341bb3d1a7689110238669360fc8f379c44Raymond Hettinger                self.assertEqual(v1, v2)
380c789f341bb3d1a7689110238669360fc8f379c44Raymond Hettinger            else:
381c789f341bb3d1a7689110238669360fc8f379c44Raymond Hettinger                self.fail()
382c789f341bb3d1a7689110238669360fc8f379c44Raymond Hettinger
383a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_discard(self):
384a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.s.discard('a')
385a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assert_('a' not in self.s)
386a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.s.discard('Q')
387a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, self.s.discard, [])
388bfd334a42d35e58369e3a53e16733234e2741975Raymond Hettinger        s = self.thetype([frozenset(self.word)])
389bfd334a42d35e58369e3a53e16733234e2741975Raymond Hettinger        self.assert_(self.thetype(self.word) in s)
390bfd334a42d35e58369e3a53e16733234e2741975Raymond Hettinger        s.discard(self.thetype(self.word))
391bfd334a42d35e58369e3a53e16733234e2741975Raymond Hettinger        self.assert_(self.thetype(self.word) not in s)
392bfd334a42d35e58369e3a53e16733234e2741975Raymond Hettinger        s.discard(self.thetype(self.word))
393a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
394a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_pop(self):
395a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        for i in xrange(len(self.s)):
396a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            elem = self.s.pop()
397a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.assert_(elem not in self.s)
398a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(KeyError, self.s.pop)
399a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
400f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger    def test_update(self):
401f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger        retval = self.s.update(self.otherword)
402a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(retval, None)
403a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        for c in (self.word + self.otherword):
404a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.assert_(c in self.s)
405f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger        self.assertRaises(PassThru, self.s.update, check_pass_thru())
406f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger        self.assertRaises(TypeError, self.s.update, [[]])
407f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger        for p, q in (('cdc', 'abcd'), ('efgfe', 'abcefg'), ('ccb', 'abc'), ('ef', 'abcef')):
408f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger            for C in set, frozenset, dict.fromkeys, str, unicode, list, tuple:
409f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger                s = self.thetype('abcba')
410f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger                self.assertEqual(s.update(C(p)), None)
411f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger                self.assertEqual(s, set(q))
412ee4bcad68ec383c0140d0a21f4ac296073c0f938Raymond Hettinger        for p in ('cdc', 'efgfe', 'ccb', 'ef', 'abcda'):
413ee4bcad68ec383c0140d0a21f4ac296073c0f938Raymond Hettinger            q = 'ahi'
414ee4bcad68ec383c0140d0a21f4ac296073c0f938Raymond Hettinger            for C in set, frozenset, dict.fromkeys, str, unicode, list, tuple:
415ee4bcad68ec383c0140d0a21f4ac296073c0f938Raymond Hettinger                s = self.thetype('abcba')
416ee4bcad68ec383c0140d0a21f4ac296073c0f938Raymond Hettinger                self.assertEqual(s.update(C(p), C(q)), None)
417ee4bcad68ec383c0140d0a21f4ac296073c0f938Raymond Hettinger                self.assertEqual(s, set(s) | set(p) | set(q))
418a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
419a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_ior(self):
420a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.s |= set(self.otherword)
421a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        for c in (self.word + self.otherword):
422a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.assert_(c in self.s)
423a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
424a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_intersection_update(self):
425a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        retval = self.s.intersection_update(self.otherword)
426a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(retval, None)
427a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        for c in (self.word + self.otherword):
428a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            if c in self.otherword and c in self.word:
429a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                self.assert_(c in self.s)
430a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            else:
431a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                self.assert_(c not in self.s)
432a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(PassThru, self.s.intersection_update, check_pass_thru())
433a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, self.s.intersection_update, [[]])
434f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger        for p, q in (('cdc', 'c'), ('efgfe', ''), ('ccb', 'bc'), ('ef', '')):
435f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger            for C in set, frozenset, dict.fromkeys, str, unicode, list, tuple:
436f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger                s = self.thetype('abcba')
437f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger                self.assertEqual(s.intersection_update(C(p)), None)
438f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger                self.assertEqual(s, set(q))
4395c4d3d0e4c6b533dbfbab36ad8034010fe90cf69Raymond Hettinger                ss = 'abcba'
4405c4d3d0e4c6b533dbfbab36ad8034010fe90cf69Raymond Hettinger                s = self.thetype(ss)
4415c4d3d0e4c6b533dbfbab36ad8034010fe90cf69Raymond Hettinger                t = 'cbc'
4425c4d3d0e4c6b533dbfbab36ad8034010fe90cf69Raymond Hettinger                self.assertEqual(s.intersection_update(C(p), C(t)), None)
4435c4d3d0e4c6b533dbfbab36ad8034010fe90cf69Raymond Hettinger                self.assertEqual(s, set('abcba')&set(p)&set(t))
444a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
445a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_iand(self):
446a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.s &= set(self.otherword)
447a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        for c in (self.word + self.otherword):
448a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            if c in self.otherword and c in self.word:
449a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                self.assert_(c in self.s)
450a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            else:
451a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                self.assert_(c not in self.s)
452a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
453a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_difference_update(self):
454a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        retval = self.s.difference_update(self.otherword)
455a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(retval, None)
456a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        for c in (self.word + self.otherword):
457a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            if c in self.word and c not in self.otherword:
458a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                self.assert_(c in self.s)
459a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            else:
460a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                self.assert_(c not in self.s)
461a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(PassThru, self.s.difference_update, check_pass_thru())
462a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, self.s.difference_update, [[]])
463f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger        self.assertRaises(TypeError, self.s.symmetric_difference_update, [[]])
464f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger        for p, q in (('cdc', 'ab'), ('efgfe', 'abc'), ('ccb', 'a'), ('ef', 'abc')):
465f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger            for C in set, frozenset, dict.fromkeys, str, unicode, list, tuple:
466f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger                s = self.thetype('abcba')
467f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger                self.assertEqual(s.difference_update(C(p)), None)
468f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger                self.assertEqual(s, set(q))
469a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
470a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_isub(self):
471a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.s -= set(self.otherword)
472a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        for c in (self.word + self.otherword):
473a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            if c in self.word and c not in self.otherword:
474a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                self.assert_(c in self.s)
475a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            else:
476a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                self.assert_(c not in self.s)
477a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
478a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_symmetric_difference_update(self):
479a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        retval = self.s.symmetric_difference_update(self.otherword)
480a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(retval, None)
481a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        for c in (self.word + self.otherword):
482a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            if (c in self.word) ^ (c in self.otherword):
483a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                self.assert_(c in self.s)
484a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            else:
485a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                self.assert_(c not in self.s)
486a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(PassThru, self.s.symmetric_difference_update, check_pass_thru())
487a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, self.s.symmetric_difference_update, [[]])
488f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger        for p, q in (('cdc', 'abd'), ('efgfe', 'abcefg'), ('ccb', 'a'), ('ef', 'abcef')):
489f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger            for C in set, frozenset, dict.fromkeys, str, unicode, list, tuple:
490f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger                s = self.thetype('abcba')
491f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger                self.assertEqual(s.symmetric_difference_update(C(p)), None)
492f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger                self.assertEqual(s, set(q))
493a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
494a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_ixor(self):
495a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.s ^= set(self.otherword)
496a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        for c in (self.word + self.otherword):
497a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            if (c in self.word) ^ (c in self.otherword):
498a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                self.assert_(c in self.s)
499a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            else:
500a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                self.assert_(c not in self.s)
501a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
502c991db240ca8ea838c6acb0c8dc5300dca23c39eRaymond Hettinger    def test_inplace_on_self(self):
503c991db240ca8ea838c6acb0c8dc5300dca23c39eRaymond Hettinger        t = self.s.copy()
504c991db240ca8ea838c6acb0c8dc5300dca23c39eRaymond Hettinger        t |= t
505c991db240ca8ea838c6acb0c8dc5300dca23c39eRaymond Hettinger        self.assertEqual(t, self.s)
506c991db240ca8ea838c6acb0c8dc5300dca23c39eRaymond Hettinger        t &= t
507c991db240ca8ea838c6acb0c8dc5300dca23c39eRaymond Hettinger        self.assertEqual(t, self.s)
508c991db240ca8ea838c6acb0c8dc5300dca23c39eRaymond Hettinger        t -= t
509c991db240ca8ea838c6acb0c8dc5300dca23c39eRaymond Hettinger        self.assertEqual(t, self.thetype())
510c991db240ca8ea838c6acb0c8dc5300dca23c39eRaymond Hettinger        t = self.s.copy()
511c991db240ca8ea838c6acb0c8dc5300dca23c39eRaymond Hettinger        t ^= t
512c991db240ca8ea838c6acb0c8dc5300dca23c39eRaymond Hettinger        self.assertEqual(t, self.thetype())
513c991db240ca8ea838c6acb0c8dc5300dca23c39eRaymond Hettinger
514691d80532b0a0204e92de35ecba1472d87af6e94Raymond Hettinger    def test_weakref(self):
515691d80532b0a0204e92de35ecba1472d87af6e94Raymond Hettinger        s = self.thetype('gallahad')
516691d80532b0a0204e92de35ecba1472d87af6e94Raymond Hettinger        p = proxy(s)
517691d80532b0a0204e92de35ecba1472d87af6e94Raymond Hettinger        self.assertEqual(str(p), str(s))
518691d80532b0a0204e92de35ecba1472d87af6e94Raymond Hettinger        s = None
519691d80532b0a0204e92de35ecba1472d87af6e94Raymond Hettinger        self.assertRaises(ReferenceError, str, p)
520691d80532b0a0204e92de35ecba1472d87af6e94Raymond Hettinger
521c47e01d02021253dd9f8fd4ced6eb663436431bbRaymond Hettinger    # C API test only available in a debug build
522176014ffad8d39820293b63bf7177a7d2953343aBarry Warsaw    if hasattr(set, "test_c_api"):
523c47e01d02021253dd9f8fd4ced6eb663436431bbRaymond Hettinger        def test_c_api(self):
524c47e01d02021253dd9f8fd4ced6eb663436431bbRaymond Hettinger            self.assertEqual(set('abc').test_c_api(), True)
525c47e01d02021253dd9f8fd4ced6eb663436431bbRaymond Hettinger
52650a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettingerclass SetSubclass(set):
52750a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger    pass
52850a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger
52950a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettingerclass TestSetSubclass(TestSet):
53050a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger    thetype = SetSubclass
531a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
5329fdfadb06ee3c6d182af084afaa97bc6bf4652bcRaymond Hettingerclass SetSubclassWithKeywordArgs(set):
5339fdfadb06ee3c6d182af084afaa97bc6bf4652bcRaymond Hettinger    def __init__(self, iterable=[], newarg=None):
5349fdfadb06ee3c6d182af084afaa97bc6bf4652bcRaymond Hettinger        set.__init__(self, iterable)
5359fdfadb06ee3c6d182af084afaa97bc6bf4652bcRaymond Hettinger
5369fdfadb06ee3c6d182af084afaa97bc6bf4652bcRaymond Hettingerclass TestSetSubclassWithKeywordArgs(TestSet):
537f733abb7831d6566cb0fccd0550d58ec3b7f05a4Tim Peters
5389fdfadb06ee3c6d182af084afaa97bc6bf4652bcRaymond Hettinger    def test_keywords_in_subclass(self):
5399fdfadb06ee3c6d182af084afaa97bc6bf4652bcRaymond Hettinger        'SF bug #1486663 -- this used to erroneously raise a TypeError'
5409fdfadb06ee3c6d182af084afaa97bc6bf4652bcRaymond Hettinger        SetSubclassWithKeywordArgs(newarg=1)
5419fdfadb06ee3c6d182af084afaa97bc6bf4652bcRaymond Hettinger
542a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestFrozenSet(TestJointOps):
543a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    thetype = frozenset
544a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
54550a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger    def test_init(self):
54649ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        s = self.thetype(self.word)
54749ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        s.__init__(self.otherword)
54849ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        self.assertEqual(s, set(self.word))
54949ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger
550d794666048510deca0d4987a4c74d0fca85be411Raymond Hettinger    def test_singleton_empty_frozenset(self):
551d794666048510deca0d4987a4c74d0fca85be411Raymond Hettinger        f = frozenset()
552d794666048510deca0d4987a4c74d0fca85be411Raymond Hettinger        efs = [frozenset(), frozenset([]), frozenset(()), frozenset(''),
553d794666048510deca0d4987a4c74d0fca85be411Raymond Hettinger               frozenset(), frozenset([]), frozenset(()), frozenset(''),
554d794666048510deca0d4987a4c74d0fca85be411Raymond Hettinger               frozenset(xrange(0)), frozenset(frozenset()),
555d794666048510deca0d4987a4c74d0fca85be411Raymond Hettinger               frozenset(f), f]
556d794666048510deca0d4987a4c74d0fca85be411Raymond Hettinger        # All of the empty frozensets should have just one id()
557d794666048510deca0d4987a4c74d0fca85be411Raymond Hettinger        self.assertEqual(len(set(map(id, efs))), 1)
558d794666048510deca0d4987a4c74d0fca85be411Raymond Hettinger
55949ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger    def test_constructor_identity(self):
56049ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        s = self.thetype(range(3))
56149ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        t = self.thetype(s)
56249ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        self.assertEqual(id(s), id(t))
56350a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger
564a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_hash(self):
56549ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        self.assertEqual(hash(self.thetype('abcdeb')),
56649ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger                         hash(self.thetype('ebecda')))
56749ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger
56882cb9a235de45074d578d46bbf6680e726b13efdRaymond Hettinger        # make sure that all permutations give the same hash value
56982cb9a235de45074d578d46bbf6680e726b13efdRaymond Hettinger        n = 100
57082cb9a235de45074d578d46bbf6680e726b13efdRaymond Hettinger        seq = [randrange(n) for i in xrange(n)]
57182cb9a235de45074d578d46bbf6680e726b13efdRaymond Hettinger        results = set()
57282cb9a235de45074d578d46bbf6680e726b13efdRaymond Hettinger        for i in xrange(200):
57382cb9a235de45074d578d46bbf6680e726b13efdRaymond Hettinger            shuffle(seq)
57482cb9a235de45074d578d46bbf6680e726b13efdRaymond Hettinger            results.add(hash(self.thetype(seq)))
57582cb9a235de45074d578d46bbf6680e726b13efdRaymond Hettinger        self.assertEqual(len(results), 1)
57682cb9a235de45074d578d46bbf6680e726b13efdRaymond Hettinger
57749ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger    def test_copy(self):
57849ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        dup = self.s.copy()
57949ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        self.assertEqual(id(self.s), id(dup))
580a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
581a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_frozen_as_dictkey(self):
582a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        seq = range(10) + list('abcdefg') + ['apple']
58349ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        key1 = self.thetype(seq)
58449ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        key2 = self.thetype(reversed(seq))
585a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(key1, key2)
586a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertNotEqual(id(key1), id(key2))
587a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        d = {}
588a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        d[key1] = 42
589a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(d[key2], 42)
590a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
591a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_hash_caching(self):
59249ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        f = self.thetype('abcdcda')
593a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(hash(f), hash(f))
594a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
59549ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger    def test_hash_effectiveness(self):
59649ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        n = 13
59749ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        hashvalues = set()
5986e70accaffc61a5af7d78be1b365d1cab804751bRaymond Hettinger        addhashvalue = hashvalues.add
5996e70accaffc61a5af7d78be1b365d1cab804751bRaymond Hettinger        elemmasks = [(i+1, 1<<i) for i in range(n)]
60049ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        for i in xrange(2**n):
6016e70accaffc61a5af7d78be1b365d1cab804751bRaymond Hettinger            addhashvalue(hash(frozenset([e for e, m in elemmasks if m&i])))
6026e70accaffc61a5af7d78be1b365d1cab804751bRaymond Hettinger        self.assertEqual(len(hashvalues), 2**n)
60349ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger
60450a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettingerclass FrozenSetSubclass(frozenset):
60550a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger    pass
60650a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger
60750a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettingerclass TestFrozenSetSubclass(TestFrozenSet):
60850a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger    thetype = FrozenSetSubclass
60950a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger
61049ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger    def test_constructor_identity(self):
61149ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        s = self.thetype(range(3))
61249ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        t = self.thetype(s)
61349ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        self.assertNotEqual(id(s), id(t))
61449ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger
61549ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger    def test_copy(self):
61649ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        dup = self.s.copy()
61749ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        self.assertNotEqual(id(self.s), id(dup))
61849ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger
61949ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger    def test_nested_empty_constructor(self):
62049ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        s = self.thetype()
62149ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        t = self.thetype(s)
62249ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        self.assertEqual(s, t)
62349ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger
624d794666048510deca0d4987a4c74d0fca85be411Raymond Hettinger    def test_singleton_empty_frozenset(self):
625d794666048510deca0d4987a4c74d0fca85be411Raymond Hettinger        Frozenset = self.thetype
626d794666048510deca0d4987a4c74d0fca85be411Raymond Hettinger        f = frozenset()
627d794666048510deca0d4987a4c74d0fca85be411Raymond Hettinger        F = Frozenset()
628d794666048510deca0d4987a4c74d0fca85be411Raymond Hettinger        efs = [Frozenset(), Frozenset([]), Frozenset(()), Frozenset(''),
629d794666048510deca0d4987a4c74d0fca85be411Raymond Hettinger               Frozenset(), Frozenset([]), Frozenset(()), Frozenset(''),
630d794666048510deca0d4987a4c74d0fca85be411Raymond Hettinger               Frozenset(xrange(0)), Frozenset(Frozenset()),
631d794666048510deca0d4987a4c74d0fca85be411Raymond Hettinger               Frozenset(frozenset()), f, F, Frozenset(f), Frozenset(F)]
632d794666048510deca0d4987a4c74d0fca85be411Raymond Hettinger        # All empty frozenset subclass instances should have different ids
633d794666048510deca0d4987a4c74d0fca85be411Raymond Hettinger        self.assertEqual(len(set(map(id, efs))), len(efs))
634d794666048510deca0d4987a4c74d0fca85be411Raymond Hettinger
635a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger# Tests taken from test_sets.py =============================================
636a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
637a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerempty_set = set()
638a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
639a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#==============================================================================
640a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
641a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestBasicOps(unittest.TestCase):
642a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
643a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_repr(self):
644a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        if self.repr is not None:
64570a6b49821a3226f55e9716f32d802d06640cb89Walter Dörwald            self.assertEqual(repr(self.set), self.repr)
646a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
647eae05de91be776d141e531a11cb169dd30a8241dRaymond Hettinger    def test_print(self):
648be9160b035449b00ff4aee1837c510ec518b08bcNeal Norwitz        fo = open(test_support.TESTFN, "wb")
649eae05de91be776d141e531a11cb169dd30a8241dRaymond Hettinger        try:
650eae05de91be776d141e531a11cb169dd30a8241dRaymond Hettinger            print >> fo, self.set,
651eae05de91be776d141e531a11cb169dd30a8241dRaymond Hettinger            fo.close()
652eae05de91be776d141e531a11cb169dd30a8241dRaymond Hettinger            fo = open(test_support.TESTFN, "rb")
653eae05de91be776d141e531a11cb169dd30a8241dRaymond Hettinger            self.assertEqual(fo.read(), repr(self.set))
654eae05de91be776d141e531a11cb169dd30a8241dRaymond Hettinger        finally:
655eae05de91be776d141e531a11cb169dd30a8241dRaymond Hettinger            fo.close()
656be9160b035449b00ff4aee1837c510ec518b08bcNeal Norwitz            test_support.unlink(test_support.TESTFN)
657eae05de91be776d141e531a11cb169dd30a8241dRaymond Hettinger
658a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_length(self):
659a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(len(self.set), self.length)
660a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
661a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_self_equality(self):
662a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, self.set)
663a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
664a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_equivalent_equality(self):
665a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, self.dup)
666a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
667a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_copy(self):
668a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set.copy(), self.dup)
669a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
670a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_self_union(self):
671a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        result = self.set | self.set
672a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(result, self.dup)
673a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
674a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_empty_union(self):
675a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        result = self.set | empty_set
676a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(result, self.dup)
677a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
678a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_union_empty(self):
679a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        result = empty_set | self.set
680a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(result, self.dup)
681a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
682a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_self_intersection(self):
683a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        result = self.set & self.set
684a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(result, self.dup)
685a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
686a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_empty_intersection(self):
687a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        result = self.set & empty_set
688a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(result, empty_set)
689a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
690a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_intersection_empty(self):
691a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        result = empty_set & self.set
692a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(result, empty_set)
693a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
6941760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger    def test_self_isdisjoint(self):
6951760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger        result = self.set.isdisjoint(self.set)
6961760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger        self.assertEqual(result, not self.set)
6971760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger
6981760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger    def test_empty_isdisjoint(self):
6991760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger        result = self.set.isdisjoint(empty_set)
7001760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger        self.assertEqual(result, True)
7011760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger
7021760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger    def test_isdisjoint_empty(self):
7031760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger        result = empty_set.isdisjoint(self.set)
7041760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger        self.assertEqual(result, True)
7051760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger
706a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_self_symmetric_difference(self):
707a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        result = self.set ^ self.set
708a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(result, empty_set)
709a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
710a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def checkempty_symmetric_difference(self):
711a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        result = self.set ^ empty_set
712a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(result, self.set)
713a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
714a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_self_difference(self):
715a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        result = self.set - self.set
716a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(result, empty_set)
717a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
718a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_empty_difference(self):
719a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        result = self.set - empty_set
720a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(result, self.dup)
721a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
722a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_empty_difference_rev(self):
723a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        result = empty_set - self.set
724a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(result, empty_set)
725a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
726a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_iteration(self):
727a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        for v in self.set:
728a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.assert_(v in self.values)
729fcf4435ae02c3962a8ad71a9539877060c694468Neal Norwitz        setiter = iter(self.set)
730f5b3e36493da275334e29afdbd238863697dca35Armin Rigo        # note: __length_hint__ is an internal undocumented API,
731f5b3e36493da275334e29afdbd238863697dca35Armin Rigo        # don't rely on it in your own programs
732f5b3e36493da275334e29afdbd238863697dca35Armin Rigo        self.assertEqual(setiter.__length_hint__(), len(self.set))
733a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
734a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_pickling(self):
735a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        p = pickle.dumps(self.set)
736a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        copy = pickle.loads(p)
737a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, copy,
738a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                         "%s != %s" % (self.set, copy))
739a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
740a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------
741a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
742a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestBasicOpsEmpty(TestBasicOps):
743a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def setUp(self):
744a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.case   = "empty set"
745a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.values = []
746a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set    = set(self.values)
747a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.dup    = set(self.values)
748a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.length = 0
749a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.repr   = "set([])"
750a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
751a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------
752a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
753a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestBasicOpsSingleton(TestBasicOps):
754a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def setUp(self):
755a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.case   = "unit set (number)"
756a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.values = [3]
757a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set    = set(self.values)
758a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.dup    = set(self.values)
759a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.length = 1
760a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.repr   = "set([3])"
761a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
762a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_in(self):
763a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.failUnless(3 in self.set)
764a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
765a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_not_in(self):
766a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.failUnless(2 not in self.set)
767a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
768a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------
769a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
770a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestBasicOpsTuple(TestBasicOps):
771a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def setUp(self):
772a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.case   = "unit set (tuple)"
773a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.values = [(0, "zero")]
774a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set    = set(self.values)
775a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.dup    = set(self.values)
776a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.length = 1
777a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.repr   = "set([(0, 'zero')])"
778a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
779a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_in(self):
780a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.failUnless((0, "zero") in self.set)
781a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
782a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_not_in(self):
783a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.failUnless(9 not in self.set)
784a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
785a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------
786a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
787a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestBasicOpsTriple(TestBasicOps):
788a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def setUp(self):
789a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.case   = "triple set"
790a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.values = [0, "zero", operator.add]
791a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set    = set(self.values)
792a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.dup    = set(self.values)
793a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.length = 3
794a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.repr   = None
795a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
796a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#==============================================================================
797a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
798a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerdef baditer():
799a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    raise TypeError
800a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    yield True
801a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
802a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerdef gooditer():
803a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    yield True
804a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
805a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestExceptionPropagation(unittest.TestCase):
806a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    """SF 628246:  Set constructor should not trap iterator TypeErrors"""
807a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
808a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_instanceWithException(self):
809a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, set, baditer())
810a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
811a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_instancesWithoutException(self):
812a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        # All of these iterables should load without exception.
813a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        set([1,2,3])
814a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        set((1,2,3))
815a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        set({'one':1, 'two':2, 'three':3})
816a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        set(xrange(3))
817a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        set('abc')
818a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        set(gooditer())
819a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
820fcf4435ae02c3962a8ad71a9539877060c694468Neal Norwitz    def test_changingSizeWhileIterating(self):
821fcf4435ae02c3962a8ad71a9539877060c694468Neal Norwitz        s = set([1,2,3])
822fcf4435ae02c3962a8ad71a9539877060c694468Neal Norwitz        try:
823fcf4435ae02c3962a8ad71a9539877060c694468Neal Norwitz            for i in s:
824fcf4435ae02c3962a8ad71a9539877060c694468Neal Norwitz                s.update([4])
825fcf4435ae02c3962a8ad71a9539877060c694468Neal Norwitz        except RuntimeError:
826fcf4435ae02c3962a8ad71a9539877060c694468Neal Norwitz            pass
827fcf4435ae02c3962a8ad71a9539877060c694468Neal Norwitz        else:
828fcf4435ae02c3962a8ad71a9539877060c694468Neal Norwitz            self.fail("no exception when changing size during iteration")
829fcf4435ae02c3962a8ad71a9539877060c694468Neal Norwitz
830a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#==============================================================================
831a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
832a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestSetOfSets(unittest.TestCase):
833a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_constructor(self):
834a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        inner = frozenset([1])
835a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        outer = set([inner])
836a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        element = outer.pop()
837a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(type(element), frozenset)
838a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        outer.add(inner)        # Rebuild set of sets with .add method
839a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        outer.remove(inner)
840a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(outer, set())   # Verify that remove worked
841a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        outer.discard(inner)    # Absence of KeyError indicates working fine
842a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
843a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#==============================================================================
844a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
845a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestBinaryOps(unittest.TestCase):
846a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def setUp(self):
847a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set = set((2, 4, 6))
848a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
849a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_eq(self):              # SF bug 643115
850a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set({2:1,4:3,6:5}))
851a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
852a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_union_subset(self):
853a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        result = self.set | set([2])
854a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(result, set((2, 4, 6)))
855a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
856a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_union_superset(self):
857a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        result = self.set | set([2, 4, 6, 8])
858a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(result, set([2, 4, 6, 8]))
859a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
860a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_union_overlap(self):
861a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        result = self.set | set([3, 4, 5])
862a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(result, set([2, 3, 4, 5, 6]))
863a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
864a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_union_non_overlap(self):
865a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        result = self.set | set([8])
866a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(result, set([2, 4, 6, 8]))
867a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
868a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_intersection_subset(self):
869a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        result = self.set & set((2, 4))
870a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(result, set((2, 4)))
871a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
872a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_intersection_superset(self):
873a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        result = self.set & set([2, 4, 6, 8])
874a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(result, set([2, 4, 6]))
875a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
876a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_intersection_overlap(self):
877a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        result = self.set & set([3, 4, 5])
878a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(result, set([4]))
879a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
880a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_intersection_non_overlap(self):
881a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        result = self.set & set([8])
882a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(result, empty_set)
883a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
8841760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger    def test_isdisjoint_subset(self):
8851760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger        result = self.set.isdisjoint(set((2, 4)))
8861760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger        self.assertEqual(result, False)
8871760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger
8881760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger    def test_isdisjoint_superset(self):
8891760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger        result = self.set.isdisjoint(set([2, 4, 6, 8]))
8901760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger        self.assertEqual(result, False)
8911760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger
8921760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger    def test_isdisjoint_overlap(self):
8931760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger        result = self.set.isdisjoint(set([3, 4, 5]))
8941760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger        self.assertEqual(result, False)
8951760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger
8961760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger    def test_isdisjoint_non_overlap(self):
8971760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger        result = self.set.isdisjoint(set([8]))
8981760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger        self.assertEqual(result, True)
8991760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger
900a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_sym_difference_subset(self):
901a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        result = self.set ^ set((2, 4))
902a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(result, set([6]))
903a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
904a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_sym_difference_superset(self):
905a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        result = self.set ^ set((2, 4, 6, 8))
906a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(result, set([8]))
907a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
908a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_sym_difference_overlap(self):
909a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        result = self.set ^ set((3, 4, 5))
910a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(result, set([2, 3, 5, 6]))
911a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
912a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_sym_difference_non_overlap(self):
913a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        result = self.set ^ set([8])
914a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(result, set([2, 4, 6, 8]))
915a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
916a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_cmp(self):
917a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        a, b = set('a'), set('b')
918a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, cmp, a, b)
919a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
920a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        # You can view this as a buglet:  cmp(a, a) does not raise TypeError,
921a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        # because __eq__ is tried before __cmp__, and a.__eq__(a) returns True,
922a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        # which Python thinks is good enough to synthesize a cmp() result
923a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        # without calling __cmp__.
924a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(cmp(a, a), 0)
925a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
926a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, cmp, a, 12)
927a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, cmp, "abc", a)
928a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
929a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#==============================================================================
930a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
931a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestUpdateOps(unittest.TestCase):
932a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def setUp(self):
933a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set = set((2, 4, 6))
934a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
935a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_union_subset(self):
936a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set |= set([2])
937a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set((2, 4, 6)))
938a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
939a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_union_superset(self):
940a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set |= set([2, 4, 6, 8])
941a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set([2, 4, 6, 8]))
942a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
943a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_union_overlap(self):
944a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set |= set([3, 4, 5])
945a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set([2, 3, 4, 5, 6]))
946a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
947a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_union_non_overlap(self):
948a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set |= set([8])
949a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set([2, 4, 6, 8]))
950a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
951a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_union_method_call(self):
952f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger        self.set.update(set([3, 4, 5]))
953a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set([2, 3, 4, 5, 6]))
954a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
955a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_intersection_subset(self):
956a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set &= set((2, 4))
957a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set((2, 4)))
958a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
959a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_intersection_superset(self):
960a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set &= set([2, 4, 6, 8])
961a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set([2, 4, 6]))
962a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
963a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_intersection_overlap(self):
964a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set &= set([3, 4, 5])
965a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set([4]))
966a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
967a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_intersection_non_overlap(self):
968a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set &= set([8])
969a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, empty_set)
970a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
971a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_intersection_method_call(self):
972a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set.intersection_update(set([3, 4, 5]))
973a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set([4]))
974a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
975a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_sym_difference_subset(self):
976a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set ^= set((2, 4))
977a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set([6]))
978a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
979a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_sym_difference_superset(self):
980a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set ^= set((2, 4, 6, 8))
981a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set([8]))
982a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
983a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_sym_difference_overlap(self):
984a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set ^= set((3, 4, 5))
985a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set([2, 3, 5, 6]))
986a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
987a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_sym_difference_non_overlap(self):
988a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set ^= set([8])
989a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set([2, 4, 6, 8]))
990a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
991a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_sym_difference_method_call(self):
992a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set.symmetric_difference_update(set([3, 4, 5]))
993a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set([2, 3, 5, 6]))
994a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
995a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_difference_subset(self):
996a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set -= set((2, 4))
997a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set([6]))
998a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
999a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_difference_superset(self):
1000a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set -= set((2, 4, 6, 8))
1001a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set([]))
1002a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1003a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_difference_overlap(self):
1004a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set -= set((3, 4, 5))
1005a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set([2, 6]))
1006a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1007a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_difference_non_overlap(self):
1008a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set -= set([8])
1009a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set([2, 4, 6]))
1010a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1011a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_difference_method_call(self):
1012a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set.difference_update(set([3, 4, 5]))
1013a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set([2, 6]))
1014a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1015a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#==============================================================================
1016a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1017a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestMutate(unittest.TestCase):
1018a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def setUp(self):
1019a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.values = ["a", "b", "c"]
1020a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set = set(self.values)
1021a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1022a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_add_present(self):
1023a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set.add("c")
1024a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set("abc"))
1025a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1026a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_add_absent(self):
1027a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set.add("d")
1028a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set("abcd"))
1029a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1030a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_add_until_full(self):
1031a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        tmp = set()
1032a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        expected_len = 0
1033a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        for v in self.values:
1034a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            tmp.add(v)
1035a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            expected_len += 1
1036a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.assertEqual(len(tmp), expected_len)
1037a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(tmp, self.set)
1038a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1039a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_remove_present(self):
1040a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set.remove("b")
1041a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set("ac"))
1042a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1043a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_remove_absent(self):
1044a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        try:
1045a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.set.remove("d")
1046a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.fail("Removing missing element should have raised LookupError")
1047a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        except LookupError:
1048a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            pass
1049a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1050a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_remove_until_empty(self):
1051a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        expected_len = len(self.set)
1052a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        for v in self.values:
1053a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.set.remove(v)
1054a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            expected_len -= 1
1055a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.assertEqual(len(self.set), expected_len)
1056a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1057a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_discard_present(self):
1058a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set.discard("c")
1059a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set("ab"))
1060a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1061a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_discard_absent(self):
1062a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set.discard("d")
1063a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set("abc"))
1064a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1065a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_clear(self):
1066a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set.clear()
1067a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(len(self.set), 0)
1068a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1069a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_pop(self):
1070a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        popped = {}
1071a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        while self.set:
1072a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            popped[self.set.pop()] = None
1073a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(len(popped), len(self.values))
1074a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        for v in self.values:
1075a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.failUnless(v in popped)
1076a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1077a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_update_empty_tuple(self):
1078f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger        self.set.update(())
1079a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set(self.values))
1080a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1081a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_update_unit_tuple_overlap(self):
1082f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger        self.set.update(("a",))
1083a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set(self.values))
1084a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1085a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_update_unit_tuple_non_overlap(self):
1086f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger        self.set.update(("a", "z"))
1087a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set(self.values + ["z"]))
1088a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1089a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#==============================================================================
1090a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1091a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestSubsets(unittest.TestCase):
1092a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1093a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    case2method = {"<=": "issubset",
1094a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                   ">=": "issuperset",
1095a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                  }
1096a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1097a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    reverse = {"==": "==",
1098a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger               "!=": "!=",
1099a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger               "<":  ">",
1100a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger               ">":  "<",
1101a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger               "<=": ">=",
1102a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger               ">=": "<=",
1103a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger              }
1104a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1105a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_issubset(self):
1106a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        x = self.left
1107a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        y = self.right
1108a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        for case in "!=", "==", "<", "<=", ">", ">=":
1109a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            expected = case in self.cases
1110a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            # Test the binary infix spelling.
1111a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            result = eval("x" + case + "y", locals())
1112a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.assertEqual(result, expected)
1113a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            # Test the "friendly" method-name spelling, if one exists.
1114a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            if case in TestSubsets.case2method:
1115a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                method = getattr(x, TestSubsets.case2method[case])
1116a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                result = method(y)
1117a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                self.assertEqual(result, expected)
1118a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1119a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            # Now do the same for the operands reversed.
1120a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            rcase = TestSubsets.reverse[case]
1121a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            result = eval("y" + rcase + "x", locals())
1122a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.assertEqual(result, expected)
1123a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            if rcase in TestSubsets.case2method:
1124a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                method = getattr(y, TestSubsets.case2method[rcase])
1125a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                result = method(x)
1126a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                self.assertEqual(result, expected)
1127a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------
1128a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1129a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestSubsetEqualEmpty(TestSubsets):
1130a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    left  = set()
1131a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    right = set()
1132a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    name  = "both empty"
1133a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    cases = "==", "<=", ">="
1134a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1135a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------
1136a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1137a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestSubsetEqualNonEmpty(TestSubsets):
1138a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    left  = set([1, 2])
1139a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    right = set([1, 2])
1140a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    name  = "equal pair"
1141a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    cases = "==", "<=", ">="
1142a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1143a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------
1144a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1145a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestSubsetEmptyNonEmpty(TestSubsets):
1146a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    left  = set()
1147a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    right = set([1, 2])
1148a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    name  = "one empty, one non-empty"
1149a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    cases = "!=", "<", "<="
1150a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1151a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------
1152a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1153a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestSubsetPartial(TestSubsets):
1154a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    left  = set([1])
1155a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    right = set([1, 2])
1156a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    name  = "one a non-empty proper subset of other"
1157a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    cases = "!=", "<", "<="
1158a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1159a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------
1160a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1161a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestSubsetNonOverlap(TestSubsets):
1162a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    left  = set([1])
1163a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    right = set([2])
1164a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    name  = "neither empty, neither contains"
1165a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    cases = "!="
1166a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1167a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#==============================================================================
1168a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1169a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestOnlySetsInBinaryOps(unittest.TestCase):
1170a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1171a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_eq_ne(self):
1172a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        # Unlike the others, this is testing that == and != *are* allowed.
1173a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.other == self.set, False)
1174a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set == self.other, False)
1175a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.other != self.set, True)
1176a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set != self.other, True)
1177a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1178a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_ge_gt_le_lt(self):
1179a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, lambda: self.set < self.other)
1180a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, lambda: self.set <= self.other)
1181a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, lambda: self.set > self.other)
1182a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, lambda: self.set >= self.other)
1183a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1184a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, lambda: self.other < self.set)
1185a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, lambda: self.other <= self.set)
1186a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, lambda: self.other > self.set)
1187a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, lambda: self.other >= self.set)
1188a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1189f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger    def test_update_operator(self):
1190a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        try:
1191a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.set |= self.other
1192a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        except TypeError:
1193a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            pass
1194a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        else:
1195a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.fail("expected TypeError")
1196a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1197f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger    def test_update(self):
1198a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        if self.otherIsIterable:
1199f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger            self.set.update(self.other)
1200a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        else:
1201f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger            self.assertRaises(TypeError, self.set.update, self.other)
1202a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1203a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_union(self):
1204a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, lambda: self.set | self.other)
1205a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, lambda: self.other | self.set)
1206a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        if self.otherIsIterable:
1207a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.set.union(self.other)
1208a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        else:
1209a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.assertRaises(TypeError, self.set.union, self.other)
1210a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1211a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_intersection_update_operator(self):
1212a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        try:
1213a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.set &= self.other
1214a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        except TypeError:
1215a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            pass
1216a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        else:
1217a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.fail("expected TypeError")
1218a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1219a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_intersection_update(self):
1220a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        if self.otherIsIterable:
1221a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.set.intersection_update(self.other)
1222a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        else:
1223a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.assertRaises(TypeError,
1224a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                              self.set.intersection_update,
1225a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                              self.other)
1226a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1227a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_intersection(self):
1228a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, lambda: self.set & self.other)
1229a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, lambda: self.other & self.set)
1230a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        if self.otherIsIterable:
1231a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.set.intersection(self.other)
1232a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        else:
1233a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.assertRaises(TypeError, self.set.intersection, self.other)
1234a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1235a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_sym_difference_update_operator(self):
1236a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        try:
1237a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.set ^= self.other
1238a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        except TypeError:
1239a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            pass
1240a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        else:
1241a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.fail("expected TypeError")
1242a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1243a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_sym_difference_update(self):
1244a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        if self.otherIsIterable:
1245a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.set.symmetric_difference_update(self.other)
1246a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        else:
1247a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.assertRaises(TypeError,
1248a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                              self.set.symmetric_difference_update,
1249a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                              self.other)
1250a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1251a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_sym_difference(self):
1252a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, lambda: self.set ^ self.other)
1253a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, lambda: self.other ^ self.set)
1254a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        if self.otherIsIterable:
1255a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.set.symmetric_difference(self.other)
1256a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        else:
1257a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.assertRaises(TypeError, self.set.symmetric_difference, self.other)
1258a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1259a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_difference_update_operator(self):
1260a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        try:
1261a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.set -= self.other
1262a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        except TypeError:
1263a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            pass
1264a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        else:
1265a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.fail("expected TypeError")
1266a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1267a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_difference_update(self):
1268a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        if self.otherIsIterable:
1269a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.set.difference_update(self.other)
1270a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        else:
1271a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.assertRaises(TypeError,
1272a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                              self.set.difference_update,
1273a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                              self.other)
1274a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1275a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_difference(self):
1276a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, lambda: self.set - self.other)
1277a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, lambda: self.other - self.set)
1278a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        if self.otherIsIterable:
1279a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.set.difference(self.other)
1280a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        else:
1281a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.assertRaises(TypeError, self.set.difference, self.other)
1282a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1283a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------
1284a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1285a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestOnlySetsNumeric(TestOnlySetsInBinaryOps):
1286a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def setUp(self):
1287a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set   = set((1, 2, 3))
1288a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.other = 19
1289a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.otherIsIterable = False
1290a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1291a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------
1292a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1293a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestOnlySetsDict(TestOnlySetsInBinaryOps):
1294a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def setUp(self):
1295a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set   = set((1, 2, 3))
1296a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.other = {1:2, 3:4}
1297a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.otherIsIterable = True
1298a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1299a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------
1300a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1301a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestOnlySetsOperator(TestOnlySetsInBinaryOps):
1302a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def setUp(self):
1303a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set   = set((1, 2, 3))
1304a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.other = operator.add
1305a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.otherIsIterable = False
1306a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1307a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------
1308a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1309a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestOnlySetsTuple(TestOnlySetsInBinaryOps):
1310a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def setUp(self):
1311a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set   = set((1, 2, 3))
1312a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.other = (2, 4, 6)
1313a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.otherIsIterable = True
1314a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1315a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------
1316a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1317a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestOnlySetsString(TestOnlySetsInBinaryOps):
1318a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def setUp(self):
1319a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set   = set((1, 2, 3))
1320a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.other = 'abc'
1321a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.otherIsIterable = True
1322a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1323a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------
1324a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1325a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestOnlySetsGenerator(TestOnlySetsInBinaryOps):
1326a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def setUp(self):
1327a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        def gen():
1328a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            for i in xrange(0, 10, 2):
1329a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                yield i
1330a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set   = set((1, 2, 3))
1331a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.other = gen()
1332a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.otherIsIterable = True
1333a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1334a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#==============================================================================
1335a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1336a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestCopying(unittest.TestCase):
1337a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1338a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_copy(self):
1339a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        dup = self.set.copy()
1340a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        dup_list = list(dup); dup_list.sort()
1341a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        set_list = list(self.set); set_list.sort()
1342a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(len(dup_list), len(set_list))
1343a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        for i in range(len(dup_list)):
1344a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.failUnless(dup_list[i] is set_list[i])
1345a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1346a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_deep_copy(self):
1347a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        dup = copy.deepcopy(self.set)
134870a6b49821a3226f55e9716f32d802d06640cb89Walter Dörwald        ##print type(dup), repr(dup)
1349a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        dup_list = list(dup); dup_list.sort()
1350a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        set_list = list(self.set); set_list.sort()
1351a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(len(dup_list), len(set_list))
1352a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        for i in range(len(dup_list)):
1353a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.assertEqual(dup_list[i], set_list[i])
1354a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1355a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------
1356a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1357a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestCopyingEmpty(TestCopying):
1358a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def setUp(self):
1359a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set = set()
1360a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1361a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------
1362a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1363a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestCopyingSingleton(TestCopying):
1364a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def setUp(self):
1365a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set = set(["hello"])
1366a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1367a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------
1368a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1369a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestCopyingTriple(TestCopying):
1370a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def setUp(self):
1371a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set = set(["zero", 0, None])
1372a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1373a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------
1374a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1375a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestCopyingTuple(TestCopying):
1376a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def setUp(self):
1377a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set = set([(1, 2)])
1378a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1379a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------
1380a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1381a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestCopyingNested(TestCopying):
1382a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def setUp(self):
1383a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set = set([((1, 2), (3, 4))])
1384a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1385a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#==============================================================================
1386a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1387a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestIdentities(unittest.TestCase):
1388a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def setUp(self):
1389a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.a = set('abracadabra')
1390a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.b = set('alacazam')
1391a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1392a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_binopsVsSubsets(self):
1393a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        a, b = self.a, self.b
1394a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assert_(a - b < a)
1395a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assert_(b - a < b)
1396a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assert_(a & b < a)
1397a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assert_(a & b < b)
1398a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assert_(a | b > a)
1399a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assert_(a | b > b)
1400a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assert_(a ^ b < a | b)
1401a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1402a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_commutativity(self):
1403a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        a, b = self.a, self.b
1404a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(a&b, b&a)
1405a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(a|b, b|a)
1406a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(a^b, b^a)
1407a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        if a != b:
1408a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.assertNotEqual(a-b, b-a)
1409a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1410a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_summations(self):
1411a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        # check that sums of parts equal the whole
1412a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        a, b = self.a, self.b
1413a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual((a-b)|(a&b)|(b-a), a|b)
1414a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual((a&b)|(a^b), a|b)
1415a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(a|(b-a), a|b)
1416a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual((a-b)|b, a|b)
1417a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual((a-b)|(a&b), a)
1418a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual((b-a)|(a&b), b)
1419a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual((a-b)|(b-a), a^b)
1420a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1421a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_exclusion(self):
1422a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        # check that inverse operations show non-overlap
1423a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        a, b, zero = self.a, self.b, set()
1424a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual((a-b)&b, zero)
1425a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual((b-a)&a, zero)
1426a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual((a&b)&(a^b), zero)
1427a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1428a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger# Tests derived from test_itertools.py =======================================
1429a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1430a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerdef R(seqn):
1431a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    'Regular generator'
1432a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    for i in seqn:
1433a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        yield i
1434a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1435a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass G:
1436a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    'Sequence using __getitem__'
1437a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def __init__(self, seqn):
1438a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.seqn = seqn
1439a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def __getitem__(self, i):
1440a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        return self.seqn[i]
1441a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1442a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass I:
1443a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    'Sequence using iterator protocol'
1444a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def __init__(self, seqn):
1445a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.seqn = seqn
1446a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.i = 0
1447a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def __iter__(self):
1448a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        return self
1449a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def next(self):
1450a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        if self.i >= len(self.seqn): raise StopIteration
1451a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        v = self.seqn[self.i]
1452a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.i += 1
1453a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        return v
1454a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1455a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass Ig:
1456a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    'Sequence using iterator protocol defined with a generator'
1457a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def __init__(self, seqn):
1458a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.seqn = seqn
1459a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.i = 0
1460a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def __iter__(self):
1461a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        for val in self.seqn:
1462a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            yield val
1463a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1464a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass X:
1465a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    'Missing __getitem__ and __iter__'
1466a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def __init__(self, seqn):
1467a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.seqn = seqn
1468a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.i = 0
1469a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def next(self):
1470a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        if self.i >= len(self.seqn): raise StopIteration
1471a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        v = self.seqn[self.i]
1472a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.i += 1
1473a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        return v
1474a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1475a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass N:
1476a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    'Iterator missing next()'
1477a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def __init__(self, seqn):
1478a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.seqn = seqn
1479a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.i = 0
1480a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def __iter__(self):
1481a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        return self
1482a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1483a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass E:
1484a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    'Test propagation of exceptions'
1485a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def __init__(self, seqn):
1486a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.seqn = seqn
1487a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.i = 0
1488a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def __iter__(self):
1489a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        return self
1490a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def next(self):
1491ffdb8bb99c4017152a9dca70669f9d6b9831d454Raymond Hettinger        3 // 0
1492a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1493a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass S:
1494a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    'Test immediate stop'
1495a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def __init__(self, seqn):
1496a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        pass
1497a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def __iter__(self):
1498a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        return self
1499a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def next(self):
1500a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        raise StopIteration
1501a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1502a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerfrom itertools import chain, imap
1503a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerdef L(seqn):
1504a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    'Test multiple tiers of iterators'
1505a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    return chain(imap(lambda x:x, R(Ig(G(seqn)))))
1506a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1507a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestVariousIteratorArgs(unittest.TestCase):
1508a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1509a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_constructor(self):
1510a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        for cons in (set, frozenset):
1511a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            for s in ("123", "", range(1000), ('do', 1.2), xrange(2000,2200,5)):
1512a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                for g in (G, I, Ig, S, L, R):
151364958a15d7c03efdc3d2eddf247666e18d1fd910Raymond Hettinger                    self.assertEqual(sorted(cons(g(s))), sorted(g(s)))
1514a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                self.assertRaises(TypeError, cons , X(s))
1515a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                self.assertRaises(TypeError, cons , N(s))
1516a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                self.assertRaises(ZeroDivisionError, cons , E(s))
1517a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1518a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_inline_methods(self):
1519a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        s = set('november')
1520a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        for data in ("123", "", range(1000), ('do', 1.2), xrange(2000,2200,5), 'december'):
15211760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger            for meth in (s.union, s.intersection, s.difference, s.symmetric_difference, s.isdisjoint):
1522a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                for g in (G, I, Ig, L, R):
1523a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                    expected = meth(data)
1524a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                    actual = meth(G(data))
15251760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger                    if isinstance(expected, bool):
15261760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger                        self.assertEqual(actual, expected)
15271760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger                    else:
15281760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger                        self.assertEqual(sorted(actual), sorted(expected))
1529a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                self.assertRaises(TypeError, meth, X(s))
1530a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                self.assertRaises(TypeError, meth, N(s))
1531a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                self.assertRaises(ZeroDivisionError, meth, E(s))
1532a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1533a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_inplace_methods(self):
1534a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        for data in ("123", "", range(1000), ('do', 1.2), xrange(2000,2200,5), 'december'):
1535f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger            for methname in ('update', 'intersection_update',
1536a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                             'difference_update', 'symmetric_difference_update'):
1537a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                for g in (G, I, Ig, S, L, R):
1538a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                    s = set('january')
1539a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                    t = s.copy()
1540a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                    getattr(s, methname)(list(g(data)))
1541a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                    getattr(t, methname)(g(data))
154264958a15d7c03efdc3d2eddf247666e18d1fd910Raymond Hettinger                    self.assertEqual(sorted(s), sorted(t))
1543a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1544a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                self.assertRaises(TypeError, getattr(set('january'), methname), X(data))
1545a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                self.assertRaises(TypeError, getattr(set('january'), methname), N(data))
1546a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                self.assertRaises(ZeroDivisionError, getattr(set('january'), methname), E(data))
1547a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
15486170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger# Application tests (based on David Eppstein's graph recipes ====================================
15496170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger
15506170874f9c16b45a60851821c599898f51ba02d2Raymond Hettingerdef powerset(U):
15516170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger    """Generates all subsets of a set or sequence U."""
15526170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger    U = iter(U)
15536170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger    try:
15546170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger        x = frozenset([U.next()])
15556170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger        for S in powerset(U):
15566170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger            yield S
15576170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger            yield S | x
15586170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger    except StopIteration:
15596170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger        yield frozenset()
15606170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger
15616170874f9c16b45a60851821c599898f51ba02d2Raymond Hettingerdef cube(n):
15626170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger    """Graph of n-dimensional hypercube."""
15636170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger    singletons = [frozenset([x]) for x in range(n)]
15646170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger    return dict([(x, frozenset([x^s for s in singletons]))
15656170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger                 for x in powerset(range(n))])
15666170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger
15676170874f9c16b45a60851821c599898f51ba02d2Raymond Hettingerdef linegraph(G):
15686170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger    """Graph, the vertices of which are edges of G,
15696170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger    with two vertices being adjacent iff the corresponding
15706170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger    edges share a vertex."""
15716170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger    L = {}
15726170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger    for x in G:
15736170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger        for y in G[x]:
15746170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger            nx = [frozenset([x,z]) for z in G[x] if z != y]
15756170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger            ny = [frozenset([y,z]) for z in G[y] if z != x]
15766170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger            L[frozenset([x,y])] = frozenset(nx+ny)
15776170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger    return L
15786170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger
15796170874f9c16b45a60851821c599898f51ba02d2Raymond Hettingerdef faces(G):
15806170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger    'Return a set of faces in G.  Where a face is a set of vertices on that face'
15816170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger    # currently limited to triangles,squares, and pentagons
15826170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger    f = set()
15836170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger    for v1, edges in G.items():
15846170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger        for v2 in edges:
15856170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger            for v3 in G[v2]:
15866170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger                if v1 == v3:
15876170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger                    continue
15886170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger                if v1 in G[v3]:
15896170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger                    f.add(frozenset([v1, v2, v3]))
15906170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger                else:
15916170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger                    for v4 in G[v3]:
15926170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger                        if v4 == v2:
15936170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger                            continue
15946170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger                        if v1 in G[v4]:
15956170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger                            f.add(frozenset([v1, v2, v3, v4]))
15966170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger                        else:
15976170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger                            for v5 in G[v4]:
15986170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger                                if v5 == v3 or v5 == v2:
15996170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger                                    continue
16006170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger                                if v1 in G[v5]:
16016170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger                                    f.add(frozenset([v1, v2, v3, v4, v5]))
16026170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger    return f
16036170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger
16046170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger
16056170874f9c16b45a60851821c599898f51ba02d2Raymond Hettingerclass TestGraphs(unittest.TestCase):
16066170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger
16076170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger    def test_cube(self):
16086170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger
16096170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger        g = cube(3)                             # vert --> {v1, v2, v3}
16106170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger        vertices1 = set(g)
16116170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger        self.assertEqual(len(vertices1), 8)     # eight vertices
16126170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger        for edge in g.values():
16136170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger            self.assertEqual(len(edge), 3)      # each vertex connects to three edges
16146170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger        vertices2 = set(v for edges in g.values() for v in edges)
16156170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger        self.assertEqual(vertices1, vertices2)  # edge vertices in original set
16166170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger
16176170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger        cubefaces = faces(g)
16186170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger        self.assertEqual(len(cubefaces), 6)     # six faces
16196170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger        for face in cubefaces:
16206170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger            self.assertEqual(len(face), 4)      # each face is a square
16216170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger
16226170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger    def test_cuboctahedron(self):
16236170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger
16246170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger        # http://en.wikipedia.org/wiki/Cuboctahedron
16256170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger        # 8 triangular faces and 6 square faces
16266170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger        # 12 indentical vertices each connecting a triangle and square
16276170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger
16286170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger        g = cube(3)
16296170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger        cuboctahedron = linegraph(g)            # V( --> {V1, V2, V3, V4}
16306170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger        self.assertEqual(len(cuboctahedron), 12)# twelve vertices
16316170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger
16326170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger        vertices = set(cuboctahedron)
16336170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger        for edges in cuboctahedron.values():
16346170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger            self.assertEqual(len(edges), 4)     # each vertex connects to four other vertices
16356170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger        othervertices = set(edge for edges in cuboctahedron.values() for edge in edges)
16366170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger        self.assertEqual(vertices, othervertices)   # edge vertices in original set
16376170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger
16386170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger        cubofaces = faces(cuboctahedron)
16396170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger        facesizes = collections.defaultdict(int)
16406170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger        for face in cubofaces:
16416170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger            facesizes[len(face)] += 1
16426170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger        self.assertEqual(facesizes[3], 8)       # eight triangular faces
16436170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger        self.assertEqual(facesizes[4], 6)       # six square faces
16446170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger
16456170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger        for vertex in cuboctahedron:
16466170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger            edge = vertex                       # Cuboctahedron vertices are edges in Cube
16476170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger            self.assertEqual(len(edge), 2)      # Two cube vertices define an edge
16486170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger            for cubevert in edge:
16496170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger                self.assert_(cubevert in g)
16506170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger
16516170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger
1652a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#==============================================================================
1653a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1654a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerdef test_main(verbose=None):
1655a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    from test import test_sets
1656a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    test_classes = (
1657a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestSet,
165850a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger        TestSetSubclass,
1659f733abb7831d6566cb0fccd0550d58ec3b7f05a4Tim Peters        TestSetSubclassWithKeywordArgs,
1660a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestFrozenSet,
166150a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger        TestFrozenSetSubclass,
1662a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestSetOfSets,
1663a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestExceptionPropagation,
1664a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestBasicOpsEmpty,
1665a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestBasicOpsSingleton,
1666a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestBasicOpsTuple,
1667a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestBasicOpsTriple,
1668a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestBinaryOps,
1669a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestUpdateOps,
1670a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestMutate,
1671a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestSubsetEqualEmpty,
1672a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestSubsetEqualNonEmpty,
1673a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestSubsetEmptyNonEmpty,
1674a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestSubsetPartial,
1675a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestSubsetNonOverlap,
1676a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestOnlySetsNumeric,
1677a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestOnlySetsDict,
1678a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestOnlySetsOperator,
1679a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestOnlySetsTuple,
1680a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestOnlySetsString,
1681a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestOnlySetsGenerator,
1682a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestCopyingEmpty,
1683a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestCopyingSingleton,
1684a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestCopyingTriple,
1685a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestCopyingTuple,
1686a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestCopyingNested,
1687a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestIdentities,
1688a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestVariousIteratorArgs,
16896170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger        TestGraphs,
1690a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        )
1691a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1692a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    test_support.run_unittest(*test_classes)
1693a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1694a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    # verify reference counting
1695a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    if verbose and hasattr(sys, "gettotalrefcount"):
1696a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        import gc
1697a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        counts = [None] * 5
1698a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        for i in xrange(len(counts)):
1699a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            test_support.run_unittest(*test_classes)
1700a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            gc.collect()
1701a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            counts[i] = sys.gettotalrefcount()
1702a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        print counts
1703a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1704a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerif __name__ == "__main__":
1705a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    test_main(verbose=True)
1706