blob: 068b7257d4f2a658077354793827fe708b8d9e8d [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:
75 assert v in self.values, "Missing item in iteration for " + self.case
76
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):
100 assert 3 in self.set, "Valueship for unit set"
101
102 def test_not_in(self):
103 assert 2 not in self.set, "Non-valueship for unit set"
104
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):
117 assert (0, "zero") in self.set, "Valueship for tuple set"
118
119 def test_not_in(self):
120 assert 9 not in self.set, "Non-valueship for tuple set"
121
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()
140 assert type(element) == ImmutableSet, "Construct set of sets"
Raymond Hettinger045e51a2002-08-24 02:56:01 +0000141 outer.add(inner) # Rebuild set of sets with .add method
142 outer.remove(inner)
143 assert outer == Set() # Verify that remove worked
144 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")
317 assert 0, "Removing missing element"
318 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
326 assert len(self.set) == expected_len, "Removing values one by one"
327
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:
346 assert v in popped, "Popping items"
347
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:
367 assert result, "subset: " + self.name
368 else:
369 assert not result, "non-subset: " + self.name
370
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
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000418 assert 0, "Comparison with non-set on left"
419 except TypeError:
420 pass
421 try:
Raymond Hettingere87ab3f2002-08-24 07:33:06 +0000422 self.set != self.other
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000423 assert 0, "Comparison with non-set on right"
424 except TypeError:
425 pass
426
427 def test_union_update(self):
428 try:
429 self.set |= self.other
430 assert 0, "Union update with non-set"
431 except TypeError:
432 pass
433
434 def test_union(self):
435 try:
436 self.other | self.set
437 assert 0, "Union with non-set on left"
438 except TypeError:
439 pass
440 try:
441 self.set | self.other
442 assert 0, "Union with non-set on right"
443 except TypeError:
444 pass
445
446 def test_intersection_update(self):
447 try:
448 self.set &= self.other
449 assert 0, "Intersection update with non-set"
450 except TypeError:
451 pass
452
453 def test_intersection(self):
454 try:
455 self.other & self.set
456 assert 0, "Intersection with non-set on left"
457 except TypeError:
458 pass
459 try:
460 self.set & self.other
461 assert 0, "Intersection with non-set on right"
462 except TypeError:
463 pass
464
465 def test_sym_difference_update(self):
466 try:
467 self.set ^= self.other
468 assert 0, "Symmetric difference update with non-set"
469 except TypeError:
470 pass
471
472 def test_sym_difference(self):
473 try:
474 self.other ^ self.set
475 assert 0, "Symmetric difference with non-set on left"
476 except TypeError:
477 pass
478 try:
479 self.set ^ self.other
480 assert 0, "Symmetric difference with non-set on right"
481 except TypeError:
482 pass
483
484 def test_difference_update(self):
485 try:
486 self.set -= self.other
487 assert 0, "Symmetric difference update with non-set"
488 except TypeError:
489 pass
490
491 def test_difference(self):
492 try:
493 self.other - self.set
494 assert 0, "Symmetric difference with non-set on left"
495 except TypeError:
496 pass
497 try:
498 self.set - self.other
499 assert 0, "Symmetric difference with non-set on right"
500 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()
532 assert len(dup_list) == len(set_list), "Unequal lengths after copy"
533 for i in range(len(dup_list)):
534 assert dup_list[i] is set_list[i], "Non-identical items after copy"
535
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()
541 assert len(dup_list) == len(set_list), "Unequal lengths after deep copy"
542 for i in range(len(dup_list)):
543 assert dup_list[i] == set_list[i], "Unequal items after deep copy"
544
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()
Raymond Hettingerc3e61e52002-08-21 06:38:44 +0000579 suite.addTest(unittest.makeSuite(TestSetOfSets))
Guido van Rossumd6cf3af2002-08-19 16:19:15 +0000580 suite.addTest(unittest.makeSuite(TestBasicOpsEmpty))
581 suite.addTest(unittest.makeSuite(TestBasicOpsSingleton))
582 suite.addTest(unittest.makeSuite(TestBasicOpsTuple))
583 suite.addTest(unittest.makeSuite(TestBasicOpsTriple))
584 suite.addTest(unittest.makeSuite(TestBinaryOps))
585 suite.addTest(unittest.makeSuite(TestUpdateOps))
586 suite.addTest(unittest.makeSuite(TestMutate))
587 suite.addTest(unittest.makeSuite(TestSubsetEqualEmpty))
588 suite.addTest(unittest.makeSuite(TestSubsetEqualNonEmpty))
589 suite.addTest(unittest.makeSuite(TestSubsetEmptyNonEmpty))
590 suite.addTest(unittest.makeSuite(TestSubsetPartial))
591 suite.addTest(unittest.makeSuite(TestSubsetNonOverlap))
592 suite.addTest(unittest.makeSuite(TestOnlySetsNumeric))
593 suite.addTest(unittest.makeSuite(TestOnlySetsDict))
594 suite.addTest(unittest.makeSuite(TestOnlySetsOperator))
595 suite.addTest(unittest.makeSuite(TestCopyingEmpty))
596 suite.addTest(unittest.makeSuite(TestCopyingSingleton))
597 suite.addTest(unittest.makeSuite(TestCopyingTriple))
598 suite.addTest(unittest.makeSuite(TestCopyingTuple))
599 suite.addTest(unittest.makeSuite(TestCopyingNested))
600 return suite
601
602#------------------------------------------------------------------------------
603
604def test_main():
605 suite = makeAllTests()
606 test_support.run_suite(suite)
607
608if __name__ == "__main__":
609 test_main()