blob: 7b6bc31b0369adfb67392d1e0cca24b8fa2ebabe [file] [log] [blame]
Guido van Rossumd6cf3af2002-08-19 16:19:15 +00001#!/usr/bin/env python
2
3import unittest, operator, copy
4from sets import Set, ImmutableSet
5from test import test_support
6
7empty_set = Set()
8
9#==============================================================================
10
11class TestBasicOps(unittest.TestCase):
12
13 def test_repr(self):
14 if self.repr is not None:
Tim Petersa7777992002-08-25 17:38:49 +000015 self.assertEqual(`self.set`, self.repr)
Guido van Rossumd6cf3af2002-08-19 16:19:15 +000016
17 def test_length(self):
Tim Petersa7777992002-08-25 17:38:49 +000018 self.assertEqual(len(self.set), self.length)
Guido van Rossumd6cf3af2002-08-19 16:19:15 +000019
20 def test_self_equality(self):
Tim Petersa7777992002-08-25 17:38:49 +000021 self.assertEqual(self.set, self.set)
Guido van Rossumd6cf3af2002-08-19 16:19:15 +000022
23 def test_equivalent_equality(self):
Tim Petersa7777992002-08-25 17:38:49 +000024 self.assertEqual(self.set, self.dup)
Guido van Rossumd6cf3af2002-08-19 16:19:15 +000025
26 def test_copy(self):
Tim Petersa7777992002-08-25 17:38:49 +000027 self.assertEqual(self.set.copy(), self.dup)
Guido van Rossumd6cf3af2002-08-19 16:19:15 +000028
29 def test_self_union(self):
30 result = self.set | self.set
Tim Petersa7777992002-08-25 17:38:49 +000031 self.assertEqual(result, self.dup)
Guido van Rossumd6cf3af2002-08-19 16:19:15 +000032
33 def test_empty_union(self):
34 result = self.set | empty_set
Tim Petersa7777992002-08-25 17:38:49 +000035 self.assertEqual(result, self.dup)
Guido van Rossumd6cf3af2002-08-19 16:19:15 +000036
37 def test_union_empty(self):
38 result = empty_set | self.set
Tim Petersa7777992002-08-25 17:38:49 +000039 self.assertEqual(result, self.dup)
Guido van Rossumd6cf3af2002-08-19 16:19:15 +000040
41 def test_self_intersection(self):
42 result = self.set & self.set
Tim Petersa7777992002-08-25 17:38:49 +000043 self.assertEqual(result, self.dup)
Guido van Rossumd6cf3af2002-08-19 16:19:15 +000044
45 def test_empty_intersection(self):
46 result = self.set & empty_set
Tim Petersa7777992002-08-25 17:38:49 +000047 self.assertEqual(result, empty_set)
Guido van Rossumd6cf3af2002-08-19 16:19:15 +000048
49 def test_intersection_empty(self):
50 result = empty_set & self.set
Tim Petersa7777992002-08-25 17:38:49 +000051 self.assertEqual(result, empty_set)
Guido van Rossumd6cf3af2002-08-19 16:19:15 +000052
53 def test_self_symmetric_difference(self):
54 result = self.set ^ self.set
Tim Petersa7777992002-08-25 17:38:49 +000055 self.assertEqual(result, empty_set)
Guido van Rossumd6cf3af2002-08-19 16:19:15 +000056
57 def checkempty_symmetric_difference(self):
58 result = self.set ^ empty_set
Tim Petersa7777992002-08-25 17:38:49 +000059 self.assertEqual(result, self.set)
Guido van Rossumd6cf3af2002-08-19 16:19:15 +000060
61 def test_self_difference(self):
62 result = self.set - self.set
Tim Petersa7777992002-08-25 17:38:49 +000063 self.assertEqual(result, empty_set)
Guido van Rossumd6cf3af2002-08-19 16:19:15 +000064
65 def test_empty_difference(self):
66 result = self.set - empty_set
Tim Petersa7777992002-08-25 17:38:49 +000067 self.assertEqual(result, self.dup)
Guido van Rossumd6cf3af2002-08-19 16:19:15 +000068
69 def test_empty_difference_rev(self):
70 result = empty_set - self.set
Tim Petersa7777992002-08-25 17:38:49 +000071 self.assertEqual(result, empty_set)
Guido van Rossumd6cf3af2002-08-19 16:19:15 +000072
73 def test_iteration(self):
74 for v in self.set:
Tim Peters4127e912002-08-25 18:02:29 +000075 self.assert_(v in self.values)
Guido van Rossumd6cf3af2002-08-19 16:19:15 +000076
77#------------------------------------------------------------------------------
78
79class TestBasicOpsEmpty(TestBasicOps):
80 def setUp(self):
81 self.case = "empty set"
82 self.values = []
83 self.set = Set(self.values)
84 self.dup = Set(self.values)
85 self.length = 0
86 self.repr = "Set([])"
87
88#------------------------------------------------------------------------------
89
90class TestBasicOpsSingleton(TestBasicOps):
91 def setUp(self):
92 self.case = "unit set (number)"
93 self.values = [3]
94 self.set = Set(self.values)
95 self.dup = Set(self.values)
96 self.length = 1
97 self.repr = "Set([3])"
98
99 def test_in(self):
Tim Peters4127e912002-08-25 18:02:29 +0000100 self.failUnless(3 in self.set)
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000101
102 def test_not_in(self):
Tim Peters4127e912002-08-25 18:02:29 +0000103 self.failUnless(2 not in self.set)
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000104
105#------------------------------------------------------------------------------
106
107class TestBasicOpsTuple(TestBasicOps):
108 def setUp(self):
109 self.case = "unit set (tuple)"
110 self.values = [(0, "zero")]
111 self.set = Set(self.values)
112 self.dup = Set(self.values)
113 self.length = 1
114 self.repr = "Set([(0, 'zero')])"
115
116 def test_in(self):
Tim Peters4127e912002-08-25 18:02:29 +0000117 self.failUnless((0, "zero") in self.set)
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000118
119 def test_not_in(self):
Tim Peters4127e912002-08-25 18:02:29 +0000120 self.failUnless(9 not in self.set)
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000121
122#------------------------------------------------------------------------------
123
124class TestBasicOpsTriple(TestBasicOps):
125 def setUp(self):
126 self.case = "triple set"
127 self.values = [0, "zero", operator.add]
128 self.set = Set(self.values)
129 self.dup = Set(self.values)
130 self.length = 3
131 self.repr = None
132
133#==============================================================================
134
Raymond Hettingerc3e61e52002-08-21 06:38:44 +0000135class TestSetOfSets(unittest.TestCase):
136 def test_constructor(self):
137 inner = Set([1])
138 outer = Set([inner])
139 element = outer.pop()
Tim Peters4127e912002-08-25 18:02:29 +0000140 self.assertEqual(type(element), ImmutableSet)
Raymond Hettinger045e51a2002-08-24 02:56:01 +0000141 outer.add(inner) # Rebuild set of sets with .add method
142 outer.remove(inner)
Tim Peters4127e912002-08-25 18:02:29 +0000143 self.assertEqual(outer, Set()) # Verify that remove worked
Raymond Hettinger045e51a2002-08-24 02:56:01 +0000144 outer.discard(inner) # Absence of KeyError indicates working fine
Raymond Hettingerc3e61e52002-08-21 06:38:44 +0000145
146#==============================================================================
147
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000148class TestBinaryOps(unittest.TestCase):
149 def setUp(self):
150 self.set = Set((2, 4, 6))
151
152 def test_union_subset(self):
153 result = self.set | Set([2])
Tim Petersa7777992002-08-25 17:38:49 +0000154 self.assertEqual(result, Set((2, 4, 6)))
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000155
156 def test_union_superset(self):
157 result = self.set | Set([2, 4, 6, 8])
Tim Petersa7777992002-08-25 17:38:49 +0000158 self.assertEqual(result, Set([2, 4, 6, 8]))
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000159
160 def test_union_overlap(self):
161 result = self.set | Set([3, 4, 5])
Tim Petersa7777992002-08-25 17:38:49 +0000162 self.assertEqual(result, Set([2, 3, 4, 5, 6]))
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000163
164 def test_union_non_overlap(self):
165 result = self.set | Set([8])
Tim Petersa7777992002-08-25 17:38:49 +0000166 self.assertEqual(result, Set([2, 4, 6, 8]))
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000167
168 def test_intersection_subset(self):
169 result = self.set & Set((2, 4))
Tim Petersa7777992002-08-25 17:38:49 +0000170 self.assertEqual(result, Set((2, 4)))
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000171
172 def test_intersection_superset(self):
173 result = self.set & Set([2, 4, 6, 8])
Tim Petersa7777992002-08-25 17:38:49 +0000174 self.assertEqual(result, Set([2, 4, 6]))
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000175
176 def test_intersection_overlap(self):
177 result = self.set & Set([3, 4, 5])
Tim Petersa7777992002-08-25 17:38:49 +0000178 self.assertEqual(result, Set([4]))
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000179
180 def test_intersection_non_overlap(self):
181 result = self.set & Set([8])
Tim Petersa7777992002-08-25 17:38:49 +0000182 self.assertEqual(result, empty_set)
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000183
184 def test_sym_difference_subset(self):
185 result = self.set ^ Set((2, 4))
Tim Petersa7777992002-08-25 17:38:49 +0000186 self.assertEqual(result, Set([6]))
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000187
188 def test_sym_difference_superset(self):
189 result = self.set ^ Set((2, 4, 6, 8))
Tim Petersa7777992002-08-25 17:38:49 +0000190 self.assertEqual(result, Set([8]))
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000191
192 def test_sym_difference_overlap(self):
193 result = self.set ^ Set((3, 4, 5))
Tim Petersa7777992002-08-25 17:38:49 +0000194 self.assertEqual(result, Set([2, 3, 5, 6]))
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000195
196 def test_sym_difference_non_overlap(self):
197 result = self.set ^ Set([8])
Tim Petersa7777992002-08-25 17:38:49 +0000198 self.assertEqual(result, Set([2, 4, 6, 8]))
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000199
200#==============================================================================
201
202class TestUpdateOps(unittest.TestCase):
203 def setUp(self):
204 self.set = Set((2, 4, 6))
205
206 def test_union_subset(self):
207 self.set |= Set([2])
Tim Petersa7777992002-08-25 17:38:49 +0000208 self.assertEqual(self.set, Set((2, 4, 6)))
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000209
210 def test_union_superset(self):
211 self.set |= Set([2, 4, 6, 8])
Tim Petersa7777992002-08-25 17:38:49 +0000212 self.assertEqual(self.set, Set([2, 4, 6, 8]))
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000213
214 def test_union_overlap(self):
215 self.set |= Set([3, 4, 5])
Tim Petersa7777992002-08-25 17:38:49 +0000216 self.assertEqual(self.set, Set([2, 3, 4, 5, 6]))
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000217
218 def test_union_non_overlap(self):
219 self.set |= Set([8])
Tim Petersa7777992002-08-25 17:38:49 +0000220 self.assertEqual(self.set, Set([2, 4, 6, 8]))
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000221
Raymond Hettinger1b9f5d42002-08-24 06:19:02 +0000222 def test_union_method_call(self):
223 self.set.union_update(Set([3, 4, 5]))
Tim Petersa7777992002-08-25 17:38:49 +0000224 self.assertEqual(self.set, Set([2, 3, 4, 5, 6]))
Raymond Hettinger1b9f5d42002-08-24 06:19:02 +0000225
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000226 def test_intersection_subset(self):
227 self.set &= Set((2, 4))
Tim Petersa7777992002-08-25 17:38:49 +0000228 self.assertEqual(self.set, Set((2, 4)))
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000229
230 def test_intersection_superset(self):
231 self.set &= Set([2, 4, 6, 8])
Tim Petersa7777992002-08-25 17:38:49 +0000232 self.assertEqual(self.set, Set([2, 4, 6]))
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000233
234 def test_intersection_overlap(self):
235 self.set &= Set([3, 4, 5])
Tim Petersa7777992002-08-25 17:38:49 +0000236 self.assertEqual(self.set, Set([4]))
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000237
238 def test_intersection_non_overlap(self):
239 self.set &= Set([8])
Tim Petersa7777992002-08-25 17:38:49 +0000240 self.assertEqual(self.set, empty_set)
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000241
Raymond Hettinger1b9f5d42002-08-24 06:19:02 +0000242 def test_intersection_method_call(self):
243 self.set.intersection_update(Set([3, 4, 5]))
Tim Petersa7777992002-08-25 17:38:49 +0000244 self.assertEqual(self.set, Set([4]))
Raymond Hettinger1b9f5d42002-08-24 06:19:02 +0000245
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000246 def test_sym_difference_subset(self):
247 self.set ^= Set((2, 4))
Tim Petersa7777992002-08-25 17:38:49 +0000248 self.assertEqual(self.set, Set([6]))
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000249
250 def test_sym_difference_superset(self):
251 self.set ^= Set((2, 4, 6, 8))
Tim Petersa7777992002-08-25 17:38:49 +0000252 self.assertEqual(self.set, Set([8]))
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000253
254 def test_sym_difference_overlap(self):
255 self.set ^= Set((3, 4, 5))
Tim Petersa7777992002-08-25 17:38:49 +0000256 self.assertEqual(self.set, Set([2, 3, 5, 6]))
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000257
258 def test_sym_difference_non_overlap(self):
259 self.set ^= Set([8])
Tim Petersa7777992002-08-25 17:38:49 +0000260 self.assertEqual(self.set, Set([2, 4, 6, 8]))
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000261
Raymond Hettinger1b9f5d42002-08-24 06:19:02 +0000262 def test_sym_difference_method_call(self):
263 self.set.symmetric_difference_update(Set([3, 4, 5]))
Tim Petersa7777992002-08-25 17:38:49 +0000264 self.assertEqual(self.set, Set([2, 3, 5, 6]))
Raymond Hettinger1b9f5d42002-08-24 06:19:02 +0000265
266 def test_difference_subset(self):
267 self.set -= Set((2, 4))
Tim Petersa7777992002-08-25 17:38:49 +0000268 self.assertEqual(self.set, Set([6]))
Raymond Hettinger1b9f5d42002-08-24 06:19:02 +0000269
270 def test_difference_superset(self):
271 self.set -= Set((2, 4, 6, 8))
Tim Petersa7777992002-08-25 17:38:49 +0000272 self.assertEqual(self.set, Set([]))
Raymond Hettinger1b9f5d42002-08-24 06:19:02 +0000273
274 def test_difference_overlap(self):
275 self.set -= Set((3, 4, 5))
Tim Petersa7777992002-08-25 17:38:49 +0000276 self.assertEqual(self.set, Set([2, 6]))
Raymond Hettinger1b9f5d42002-08-24 06:19:02 +0000277
278 def test_difference_non_overlap(self):
279 self.set -= Set([8])
Tim Petersa7777992002-08-25 17:38:49 +0000280 self.assertEqual(self.set, Set([2, 4, 6]))
Raymond Hettinger1b9f5d42002-08-24 06:19:02 +0000281
282 def test_difference_method_call(self):
283 self.set.difference_update(Set([3, 4, 5]))
Tim Petersa7777992002-08-25 17:38:49 +0000284 self.assertEqual(self.set, Set([2, 6]))
Raymond Hettinger1b9f5d42002-08-24 06:19:02 +0000285
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000286#==============================================================================
287
288class TestMutate(unittest.TestCase):
289 def setUp(self):
290 self.values = ["a", "b", "c"]
291 self.set = Set(self.values)
292
293 def test_add_present(self):
294 self.set.add("c")
Tim Petersde830ca2002-08-25 17:40:29 +0000295 self.assertEqual(self.set, Set("abc"))
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000296
297 def test_add_absent(self):
298 self.set.add("d")
Tim Petersde830ca2002-08-25 17:40:29 +0000299 self.assertEqual(self.set, Set("abcd"))
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000300
301 def test_add_until_full(self):
302 tmp = Set()
303 expected_len = 0
304 for v in self.values:
305 tmp.add(v)
306 expected_len += 1
Tim Petersa7777992002-08-25 17:38:49 +0000307 self.assertEqual(len(tmp), expected_len)
308 self.assertEqual(tmp, self.set)
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000309
310 def test_remove_present(self):
311 self.set.remove("b")
Tim Petersde830ca2002-08-25 17:40:29 +0000312 self.assertEqual(self.set, Set("ac"))
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000313
314 def test_remove_absent(self):
315 try:
316 self.set.remove("d")
Tim Peters4127e912002-08-25 18:02:29 +0000317 self.fail("Removing missing element should have raised LookupError")
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000318 except LookupError:
319 pass
320
321 def test_remove_until_empty(self):
322 expected_len = len(self.set)
323 for v in self.values:
324 self.set.remove(v)
325 expected_len -= 1
Tim Peters4127e912002-08-25 18:02:29 +0000326 self.assertEqual(len(self.set), expected_len)
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000327
328 def test_discard_present(self):
329 self.set.discard("c")
Tim Petersde830ca2002-08-25 17:40:29 +0000330 self.assertEqual(self.set, Set("ab"))
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000331
332 def test_discard_absent(self):
333 self.set.discard("d")
Tim Petersde830ca2002-08-25 17:40:29 +0000334 self.assertEqual(self.set, Set("abc"))
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000335
336 def test_clear(self):
337 self.set.clear()
Tim Petersa7777992002-08-25 17:38:49 +0000338 self.assertEqual(len(self.set), 0)
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000339
Guido van Rossumc9196bc2002-08-20 21:51:59 +0000340 def test_pop(self):
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000341 popped = {}
342 while self.set:
Guido van Rossumc9196bc2002-08-20 21:51:59 +0000343 popped[self.set.pop()] = None
Tim Petersa7777992002-08-25 17:38:49 +0000344 self.assertEqual(len(popped), len(self.values))
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000345 for v in self.values:
Tim Peters4127e912002-08-25 18:02:29 +0000346 self.failUnless(v in popped)
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000347
348 def test_update_empty_tuple(self):
349 self.set.update(())
Tim Petersa7777992002-08-25 17:38:49 +0000350 self.assertEqual(self.set, Set(self.values))
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000351
352 def test_update_unit_tuple_overlap(self):
353 self.set.update(("a",))
Tim Petersa7777992002-08-25 17:38:49 +0000354 self.assertEqual(self.set, Set(self.values))
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000355
356 def test_update_unit_tuple_non_overlap(self):
357 self.set.update(("a", "z"))
Tim Petersa7777992002-08-25 17:38:49 +0000358 self.assertEqual(self.set, Set(self.values + ["z"]))
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000359
360#==============================================================================
361
362class TestSubsets(unittest.TestCase):
363
364 def test_issubset(self):
365 result = self.left.issubset(self.right)
366 if "<" in self.cases:
Tim Peters4127e912002-08-25 18:02:29 +0000367 self.failUnless(result)
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000368 else:
Tim Peters4127e912002-08-25 18:02:29 +0000369 self.failUnless(not result)
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000370
371#------------------------------------------------------------------------------
372
373class TestSubsetEqualEmpty(TestSubsets):
Tim Peters0bbb3082002-08-25 17:22:23 +0000374 left = Set()
375 right = Set()
376 name = "both empty"
377 cases = "<>"
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000378
379#------------------------------------------------------------------------------
380
381class TestSubsetEqualNonEmpty(TestSubsets):
Tim Peters0bbb3082002-08-25 17:22:23 +0000382 left = Set([1, 2])
383 right = Set([1, 2])
384 name = "equal pair"
385 cases = "<>"
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000386
387#------------------------------------------------------------------------------
388
389class TestSubsetEmptyNonEmpty(TestSubsets):
Tim Peters0bbb3082002-08-25 17:22:23 +0000390 left = Set()
391 right = Set([1, 2])
392 name = "one empty, one non-empty"
393 cases = "<"
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000394
395#------------------------------------------------------------------------------
396
397class TestSubsetPartial(TestSubsets):
Tim Peters0bbb3082002-08-25 17:22:23 +0000398 left = Set([1])
399 right = Set([1, 2])
400 name = "one a non-empty subset of other"
401 cases = "<"
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000402
403#------------------------------------------------------------------------------
404
405class TestSubsetNonOverlap(TestSubsets):
Tim Peters0bbb3082002-08-25 17:22:23 +0000406 left = Set([1])
407 right = Set([2])
408 name = "neither empty, neither contains"
409 cases = ""
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000410
411#==============================================================================
412
413class TestOnlySetsInBinaryOps(unittest.TestCase):
414
415 def test_cmp(self):
416 try:
Raymond Hettingere87ab3f2002-08-24 07:33:06 +0000417 self.other == self.set
Tim Peters4127e912002-08-25 18:02:29 +0000418 self.fail("expected TypeError")
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000419 except TypeError:
420 pass
421 try:
Raymond Hettingere87ab3f2002-08-24 07:33:06 +0000422 self.set != self.other
Tim Peters4127e912002-08-25 18:02:29 +0000423 self.fail("expected TypeError")
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000424 except TypeError:
425 pass
426
427 def test_union_update(self):
428 try:
429 self.set |= self.other
Tim Peters4127e912002-08-25 18:02:29 +0000430 self.fail("expected TypeError")
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000431 except TypeError:
432 pass
433
434 def test_union(self):
435 try:
436 self.other | self.set
Tim Peters4127e912002-08-25 18:02:29 +0000437 self.fail("expected TypeError")
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000438 except TypeError:
439 pass
440 try:
441 self.set | self.other
Tim Peters4127e912002-08-25 18:02:29 +0000442 self.fail("expected TypeError")
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000443 except TypeError:
444 pass
445
446 def test_intersection_update(self):
447 try:
448 self.set &= self.other
Tim Peters4127e912002-08-25 18:02:29 +0000449 self.fail("expected TypeError")
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000450 except TypeError:
451 pass
452
453 def test_intersection(self):
454 try:
455 self.other & self.set
Tim Peters4127e912002-08-25 18:02:29 +0000456 self.fail("expected TypeError")
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000457 except TypeError:
458 pass
459 try:
460 self.set & self.other
Tim Peters4127e912002-08-25 18:02:29 +0000461 self.fail("expected TypeError")
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000462 except TypeError:
463 pass
464
465 def test_sym_difference_update(self):
466 try:
467 self.set ^= self.other
Tim Peters4127e912002-08-25 18:02:29 +0000468 self.fail("expected TypeError")
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000469 except TypeError:
470 pass
471
472 def test_sym_difference(self):
473 try:
474 self.other ^ self.set
Tim Peters4127e912002-08-25 18:02:29 +0000475 self.fail("expected TypeError")
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000476 except TypeError:
477 pass
478 try:
479 self.set ^ self.other
Tim Peters4127e912002-08-25 18:02:29 +0000480 self.fail("expected TypeError")
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000481 except TypeError:
482 pass
483
484 def test_difference_update(self):
485 try:
486 self.set -= self.other
Tim Peters4127e912002-08-25 18:02:29 +0000487 self.fail("expected TypeError")
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000488 except TypeError:
489 pass
490
491 def test_difference(self):
492 try:
493 self.other - self.set
Tim Peters4127e912002-08-25 18:02:29 +0000494 self.fail("expected TypeError")
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000495 except TypeError:
496 pass
497 try:
498 self.set - self.other
Tim Peters4127e912002-08-25 18:02:29 +0000499 self.fail("expected TypeError")
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000500 except TypeError:
501 pass
502
503#------------------------------------------------------------------------------
504
505class TestOnlySetsNumeric(TestOnlySetsInBinaryOps):
506 def setUp(self):
507 self.set = Set((1, 2, 3))
508 self.other = 19
509
510#------------------------------------------------------------------------------
511
512class TestOnlySetsDict(TestOnlySetsInBinaryOps):
513 def setUp(self):
514 self.set = Set((1, 2, 3))
515 self.other = {1:2, 3:4}
516
517#------------------------------------------------------------------------------
518
519class TestOnlySetsOperator(TestOnlySetsInBinaryOps):
520 def setUp(self):
521 self.set = Set((1, 2, 3))
522 self.other = operator.add
523
524#==============================================================================
525
526class TestCopying(unittest.TestCase):
527
528 def test_copy(self):
529 dup = self.set.copy()
530 dup_list = list(dup); dup_list.sort()
531 set_list = list(self.set); set_list.sort()
Tim Peters4127e912002-08-25 18:02:29 +0000532 self.assertEqual(len(dup_list), len(set_list))
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000533 for i in range(len(dup_list)):
Tim Peters4127e912002-08-25 18:02:29 +0000534 self.failUnless(dup_list[i] is set_list[i])
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000535
536 def test_deep_copy(self):
537 dup = copy.deepcopy(self.set)
538 ##print type(dup), `dup`
539 dup_list = list(dup); dup_list.sort()
540 set_list = list(self.set); set_list.sort()
Tim Peters4127e912002-08-25 18:02:29 +0000541 self.assertEqual(len(dup_list), len(set_list))
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000542 for i in range(len(dup_list)):
Tim Peters4127e912002-08-25 18:02:29 +0000543 self.assertEqual(dup_list[i], set_list[i])
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000544
545#------------------------------------------------------------------------------
546
547class TestCopyingEmpty(TestCopying):
548 def setUp(self):
549 self.set = Set()
550
551#------------------------------------------------------------------------------
552
553class TestCopyingSingleton(TestCopying):
554 def setUp(self):
555 self.set = Set(["hello"])
556
557#------------------------------------------------------------------------------
558
559class TestCopyingTriple(TestCopying):
560 def setUp(self):
561 self.set = Set(["zero", 0, None])
562
563#------------------------------------------------------------------------------
564
565class TestCopyingTuple(TestCopying):
566 def setUp(self):
567 self.set = Set([(1, 2)])
568
569#------------------------------------------------------------------------------
570
571class TestCopyingNested(TestCopying):
572 def setUp(self):
573 self.set = Set([((1, 2), (3, 4))])
574
575#==============================================================================
576
577def makeAllTests():
578 suite = unittest.TestSuite()
Tim Peters62c62432002-08-25 17:49:04 +0000579 for klass in (TestSetOfSets,
580 TestBasicOpsEmpty,
581 TestBasicOpsSingleton,
582 TestBasicOpsTuple,
583 TestBasicOpsTriple,
584 TestBinaryOps,
585 TestUpdateOps,
586 TestMutate,
587 TestSubsetEqualEmpty,
588 TestSubsetEqualNonEmpty,
589 TestSubsetEmptyNonEmpty,
590 TestSubsetPartial,
591 TestSubsetNonOverlap,
592 TestOnlySetsNumeric,
593 TestOnlySetsDict,
594 TestOnlySetsOperator,
595 TestCopyingEmpty,
596 TestCopyingSingleton,
597 TestCopyingTriple,
598 TestCopyingTuple,
599 TestCopyingNested,
600 ):
601 suite.addTest(unittest.makeSuite(klass))
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000602 return suite
603
604#------------------------------------------------------------------------------
605
606def test_main():
607 suite = makeAllTests()
608 test_support.run_suite(suite)
609
610if __name__ == "__main__":
611 test_main()