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