test_set.py revision 70a6b49821a3226f55e9716f32d802d06640cb89
1a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerimport unittest
2a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerfrom test import test_support
3a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerimport operator
4a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerimport copy
5a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerimport pickle
6a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
7a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass PassThru(Exception):
8a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    pass
9a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
10a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerdef check_pass_thru():
11a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    raise PassThru
12a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    yield 1
13a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
14a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestJointOps(unittest.TestCase):
15a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    # Tests common to both set and frozenset
16a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
17a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def setUp(self):
18a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.word = word = 'simsalabim'
19a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.otherword = 'madagascar'
20a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.letters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
21a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.s = self.thetype(word)
22a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.d = dict.fromkeys(word)
23a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
24a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_uniquification(self):
2564958a15d7c03efdc3d2eddf247666e18d1fd910Raymond Hettinger        actual = sorted(self.s)
2664958a15d7c03efdc3d2eddf247666e18d1fd910Raymond Hettinger        expected = sorted(self.d)
27a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(actual, expected)
28a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(PassThru, self.thetype, check_pass_thru())
29a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, self.thetype, [[]])
30a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
31a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_len(self):
32a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(len(self.s), len(self.d))
33a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
34a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_contains(self):
35a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        for c in self.letters:
36a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.assertEqual(c in self.s, c in self.d)
37a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, self.s.__contains__, [[]])
3819c2d77842290af9b5f470c1eea2a71d1f77c9feRaymond Hettinger        s = self.thetype([frozenset(self.letters)])
3919c2d77842290af9b5f470c1eea2a71d1f77c9feRaymond Hettinger        self.assert_(self.thetype(self.letters) in s)
40a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
41a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_union(self):
42a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        u = self.s.union(self.otherword)
43a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        for c in self.letters:
44a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.assertEqual(c in u, c in self.d or c in self.otherword)
4549ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        self.assertEqual(self.s, self.thetype(self.word))
46a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(type(u), self.thetype)
47a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(PassThru, self.s.union, check_pass_thru())
48a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, self.s.union, [[]])
49f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger        for C in set, frozenset, dict.fromkeys, str, unicode, list, tuple:
50f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger            self.assertEqual(self.thetype('abcba').union(C('cdc')), set('abcd'))
51f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger            self.assertEqual(self.thetype('abcba').union(C('efgfe')), set('abcefg'))
52f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger            self.assertEqual(self.thetype('abcba').union(C('ccb')), set('abc'))
53f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger            self.assertEqual(self.thetype('abcba').union(C('ef')), set('abcef'))
54a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
55a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_or(self):
56a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        i = self.s.union(self.otherword)
57a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.s | set(self.otherword), i)
58a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.s | frozenset(self.otherword), i)
59a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        try:
60a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.s | self.otherword
61a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        except TypeError:
62a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            pass
63a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        else:
64a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.fail("s|t did not screen-out general iterables")
65a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
66a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_intersection(self):
67a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        i = self.s.intersection(self.otherword)
68a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        for c in self.letters:
69a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.assertEqual(c in i, c in self.d and c in self.otherword)
7049ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        self.assertEqual(self.s, self.thetype(self.word))
71a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(type(i), self.thetype)
72a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(PassThru, self.s.intersection, check_pass_thru())
73f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger        for C in set, frozenset, dict.fromkeys, str, unicode, list, tuple:
74f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger            self.assertEqual(self.thetype('abcba').intersection(C('cdc')), set('cc'))
75f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger            self.assertEqual(self.thetype('abcba').intersection(C('efgfe')), set(''))
76f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger            self.assertEqual(self.thetype('abcba').intersection(C('ccb')), set('bc'))
77f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger            self.assertEqual(self.thetype('abcba').intersection(C('ef')), set(''))
78a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
79a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_and(self):
80a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        i = self.s.intersection(self.otherword)
81a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.s & set(self.otherword), i)
82a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.s & frozenset(self.otherword), i)
83a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        try:
84a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.s & self.otherword
85a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        except TypeError:
86a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            pass
87a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        else:
88a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.fail("s&t did not screen-out general iterables")
89a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
90a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_difference(self):
91a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        i = self.s.difference(self.otherword)
92a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        for c in self.letters:
93a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.assertEqual(c in i, c in self.d and c not in self.otherword)
9449ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        self.assertEqual(self.s, self.thetype(self.word))
95a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(type(i), self.thetype)
96a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(PassThru, self.s.difference, check_pass_thru())
97a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, self.s.difference, [[]])
98f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger        for C in set, frozenset, dict.fromkeys, str, unicode, list, tuple:
99f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger            self.assertEqual(self.thetype('abcba').difference(C('cdc')), set('ab'))
100f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger            self.assertEqual(self.thetype('abcba').difference(C('efgfe')), set('abc'))
101f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger            self.assertEqual(self.thetype('abcba').difference(C('ccb')), set('a'))
102f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger            self.assertEqual(self.thetype('abcba').difference(C('ef')), set('abc'))
103a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
104a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_sub(self):
105a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        i = self.s.difference(self.otherword)
106a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.s - set(self.otherword), i)
107a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.s - frozenset(self.otherword), i)
108a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        try:
109a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.s - self.otherword
110a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        except TypeError:
111a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            pass
112a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        else:
113a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.fail("s-t did not screen-out general iterables")
114a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
115a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_symmetric_difference(self):
116a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        i = self.s.symmetric_difference(self.otherword)
117a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        for c in self.letters:
118a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.assertEqual(c in i, (c in self.d) ^ (c in self.otherword))
11949ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        self.assertEqual(self.s, self.thetype(self.word))
120a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(type(i), self.thetype)
121a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(PassThru, self.s.symmetric_difference, check_pass_thru())
122a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, self.s.symmetric_difference, [[]])
123f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger        for C in set, frozenset, dict.fromkeys, str, unicode, list, tuple:
124f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger            self.assertEqual(self.thetype('abcba').symmetric_difference(C('cdc')), set('abd'))
125f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger            self.assertEqual(self.thetype('abcba').symmetric_difference(C('efgfe')), set('abcefg'))
126f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger            self.assertEqual(self.thetype('abcba').symmetric_difference(C('ccb')), set('a'))
127f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger            self.assertEqual(self.thetype('abcba').symmetric_difference(C('ef')), set('abcef'))
128a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
129a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_xor(self):
130a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        i = self.s.symmetric_difference(self.otherword)
131a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.s ^ set(self.otherword), i)
132a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.s ^ frozenset(self.otherword), i)
133a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        try:
134a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.s ^ self.otherword
135a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        except TypeError:
136a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            pass
137a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        else:
138a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.fail("s^t did not screen-out general iterables")
139a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
140a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_equality(self):
141a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.s, set(self.word))
142a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.s, frozenset(self.word))
143a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.s == self.word, False)
144a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertNotEqual(self.s, set(self.otherword))
145a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertNotEqual(self.s, frozenset(self.otherword))
146a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.s != self.word, True)
147a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
148a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_setOfFrozensets(self):
149a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        t = map(frozenset, ['abcdef', 'bcd', 'bdcb', 'fed', 'fedccba'])
150a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        s = self.thetype(t)
151a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(len(s), 3)
152a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
153a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_compare(self):
154a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, self.s.__cmp__, self.s)
155a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
156a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_sub_and_super(self):
157a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        p, q, r = map(self.thetype, ['ab', 'abcde', 'def'])
158a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assert_(p < q)
159a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assert_(p <= q)
160a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assert_(q <= q)
161a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assert_(q > p)
162a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assert_(q >= p)
163a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.failIf(q < r)
164a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.failIf(q <= r)
165a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.failIf(q > r)
166a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.failIf(q >= r)
1673fbec701cae361de6beca55bc926e0540635f165Raymond Hettinger        self.assert_(set('a').issubset('abc'))
1683fbec701cae361de6beca55bc926e0540635f165Raymond Hettinger        self.assert_(set('abc').issuperset('a'))
1693fbec701cae361de6beca55bc926e0540635f165Raymond Hettinger        self.failIf(set('a').issubset('cbs'))
1703fbec701cae361de6beca55bc926e0540635f165Raymond Hettinger        self.failIf(set('cbs').issuperset('a'))
171a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
172a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_pickling(self):
173a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        p = pickle.dumps(self.s)
174a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        dup = pickle.loads(p)
175a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.s, dup, "%s != %s" % (self.s, dup))
176a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
17749ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger    def test_deepcopy(self):
17849ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        class Tracer:
17949ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger            def __init__(self, value):
18049ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger                self.value = value
18149ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger            def __hash__(self):
18258eb11cf62dd04ccc2c364b62fd51b4265e2e203Tim Peters                return self.value
18349ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger            def __deepcopy__(self, memo=None):
18449ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger                return Tracer(self.value + 1)
18549ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        t = Tracer(10)
18649ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        s = self.thetype([t])
18749ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        dup = copy.deepcopy(s)
18849ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        self.assertNotEqual(id(s), id(dup))
18949ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        for elem in dup:
19049ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger            newt = elem
19149ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        self.assertNotEqual(id(t), id(newt))
19249ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        self.assertEqual(t.value + 1, newt.value)
19349ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger
194a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestSet(TestJointOps):
195a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    thetype = set
196a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
19750a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger    def test_init(self):
19849ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        s = self.thetype()
19950a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger        s.__init__(self.word)
20050a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger        self.assertEqual(s, set(self.word))
20150a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger        s.__init__(self.otherword)
20250a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger        self.assertEqual(s, set(self.otherword))
20350a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger
20449ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger    def test_constructor_identity(self):
20549ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        s = self.thetype(range(3))
20649ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        t = self.thetype(s)
20749ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        self.assertNotEqual(id(s), id(t))
20849ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger
209a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_hash(self):
210a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, hash, self.s)
211a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
212a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_clear(self):
213a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.s.clear()
214f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger        self.assertEqual(self.s, set())
215f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger        self.assertEqual(len(self.s), 0)
216a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
21749ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger    def test_copy(self):
21849ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        dup = self.s.copy()
21949ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        self.assertEqual(self.s, dup)
22049ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        self.assertNotEqual(id(self.s), id(dup))
22149ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger
222a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_add(self):
223a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.s.add('Q')
224a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assert_('Q' in self.s)
225f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger        dup = self.s.copy()
226f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger        self.s.add('Q')
227f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger        self.assertEqual(self.s, dup)
228a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, self.s.add, [])
229a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
230a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_remove(self):
231a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.s.remove('a')
232a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assert_('a' not in self.s)
233a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(KeyError, self.s.remove, 'Q')
234a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, self.s.remove, [])
235bfd334a42d35e58369e3a53e16733234e2741975Raymond Hettinger        s = self.thetype([frozenset(self.word)])
236bfd334a42d35e58369e3a53e16733234e2741975Raymond Hettinger        self.assert_(self.thetype(self.word) in s)
237bfd334a42d35e58369e3a53e16733234e2741975Raymond Hettinger        s.remove(self.thetype(self.word))
238bfd334a42d35e58369e3a53e16733234e2741975Raymond Hettinger        self.assert_(self.thetype(self.word) not in s)
239bfd334a42d35e58369e3a53e16733234e2741975Raymond Hettinger        self.assertRaises(KeyError, self.s.remove, self.thetype(self.word))
240a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
241a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_discard(self):
242a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.s.discard('a')
243a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assert_('a' not in self.s)
244a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.s.discard('Q')
245a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, self.s.discard, [])
246bfd334a42d35e58369e3a53e16733234e2741975Raymond Hettinger        s = self.thetype([frozenset(self.word)])
247bfd334a42d35e58369e3a53e16733234e2741975Raymond Hettinger        self.assert_(self.thetype(self.word) in s)
248bfd334a42d35e58369e3a53e16733234e2741975Raymond Hettinger        s.discard(self.thetype(self.word))
249bfd334a42d35e58369e3a53e16733234e2741975Raymond Hettinger        self.assert_(self.thetype(self.word) not in s)
250bfd334a42d35e58369e3a53e16733234e2741975Raymond Hettinger        s.discard(self.thetype(self.word))
251a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
252a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_pop(self):
253a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        for i in xrange(len(self.s)):
254a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            elem = self.s.pop()
255a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.assert_(elem not in self.s)
256a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(KeyError, self.s.pop)
257a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
258f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger    def test_update(self):
259f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger        retval = self.s.update(self.otherword)
260a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(retval, None)
261a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        for c in (self.word + self.otherword):
262a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.assert_(c in self.s)
263f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger        self.assertRaises(PassThru, self.s.update, check_pass_thru())
264f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger        self.assertRaises(TypeError, self.s.update, [[]])
265f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger        for p, q in (('cdc', 'abcd'), ('efgfe', 'abcefg'), ('ccb', 'abc'), ('ef', 'abcef')):
266f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger            for C in set, frozenset, dict.fromkeys, str, unicode, list, tuple:
267f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger                s = self.thetype('abcba')
268f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger                self.assertEqual(s.update(C(p)), None)
269f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger                self.assertEqual(s, set(q))
270a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
271a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_ior(self):
272a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.s |= set(self.otherword)
273a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        for c in (self.word + self.otherword):
274a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.assert_(c in self.s)
275a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
276a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_intersection_update(self):
277a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        retval = self.s.intersection_update(self.otherword)
278a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(retval, None)
279a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        for c in (self.word + self.otherword):
280a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            if c in self.otherword and c in self.word:
281a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                self.assert_(c in self.s)
282a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            else:
283a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                self.assert_(c not in self.s)
284a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(PassThru, self.s.intersection_update, check_pass_thru())
285a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, self.s.intersection_update, [[]])
286f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger        for p, q in (('cdc', 'c'), ('efgfe', ''), ('ccb', 'bc'), ('ef', '')):
287f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger            for C in set, frozenset, dict.fromkeys, str, unicode, list, tuple:
288f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger                s = self.thetype('abcba')
289f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger                self.assertEqual(s.intersection_update(C(p)), None)
290f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger                self.assertEqual(s, set(q))
291a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
292a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_iand(self):
293a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.s &= set(self.otherword)
294a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        for c in (self.word + self.otherword):
295a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            if c in self.otherword and c in self.word:
296a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                self.assert_(c in self.s)
297a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            else:
298a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                self.assert_(c not in self.s)
299a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
300a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_difference_update(self):
301a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        retval = self.s.difference_update(self.otherword)
302a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(retval, None)
303a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        for c in (self.word + self.otherword):
304a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            if c in self.word and c not in self.otherword:
305a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                self.assert_(c in self.s)
306a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            else:
307a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                self.assert_(c not in self.s)
308a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(PassThru, self.s.difference_update, check_pass_thru())
309a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, self.s.difference_update, [[]])
310f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger        self.assertRaises(TypeError, self.s.symmetric_difference_update, [[]])
311f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger        for p, q in (('cdc', 'ab'), ('efgfe', 'abc'), ('ccb', 'a'), ('ef', 'abc')):
312f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger            for C in set, frozenset, dict.fromkeys, str, unicode, list, tuple:
313f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger                s = self.thetype('abcba')
314f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger                self.assertEqual(s.difference_update(C(p)), None)
315f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger                self.assertEqual(s, set(q))
316a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
317a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_isub(self):
318a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.s -= set(self.otherword)
319a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        for c in (self.word + self.otherword):
320a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            if c in self.word and c not in self.otherword:
321a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                self.assert_(c in self.s)
322a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            else:
323a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                self.assert_(c not in self.s)
324a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
325a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_symmetric_difference_update(self):
326a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        retval = self.s.symmetric_difference_update(self.otherword)
327a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(retval, None)
328a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        for c in (self.word + self.otherword):
329a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            if (c in self.word) ^ (c in self.otherword):
330a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                self.assert_(c in self.s)
331a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            else:
332a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                self.assert_(c not in self.s)
333a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(PassThru, self.s.symmetric_difference_update, check_pass_thru())
334a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, self.s.symmetric_difference_update, [[]])
335f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger        for p, q in (('cdc', 'abd'), ('efgfe', 'abcefg'), ('ccb', 'a'), ('ef', 'abcef')):
336f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger            for C in set, frozenset, dict.fromkeys, str, unicode, list, tuple:
337f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger                s = self.thetype('abcba')
338f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger                self.assertEqual(s.symmetric_difference_update(C(p)), None)
339f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger                self.assertEqual(s, set(q))
340a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
341a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_ixor(self):
342a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.s ^= set(self.otherword)
343a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        for c in (self.word + self.otherword):
344a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            if (c in self.word) ^ (c in self.otherword):
345a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                self.assert_(c in self.s)
346a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            else:
347a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                self.assert_(c not in self.s)
348a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
34950a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettingerclass SetSubclass(set):
35050a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger    pass
35150a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger
35250a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettingerclass TestSetSubclass(TestSet):
35350a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger    thetype = SetSubclass
354a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
355a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestFrozenSet(TestJointOps):
356a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    thetype = frozenset
357a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
35850a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger    def test_init(self):
35949ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        s = self.thetype(self.word)
36049ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        s.__init__(self.otherword)
36149ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        self.assertEqual(s, set(self.word))
36249ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger
36349ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger    def test_constructor_identity(self):
36449ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        s = self.thetype(range(3))
36549ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        t = self.thetype(s)
36649ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        self.assertEqual(id(s), id(t))
36750a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger
368a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_hash(self):
36949ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        self.assertEqual(hash(self.thetype('abcdeb')),
37049ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger                         hash(self.thetype('ebecda')))
37149ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger
37249ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger    def test_copy(self):
37349ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        dup = self.s.copy()
37449ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        self.assertEqual(id(self.s), id(dup))
375a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
376a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_frozen_as_dictkey(self):
377a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        seq = range(10) + list('abcdefg') + ['apple']
37849ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        key1 = self.thetype(seq)
37949ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        key2 = self.thetype(reversed(seq))
380a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(key1, key2)
381a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertNotEqual(id(key1), id(key2))
382a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        d = {}
383a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        d[key1] = 42
384a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(d[key2], 42)
385a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
386a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_hash_caching(self):
38749ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        f = self.thetype('abcdcda')
388a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(hash(f), hash(f))
389a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
39049ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger    def test_hash_effectiveness(self):
39149ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        n = 13
39249ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        hashvalues = set()
3936e70accaffc61a5af7d78be1b365d1cab804751bRaymond Hettinger        addhashvalue = hashvalues.add
3946e70accaffc61a5af7d78be1b365d1cab804751bRaymond Hettinger        elemmasks = [(i+1, 1<<i) for i in range(n)]
39549ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        for i in xrange(2**n):
3966e70accaffc61a5af7d78be1b365d1cab804751bRaymond Hettinger            addhashvalue(hash(frozenset([e for e, m in elemmasks if m&i])))
3976e70accaffc61a5af7d78be1b365d1cab804751bRaymond Hettinger        self.assertEqual(len(hashvalues), 2**n)
39849ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger
39950a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettingerclass FrozenSetSubclass(frozenset):
40050a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger    pass
40150a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger
40250a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettingerclass TestFrozenSetSubclass(TestFrozenSet):
40350a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger    thetype = FrozenSetSubclass
40450a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger
40549ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger    def test_constructor_identity(self):
40649ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        s = self.thetype(range(3))
40749ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        t = self.thetype(s)
40849ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        self.assertNotEqual(id(s), id(t))
40949ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger
41049ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger    def test_copy(self):
41149ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        dup = self.s.copy()
41249ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        self.assertNotEqual(id(self.s), id(dup))
41349ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger
41449ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger    def test_nested_empty_constructor(self):
41549ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        s = self.thetype()
41649ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        t = self.thetype(s)
41749ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger        self.assertEqual(s, t)
41849ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger
419a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger# Tests taken from test_sets.py =============================================
420a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
421a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerempty_set = set()
422a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
423a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#==============================================================================
424a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
425a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestBasicOps(unittest.TestCase):
426a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
427a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_repr(self):
428a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        if self.repr is not None:
42970a6b49821a3226f55e9716f32d802d06640cb89Walter Dörwald            self.assertEqual(repr(self.set), self.repr)
430a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
431a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_length(self):
432a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(len(self.set), self.length)
433a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
434a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_self_equality(self):
435a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, self.set)
436a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
437a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_equivalent_equality(self):
438a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, self.dup)
439a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
440a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_copy(self):
441a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set.copy(), self.dup)
442a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
443a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_self_union(self):
444a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        result = self.set | self.set
445a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(result, self.dup)
446a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
447a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_empty_union(self):
448a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        result = self.set | empty_set
449a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(result, self.dup)
450a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
451a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_union_empty(self):
452a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        result = empty_set | self.set
453a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(result, self.dup)
454a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
455a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_self_intersection(self):
456a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        result = self.set & self.set
457a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(result, self.dup)
458a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
459a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_empty_intersection(self):
460a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        result = self.set & empty_set
461a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(result, empty_set)
462a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
463a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_intersection_empty(self):
464a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        result = empty_set & self.set
465a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(result, empty_set)
466a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
467a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_self_symmetric_difference(self):
468a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        result = self.set ^ self.set
469a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(result, empty_set)
470a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
471a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def checkempty_symmetric_difference(self):
472a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        result = self.set ^ empty_set
473a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(result, self.set)
474a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
475a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_self_difference(self):
476a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        result = self.set - self.set
477a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(result, empty_set)
478a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
479a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_empty_difference(self):
480a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        result = self.set - empty_set
481a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(result, self.dup)
482a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
483a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_empty_difference_rev(self):
484a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        result = empty_set - self.set
485a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(result, empty_set)
486a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
487a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_iteration(self):
488a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        for v in self.set:
489a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.assert_(v in self.values)
490a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
491a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_pickling(self):
492a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        p = pickle.dumps(self.set)
493a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        copy = pickle.loads(p)
494a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, copy,
495a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                         "%s != %s" % (self.set, copy))
496a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
497a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------
498a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
499a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestBasicOpsEmpty(TestBasicOps):
500a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def setUp(self):
501a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.case   = "empty set"
502a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.values = []
503a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set    = set(self.values)
504a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.dup    = set(self.values)
505a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.length = 0
506a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.repr   = "set([])"
507a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
508a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------
509a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
510a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestBasicOpsSingleton(TestBasicOps):
511a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def setUp(self):
512a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.case   = "unit set (number)"
513a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.values = [3]
514a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set    = set(self.values)
515a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.dup    = set(self.values)
516a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.length = 1
517a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.repr   = "set([3])"
518a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
519a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_in(self):
520a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.failUnless(3 in self.set)
521a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
522a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_not_in(self):
523a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.failUnless(2 not in self.set)
524a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
525a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------
526a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
527a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestBasicOpsTuple(TestBasicOps):
528a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def setUp(self):
529a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.case   = "unit set (tuple)"
530a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.values = [(0, "zero")]
531a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set    = set(self.values)
532a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.dup    = set(self.values)
533a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.length = 1
534a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.repr   = "set([(0, 'zero')])"
535a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
536a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_in(self):
537a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.failUnless((0, "zero") in self.set)
538a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
539a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_not_in(self):
540a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.failUnless(9 not in self.set)
541a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
542a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------
543a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
544a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestBasicOpsTriple(TestBasicOps):
545a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def setUp(self):
546a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.case   = "triple set"
547a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.values = [0, "zero", operator.add]
548a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set    = set(self.values)
549a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.dup    = set(self.values)
550a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.length = 3
551a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.repr   = None
552a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
553a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#==============================================================================
554a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
555a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerdef baditer():
556a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    raise TypeError
557a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    yield True
558a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
559a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerdef gooditer():
560a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    yield True
561a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
562a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestExceptionPropagation(unittest.TestCase):
563a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    """SF 628246:  Set constructor should not trap iterator TypeErrors"""
564a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
565a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_instanceWithException(self):
566a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, set, baditer())
567a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
568a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_instancesWithoutException(self):
569a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        # All of these iterables should load without exception.
570a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        set([1,2,3])
571a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        set((1,2,3))
572a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        set({'one':1, 'two':2, 'three':3})
573a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        set(xrange(3))
574a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        set('abc')
575a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        set(gooditer())
576a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
577a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#==============================================================================
578a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
579a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestSetOfSets(unittest.TestCase):
580a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_constructor(self):
581a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        inner = frozenset([1])
582a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        outer = set([inner])
583a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        element = outer.pop()
584a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(type(element), frozenset)
585a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        outer.add(inner)        # Rebuild set of sets with .add method
586a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        outer.remove(inner)
587a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(outer, set())   # Verify that remove worked
588a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        outer.discard(inner)    # Absence of KeyError indicates working fine
589a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
590a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#==============================================================================
591a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
592a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestBinaryOps(unittest.TestCase):
593a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def setUp(self):
594a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set = set((2, 4, 6))
595a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
596a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_eq(self):              # SF bug 643115
597a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set({2:1,4:3,6:5}))
598a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
599a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_union_subset(self):
600a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        result = self.set | set([2])
601a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(result, set((2, 4, 6)))
602a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
603a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_union_superset(self):
604a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        result = self.set | set([2, 4, 6, 8])
605a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(result, set([2, 4, 6, 8]))
606a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
607a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_union_overlap(self):
608a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        result = self.set | set([3, 4, 5])
609a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(result, set([2, 3, 4, 5, 6]))
610a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
611a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_union_non_overlap(self):
612a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        result = self.set | set([8])
613a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(result, set([2, 4, 6, 8]))
614a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
615a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_intersection_subset(self):
616a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        result = self.set & set((2, 4))
617a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(result, set((2, 4)))
618a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
619a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_intersection_superset(self):
620a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        result = self.set & set([2, 4, 6, 8])
621a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(result, set([2, 4, 6]))
622a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
623a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_intersection_overlap(self):
624a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        result = self.set & set([3, 4, 5])
625a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(result, set([4]))
626a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
627a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_intersection_non_overlap(self):
628a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        result = self.set & set([8])
629a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(result, empty_set)
630a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
631a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_sym_difference_subset(self):
632a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        result = self.set ^ set((2, 4))
633a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(result, set([6]))
634a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
635a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_sym_difference_superset(self):
636a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        result = self.set ^ set((2, 4, 6, 8))
637a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(result, set([8]))
638a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
639a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_sym_difference_overlap(self):
640a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        result = self.set ^ set((3, 4, 5))
641a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(result, set([2, 3, 5, 6]))
642a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
643a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_sym_difference_non_overlap(self):
644a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        result = self.set ^ set([8])
645a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(result, set([2, 4, 6, 8]))
646a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
647a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_cmp(self):
648a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        a, b = set('a'), set('b')
649a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, cmp, a, b)
650a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
651a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        # You can view this as a buglet:  cmp(a, a) does not raise TypeError,
652a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        # because __eq__ is tried before __cmp__, and a.__eq__(a) returns True,
653a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        # which Python thinks is good enough to synthesize a cmp() result
654a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        # without calling __cmp__.
655a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(cmp(a, a), 0)
656a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
657a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, cmp, a, 12)
658a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, cmp, "abc", a)
659a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
660a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#==============================================================================
661a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
662a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestUpdateOps(unittest.TestCase):
663a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def setUp(self):
664a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set = set((2, 4, 6))
665a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
666a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_union_subset(self):
667a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set |= set([2])
668a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set((2, 4, 6)))
669a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
670a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_union_superset(self):
671a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set |= set([2, 4, 6, 8])
672a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set([2, 4, 6, 8]))
673a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
674a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_union_overlap(self):
675a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set |= set([3, 4, 5])
676a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set([2, 3, 4, 5, 6]))
677a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
678a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_union_non_overlap(self):
679a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set |= set([8])
680a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set([2, 4, 6, 8]))
681a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
682a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_union_method_call(self):
683f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger        self.set.update(set([3, 4, 5]))
684a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set([2, 3, 4, 5, 6]))
685a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
686a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_intersection_subset(self):
687a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set &= set((2, 4))
688a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set((2, 4)))
689a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
690a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_intersection_superset(self):
691a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set &= set([2, 4, 6, 8])
692a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set([2, 4, 6]))
693a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
694a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_intersection_overlap(self):
695a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set &= set([3, 4, 5])
696a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set([4]))
697a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
698a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_intersection_non_overlap(self):
699a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set &= set([8])
700a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, empty_set)
701a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
702a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_intersection_method_call(self):
703a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set.intersection_update(set([3, 4, 5]))
704a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set([4]))
705a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
706a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_sym_difference_subset(self):
707a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set ^= set((2, 4))
708a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set([6]))
709a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
710a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_sym_difference_superset(self):
711a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set ^= set((2, 4, 6, 8))
712a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set([8]))
713a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
714a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_sym_difference_overlap(self):
715a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set ^= set((3, 4, 5))
716a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set([2, 3, 5, 6]))
717a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
718a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_sym_difference_non_overlap(self):
719a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set ^= set([8])
720a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set([2, 4, 6, 8]))
721a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
722a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_sym_difference_method_call(self):
723a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set.symmetric_difference_update(set([3, 4, 5]))
724a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set([2, 3, 5, 6]))
725a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
726a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_difference_subset(self):
727a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set -= set((2, 4))
728a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set([6]))
729a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
730a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_difference_superset(self):
731a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set -= set((2, 4, 6, 8))
732a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set([]))
733a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
734a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_difference_overlap(self):
735a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set -= set((3, 4, 5))
736a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set([2, 6]))
737a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
738a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_difference_non_overlap(self):
739a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set -= set([8])
740a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set([2, 4, 6]))
741a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
742a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_difference_method_call(self):
743a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set.difference_update(set([3, 4, 5]))
744a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set([2, 6]))
745a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
746a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#==============================================================================
747a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
748a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestMutate(unittest.TestCase):
749a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def setUp(self):
750a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.values = ["a", "b", "c"]
751a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set = set(self.values)
752a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
753a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_add_present(self):
754a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set.add("c")
755a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set("abc"))
756a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
757a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_add_absent(self):
758a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set.add("d")
759a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set("abcd"))
760a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
761a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_add_until_full(self):
762a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        tmp = set()
763a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        expected_len = 0
764a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        for v in self.values:
765a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            tmp.add(v)
766a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            expected_len += 1
767a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.assertEqual(len(tmp), expected_len)
768a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(tmp, self.set)
769a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
770a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_remove_present(self):
771a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set.remove("b")
772a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set("ac"))
773a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
774a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_remove_absent(self):
775a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        try:
776a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.set.remove("d")
777a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.fail("Removing missing element should have raised LookupError")
778a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        except LookupError:
779a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            pass
780a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
781a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_remove_until_empty(self):
782a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        expected_len = len(self.set)
783a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        for v in self.values:
784a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.set.remove(v)
785a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            expected_len -= 1
786a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.assertEqual(len(self.set), expected_len)
787a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
788a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_discard_present(self):
789a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set.discard("c")
790a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set("ab"))
791a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
792a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_discard_absent(self):
793a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set.discard("d")
794a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set("abc"))
795a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
796a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_clear(self):
797a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set.clear()
798a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(len(self.set), 0)
799a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
800a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_pop(self):
801a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        popped = {}
802a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        while self.set:
803a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            popped[self.set.pop()] = None
804a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(len(popped), len(self.values))
805a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        for v in self.values:
806a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.failUnless(v in popped)
807a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
808a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_update_empty_tuple(self):
809f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger        self.set.update(())
810a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set(self.values))
811a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
812a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_update_unit_tuple_overlap(self):
813f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger        self.set.update(("a",))
814a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set(self.values))
815a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
816a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_update_unit_tuple_non_overlap(self):
817f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger        self.set.update(("a", "z"))
818a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set, set(self.values + ["z"]))
819a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
820a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#==============================================================================
821a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
822a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestSubsets(unittest.TestCase):
823a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
824a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    case2method = {"<=": "issubset",
825a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                   ">=": "issuperset",
826a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                  }
827a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
828a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    reverse = {"==": "==",
829a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger               "!=": "!=",
830a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger               "<":  ">",
831a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger               ">":  "<",
832a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger               "<=": ">=",
833a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger               ">=": "<=",
834a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger              }
835a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
836a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_issubset(self):
837a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        x = self.left
838a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        y = self.right
839a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        for case in "!=", "==", "<", "<=", ">", ">=":
840a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            expected = case in self.cases
841a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            # Test the binary infix spelling.
842a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            result = eval("x" + case + "y", locals())
843a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.assertEqual(result, expected)
844a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            # Test the "friendly" method-name spelling, if one exists.
845a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            if case in TestSubsets.case2method:
846a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                method = getattr(x, TestSubsets.case2method[case])
847a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                result = method(y)
848a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                self.assertEqual(result, expected)
849a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
850a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            # Now do the same for the operands reversed.
851a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            rcase = TestSubsets.reverse[case]
852a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            result = eval("y" + rcase + "x", locals())
853a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.assertEqual(result, expected)
854a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            if rcase in TestSubsets.case2method:
855a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                method = getattr(y, TestSubsets.case2method[rcase])
856a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                result = method(x)
857a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                self.assertEqual(result, expected)
858a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------
859a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
860a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestSubsetEqualEmpty(TestSubsets):
861a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    left  = set()
862a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    right = set()
863a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    name  = "both empty"
864a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    cases = "==", "<=", ">="
865a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
866a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------
867a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
868a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestSubsetEqualNonEmpty(TestSubsets):
869a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    left  = set([1, 2])
870a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    right = set([1, 2])
871a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    name  = "equal pair"
872a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    cases = "==", "<=", ">="
873a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
874a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------
875a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
876a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestSubsetEmptyNonEmpty(TestSubsets):
877a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    left  = set()
878a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    right = set([1, 2])
879a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    name  = "one empty, one non-empty"
880a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    cases = "!=", "<", "<="
881a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
882a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------
883a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
884a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestSubsetPartial(TestSubsets):
885a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    left  = set([1])
886a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    right = set([1, 2])
887a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    name  = "one a non-empty proper subset of other"
888a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    cases = "!=", "<", "<="
889a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
890a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------
891a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
892a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestSubsetNonOverlap(TestSubsets):
893a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    left  = set([1])
894a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    right = set([2])
895a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    name  = "neither empty, neither contains"
896a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    cases = "!="
897a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
898a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#==============================================================================
899a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
900a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestOnlySetsInBinaryOps(unittest.TestCase):
901a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
902a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_eq_ne(self):
903a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        # Unlike the others, this is testing that == and != *are* allowed.
904a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.other == self.set, False)
905a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set == self.other, False)
906a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.other != self.set, True)
907a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(self.set != self.other, True)
908a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
909a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_ge_gt_le_lt(self):
910a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, lambda: self.set < self.other)
911a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, lambda: self.set <= self.other)
912a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, lambda: self.set > self.other)
913a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, lambda: self.set >= self.other)
914a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
915a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, lambda: self.other < self.set)
916a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, lambda: self.other <= self.set)
917a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, lambda: self.other > self.set)
918a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, lambda: self.other >= self.set)
919a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
920f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger    def test_update_operator(self):
921a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        try:
922a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.set |= self.other
923a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        except TypeError:
924a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            pass
925a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        else:
926a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.fail("expected TypeError")
927a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
928f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger    def test_update(self):
929a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        if self.otherIsIterable:
930f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger            self.set.update(self.other)
931a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        else:
932f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger            self.assertRaises(TypeError, self.set.update, self.other)
933a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
934a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_union(self):
935a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, lambda: self.set | self.other)
936a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, lambda: self.other | self.set)
937a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        if self.otherIsIterable:
938a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.set.union(self.other)
939a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        else:
940a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.assertRaises(TypeError, self.set.union, self.other)
941a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
942a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_intersection_update_operator(self):
943a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        try:
944a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.set &= self.other
945a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        except TypeError:
946a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            pass
947a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        else:
948a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.fail("expected TypeError")
949a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
950a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_intersection_update(self):
951a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        if self.otherIsIterable:
952a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.set.intersection_update(self.other)
953a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        else:
954a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.assertRaises(TypeError,
955a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                              self.set.intersection_update,
956a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                              self.other)
957a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
958a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_intersection(self):
959a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, lambda: self.set & self.other)
960a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, lambda: self.other & self.set)
961a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        if self.otherIsIterable:
962a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.set.intersection(self.other)
963a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        else:
964a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.assertRaises(TypeError, self.set.intersection, self.other)
965a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
966a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_sym_difference_update_operator(self):
967a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        try:
968a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.set ^= self.other
969a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        except TypeError:
970a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            pass
971a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        else:
972a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.fail("expected TypeError")
973a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
974a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_sym_difference_update(self):
975a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        if self.otherIsIterable:
976a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.set.symmetric_difference_update(self.other)
977a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        else:
978a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.assertRaises(TypeError,
979a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                              self.set.symmetric_difference_update,
980a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                              self.other)
981a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
982a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_sym_difference(self):
983a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, lambda: self.set ^ self.other)
984a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, lambda: self.other ^ self.set)
985a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        if self.otherIsIterable:
986a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.set.symmetric_difference(self.other)
987a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        else:
988a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.assertRaises(TypeError, self.set.symmetric_difference, self.other)
989a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
990a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_difference_update_operator(self):
991a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        try:
992a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.set -= self.other
993a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        except TypeError:
994a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            pass
995a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        else:
996a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.fail("expected TypeError")
997a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
998a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_difference_update(self):
999a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        if self.otherIsIterable:
1000a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.set.difference_update(self.other)
1001a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        else:
1002a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.assertRaises(TypeError,
1003a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                              self.set.difference_update,
1004a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                              self.other)
1005a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1006a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_difference(self):
1007a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, lambda: self.set - self.other)
1008a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertRaises(TypeError, lambda: self.other - self.set)
1009a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        if self.otherIsIterable:
1010a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.set.difference(self.other)
1011a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        else:
1012a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.assertRaises(TypeError, self.set.difference, self.other)
1013a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1014a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------
1015a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1016a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestOnlySetsNumeric(TestOnlySetsInBinaryOps):
1017a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def setUp(self):
1018a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set   = set((1, 2, 3))
1019a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.other = 19
1020a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.otherIsIterable = False
1021a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1022a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------
1023a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1024a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestOnlySetsDict(TestOnlySetsInBinaryOps):
1025a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def setUp(self):
1026a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set   = set((1, 2, 3))
1027a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.other = {1:2, 3:4}
1028a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.otherIsIterable = True
1029a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1030a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------
1031a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1032a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestOnlySetsOperator(TestOnlySetsInBinaryOps):
1033a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def setUp(self):
1034a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set   = set((1, 2, 3))
1035a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.other = operator.add
1036a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.otherIsIterable = False
1037a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1038a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------
1039a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1040a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestOnlySetsTuple(TestOnlySetsInBinaryOps):
1041a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def setUp(self):
1042a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set   = set((1, 2, 3))
1043a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.other = (2, 4, 6)
1044a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.otherIsIterable = True
1045a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1046a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------
1047a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1048a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestOnlySetsString(TestOnlySetsInBinaryOps):
1049a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def setUp(self):
1050a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set   = set((1, 2, 3))
1051a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.other = 'abc'
1052a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.otherIsIterable = True
1053a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1054a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------
1055a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1056a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestOnlySetsGenerator(TestOnlySetsInBinaryOps):
1057a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def setUp(self):
1058a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        def gen():
1059a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            for i in xrange(0, 10, 2):
1060a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                yield i
1061a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set   = set((1, 2, 3))
1062a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.other = gen()
1063a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.otherIsIterable = True
1064a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1065a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#==============================================================================
1066a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1067a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestCopying(unittest.TestCase):
1068a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1069a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_copy(self):
1070a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        dup = self.set.copy()
1071a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        dup_list = list(dup); dup_list.sort()
1072a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        set_list = list(self.set); set_list.sort()
1073a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(len(dup_list), len(set_list))
1074a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        for i in range(len(dup_list)):
1075a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.failUnless(dup_list[i] is set_list[i])
1076a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1077a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_deep_copy(self):
1078a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        dup = copy.deepcopy(self.set)
107970a6b49821a3226f55e9716f32d802d06640cb89Walter Dörwald        ##print type(dup), repr(dup)
1080a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        dup_list = list(dup); dup_list.sort()
1081a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        set_list = list(self.set); set_list.sort()
1082a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(len(dup_list), len(set_list))
1083a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        for i in range(len(dup_list)):
1084a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.assertEqual(dup_list[i], set_list[i])
1085a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1086a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------
1087a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1088a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestCopyingEmpty(TestCopying):
1089a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def setUp(self):
1090a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set = set()
1091a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1092a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------
1093a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1094a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestCopyingSingleton(TestCopying):
1095a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def setUp(self):
1096a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set = set(["hello"])
1097a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1098a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------
1099a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1100a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestCopyingTriple(TestCopying):
1101a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def setUp(self):
1102a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set = set(["zero", 0, None])
1103a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1104a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------
1105a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1106a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestCopyingTuple(TestCopying):
1107a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def setUp(self):
1108a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set = set([(1, 2)])
1109a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1110a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------
1111a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1112a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestCopyingNested(TestCopying):
1113a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def setUp(self):
1114a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.set = set([((1, 2), (3, 4))])
1115a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1116a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#==============================================================================
1117a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1118a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestIdentities(unittest.TestCase):
1119a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def setUp(self):
1120a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.a = set('abracadabra')
1121a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.b = set('alacazam')
1122a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1123a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_binopsVsSubsets(self):
1124a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        a, b = self.a, self.b
1125a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assert_(a - b < a)
1126a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assert_(b - a < b)
1127a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assert_(a & b < a)
1128a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assert_(a & b < b)
1129a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assert_(a | b > a)
1130a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assert_(a | b > b)
1131a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assert_(a ^ b < a | b)
1132a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1133a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_commutativity(self):
1134a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        a, b = self.a, self.b
1135a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(a&b, b&a)
1136a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(a|b, b|a)
1137a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(a^b, b^a)
1138a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        if a != b:
1139a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.assertNotEqual(a-b, b-a)
1140a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1141a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_summations(self):
1142a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        # check that sums of parts equal the whole
1143a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        a, b = self.a, self.b
1144a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual((a-b)|(a&b)|(b-a), a|b)
1145a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual((a&b)|(a^b), a|b)
1146a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual(a|(b-a), a|b)
1147a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual((a-b)|b, a|b)
1148a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual((a-b)|(a&b), a)
1149a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual((b-a)|(a&b), b)
1150a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual((a-b)|(b-a), a^b)
1151a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1152a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_exclusion(self):
1153a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        # check that inverse operations show non-overlap
1154a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        a, b, zero = self.a, self.b, set()
1155a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual((a-b)&b, zero)
1156a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual((b-a)&a, zero)
1157a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.assertEqual((a&b)&(a^b), zero)
1158a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1159a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger# Tests derived from test_itertools.py =======================================
1160a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1161a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerdef R(seqn):
1162a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    'Regular generator'
1163a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    for i in seqn:
1164a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        yield i
1165a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1166a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass G:
1167a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    'Sequence using __getitem__'
1168a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def __init__(self, seqn):
1169a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.seqn = seqn
1170a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def __getitem__(self, i):
1171a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        return self.seqn[i]
1172a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1173a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass I:
1174a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    'Sequence using iterator protocol'
1175a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def __init__(self, seqn):
1176a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.seqn = seqn
1177a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.i = 0
1178a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def __iter__(self):
1179a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        return self
1180a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def next(self):
1181a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        if self.i >= len(self.seqn): raise StopIteration
1182a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        v = self.seqn[self.i]
1183a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.i += 1
1184a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        return v
1185a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1186a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass Ig:
1187a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    'Sequence using iterator protocol defined with a generator'
1188a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def __init__(self, seqn):
1189a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.seqn = seqn
1190a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.i = 0
1191a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def __iter__(self):
1192a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        for val in self.seqn:
1193a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            yield val
1194a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1195a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass X:
1196a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    'Missing __getitem__ and __iter__'
1197a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def __init__(self, seqn):
1198a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.seqn = seqn
1199a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.i = 0
1200a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def next(self):
1201a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        if self.i >= len(self.seqn): raise StopIteration
1202a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        v = self.seqn[self.i]
1203a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.i += 1
1204a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        return v
1205a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1206a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass N:
1207a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    'Iterator missing next()'
1208a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def __init__(self, seqn):
1209a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.seqn = seqn
1210a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.i = 0
1211a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def __iter__(self):
1212a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        return self
1213a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1214a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass E:
1215a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    'Test propagation of exceptions'
1216a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def __init__(self, seqn):
1217a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.seqn = seqn
1218a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        self.i = 0
1219a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def __iter__(self):
1220a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        return self
1221a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def next(self):
1222a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        3/0
1223a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1224a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass S:
1225a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    'Test immediate stop'
1226a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def __init__(self, seqn):
1227a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        pass
1228a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def __iter__(self):
1229a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        return self
1230a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def next(self):
1231a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        raise StopIteration
1232a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1233a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerfrom itertools import chain, imap
1234a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerdef L(seqn):
1235a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    'Test multiple tiers of iterators'
1236a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    return chain(imap(lambda x:x, R(Ig(G(seqn)))))
1237a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1238a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestVariousIteratorArgs(unittest.TestCase):
1239a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1240a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_constructor(self):
1241a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        for cons in (set, frozenset):
1242a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            for s in ("123", "", range(1000), ('do', 1.2), xrange(2000,2200,5)):
1243a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                for g in (G, I, Ig, S, L, R):
124464958a15d7c03efdc3d2eddf247666e18d1fd910Raymond Hettinger                    self.assertEqual(sorted(cons(g(s))), sorted(g(s)))
1245a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                self.assertRaises(TypeError, cons , X(s))
1246a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                self.assertRaises(TypeError, cons , N(s))
1247a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                self.assertRaises(ZeroDivisionError, cons , E(s))
1248a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1249a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_inline_methods(self):
1250a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        s = set('november')
1251a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        for data in ("123", "", range(1000), ('do', 1.2), xrange(2000,2200,5), 'december'):
1252a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            for meth in (s.union, s.intersection, s.difference, s.symmetric_difference):
1253a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                for g in (G, I, Ig, L, R):
1254a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                    expected = meth(data)
1255a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                    actual = meth(G(data))
125664958a15d7c03efdc3d2eddf247666e18d1fd910Raymond Hettinger                    self.assertEqual(sorted(actual), sorted(expected))
1257a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                self.assertRaises(TypeError, meth, X(s))
1258a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                self.assertRaises(TypeError, meth, N(s))
1259a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                self.assertRaises(ZeroDivisionError, meth, E(s))
1260a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1261a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    def test_inplace_methods(self):
1262a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        for data in ("123", "", range(1000), ('do', 1.2), xrange(2000,2200,5), 'december'):
1263f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger            for methname in ('update', 'intersection_update',
1264a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                             'difference_update', 'symmetric_difference_update'):
1265a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                for g in (G, I, Ig, S, L, R):
1266a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                    s = set('january')
1267a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                    t = s.copy()
1268a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                    getattr(s, methname)(list(g(data)))
1269a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                    getattr(t, methname)(g(data))
127064958a15d7c03efdc3d2eddf247666e18d1fd910Raymond Hettinger                    self.assertEqual(sorted(s), sorted(t))
1271a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1272a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                self.assertRaises(TypeError, getattr(set('january'), methname), X(data))
1273a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                self.assertRaises(TypeError, getattr(set('january'), methname), N(data))
1274a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger                self.assertRaises(ZeroDivisionError, getattr(set('january'), methname), E(data))
1275a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1276a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#==============================================================================
1277a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1278a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerdef test_main(verbose=None):
1279a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    import sys
1280a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    from test import test_sets
1281a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    test_classes = (
1282a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestSet,
128350a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger        TestSetSubclass,
1284a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestFrozenSet,
128550a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger        TestFrozenSetSubclass,
1286a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestSetOfSets,
1287a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestExceptionPropagation,
1288a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestBasicOpsEmpty,
1289a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestBasicOpsSingleton,
1290a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestBasicOpsTuple,
1291a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestBasicOpsTriple,
1292a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestBinaryOps,
1293a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestUpdateOps,
1294a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestMutate,
1295a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestSubsetEqualEmpty,
1296a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestSubsetEqualNonEmpty,
1297a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestSubsetEmptyNonEmpty,
1298a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestSubsetPartial,
1299a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestSubsetNonOverlap,
1300a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestOnlySetsNumeric,
1301a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestOnlySetsDict,
1302a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestOnlySetsOperator,
1303a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestOnlySetsTuple,
1304a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestOnlySetsString,
1305a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestOnlySetsGenerator,
1306a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestCopyingEmpty,
1307a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestCopyingSingleton,
1308a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestCopyingTriple,
1309a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestCopyingTuple,
1310a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestCopyingNested,
1311a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestIdentities,
1312a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        TestVariousIteratorArgs,
1313a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        )
1314a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1315a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    test_support.run_unittest(*test_classes)
1316a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1317a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    # verify reference counting
1318a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    if verbose and hasattr(sys, "gettotalrefcount"):
1319a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        import gc
1320a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        counts = [None] * 5
1321a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        for i in xrange(len(counts)):
1322a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            test_support.run_unittest(*test_classes)
1323a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            gc.collect()
1324a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            counts[i] = sys.gettotalrefcount()
1325a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger        print counts
1326a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger
1327a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerif __name__ == "__main__":
1328a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger    test_main(verbose=True)
1329