blob: 15c52c80b31b2464a13d73d4e4a5b5204123e2f9 [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
Tim Peters93d8d482002-08-25 18:21:47 +0000364 case2method = {"<=": "issubset",
365 ">=": "issuperset",
366 }
367 cases_with_ops = Set(["==", "!="])
368
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000369 def test_issubset(self):
Tim Peters93d8d482002-08-25 18:21:47 +0000370 x = self.left
371 y = self.right
372 for case in "!=", "==", "<", "<=", ">", ">=":
373 expected = case in self.cases
374 if case in TestSubsets.case2method:
375 # Test the method-name spelling.
376 method = getattr(x, TestSubsets.case2method[case])
377 result = method(y)
378 self.assertEqual(result, expected)
379 if case in TestSubsets.cases_with_ops:
380 # Test the binary infix spelling.
381 result = eval("x" + case + "y", locals())
382 self.assertEqual(result, expected)
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000383
384#------------------------------------------------------------------------------
385
386class TestSubsetEqualEmpty(TestSubsets):
Tim Peters0bbb3082002-08-25 17:22:23 +0000387 left = Set()
388 right = Set()
389 name = "both empty"
Tim Peters93d8d482002-08-25 18:21:47 +0000390 cases = "==", "<=", ">="
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000391
392#------------------------------------------------------------------------------
393
394class TestSubsetEqualNonEmpty(TestSubsets):
Tim Peters0bbb3082002-08-25 17:22:23 +0000395 left = Set([1, 2])
396 right = Set([1, 2])
397 name = "equal pair"
Tim Peters93d8d482002-08-25 18:21:47 +0000398 cases = "==", "<=", ">="
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000399
400#------------------------------------------------------------------------------
401
402class TestSubsetEmptyNonEmpty(TestSubsets):
Tim Peters0bbb3082002-08-25 17:22:23 +0000403 left = Set()
404 right = Set([1, 2])
405 name = "one empty, one non-empty"
Tim Peters93d8d482002-08-25 18:21:47 +0000406 cases = "!=", "<", "<="
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000407
408#------------------------------------------------------------------------------
409
410class TestSubsetPartial(TestSubsets):
Tim Peters0bbb3082002-08-25 17:22:23 +0000411 left = Set([1])
412 right = Set([1, 2])
413 name = "one a non-empty subset of other"
Tim Peters93d8d482002-08-25 18:21:47 +0000414 cases = "!=", "<", "<="
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000415
416#------------------------------------------------------------------------------
417
418class TestSubsetNonOverlap(TestSubsets):
Tim Peters0bbb3082002-08-25 17:22:23 +0000419 left = Set([1])
420 right = Set([2])
421 name = "neither empty, neither contains"
Tim Peters93d8d482002-08-25 18:21:47 +0000422 cases = "!="
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000423
424#==============================================================================
425
426class TestOnlySetsInBinaryOps(unittest.TestCase):
427
428 def test_cmp(self):
429 try:
Raymond Hettingere87ab3f2002-08-24 07:33:06 +0000430 self.other == self.set
Tim Peters4127e912002-08-25 18:02:29 +0000431 self.fail("expected TypeError")
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000432 except TypeError:
433 pass
434 try:
Raymond Hettingere87ab3f2002-08-24 07:33:06 +0000435 self.set != self.other
Tim Peters4127e912002-08-25 18:02:29 +0000436 self.fail("expected TypeError")
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000437 except TypeError:
438 pass
439
440 def test_union_update(self):
441 try:
442 self.set |= self.other
Tim Peters4127e912002-08-25 18:02:29 +0000443 self.fail("expected TypeError")
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000444 except TypeError:
445 pass
446
447 def test_union(self):
448 try:
449 self.other | self.set
Tim Peters4127e912002-08-25 18:02:29 +0000450 self.fail("expected TypeError")
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000451 except TypeError:
452 pass
453 try:
454 self.set | self.other
Tim Peters4127e912002-08-25 18:02:29 +0000455 self.fail("expected TypeError")
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000456 except TypeError:
457 pass
458
459 def test_intersection_update(self):
460 try:
461 self.set &= self.other
Tim Peters4127e912002-08-25 18:02:29 +0000462 self.fail("expected TypeError")
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000463 except TypeError:
464 pass
465
466 def test_intersection(self):
467 try:
468 self.other & self.set
Tim Peters4127e912002-08-25 18:02:29 +0000469 self.fail("expected TypeError")
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000470 except TypeError:
471 pass
472 try:
473 self.set & self.other
Tim Peters4127e912002-08-25 18:02:29 +0000474 self.fail("expected TypeError")
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000475 except TypeError:
476 pass
477
478 def test_sym_difference_update(self):
479 try:
480 self.set ^= self.other
Tim Peters4127e912002-08-25 18:02:29 +0000481 self.fail("expected TypeError")
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000482 except TypeError:
483 pass
484
485 def test_sym_difference(self):
486 try:
487 self.other ^ self.set
Tim Peters4127e912002-08-25 18:02:29 +0000488 self.fail("expected TypeError")
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000489 except TypeError:
490 pass
491 try:
492 self.set ^ self.other
Tim Peters4127e912002-08-25 18:02:29 +0000493 self.fail("expected TypeError")
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000494 except TypeError:
495 pass
496
497 def test_difference_update(self):
498 try:
499 self.set -= self.other
Tim Peters4127e912002-08-25 18:02:29 +0000500 self.fail("expected TypeError")
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000501 except TypeError:
502 pass
503
504 def test_difference(self):
505 try:
506 self.other - self.set
Tim Peters4127e912002-08-25 18:02:29 +0000507 self.fail("expected TypeError")
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000508 except TypeError:
509 pass
510 try:
511 self.set - self.other
Tim Peters4127e912002-08-25 18:02:29 +0000512 self.fail("expected TypeError")
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000513 except TypeError:
514 pass
515
516#------------------------------------------------------------------------------
517
518class TestOnlySetsNumeric(TestOnlySetsInBinaryOps):
519 def setUp(self):
520 self.set = Set((1, 2, 3))
521 self.other = 19
522
523#------------------------------------------------------------------------------
524
525class TestOnlySetsDict(TestOnlySetsInBinaryOps):
526 def setUp(self):
527 self.set = Set((1, 2, 3))
528 self.other = {1:2, 3:4}
529
530#------------------------------------------------------------------------------
531
532class TestOnlySetsOperator(TestOnlySetsInBinaryOps):
533 def setUp(self):
534 self.set = Set((1, 2, 3))
535 self.other = operator.add
536
537#==============================================================================
538
539class TestCopying(unittest.TestCase):
540
541 def test_copy(self):
542 dup = self.set.copy()
543 dup_list = list(dup); dup_list.sort()
544 set_list = list(self.set); set_list.sort()
Tim Peters4127e912002-08-25 18:02:29 +0000545 self.assertEqual(len(dup_list), len(set_list))
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000546 for i in range(len(dup_list)):
Tim Peters4127e912002-08-25 18:02:29 +0000547 self.failUnless(dup_list[i] is set_list[i])
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000548
549 def test_deep_copy(self):
550 dup = copy.deepcopy(self.set)
551 ##print type(dup), `dup`
552 dup_list = list(dup); dup_list.sort()
553 set_list = list(self.set); set_list.sort()
Tim Peters4127e912002-08-25 18:02:29 +0000554 self.assertEqual(len(dup_list), len(set_list))
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000555 for i in range(len(dup_list)):
Tim Peters4127e912002-08-25 18:02:29 +0000556 self.assertEqual(dup_list[i], set_list[i])
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000557
558#------------------------------------------------------------------------------
559
560class TestCopyingEmpty(TestCopying):
561 def setUp(self):
562 self.set = Set()
563
564#------------------------------------------------------------------------------
565
566class TestCopyingSingleton(TestCopying):
567 def setUp(self):
568 self.set = Set(["hello"])
569
570#------------------------------------------------------------------------------
571
572class TestCopyingTriple(TestCopying):
573 def setUp(self):
574 self.set = Set(["zero", 0, None])
575
576#------------------------------------------------------------------------------
577
578class TestCopyingTuple(TestCopying):
579 def setUp(self):
580 self.set = Set([(1, 2)])
581
582#------------------------------------------------------------------------------
583
584class TestCopyingNested(TestCopying):
585 def setUp(self):
586 self.set = Set([((1, 2), (3, 4))])
587
588#==============================================================================
589
590def makeAllTests():
591 suite = unittest.TestSuite()
Tim Peters62c62432002-08-25 17:49:04 +0000592 for klass in (TestSetOfSets,
593 TestBasicOpsEmpty,
594 TestBasicOpsSingleton,
595 TestBasicOpsTuple,
596 TestBasicOpsTriple,
597 TestBinaryOps,
598 TestUpdateOps,
599 TestMutate,
600 TestSubsetEqualEmpty,
601 TestSubsetEqualNonEmpty,
602 TestSubsetEmptyNonEmpty,
603 TestSubsetPartial,
604 TestSubsetNonOverlap,
605 TestOnlySetsNumeric,
606 TestOnlySetsDict,
607 TestOnlySetsOperator,
608 TestCopyingEmpty,
609 TestCopyingSingleton,
610 TestCopyingTriple,
611 TestCopyingTuple,
612 TestCopyingNested,
613 ):
614 suite.addTest(unittest.makeSuite(klass))
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000615 return suite
616
617#------------------------------------------------------------------------------
618
619def test_main():
620 suite = makeAllTests()
621 test_support.run_suite(suite)
622
623if __name__ == "__main__":
624 test_main()