test_set.py revision f733abb7831d6566cb0fccd0550d58ec3b7f05a4
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
10a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
11a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass PassThru(Exception):
12a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    pass
13a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
14a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerdef check_pass_thru():
15a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    raise PassThru
16a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    yield 1
17a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
189bda1d6f645bd0f3e76c14f27bbbac919814cd38Raymond Hettingerclass BadCmp:
199bda1d6f645bd0f3e76c14f27bbbac919814cd38Raymond Hettinger    def __hash__(self):
209bda1d6f645bd0f3e76c14f27bbbac919814cd38Raymond Hettinger        return 1
219bda1d6f645bd0f3e76c14f27bbbac919814cd38Raymond Hettinger    def __cmp__(self, other):
229bda1d6f645bd0f3e76c14f27bbbac919814cd38Raymond Hettinger        raise RuntimeError
239bda1d6f645bd0f3e76c14f27bbbac919814cd38Raymond Hettinger
245399910eba1ef3580aebf49482b1367f14fa6c48Raymond Hettingerclass ReprWrapper:
255399910eba1ef3580aebf49482b1367f14fa6c48Raymond Hettinger    'Used to test self-referential repr() calls'
265399910eba1ef3580aebf49482b1367f14fa6c48Raymond Hettinger    def __repr__(self):
275399910eba1ef3580aebf49482b1367f14fa6c48Raymond Hettinger        return repr(self.value)
285399910eba1ef3580aebf49482b1367f14fa6c48Raymond Hettinger
29a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestJointOps(unittest.TestCase):
30a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    # Tests common to both set and frozenset
31a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
32a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def setUp(self):
33a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.word = word = 'simsalabim'
34a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.otherword = 'madagascar'
35a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.letters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
36a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.s = self.thetype(word)
37a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.d = dict.fromkeys(word)
38a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
396429a4727e4bb8bcb0d3deefaefe195e63e6bb6eRaymond Hettinger    def test_new_or_init(self):
406429a4727e4bb8bcb0d3deefaefe195e63e6bb6eRaymond Hettinger        self.assertRaises(TypeError, self.thetype, [], 2)
416429a4727e4bb8bcb0d3deefaefe195e63e6bb6eRaymond Hettinger
42a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_uniquification(self):
4364958a15d7c03efdc3d2eddf247666e18d1fd910Raymond Hettinger        actual = sorted(self.s)
4464958a15d7c03efdc3d2eddf247666e18d1fd910Raymond Hettinger        expected = sorted(self.d)
45a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(actual, expected)
46a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(PassThru, self.thetype, check_pass_thru())
47a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, self.thetype, [[]])
48a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
49a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_len(self):
50a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(len(self.s), len(self.d))
51a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
52a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_contains(self):
53a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        for c in self.letters:
54a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.assertEqual(c in self.s, c in self.d)
55a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, self.s.__contains__, [[]])
5619c2d77842290af9b5f470c1eea2a71d1f77c9feRaymond Hettinger        s = self.thetype([frozenset(self.letters)])
5719c2d77842290af9b5f470c1eea2a71d1f77c9feRaymond Hettinger        self.assert_(self.thetype(self.letters) in s)
58a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
59a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_union(self):
60a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        u = self.s.union(self.otherword)
61a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        for c in self.letters:
62a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.assertEqual(c in u, c in self.d or c in self.otherword)
6349ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        self.assertEqual(self.s, self.thetype(self.word))
64a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(type(u), self.thetype)
65a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(PassThru, self.s.union, check_pass_thru())
66a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, self.s.union, [[]])
67f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger        for C in set, frozenset, dict.fromkeys, str, unicode, list, tuple:
68f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger            self.assertEqual(self.thetype('abcba').union(C('cdc')), set('abcd'))
69f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger            self.assertEqual(self.thetype('abcba').union(C('efgfe')), set('abcefg'))
70f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger            self.assertEqual(self.thetype('abcba').union(C('ccb')), set('abc'))
71f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger            self.assertEqual(self.thetype('abcba').union(C('ef')), set('abcef'))
72a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
73a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_or(self):
74a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        i = self.s.union(self.otherword)
75a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.s | set(self.otherword), i)
76a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.s | frozenset(self.otherword), i)
77a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        try:
78a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.s | self.otherword
79a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        except TypeError:
80a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            pass
81a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        else:
82a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.fail("s|t did not screen-out general iterables")
83a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
84a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_intersection(self):
85a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        i = self.s.intersection(self.otherword)
86a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        for c in self.letters:
87a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.assertEqual(c in i, c in self.d and c in self.otherword)
8849ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        self.assertEqual(self.s, self.thetype(self.word))
89a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(type(i), self.thetype)
90a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(PassThru, self.s.intersection, check_pass_thru())
91f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger        for C in set, frozenset, dict.fromkeys, str, unicode, list, tuple:
92f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger            self.assertEqual(self.thetype('abcba').intersection(C('cdc')), set('cc'))
93f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger            self.assertEqual(self.thetype('abcba').intersection(C('efgfe')), set(''))
94f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger            self.assertEqual(self.thetype('abcba').intersection(C('ccb')), set('bc'))
95f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger            self.assertEqual(self.thetype('abcba').intersection(C('ef')), set(''))
96a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
97a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_and(self):
98a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        i = self.s.intersection(self.otherword)
99a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.s & set(self.otherword), i)
100a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.s & frozenset(self.otherword), i)
101a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        try:
102a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.s & self.otherword
103a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        except TypeError:
104a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            pass
105a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        else:
106a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.fail("s&t did not screen-out general iterables")
107a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
108a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_difference(self):
109a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        i = self.s.difference(self.otherword)
110a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        for c in self.letters:
111a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.assertEqual(c in i, c in self.d and c not in self.otherword)
11249ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        self.assertEqual(self.s, self.thetype(self.word))
113a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(type(i), self.thetype)
114a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(PassThru, self.s.difference, check_pass_thru())
115a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, self.s.difference, [[]])
116f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger        for C in set, frozenset, dict.fromkeys, str, unicode, list, tuple:
117f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger            self.assertEqual(self.thetype('abcba').difference(C('cdc')), set('ab'))
118f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger            self.assertEqual(self.thetype('abcba').difference(C('efgfe')), set('abc'))
119f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger            self.assertEqual(self.thetype('abcba').difference(C('ccb')), set('a'))
120f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger            self.assertEqual(self.thetype('abcba').difference(C('ef')), set('abc'))
121a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
122a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_sub(self):
123a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        i = self.s.difference(self.otherword)
124a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.s - set(self.otherword), i)
125a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.s - frozenset(self.otherword), i)
126a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        try:
127a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.s - self.otherword
128a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        except TypeError:
129a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            pass
130a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        else:
131a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.fail("s-t did not screen-out general iterables")
132a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
133a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_symmetric_difference(self):
134a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        i = self.s.symmetric_difference(self.otherword)
135a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        for c in self.letters:
136a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.assertEqual(c in i, (c in self.d) ^ (c in self.otherword))
13749ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        self.assertEqual(self.s, self.thetype(self.word))
138a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(type(i), self.thetype)
139a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(PassThru, self.s.symmetric_difference, check_pass_thru())
140a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, self.s.symmetric_difference, [[]])
141f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger        for C in set, frozenset, dict.fromkeys, str, unicode, list, tuple:
142f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger            self.assertEqual(self.thetype('abcba').symmetric_difference(C('cdc')), set('abd'))
143f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger            self.assertEqual(self.thetype('abcba').symmetric_difference(C('efgfe')), set('abcefg'))
144f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger            self.assertEqual(self.thetype('abcba').symmetric_difference(C('ccb')), set('a'))
145f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger            self.assertEqual(self.thetype('abcba').symmetric_difference(C('ef')), set('abcef'))
146a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
147a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_xor(self):
148a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        i = self.s.symmetric_difference(self.otherword)
149a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.s ^ set(self.otherword), i)
150a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.s ^ frozenset(self.otherword), i)
151a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        try:
152a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.s ^ self.otherword
153a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        except TypeError:
154a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            pass
155a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        else:
156a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.fail("s^t did not screen-out general iterables")
157a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
158a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_equality(self):
159a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.s, set(self.word))
160a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.s, frozenset(self.word))
161a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.s == self.word, False)
162a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertNotEqual(self.s, set(self.otherword))
163a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertNotEqual(self.s, frozenset(self.otherword))
164a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.s != self.word, True)
165a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
166a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_setOfFrozensets(self):
167a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        t = map(frozenset, ['abcdef', 'bcd', 'bdcb', 'fed', 'fedccba'])
168a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        s = self.thetype(t)
169a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(len(s), 3)
170a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
171a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_compare(self):
172a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, self.s.__cmp__, self.s)
173a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
174a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_sub_and_super(self):
175a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        p, q, r = map(self.thetype, ['ab', 'abcde', 'def'])
176a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assert_(p < q)
177a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assert_(p <= q)
178a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assert_(q <= q)
179a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assert_(q > p)
180a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assert_(q >= p)
181a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.failIf(q < r)
182a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.failIf(q <= r)
183a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.failIf(q > r)
184a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.failIf(q >= r)
1853fbec701cae361de6beca55bc926e0540635f165Raymond Hettinger        self.assert_(set('a').issubset('abc'))
1863fbec701cae361de6beca55bc926e0540635f165Raymond Hettinger        self.assert_(set('abc').issuperset('a'))
1873fbec701cae361de6beca55bc926e0540635f165Raymond Hettinger        self.failIf(set('a').issubset('cbs'))
1883fbec701cae361de6beca55bc926e0540635f165Raymond Hettinger        self.failIf(set('cbs').issuperset('a'))
189a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
190a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_pickling(self):
19115056a5202c89846d75006d66541d5a634ac79b5Raymond Hettinger        for i in (0, 1, 2):
19215056a5202c89846d75006d66541d5a634ac79b5Raymond Hettinger            p = pickle.dumps(self.s, i)
19315056a5202c89846d75006d66541d5a634ac79b5Raymond Hettinger            dup = pickle.loads(p)
19415056a5202c89846d75006d66541d5a634ac79b5Raymond Hettinger            self.assertEqual(self.s, dup, "%s != %s" % (self.s, dup))
19515056a5202c89846d75006d66541d5a634ac79b5Raymond Hettinger            if type(self.s) not in (set, frozenset):
19615056a5202c89846d75006d66541d5a634ac79b5Raymond Hettinger                self.s.x = 10
19715056a5202c89846d75006d66541d5a634ac79b5Raymond Hettinger                p = pickle.dumps(self.s)
19815056a5202c89846d75006d66541d5a634ac79b5Raymond Hettinger                dup = pickle.loads(p)
19915056a5202c89846d75006d66541d5a634ac79b5Raymond Hettinger                self.assertEqual(self.s.x, dup.x)
200a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
20149ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger    def test_deepcopy(self):
20249ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        class Tracer:
20349ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger            def __init__(self, value):
20449ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger                self.value = value
20549ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger            def __hash__(self):
20658eb11cf62dd04ccc2c364b62fd51b4265e2e203Tim Peters                return self.value
20749ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger            def __deepcopy__(self, memo=None):
20849ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger                return Tracer(self.value + 1)
20949ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        t = Tracer(10)
21049ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        s = self.thetype([t])
21149ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        dup = copy.deepcopy(s)
21249ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        self.assertNotEqual(id(s), id(dup))
21349ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        for elem in dup:
21449ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger            newt = elem
21549ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        self.assertNotEqual(id(t), id(newt))
21649ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        self.assertEqual(t.value + 1, newt.value)
21749ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger
218bb999b5925ae65d19282c3781cdbb678f92c410fRaymond Hettinger    def test_gc(self):
219bb999b5925ae65d19282c3781cdbb678f92c410fRaymond Hettinger        # Create a nest of cycles to exercise overall ref count check
220bb999b5925ae65d19282c3781cdbb678f92c410fRaymond Hettinger        class A:
221bb999b5925ae65d19282c3781cdbb678f92c410fRaymond Hettinger            pass
222bb999b5925ae65d19282c3781cdbb678f92c410fRaymond Hettinger        s = set(A() for i in xrange(1000))
223bb999b5925ae65d19282c3781cdbb678f92c410fRaymond Hettinger        for elem in s:
224bb999b5925ae65d19282c3781cdbb678f92c410fRaymond Hettinger            elem.cycle = s
225bb999b5925ae65d19282c3781cdbb678f92c410fRaymond Hettinger            elem.sub = elem
226bb999b5925ae65d19282c3781cdbb678f92c410fRaymond Hettinger            elem.set = set([elem])
227bb999b5925ae65d19282c3781cdbb678f92c410fRaymond Hettinger
22897979ddc141b88cfd81bdf02404d0337a603f7cfRaymond Hettinger    def test_subclass_with_custom_hash(self):
22997979ddc141b88cfd81bdf02404d0337a603f7cfRaymond Hettinger        # Bug #1257731
23097979ddc141b88cfd81bdf02404d0337a603f7cfRaymond Hettinger        class H(self.thetype):
23197979ddc141b88cfd81bdf02404d0337a603f7cfRaymond Hettinger            def __hash__(self):
2326902b44406ba2940dd7f34b7ec77e2ea13ff2e66Tim Peters                return int(id(self) & 0x7fffffff)
23397979ddc141b88cfd81bdf02404d0337a603f7cfRaymond Hettinger        s=H()
23497979ddc141b88cfd81bdf02404d0337a603f7cfRaymond Hettinger        f=set()
23597979ddc141b88cfd81bdf02404d0337a603f7cfRaymond Hettinger        f.add(s)
23697979ddc141b88cfd81bdf02404d0337a603f7cfRaymond Hettinger        self.assert_(s in f)
23797979ddc141b88cfd81bdf02404d0337a603f7cfRaymond Hettinger        f.remove(s)
23897979ddc141b88cfd81bdf02404d0337a603f7cfRaymond Hettinger        f.add(s)
23997979ddc141b88cfd81bdf02404d0337a603f7cfRaymond Hettinger        f.discard(s)
24097979ddc141b88cfd81bdf02404d0337a603f7cfRaymond Hettinger
2419bda1d6f645bd0f3e76c14f27bbbac919814cd38Raymond Hettinger    def test_badcmp(self):
2429bda1d6f645bd0f3e76c14f27bbbac919814cd38Raymond Hettinger        s = self.thetype([BadCmp()])
2439bda1d6f645bd0f3e76c14f27bbbac919814cd38Raymond Hettinger        # Detect comparison errors during insertion and lookup
2449bda1d6f645bd0f3e76c14f27bbbac919814cd38Raymond Hettinger        self.assertRaises(RuntimeError, self.thetype, [BadCmp(), BadCmp()])
2459bda1d6f645bd0f3e76c14f27bbbac919814cd38Raymond Hettinger        self.assertRaises(RuntimeError, s.__contains__, BadCmp())
2469bda1d6f645bd0f3e76c14f27bbbac919814cd38Raymond Hettinger        # Detect errors during mutating operations
2479bda1d6f645bd0f3e76c14f27bbbac919814cd38Raymond Hettinger        if hasattr(s, 'add'):
2489bda1d6f645bd0f3e76c14f27bbbac919814cd38Raymond Hettinger            self.assertRaises(RuntimeError, s.add, BadCmp())
2499bda1d6f645bd0f3e76c14f27bbbac919814cd38Raymond Hettinger            self.assertRaises(RuntimeError, s.discard, BadCmp())
2509bda1d6f645bd0f3e76c14f27bbbac919814cd38Raymond Hettinger            self.assertRaises(RuntimeError, s.remove, BadCmp())
2519bda1d6f645bd0f3e76c14f27bbbac919814cd38Raymond Hettinger
2525399910eba1ef3580aebf49482b1367f14fa6c48Raymond Hettinger    def test_cyclical_repr(self):
2535399910eba1ef3580aebf49482b1367f14fa6c48Raymond Hettinger        w = ReprWrapper()
2545399910eba1ef3580aebf49482b1367f14fa6c48Raymond Hettinger        s = self.thetype([w])
2555399910eba1ef3580aebf49482b1367f14fa6c48Raymond Hettinger        w.value = s
2565399910eba1ef3580aebf49482b1367f14fa6c48Raymond Hettinger        name = repr(s).partition('(')[0]    # strip class name from repr string
2575399910eba1ef3580aebf49482b1367f14fa6c48Raymond Hettinger        self.assertEqual(repr(s), '%s([%s(...)])' % (name, name))
2585399910eba1ef3580aebf49482b1367f14fa6c48Raymond Hettinger
2595399910eba1ef3580aebf49482b1367f14fa6c48Raymond Hettinger    def test_cyclical_print(self):
2605399910eba1ef3580aebf49482b1367f14fa6c48Raymond Hettinger        w = ReprWrapper()
2615399910eba1ef3580aebf49482b1367f14fa6c48Raymond Hettinger        s = self.thetype([w])
2625399910eba1ef3580aebf49482b1367f14fa6c48Raymond Hettinger        w.value = s
2635399910eba1ef3580aebf49482b1367f14fa6c48Raymond Hettinger        try:
2645399910eba1ef3580aebf49482b1367f14fa6c48Raymond Hettinger            fo = open(test_support.TESTFN, "wb")
2655399910eba1ef3580aebf49482b1367f14fa6c48Raymond Hettinger            print >> fo, s,
2665399910eba1ef3580aebf49482b1367f14fa6c48Raymond Hettinger            fo.close()
2675399910eba1ef3580aebf49482b1367f14fa6c48Raymond Hettinger            fo = open(test_support.TESTFN, "rb")
2685399910eba1ef3580aebf49482b1367f14fa6c48Raymond Hettinger            self.assertEqual(fo.read(), repr(s))
2695399910eba1ef3580aebf49482b1367f14fa6c48Raymond Hettinger        finally:
2705399910eba1ef3580aebf49482b1367f14fa6c48Raymond Hettinger            fo.close()
2715399910eba1ef3580aebf49482b1367f14fa6c48Raymond Hettinger            os.remove(test_support.TESTFN)
2725399910eba1ef3580aebf49482b1367f14fa6c48Raymond Hettinger
273a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestSet(TestJointOps):
274a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    thetype = set
275a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
27650a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger    def test_init(self):
27749ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        s = self.thetype()
27850a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger        s.__init__(self.word)
27950a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger        self.assertEqual(s, set(self.word))
28050a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger        s.__init__(self.otherword)
28150a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger        self.assertEqual(s, set(self.otherword))
282eae05de91be776d141e531a11cb169dd30a8241dRaymond Hettinger        self.assertRaises(TypeError, s.__init__, s, 2);
283eae05de91be776d141e531a11cb169dd30a8241dRaymond Hettinger        self.assertRaises(TypeError, s.__init__, 1);
28450a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger
28549ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger    def test_constructor_identity(self):
28649ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        s = self.thetype(range(3))
28749ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        t = self.thetype(s)
28849ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        self.assertNotEqual(id(s), id(t))
28949ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger
290a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_hash(self):
291a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, hash, self.s)
292a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
293a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_clear(self):
294a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.s.clear()
295f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger        self.assertEqual(self.s, set())
296f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger        self.assertEqual(len(self.s), 0)
297a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
29849ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger    def test_copy(self):
29949ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        dup = self.s.copy()
30049ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        self.assertEqual(self.s, dup)
30149ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        self.assertNotEqual(id(self.s), id(dup))
30249ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger
303a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_add(self):
304a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.s.add('Q')
305a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assert_('Q' in self.s)
306f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger        dup = self.s.copy()
307f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger        self.s.add('Q')
308f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger        self.assertEqual(self.s, dup)
309a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, self.s.add, [])
310a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
311a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_remove(self):
312a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.s.remove('a')
313a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assert_('a' not in self.s)
314a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(KeyError, self.s.remove, 'Q')
315a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, self.s.remove, [])
316bfd334a42d35e58369e3a53e16733234e2741975Raymond Hettinger        s = self.thetype([frozenset(self.word)])
317bfd334a42d35e58369e3a53e16733234e2741975Raymond Hettinger        self.assert_(self.thetype(self.word) in s)
318bfd334a42d35e58369e3a53e16733234e2741975Raymond Hettinger        s.remove(self.thetype(self.word))
319bfd334a42d35e58369e3a53e16733234e2741975Raymond Hettinger        self.assert_(self.thetype(self.word) not in s)
320bfd334a42d35e58369e3a53e16733234e2741975Raymond Hettinger        self.assertRaises(KeyError, self.s.remove, self.thetype(self.word))
321a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
322c789f341bb3d1a7689110238669360fc8f379c44Raymond Hettinger    def test_remove_keyerror_unpacking(self):
323c789f341bb3d1a7689110238669360fc8f379c44Raymond Hettinger        # bug:  www.python.org/sf/1576657
324c789f341bb3d1a7689110238669360fc8f379c44Raymond Hettinger        for v1 in ['Q', (1,)]:
325c789f341bb3d1a7689110238669360fc8f379c44Raymond Hettinger            try:
326c789f341bb3d1a7689110238669360fc8f379c44Raymond Hettinger                self.s.remove(v1)
327c789f341bb3d1a7689110238669360fc8f379c44Raymond Hettinger            except KeyError, e:
328c789f341bb3d1a7689110238669360fc8f379c44Raymond Hettinger                v2 = e.args[0]
329c789f341bb3d1a7689110238669360fc8f379c44Raymond Hettinger                self.assertEqual(v1, v2)
330c789f341bb3d1a7689110238669360fc8f379c44Raymond Hettinger            else:
331c789f341bb3d1a7689110238669360fc8f379c44Raymond Hettinger                self.fail()
332c789f341bb3d1a7689110238669360fc8f379c44Raymond Hettinger
333a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_discard(self):
334a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.s.discard('a')
335a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assert_('a' not in self.s)
336a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.s.discard('Q')
337a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, self.s.discard, [])
338bfd334a42d35e58369e3a53e16733234e2741975Raymond Hettinger        s = self.thetype([frozenset(self.word)])
339bfd334a42d35e58369e3a53e16733234e2741975Raymond Hettinger        self.assert_(self.thetype(self.word) in s)
340bfd334a42d35e58369e3a53e16733234e2741975Raymond Hettinger        s.discard(self.thetype(self.word))
341bfd334a42d35e58369e3a53e16733234e2741975Raymond Hettinger        self.assert_(self.thetype(self.word) not in s)
342bfd334a42d35e58369e3a53e16733234e2741975Raymond Hettinger        s.discard(self.thetype(self.word))
343a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
344a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_pop(self):
345a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        for i in xrange(len(self.s)):
346a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            elem = self.s.pop()
347a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.assert_(elem not in self.s)
348a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(KeyError, self.s.pop)
349a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
350f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger    def test_update(self):
351f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger        retval = self.s.update(self.otherword)
352a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(retval, None)
353a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        for c in (self.word + self.otherword):
354a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.assert_(c in self.s)
355f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger        self.assertRaises(PassThru, self.s.update, check_pass_thru())
356f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger        self.assertRaises(TypeError, self.s.update, [[]])
357f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger        for p, q in (('cdc', 'abcd'), ('efgfe', 'abcefg'), ('ccb', 'abc'), ('ef', 'abcef')):
358f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger            for C in set, frozenset, dict.fromkeys, str, unicode, list, tuple:
359f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger                s = self.thetype('abcba')
360f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger                self.assertEqual(s.update(C(p)), None)
361f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger                self.assertEqual(s, set(q))
362a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
363a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_ior(self):
364a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.s |= set(self.otherword)
365a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        for c in (self.word + self.otherword):
366a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.assert_(c in self.s)
367a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
368a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_intersection_update(self):
369a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        retval = self.s.intersection_update(self.otherword)
370a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(retval, None)
371a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        for c in (self.word + self.otherword):
372a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            if c in self.otherword and c in self.word:
373a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                self.assert_(c in self.s)
374a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            else:
375a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                self.assert_(c not in self.s)
376a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(PassThru, self.s.intersection_update, check_pass_thru())
377a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, self.s.intersection_update, [[]])
378f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger        for p, q in (('cdc', 'c'), ('efgfe', ''), ('ccb', 'bc'), ('ef', '')):
379f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger            for C in set, frozenset, dict.fromkeys, str, unicode, list, tuple:
380f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger                s = self.thetype('abcba')
381f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger                self.assertEqual(s.intersection_update(C(p)), None)
382f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger                self.assertEqual(s, set(q))
383a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
384a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_iand(self):
385a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.s &= set(self.otherword)
386a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        for c in (self.word + self.otherword):
387a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            if c in self.otherword and c in self.word:
388a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                self.assert_(c in self.s)
389a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            else:
390a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                self.assert_(c not in self.s)
391a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
392a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_difference_update(self):
393a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        retval = self.s.difference_update(self.otherword)
394a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(retval, None)
395a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        for c in (self.word + self.otherword):
396a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            if c in self.word and c not in self.otherword:
397a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                self.assert_(c in self.s)
398a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            else:
399a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                self.assert_(c not in self.s)
400a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(PassThru, self.s.difference_update, check_pass_thru())
401a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, self.s.difference_update, [[]])
402f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger        self.assertRaises(TypeError, self.s.symmetric_difference_update, [[]])
403f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger        for p, q in (('cdc', 'ab'), ('efgfe', 'abc'), ('ccb', 'a'), ('ef', 'abc')):
404f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger            for C in set, frozenset, dict.fromkeys, str, unicode, list, tuple:
405f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger                s = self.thetype('abcba')
406f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger                self.assertEqual(s.difference_update(C(p)), None)
407f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger                self.assertEqual(s, set(q))
408a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
409a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_isub(self):
410a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.s -= set(self.otherword)
411a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        for c in (self.word + self.otherword):
412a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            if c in self.word and c not in self.otherword:
413a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                self.assert_(c in self.s)
414a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            else:
415a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                self.assert_(c not in self.s)
416a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
417a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_symmetric_difference_update(self):
418a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        retval = self.s.symmetric_difference_update(self.otherword)
419a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(retval, None)
420a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        for c in (self.word + self.otherword):
421a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            if (c in self.word) ^ (c in self.otherword):
422a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                self.assert_(c in self.s)
423a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            else:
424a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                self.assert_(c not in self.s)
425a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(PassThru, self.s.symmetric_difference_update, check_pass_thru())
426a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, self.s.symmetric_difference_update, [[]])
427f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger        for p, q in (('cdc', 'abd'), ('efgfe', 'abcefg'), ('ccb', 'a'), ('ef', 'abcef')):
428f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger            for C in set, frozenset, dict.fromkeys, str, unicode, list, tuple:
429f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger                s = self.thetype('abcba')
430f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger                self.assertEqual(s.symmetric_difference_update(C(p)), None)
431f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger                self.assertEqual(s, set(q))
432a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
433a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_ixor(self):
434a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.s ^= set(self.otherword)
435a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        for c in (self.word + self.otherword):
436a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            if (c in self.word) ^ (c in self.otherword):
437a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                self.assert_(c in self.s)
438a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            else:
439a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                self.assert_(c not in self.s)
440a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
441c991db240ca8ea838c6acb0c8dc5300dca23c39eRaymond Hettinger    def test_inplace_on_self(self):
442c991db240ca8ea838c6acb0c8dc5300dca23c39eRaymond Hettinger        t = self.s.copy()
443c991db240ca8ea838c6acb0c8dc5300dca23c39eRaymond Hettinger        t |= t
444c991db240ca8ea838c6acb0c8dc5300dca23c39eRaymond Hettinger        self.assertEqual(t, self.s)
445c991db240ca8ea838c6acb0c8dc5300dca23c39eRaymond Hettinger        t &= t
446c991db240ca8ea838c6acb0c8dc5300dca23c39eRaymond Hettinger        self.assertEqual(t, self.s)
447c991db240ca8ea838c6acb0c8dc5300dca23c39eRaymond Hettinger        t -= t
448c991db240ca8ea838c6acb0c8dc5300dca23c39eRaymond Hettinger        self.assertEqual(t, self.thetype())
449c991db240ca8ea838c6acb0c8dc5300dca23c39eRaymond Hettinger        t = self.s.copy()
450c991db240ca8ea838c6acb0c8dc5300dca23c39eRaymond Hettinger        t ^= t
451c991db240ca8ea838c6acb0c8dc5300dca23c39eRaymond Hettinger        self.assertEqual(t, self.thetype())
452c991db240ca8ea838c6acb0c8dc5300dca23c39eRaymond Hettinger
453691d80532b0a0204e92de35ecba1472d87af6e94Raymond Hettinger    def test_weakref(self):
454691d80532b0a0204e92de35ecba1472d87af6e94Raymond Hettinger        s = self.thetype('gallahad')
455691d80532b0a0204e92de35ecba1472d87af6e94Raymond Hettinger        p = proxy(s)
456691d80532b0a0204e92de35ecba1472d87af6e94Raymond Hettinger        self.assertEqual(str(p), str(s))
457691d80532b0a0204e92de35ecba1472d87af6e94Raymond Hettinger        s = None
458691d80532b0a0204e92de35ecba1472d87af6e94Raymond Hettinger        self.assertRaises(ReferenceError, str, p)
459691d80532b0a0204e92de35ecba1472d87af6e94Raymond Hettinger
460c47e01d02021253dd9f8fd4ced6eb663436431bbRaymond Hettinger    # C API test only available in a debug build
461176014ffad8d39820293b63bf7177a7d2953343aBarry Warsaw    if hasattr(set, "test_c_api"):
462c47e01d02021253dd9f8fd4ced6eb663436431bbRaymond Hettinger        def test_c_api(self):
463c47e01d02021253dd9f8fd4ced6eb663436431bbRaymond Hettinger            self.assertEqual(set('abc').test_c_api(), True)
464c47e01d02021253dd9f8fd4ced6eb663436431bbRaymond Hettinger
46550a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettingerclass SetSubclass(set):
46650a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger    pass
46750a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger
46850a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettingerclass TestSetSubclass(TestSet):
46950a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger    thetype = SetSubclass
470a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
4719fdfadb06ee3c6d182af084afaa97bc6bf4652bcRaymond Hettingerclass SetSubclassWithKeywordArgs(set):
4729fdfadb06ee3c6d182af084afaa97bc6bf4652bcRaymond Hettinger    def __init__(self, iterable=[], newarg=None):
4739fdfadb06ee3c6d182af084afaa97bc6bf4652bcRaymond Hettinger        set.__init__(self, iterable)
4749fdfadb06ee3c6d182af084afaa97bc6bf4652bcRaymond Hettinger
4759fdfadb06ee3c6d182af084afaa97bc6bf4652bcRaymond Hettingerclass TestSetSubclassWithKeywordArgs(TestSet):
476f733abb7831d6566cb0fccd0550d58ec3b7f05a4Tim Peters
4779fdfadb06ee3c6d182af084afaa97bc6bf4652bcRaymond Hettinger    def test_keywords_in_subclass(self):
4789fdfadb06ee3c6d182af084afaa97bc6bf4652bcRaymond Hettinger        'SF bug #1486663 -- this used to erroneously raise a TypeError'
4799fdfadb06ee3c6d182af084afaa97bc6bf4652bcRaymond Hettinger        SetSubclassWithKeywordArgs(newarg=1)
4809fdfadb06ee3c6d182af084afaa97bc6bf4652bcRaymond Hettinger
481a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestFrozenSet(TestJointOps):
482a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    thetype = frozenset
483a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
48450a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger    def test_init(self):
48549ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        s = self.thetype(self.word)
48649ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        s.__init__(self.otherword)
48749ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        self.assertEqual(s, set(self.word))
48849ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger
489d794666048510deca0d4987a4c74d0fca85be411Raymond Hettinger    def test_singleton_empty_frozenset(self):
490d794666048510deca0d4987a4c74d0fca85be411Raymond Hettinger        f = frozenset()
491d794666048510deca0d4987a4c74d0fca85be411Raymond Hettinger        efs = [frozenset(), frozenset([]), frozenset(()), frozenset(''),
492d794666048510deca0d4987a4c74d0fca85be411Raymond Hettinger               frozenset(), frozenset([]), frozenset(()), frozenset(''),
493d794666048510deca0d4987a4c74d0fca85be411Raymond Hettinger               frozenset(xrange(0)), frozenset(frozenset()),
494d794666048510deca0d4987a4c74d0fca85be411Raymond Hettinger               frozenset(f), f]
495d794666048510deca0d4987a4c74d0fca85be411Raymond Hettinger        # All of the empty frozensets should have just one id()
496d794666048510deca0d4987a4c74d0fca85be411Raymond Hettinger        self.assertEqual(len(set(map(id, efs))), 1)
497d794666048510deca0d4987a4c74d0fca85be411Raymond Hettinger
49849ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger    def test_constructor_identity(self):
49949ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        s = self.thetype(range(3))
50049ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        t = self.thetype(s)
50149ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        self.assertEqual(id(s), id(t))
50250a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger
503a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_hash(self):
50449ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        self.assertEqual(hash(self.thetype('abcdeb')),
50549ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger                         hash(self.thetype('ebecda')))
50649ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger
50782cb9a235de45074d578d46bbf6680e726b13efdRaymond Hettinger        # make sure that all permutations give the same hash value
50882cb9a235de45074d578d46bbf6680e726b13efdRaymond Hettinger        n = 100
50982cb9a235de45074d578d46bbf6680e726b13efdRaymond Hettinger        seq = [randrange(n) for i in xrange(n)]
51082cb9a235de45074d578d46bbf6680e726b13efdRaymond Hettinger        results = set()
51182cb9a235de45074d578d46bbf6680e726b13efdRaymond Hettinger        for i in xrange(200):
51282cb9a235de45074d578d46bbf6680e726b13efdRaymond Hettinger            shuffle(seq)
51382cb9a235de45074d578d46bbf6680e726b13efdRaymond Hettinger            results.add(hash(self.thetype(seq)))
51482cb9a235de45074d578d46bbf6680e726b13efdRaymond Hettinger        self.assertEqual(len(results), 1)
51582cb9a235de45074d578d46bbf6680e726b13efdRaymond Hettinger
51649ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger    def test_copy(self):
51749ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        dup = self.s.copy()
51849ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        self.assertEqual(id(self.s), id(dup))
519a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
520a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_frozen_as_dictkey(self):
521a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        seq = range(10) + list('abcdefg') + ['apple']
52249ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        key1 = self.thetype(seq)
52349ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        key2 = self.thetype(reversed(seq))
524a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(key1, key2)
525a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertNotEqual(id(key1), id(key2))
526a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        d = {}
527a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        d[key1] = 42
528a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(d[key2], 42)
529a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
530a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_hash_caching(self):
53149ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        f = self.thetype('abcdcda')
532a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(hash(f), hash(f))
533a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
53449ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger    def test_hash_effectiveness(self):
53549ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        n = 13
53649ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        hashvalues = set()
5376e70accaffc61a5af7d78be1b365d1cab804751bRaymond Hettinger        addhashvalue = hashvalues.add
5386e70accaffc61a5af7d78be1b365d1cab804751bRaymond Hettinger        elemmasks = [(i+1, 1<<i) for i in range(n)]
53949ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        for i in xrange(2**n):
5406e70accaffc61a5af7d78be1b365d1cab804751bRaymond Hettinger            addhashvalue(hash(frozenset([e for e, m in elemmasks if m&i])))
5416e70accaffc61a5af7d78be1b365d1cab804751bRaymond Hettinger        self.assertEqual(len(hashvalues), 2**n)
54249ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger
54350a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettingerclass FrozenSetSubclass(frozenset):
54450a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger    pass
54550a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger
54650a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettingerclass TestFrozenSetSubclass(TestFrozenSet):
54750a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger    thetype = FrozenSetSubclass
54850a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger
54949ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger    def test_constructor_identity(self):
55049ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        s = self.thetype(range(3))
55149ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        t = self.thetype(s)
55249ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        self.assertNotEqual(id(s), id(t))
55349ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger
55449ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger    def test_copy(self):
55549ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        dup = self.s.copy()
55649ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        self.assertNotEqual(id(self.s), id(dup))
55749ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger
55849ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger    def test_nested_empty_constructor(self):
55949ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        s = self.thetype()
56049ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        t = self.thetype(s)
56149ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        self.assertEqual(s, t)
56249ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger
563d794666048510deca0d4987a4c74d0fca85be411Raymond Hettinger    def test_singleton_empty_frozenset(self):
564d794666048510deca0d4987a4c74d0fca85be411Raymond Hettinger        Frozenset = self.thetype
565d794666048510deca0d4987a4c74d0fca85be411Raymond Hettinger        f = frozenset()
566d794666048510deca0d4987a4c74d0fca85be411Raymond Hettinger        F = Frozenset()
567d794666048510deca0d4987a4c74d0fca85be411Raymond Hettinger        efs = [Frozenset(), Frozenset([]), Frozenset(()), Frozenset(''),
568d794666048510deca0d4987a4c74d0fca85be411Raymond Hettinger               Frozenset(), Frozenset([]), Frozenset(()), Frozenset(''),
569d794666048510deca0d4987a4c74d0fca85be411Raymond Hettinger               Frozenset(xrange(0)), Frozenset(Frozenset()),
570d794666048510deca0d4987a4c74d0fca85be411Raymond Hettinger               Frozenset(frozenset()), f, F, Frozenset(f), Frozenset(F)]
571d794666048510deca0d4987a4c74d0fca85be411Raymond Hettinger        # All empty frozenset subclass instances should have different ids
572d794666048510deca0d4987a4c74d0fca85be411Raymond Hettinger        self.assertEqual(len(set(map(id, efs))), len(efs))
573d794666048510deca0d4987a4c74d0fca85be411Raymond Hettinger
574a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger# Tests taken from test_sets.py =============================================
575a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
576a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerempty_set = set()
577a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
578a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#==============================================================================
579a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
580a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestBasicOps(unittest.TestCase):
581a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
582a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_repr(self):
583a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        if self.repr is not None:
58470a6b49821a3226f55e9716f32d802d06640cb89Walter Dörwald            self.assertEqual(repr(self.set), self.repr)
585a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
586eae05de91be776d141e531a11cb169dd30a8241dRaymond Hettinger    def test_print(self):
587eae05de91be776d141e531a11cb169dd30a8241dRaymond Hettinger        try:
588eae05de91be776d141e531a11cb169dd30a8241dRaymond Hettinger            fo = open(test_support.TESTFN, "wb")
589eae05de91be776d141e531a11cb169dd30a8241dRaymond Hettinger            print >> fo, self.set,
590eae05de91be776d141e531a11cb169dd30a8241dRaymond Hettinger            fo.close()
591eae05de91be776d141e531a11cb169dd30a8241dRaymond Hettinger            fo = open(test_support.TESTFN, "rb")
592eae05de91be776d141e531a11cb169dd30a8241dRaymond Hettinger            self.assertEqual(fo.read(), repr(self.set))
593eae05de91be776d141e531a11cb169dd30a8241dRaymond Hettinger        finally:
594eae05de91be776d141e531a11cb169dd30a8241dRaymond Hettinger            fo.close()
595eae05de91be776d141e531a11cb169dd30a8241dRaymond Hettinger            os.remove(test_support.TESTFN)
596eae05de91be776d141e531a11cb169dd30a8241dRaymond Hettinger
597a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_length(self):
598a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(len(self.set), self.length)
599a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
600a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_self_equality(self):
601a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, self.set)
602a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
603a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_equivalent_equality(self):
604a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, self.dup)
605a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
606a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_copy(self):
607a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set.copy(), self.dup)
608a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
609a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_self_union(self):
610a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        result = self.set | self.set
611a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(result, self.dup)
612a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
613a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_empty_union(self):
614a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        result = self.set | empty_set
615a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(result, self.dup)
616a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
617a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_union_empty(self):
618a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        result = empty_set | self.set
619a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(result, self.dup)
620a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
621a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_self_intersection(self):
622a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        result = self.set & self.set
623a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(result, self.dup)
624a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
625a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_empty_intersection(self):
626a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        result = self.set & empty_set
627a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(result, empty_set)
628a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
629a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_intersection_empty(self):
630a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        result = empty_set & self.set
631a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(result, empty_set)
632a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
633a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_self_symmetric_difference(self):
634a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        result = self.set ^ self.set
635a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(result, empty_set)
636a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
637a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def checkempty_symmetric_difference(self):
638a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        result = self.set ^ empty_set
639a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(result, self.set)
640a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
641a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_self_difference(self):
642a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        result = self.set - self.set
643a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(result, empty_set)
644a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
645a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_empty_difference(self):
646a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        result = self.set - empty_set
647a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(result, self.dup)
648a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
649a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_empty_difference_rev(self):
650a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        result = empty_set - self.set
651a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(result, empty_set)
652a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
653a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_iteration(self):
654a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        for v in self.set:
655a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.assert_(v in self.values)
656fcf4435ae02c3962a8ad71a9539877060c694468Neal Norwitz        setiter = iter(self.set)
657f5b3e36493da275334e29afdbd238863697dca35Armin Rigo        # note: __length_hint__ is an internal undocumented API,
658f5b3e36493da275334e29afdbd238863697dca35Armin Rigo        # don't rely on it in your own programs
659f5b3e36493da275334e29afdbd238863697dca35Armin Rigo        self.assertEqual(setiter.__length_hint__(), len(self.set))
660a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
661a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_pickling(self):
662a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        p = pickle.dumps(self.set)
663a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        copy = pickle.loads(p)
664a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, copy,
665a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                         "%s != %s" % (self.set, copy))
666a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
667a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------
668a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
669a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestBasicOpsEmpty(TestBasicOps):
670a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def setUp(self):
671a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.case   = "empty set"
672a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.values = []
673a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set    = set(self.values)
674a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.dup    = set(self.values)
675a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.length = 0
676a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.repr   = "set([])"
677a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
678a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------
679a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
680a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestBasicOpsSingleton(TestBasicOps):
681a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def setUp(self):
682a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.case   = "unit set (number)"
683a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.values = [3]
684a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set    = set(self.values)
685a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.dup    = set(self.values)
686a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.length = 1
687a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.repr   = "set([3])"
688a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
689a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_in(self):
690a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.failUnless(3 in self.set)
691a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
692a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_not_in(self):
693a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.failUnless(2 not in self.set)
694a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
695a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------
696a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
697a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestBasicOpsTuple(TestBasicOps):
698a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def setUp(self):
699a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.case   = "unit set (tuple)"
700a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.values = [(0, "zero")]
701a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set    = set(self.values)
702a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.dup    = set(self.values)
703a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.length = 1
704a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.repr   = "set([(0, 'zero')])"
705a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
706a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_in(self):
707a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.failUnless((0, "zero") in self.set)
708a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
709a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_not_in(self):
710a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.failUnless(9 not in self.set)
711a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
712a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------
713a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
714a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestBasicOpsTriple(TestBasicOps):
715a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def setUp(self):
716a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.case   = "triple set"
717a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.values = [0, "zero", operator.add]
718a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set    = set(self.values)
719a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.dup    = set(self.values)
720a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.length = 3
721a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.repr   = None
722a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
723a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#==============================================================================
724a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
725a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerdef baditer():
726a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    raise TypeError
727a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    yield True
728a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
729a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerdef gooditer():
730a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    yield True
731a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
732a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestExceptionPropagation(unittest.TestCase):
733a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    """SF 628246:  Set constructor should not trap iterator TypeErrors"""
734a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
735a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_instanceWithException(self):
736a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, set, baditer())
737a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
738a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_instancesWithoutException(self):
739a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        # All of these iterables should load without exception.
740a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        set([1,2,3])
741a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        set((1,2,3))
742a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        set({'one':1, 'two':2, 'three':3})
743a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        set(xrange(3))
744a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        set('abc')
745a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        set(gooditer())
746a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
747fcf4435ae02c3962a8ad71a9539877060c694468Neal Norwitz    def test_changingSizeWhileIterating(self):
748fcf4435ae02c3962a8ad71a9539877060c694468Neal Norwitz        s = set([1,2,3])
749fcf4435ae02c3962a8ad71a9539877060c694468Neal Norwitz        try:
750fcf4435ae02c3962a8ad71a9539877060c694468Neal Norwitz            for i in s:
751fcf4435ae02c3962a8ad71a9539877060c694468Neal Norwitz                s.update([4])
752fcf4435ae02c3962a8ad71a9539877060c694468Neal Norwitz        except RuntimeError:
753fcf4435ae02c3962a8ad71a9539877060c694468Neal Norwitz            pass
754fcf4435ae02c3962a8ad71a9539877060c694468Neal Norwitz        else:
755fcf4435ae02c3962a8ad71a9539877060c694468Neal Norwitz            self.fail("no exception when changing size during iteration")
756fcf4435ae02c3962a8ad71a9539877060c694468Neal Norwitz
757a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#==============================================================================
758a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
759a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestSetOfSets(unittest.TestCase):
760a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_constructor(self):
761a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        inner = frozenset([1])
762a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        outer = set([inner])
763a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        element = outer.pop()
764a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(type(element), frozenset)
765a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        outer.add(inner)        # Rebuild set of sets with .add method
766a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        outer.remove(inner)
767a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(outer, set())   # Verify that remove worked
768a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        outer.discard(inner)    # Absence of KeyError indicates working fine
769a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
770a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#==============================================================================
771a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
772a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestBinaryOps(unittest.TestCase):
773a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def setUp(self):
774a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set = set((2, 4, 6))
775a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
776a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_eq(self):              # SF bug 643115
777a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set({2:1,4:3,6:5}))
778a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
779a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_union_subset(self):
780a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        result = self.set | set([2])
781a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(result, set((2, 4, 6)))
782a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
783a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_union_superset(self):
784a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        result = self.set | set([2, 4, 6, 8])
785a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(result, set([2, 4, 6, 8]))
786a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
787a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_union_overlap(self):
788a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        result = self.set | set([3, 4, 5])
789a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(result, set([2, 3, 4, 5, 6]))
790a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
791a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_union_non_overlap(self):
792a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        result = self.set | set([8])
793a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(result, set([2, 4, 6, 8]))
794a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
795a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_intersection_subset(self):
796a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        result = self.set & set((2, 4))
797a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(result, set((2, 4)))
798a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
799a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_intersection_superset(self):
800a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        result = self.set & set([2, 4, 6, 8])
801a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(result, set([2, 4, 6]))
802a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
803a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_intersection_overlap(self):
804a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        result = self.set & set([3, 4, 5])
805a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(result, set([4]))
806a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
807a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_intersection_non_overlap(self):
808a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        result = self.set & set([8])
809a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(result, empty_set)
810a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
811a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_sym_difference_subset(self):
812a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        result = self.set ^ set((2, 4))
813a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(result, set([6]))
814a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
815a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_sym_difference_superset(self):
816a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        result = self.set ^ set((2, 4, 6, 8))
817a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(result, set([8]))
818a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
819a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_sym_difference_overlap(self):
820a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        result = self.set ^ set((3, 4, 5))
821a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(result, set([2, 3, 5, 6]))
822a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
823a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_sym_difference_non_overlap(self):
824a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        result = self.set ^ set([8])
825a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(result, set([2, 4, 6, 8]))
826a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
827a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_cmp(self):
828a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        a, b = set('a'), set('b')
829a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, cmp, a, b)
830a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
831a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        # You can view this as a buglet:  cmp(a, a) does not raise TypeError,
832a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        # because __eq__ is tried before __cmp__, and a.__eq__(a) returns True,
833a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        # which Python thinks is good enough to synthesize a cmp() result
834a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        # without calling __cmp__.
835a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(cmp(a, a), 0)
836a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
837a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, cmp, a, 12)
838a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, cmp, "abc", a)
839a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
840a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#==============================================================================
841a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
842a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestUpdateOps(unittest.TestCase):
843a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def setUp(self):
844a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set = set((2, 4, 6))
845a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
846a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_union_subset(self):
847a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set |= set([2])
848a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set((2, 4, 6)))
849a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
850a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_union_superset(self):
851a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set |= set([2, 4, 6, 8])
852a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set([2, 4, 6, 8]))
853a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
854a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_union_overlap(self):
855a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set |= set([3, 4, 5])
856a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set([2, 3, 4, 5, 6]))
857a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
858a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_union_non_overlap(self):
859a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set |= set([8])
860a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set([2, 4, 6, 8]))
861a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
862a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_union_method_call(self):
863f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger        self.set.update(set([3, 4, 5]))
864a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set([2, 3, 4, 5, 6]))
865a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
866a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_intersection_subset(self):
867a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set &= set((2, 4))
868a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set((2, 4)))
869a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
870a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_intersection_superset(self):
871a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set &= set([2, 4, 6, 8])
872a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set([2, 4, 6]))
873a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
874a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_intersection_overlap(self):
875a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set &= set([3, 4, 5])
876a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set([4]))
877a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
878a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_intersection_non_overlap(self):
879a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set &= set([8])
880a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, empty_set)
881a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
882a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_intersection_method_call(self):
883a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set.intersection_update(set([3, 4, 5]))
884a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set([4]))
885a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
886a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_sym_difference_subset(self):
887a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set ^= set((2, 4))
888a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set([6]))
889a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
890a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_sym_difference_superset(self):
891a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set ^= set((2, 4, 6, 8))
892a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set([8]))
893a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
894a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_sym_difference_overlap(self):
895a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set ^= set((3, 4, 5))
896a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set([2, 3, 5, 6]))
897a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
898a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_sym_difference_non_overlap(self):
899a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set ^= set([8])
900a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set([2, 4, 6, 8]))
901a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
902a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_sym_difference_method_call(self):
903a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set.symmetric_difference_update(set([3, 4, 5]))
904a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set([2, 3, 5, 6]))
905a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
906a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_difference_subset(self):
907a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set -= set((2, 4))
908a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set([6]))
909a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
910a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_difference_superset(self):
911a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set -= set((2, 4, 6, 8))
912a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set([]))
913a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
914a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_difference_overlap(self):
915a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set -= set((3, 4, 5))
916a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set([2, 6]))
917a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
918a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_difference_non_overlap(self):
919a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set -= set([8])
920a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set([2, 4, 6]))
921a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
922a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_difference_method_call(self):
923a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set.difference_update(set([3, 4, 5]))
924a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set([2, 6]))
925a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
926a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#==============================================================================
927a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
928a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestMutate(unittest.TestCase):
929a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def setUp(self):
930a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.values = ["a", "b", "c"]
931a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set = set(self.values)
932a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
933a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_add_present(self):
934a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set.add("c")
935a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set("abc"))
936a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
937a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_add_absent(self):
938a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set.add("d")
939a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set("abcd"))
940a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
941a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_add_until_full(self):
942a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        tmp = set()
943a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        expected_len = 0
944a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        for v in self.values:
945a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            tmp.add(v)
946a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            expected_len += 1
947a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.assertEqual(len(tmp), expected_len)
948a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(tmp, self.set)
949a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
950a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_remove_present(self):
951a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set.remove("b")
952a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set("ac"))
953a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
954a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_remove_absent(self):
955a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        try:
956a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.set.remove("d")
957a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.fail("Removing missing element should have raised LookupError")
958a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        except LookupError:
959a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            pass
960a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
961a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_remove_until_empty(self):
962a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        expected_len = len(self.set)
963a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        for v in self.values:
964a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.set.remove(v)
965a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            expected_len -= 1
966a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.assertEqual(len(self.set), expected_len)
967a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
968a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_discard_present(self):
969a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set.discard("c")
970a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set("ab"))
971a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
972a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_discard_absent(self):
973a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set.discard("d")
974a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set("abc"))
975a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
976a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_clear(self):
977a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set.clear()
978a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(len(self.set), 0)
979a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
980a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_pop(self):
981a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        popped = {}
982a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        while self.set:
983a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            popped[self.set.pop()] = None
984a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(len(popped), len(self.values))
985a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        for v in self.values:
986a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.failUnless(v in popped)
987a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
988a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_update_empty_tuple(self):
989f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger        self.set.update(())
990a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set(self.values))
991a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
992a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_update_unit_tuple_overlap(self):
993f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger        self.set.update(("a",))
994a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set(self.values))
995a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
996a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_update_unit_tuple_non_overlap(self):
997f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger        self.set.update(("a", "z"))
998a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set(self.values + ["z"]))
999a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1000a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#==============================================================================
1001a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1002a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestSubsets(unittest.TestCase):
1003a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1004a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    case2method = {"<=": "issubset",
1005a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                   ">=": "issuperset",
1006a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                  }
1007a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1008a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    reverse = {"==": "==",
1009a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger               "!=": "!=",
1010a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger               "<":  ">",
1011a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger               ">":  "<",
1012a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger               "<=": ">=",
1013a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger               ">=": "<=",
1014a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger              }
1015a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1016a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_issubset(self):
1017a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        x = self.left
1018a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        y = self.right
1019a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        for case in "!=", "==", "<", "<=", ">", ">=":
1020a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            expected = case in self.cases
1021a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            # Test the binary infix spelling.
1022a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            result = eval("x" + case + "y", locals())
1023a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.assertEqual(result, expected)
1024a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            # Test the "friendly" method-name spelling, if one exists.
1025a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            if case in TestSubsets.case2method:
1026a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                method = getattr(x, TestSubsets.case2method[case])
1027a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                result = method(y)
1028a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                self.assertEqual(result, expected)
1029a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1030a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            # Now do the same for the operands reversed.
1031a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            rcase = TestSubsets.reverse[case]
1032a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            result = eval("y" + rcase + "x", locals())
1033a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.assertEqual(result, expected)
1034a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            if rcase in TestSubsets.case2method:
1035a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                method = getattr(y, TestSubsets.case2method[rcase])
1036a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                result = method(x)
1037a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                self.assertEqual(result, expected)
1038a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------
1039a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1040a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestSubsetEqualEmpty(TestSubsets):
1041a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    left  = set()
1042a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    right = set()
1043a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    name  = "both empty"
1044a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    cases = "==", "<=", ">="
1045a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1046a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------
1047a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1048a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestSubsetEqualNonEmpty(TestSubsets):
1049a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    left  = set([1, 2])
1050a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    right = set([1, 2])
1051a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    name  = "equal pair"
1052a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    cases = "==", "<=", ">="
1053a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1054a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------
1055a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1056a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestSubsetEmptyNonEmpty(TestSubsets):
1057a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    left  = set()
1058a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    right = set([1, 2])
1059a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    name  = "one empty, one non-empty"
1060a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    cases = "!=", "<", "<="
1061a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1062a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------
1063a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1064a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestSubsetPartial(TestSubsets):
1065a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    left  = set([1])
1066a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    right = set([1, 2])
1067a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    name  = "one a non-empty proper subset of other"
1068a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    cases = "!=", "<", "<="
1069a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1070a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------
1071a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1072a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestSubsetNonOverlap(TestSubsets):
1073a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    left  = set([1])
1074a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    right = set([2])
1075a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    name  = "neither empty, neither contains"
1076a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    cases = "!="
1077a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1078a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#==============================================================================
1079a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1080a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestOnlySetsInBinaryOps(unittest.TestCase):
1081a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1082a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_eq_ne(self):
1083a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        # Unlike the others, this is testing that == and != *are* allowed.
1084a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.other == self.set, False)
1085a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set == self.other, False)
1086a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.other != self.set, True)
1087a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set != self.other, True)
1088a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1089a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_ge_gt_le_lt(self):
1090a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, lambda: self.set < self.other)
1091a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, lambda: self.set <= self.other)
1092a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, lambda: self.set > self.other)
1093a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, lambda: self.set >= self.other)
1094a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1095a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, lambda: self.other < self.set)
1096a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, lambda: self.other <= self.set)
1097a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, lambda: self.other > self.set)
1098a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, lambda: self.other >= self.set)
1099a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1100f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger    def test_update_operator(self):
1101a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        try:
1102a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.set |= self.other
1103a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        except TypeError:
1104a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            pass
1105a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        else:
1106a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.fail("expected TypeError")
1107a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1108f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger    def test_update(self):
1109a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        if self.otherIsIterable:
1110f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger            self.set.update(self.other)
1111a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        else:
1112f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger            self.assertRaises(TypeError, self.set.update, self.other)
1113a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1114a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_union(self):
1115a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, lambda: self.set | self.other)
1116a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, lambda: self.other | self.set)
1117a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        if self.otherIsIterable:
1118a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.set.union(self.other)
1119a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        else:
1120a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.assertRaises(TypeError, self.set.union, self.other)
1121a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1122a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_intersection_update_operator(self):
1123a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        try:
1124a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.set &= self.other
1125a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        except TypeError:
1126a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            pass
1127a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        else:
1128a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.fail("expected TypeError")
1129a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1130a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_intersection_update(self):
1131a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        if self.otherIsIterable:
1132a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.set.intersection_update(self.other)
1133a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        else:
1134a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.assertRaises(TypeError,
1135a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                              self.set.intersection_update,
1136a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                              self.other)
1137a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1138a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_intersection(self):
1139a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, lambda: self.set & self.other)
1140a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, lambda: self.other & self.set)
1141a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        if self.otherIsIterable:
1142a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.set.intersection(self.other)
1143a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        else:
1144a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.assertRaises(TypeError, self.set.intersection, self.other)
1145a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1146a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_sym_difference_update_operator(self):
1147a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        try:
1148a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.set ^= self.other
1149a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        except TypeError:
1150a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            pass
1151a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        else:
1152a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.fail("expected TypeError")
1153a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1154a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_sym_difference_update(self):
1155a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        if self.otherIsIterable:
1156a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.set.symmetric_difference_update(self.other)
1157a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        else:
1158a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.assertRaises(TypeError,
1159a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                              self.set.symmetric_difference_update,
1160a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                              self.other)
1161a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1162a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_sym_difference(self):
1163a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, lambda: self.set ^ self.other)
1164a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, lambda: self.other ^ self.set)
1165a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        if self.otherIsIterable:
1166a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.set.symmetric_difference(self.other)
1167a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        else:
1168a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.assertRaises(TypeError, self.set.symmetric_difference, self.other)
1169a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1170a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_difference_update_operator(self):
1171a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        try:
1172a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.set -= self.other
1173a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        except TypeError:
1174a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            pass
1175a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        else:
1176a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.fail("expected TypeError")
1177a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1178a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_difference_update(self):
1179a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        if self.otherIsIterable:
1180a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.set.difference_update(self.other)
1181a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        else:
1182a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.assertRaises(TypeError,
1183a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                              self.set.difference_update,
1184a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                              self.other)
1185a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1186a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_difference(self):
1187a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, lambda: self.set - self.other)
1188a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, lambda: self.other - self.set)
1189a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        if self.otherIsIterable:
1190a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.set.difference(self.other)
1191a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        else:
1192a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.assertRaises(TypeError, self.set.difference, self.other)
1193a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1194a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------
1195a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1196a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestOnlySetsNumeric(TestOnlySetsInBinaryOps):
1197a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def setUp(self):
1198a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set   = set((1, 2, 3))
1199a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.other = 19
1200a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.otherIsIterable = False
1201a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1202a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------
1203a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1204a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestOnlySetsDict(TestOnlySetsInBinaryOps):
1205a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def setUp(self):
1206a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set   = set((1, 2, 3))
1207a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.other = {1:2, 3:4}
1208a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.otherIsIterable = True
1209a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1210a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------
1211a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1212a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestOnlySetsOperator(TestOnlySetsInBinaryOps):
1213a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def setUp(self):
1214a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set   = set((1, 2, 3))
1215a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.other = operator.add
1216a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.otherIsIterable = False
1217a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1218a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------
1219a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1220a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestOnlySetsTuple(TestOnlySetsInBinaryOps):
1221a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def setUp(self):
1222a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set   = set((1, 2, 3))
1223a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.other = (2, 4, 6)
1224a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.otherIsIterable = True
1225a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1226a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------
1227a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1228a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestOnlySetsString(TestOnlySetsInBinaryOps):
1229a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def setUp(self):
1230a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set   = set((1, 2, 3))
1231a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.other = 'abc'
1232a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.otherIsIterable = True
1233a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1234a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------
1235a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1236a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestOnlySetsGenerator(TestOnlySetsInBinaryOps):
1237a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def setUp(self):
1238a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        def gen():
1239a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            for i in xrange(0, 10, 2):
1240a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                yield i
1241a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set   = set((1, 2, 3))
1242a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.other = gen()
1243a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.otherIsIterable = True
1244a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1245a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#==============================================================================
1246a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1247a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestCopying(unittest.TestCase):
1248a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1249a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_copy(self):
1250a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        dup = self.set.copy()
1251a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        dup_list = list(dup); dup_list.sort()
1252a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        set_list = list(self.set); set_list.sort()
1253a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(len(dup_list), len(set_list))
1254a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        for i in range(len(dup_list)):
1255a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.failUnless(dup_list[i] is set_list[i])
1256a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1257a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_deep_copy(self):
1258a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        dup = copy.deepcopy(self.set)
125970a6b49821a3226f55e9716f32d802d06640cb89Walter Dörwald        ##print type(dup), repr(dup)
1260a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        dup_list = list(dup); dup_list.sort()
1261a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        set_list = list(self.set); set_list.sort()
1262a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(len(dup_list), len(set_list))
1263a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        for i in range(len(dup_list)):
1264a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.assertEqual(dup_list[i], set_list[i])
1265a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1266a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------
1267a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1268a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestCopyingEmpty(TestCopying):
1269a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def setUp(self):
1270a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set = set()
1271a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1272a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------
1273a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1274a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestCopyingSingleton(TestCopying):
1275a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def setUp(self):
1276a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set = set(["hello"])
1277a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1278a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------
1279a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1280a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestCopyingTriple(TestCopying):
1281a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def setUp(self):
1282a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set = set(["zero", 0, None])
1283a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1284a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------
1285a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1286a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestCopyingTuple(TestCopying):
1287a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def setUp(self):
1288a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set = set([(1, 2)])
1289a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1290a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------
1291a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1292a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestCopyingNested(TestCopying):
1293a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def setUp(self):
1294a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set = set([((1, 2), (3, 4))])
1295a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1296a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#==============================================================================
1297a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1298a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestIdentities(unittest.TestCase):
1299a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def setUp(self):
1300a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.a = set('abracadabra')
1301a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.b = set('alacazam')
1302a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1303a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_binopsVsSubsets(self):
1304a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        a, b = self.a, self.b
1305a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assert_(a - b < a)
1306a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assert_(b - a < b)
1307a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assert_(a & b < a)
1308a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assert_(a & b < b)
1309a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assert_(a | b > a)
1310a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assert_(a | b > b)
1311a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assert_(a ^ b < a | b)
1312a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1313a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_commutativity(self):
1314a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        a, b = self.a, self.b
1315a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(a&b, b&a)
1316a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(a|b, b|a)
1317a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(a^b, b^a)
1318a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        if a != b:
1319a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.assertNotEqual(a-b, b-a)
1320a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1321a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_summations(self):
1322a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        # check that sums of parts equal the whole
1323a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        a, b = self.a, self.b
1324a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual((a-b)|(a&b)|(b-a), a|b)
1325a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual((a&b)|(a^b), a|b)
1326a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(a|(b-a), a|b)
1327a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual((a-b)|b, a|b)
1328a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual((a-b)|(a&b), a)
1329a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual((b-a)|(a&b), b)
1330a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual((a-b)|(b-a), a^b)
1331a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1332a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_exclusion(self):
1333a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        # check that inverse operations show non-overlap
1334a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        a, b, zero = self.a, self.b, set()
1335a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual((a-b)&b, zero)
1336a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual((b-a)&a, zero)
1337a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual((a&b)&(a^b), zero)
1338a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1339a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger# Tests derived from test_itertools.py =======================================
1340a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1341a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerdef R(seqn):
1342a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    'Regular generator'
1343a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    for i in seqn:
1344a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        yield i
1345a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1346a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass G:
1347a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    'Sequence using __getitem__'
1348a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def __init__(self, seqn):
1349a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.seqn = seqn
1350a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def __getitem__(self, i):
1351a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        return self.seqn[i]
1352a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1353a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass I:
1354a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    'Sequence using iterator protocol'
1355a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def __init__(self, seqn):
1356a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.seqn = seqn
1357a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.i = 0
1358a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def __iter__(self):
1359a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        return self
1360a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def next(self):
1361a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        if self.i >= len(self.seqn): raise StopIteration
1362a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        v = self.seqn[self.i]
1363a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.i += 1
1364a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        return v
1365a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1366a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass Ig:
1367a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    'Sequence using iterator protocol defined with a generator'
1368a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def __init__(self, seqn):
1369a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.seqn = seqn
1370a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.i = 0
1371a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def __iter__(self):
1372a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        for val in self.seqn:
1373a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            yield val
1374a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1375a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass X:
1376a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    'Missing __getitem__ and __iter__'
1377a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def __init__(self, seqn):
1378a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.seqn = seqn
1379a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.i = 0
1380a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def next(self):
1381a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        if self.i >= len(self.seqn): raise StopIteration
1382a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        v = self.seqn[self.i]
1383a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.i += 1
1384a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        return v
1385a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1386a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass N:
1387a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    'Iterator missing next()'
1388a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def __init__(self, seqn):
1389a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.seqn = seqn
1390a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.i = 0
1391a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def __iter__(self):
1392a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        return self
1393a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1394a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass E:
1395a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    'Test propagation of exceptions'
1396a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def __init__(self, seqn):
1397a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.seqn = seqn
1398a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.i = 0
1399a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def __iter__(self):
1400a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        return self
1401a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def next(self):
1402ffdb8bb99c4017152a9dca70669f9d6b9831d454Raymond Hettinger        3 // 0
1403a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1404a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass S:
1405a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    'Test immediate stop'
1406a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def __init__(self, seqn):
1407a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        pass
1408a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def __iter__(self):
1409a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        return self
1410a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def next(self):
1411a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        raise StopIteration
1412a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1413a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerfrom itertools import chain, imap
1414a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerdef L(seqn):
1415a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    'Test multiple tiers of iterators'
1416a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    return chain(imap(lambda x:x, R(Ig(G(seqn)))))
1417a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1418a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestVariousIteratorArgs(unittest.TestCase):
1419a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1420a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_constructor(self):
1421a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        for cons in (set, frozenset):
1422a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            for s in ("123", "", range(1000), ('do', 1.2), xrange(2000,2200,5)):
1423a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                for g in (G, I, Ig, S, L, R):
142464958a15d7c03efdc3d2eddf247666e18d1fd910Raymond Hettinger                    self.assertEqual(sorted(cons(g(s))), sorted(g(s)))
1425a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                self.assertRaises(TypeError, cons , X(s))
1426a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                self.assertRaises(TypeError, cons , N(s))
1427a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                self.assertRaises(ZeroDivisionError, cons , E(s))
1428a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1429a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_inline_methods(self):
1430a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        s = set('november')
1431a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        for data in ("123", "", range(1000), ('do', 1.2), xrange(2000,2200,5), 'december'):
1432a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            for meth in (s.union, s.intersection, s.difference, s.symmetric_difference):
1433a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                for g in (G, I, Ig, L, R):
1434a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                    expected = meth(data)
1435a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                    actual = meth(G(data))
143664958a15d7c03efdc3d2eddf247666e18d1fd910Raymond Hettinger                    self.assertEqual(sorted(actual), sorted(expected))
1437a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                self.assertRaises(TypeError, meth, X(s))
1438a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                self.assertRaises(TypeError, meth, N(s))
1439a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                self.assertRaises(ZeroDivisionError, meth, E(s))
1440a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1441a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_inplace_methods(self):
1442a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        for data in ("123", "", range(1000), ('do', 1.2), xrange(2000,2200,5), 'december'):
1443f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger            for methname in ('update', 'intersection_update',
1444a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                             'difference_update', 'symmetric_difference_update'):
1445a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                for g in (G, I, Ig, S, L, R):
1446a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                    s = set('january')
1447a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                    t = s.copy()
1448a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                    getattr(s, methname)(list(g(data)))
1449a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                    getattr(t, methname)(g(data))
145064958a15d7c03efdc3d2eddf247666e18d1fd910Raymond Hettinger                    self.assertEqual(sorted(s), sorted(t))
1451a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1452a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                self.assertRaises(TypeError, getattr(set('january'), methname), X(data))
1453a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                self.assertRaises(TypeError, getattr(set('january'), methname), N(data))
1454a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                self.assertRaises(ZeroDivisionError, getattr(set('january'), methname), E(data))
1455a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1456a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#==============================================================================
1457a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1458a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerdef test_main(verbose=None):
1459a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    from test import test_sets
1460a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    test_classes = (
1461a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestSet,
146250a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger        TestSetSubclass,
1463f733abb7831d6566cb0fccd0550d58ec3b7f05a4Tim Peters        TestSetSubclassWithKeywordArgs,
1464a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestFrozenSet,
146550a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger        TestFrozenSetSubclass,
1466a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestSetOfSets,
1467a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestExceptionPropagation,
1468a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestBasicOpsEmpty,
1469a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestBasicOpsSingleton,
1470a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestBasicOpsTuple,
1471a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestBasicOpsTriple,
1472a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestBinaryOps,
1473a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestUpdateOps,
1474a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestMutate,
1475a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestSubsetEqualEmpty,
1476a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestSubsetEqualNonEmpty,
1477a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestSubsetEmptyNonEmpty,
1478a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestSubsetPartial,
1479a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestSubsetNonOverlap,
1480a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestOnlySetsNumeric,
1481a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestOnlySetsDict,
1482a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestOnlySetsOperator,
1483a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestOnlySetsTuple,
1484a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestOnlySetsString,
1485a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestOnlySetsGenerator,
1486a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestCopyingEmpty,
1487a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestCopyingSingleton,
1488a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestCopyingTriple,
1489a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestCopyingTuple,
1490a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestCopyingNested,
1491a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestIdentities,
1492a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestVariousIteratorArgs,
1493a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        )
1494a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1495a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    test_support.run_unittest(*test_classes)
1496a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1497a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    # verify reference counting
1498a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    if verbose and hasattr(sys, "gettotalrefcount"):
1499a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        import gc
1500a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        counts = [None] * 5
1501a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        for i in xrange(len(counts)):
1502a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            test_support.run_unittest(*test_classes)
1503a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            gc.collect()
1504a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            counts[i] = sys.gettotalrefcount()
1505a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        print counts
1506a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1507a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerif __name__ == "__main__":
1508a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    test_main(verbose=True)
1509