test_set.py revision 610a93ea2623ff324c99c52147d78838335ae900
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 106170874f9c16b45a60851821c599898f51ba02d2Raymond Hettingerimport collections 11a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 12a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass PassThru(Exception): 13a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger pass 14a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 15a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerdef check_pass_thru(): 16a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger raise PassThru 17a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger yield 1 18a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 199bda1d6f645bd0f3e76c14f27bbbac919814cd38Raymond Hettingerclass BadCmp: 209bda1d6f645bd0f3e76c14f27bbbac919814cd38Raymond Hettinger def __hash__(self): 219bda1d6f645bd0f3e76c14f27bbbac919814cd38Raymond Hettinger return 1 229bda1d6f645bd0f3e76c14f27bbbac919814cd38Raymond Hettinger def __cmp__(self, other): 239bda1d6f645bd0f3e76c14f27bbbac919814cd38Raymond Hettinger raise RuntimeError 249bda1d6f645bd0f3e76c14f27bbbac919814cd38Raymond Hettinger 255399910eba1ef3580aebf49482b1367f14fa6c48Raymond Hettingerclass ReprWrapper: 265399910eba1ef3580aebf49482b1367f14fa6c48Raymond Hettinger 'Used to test self-referential repr() calls' 275399910eba1ef3580aebf49482b1367f14fa6c48Raymond Hettinger def __repr__(self): 285399910eba1ef3580aebf49482b1367f14fa6c48Raymond Hettinger return repr(self.value) 295399910eba1ef3580aebf49482b1367f14fa6c48Raymond Hettinger 30d6fc72a5ae27048dae56c773896ccbd6152d9b9bRaymond Hettingerclass HashCountingInt(int): 31d6fc72a5ae27048dae56c773896ccbd6152d9b9bRaymond Hettinger 'int-like object that counts the number of times __hash__ is called' 32d6fc72a5ae27048dae56c773896ccbd6152d9b9bRaymond Hettinger def __init__(self, *args): 33d6fc72a5ae27048dae56c773896ccbd6152d9b9bRaymond Hettinger self.hash_count = 0 34d6fc72a5ae27048dae56c773896ccbd6152d9b9bRaymond Hettinger def __hash__(self): 35d6fc72a5ae27048dae56c773896ccbd6152d9b9bRaymond Hettinger self.hash_count += 1 36d6fc72a5ae27048dae56c773896ccbd6152d9b9bRaymond Hettinger return int.__hash__(self) 37d6fc72a5ae27048dae56c773896ccbd6152d9b9bRaymond Hettinger 38a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestJointOps(unittest.TestCase): 39a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger # Tests common to both set and frozenset 40a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 41a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def setUp(self): 42a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.word = word = 'simsalabim' 43a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.otherword = 'madagascar' 44a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.letters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' 45a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.s = self.thetype(word) 46a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.d = dict.fromkeys(word) 47a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 486429a4727e4bb8bcb0d3deefaefe195e63e6bb6eRaymond Hettinger def test_new_or_init(self): 496429a4727e4bb8bcb0d3deefaefe195e63e6bb6eRaymond Hettinger self.assertRaises(TypeError, self.thetype, [], 2) 506429a4727e4bb8bcb0d3deefaefe195e63e6bb6eRaymond Hettinger 51a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_uniquification(self): 5264958a15d7c03efdc3d2eddf247666e18d1fd910Raymond Hettinger actual = sorted(self.s) 5364958a15d7c03efdc3d2eddf247666e18d1fd910Raymond Hettinger expected = sorted(self.d) 54a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(actual, expected) 55a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(PassThru, self.thetype, check_pass_thru()) 56a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, self.thetype, [[]]) 57a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 58a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_len(self): 59a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(len(self.s), len(self.d)) 60a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 61a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_contains(self): 62a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for c in self.letters: 63a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(c in self.s, c in self.d) 64a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, self.s.__contains__, [[]]) 6519c2d77842290af9b5f470c1eea2a71d1f77c9feRaymond Hettinger s = self.thetype([frozenset(self.letters)]) 6619c2d77842290af9b5f470c1eea2a71d1f77c9feRaymond Hettinger self.assert_(self.thetype(self.letters) in s) 67a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 68a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_union(self): 69a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger u = self.s.union(self.otherword) 70a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for c in self.letters: 71a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(c in u, c in self.d or c in self.otherword) 7249ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger self.assertEqual(self.s, self.thetype(self.word)) 73a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(type(u), self.thetype) 74a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(PassThru, self.s.union, check_pass_thru()) 75a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, self.s.union, [[]]) 76f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger for C in set, frozenset, dict.fromkeys, str, unicode, list, tuple: 77f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertEqual(self.thetype('abcba').union(C('cdc')), set('abcd')) 78f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertEqual(self.thetype('abcba').union(C('efgfe')), set('abcefg')) 79f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertEqual(self.thetype('abcba').union(C('ccb')), set('abc')) 80f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertEqual(self.thetype('abcba').union(C('ef')), set('abcef')) 81ee4bcad68ec383c0140d0a21f4ac296073c0f938Raymond Hettinger self.assertEqual(self.thetype('abcba').union(C('ef'), C('fg')), set('abcefg')) 82a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 83a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_or(self): 84a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger i = self.s.union(self.otherword) 85a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.s | set(self.otherword), i) 86a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.s | frozenset(self.otherword), i) 87a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger try: 88a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.s | self.otherword 89a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger except TypeError: 90a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger pass 91a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger else: 92a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.fail("s|t did not screen-out general iterables") 93a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 94a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_intersection(self): 95a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger i = self.s.intersection(self.otherword) 96a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for c in self.letters: 97a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(c in i, c in self.d and c in self.otherword) 9849ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger self.assertEqual(self.s, self.thetype(self.word)) 99a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(type(i), self.thetype) 100a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(PassThru, self.s.intersection, check_pass_thru()) 101f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger for C in set, frozenset, dict.fromkeys, str, unicode, list, tuple: 102f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertEqual(self.thetype('abcba').intersection(C('cdc')), set('cc')) 103f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertEqual(self.thetype('abcba').intersection(C('efgfe')), set('')) 104f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertEqual(self.thetype('abcba').intersection(C('ccb')), set('bc')) 105f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertEqual(self.thetype('abcba').intersection(C('ef')), set('')) 1065c4d3d0e4c6b533dbfbab36ad8034010fe90cf69Raymond Hettinger self.assertEqual(self.thetype('abcba').intersection(C('cbcf'), C('bag')), set('b')) 107610a93ea2623ff324c99c52147d78838335ae900Raymond Hettinger s = self.thetype('abcba') 108610a93ea2623ff324c99c52147d78838335ae900Raymond Hettinger z = s.intersection() 109610a93ea2623ff324c99c52147d78838335ae900Raymond Hettinger if self.thetype == frozenset(): 110610a93ea2623ff324c99c52147d78838335ae900Raymond Hettinger self.assertEqual(id(s), id(z)) 111610a93ea2623ff324c99c52147d78838335ae900Raymond Hettinger else: 112610a93ea2623ff324c99c52147d78838335ae900Raymond Hettinger self.assertNotEqual(id(s), id(z)) 113a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1141760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger def test_isdisjoint(self): 1151760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger def f(s1, s2): 1161760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger 'Pure python equivalent of isdisjoint()' 1171760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger return not set(s1).intersection(s2) 1181760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger for larg in '', 'a', 'ab', 'abc', 'ababac', 'cdc', 'cc', 'efgfe', 'ccb', 'ef': 1191760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger s1 = self.thetype(larg) 1201760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger for rarg in '', 'a', 'ab', 'abc', 'ababac', 'cdc', 'cc', 'efgfe', 'ccb', 'ef': 1211760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger for C in set, frozenset, dict.fromkeys, str, unicode, list, tuple: 1221760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger s2 = C(rarg) 1231760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger actual = s1.isdisjoint(s2) 1241760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger expected = f(s1, s2) 1251760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger self.assertEqual(actual, expected) 1261760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger self.assert_(actual is True or actual is False) 1271760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger 128a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_and(self): 129a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger i = self.s.intersection(self.otherword) 130a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.s & set(self.otherword), i) 131a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.s & frozenset(self.otherword), i) 132a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger try: 133a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.s & self.otherword 134a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger except TypeError: 135a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger pass 136a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger else: 137a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.fail("s&t did not screen-out general iterables") 138a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 139a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_difference(self): 140a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger i = self.s.difference(self.otherword) 141a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for c in self.letters: 142a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(c in i, c in self.d and c not in self.otherword) 14349ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger self.assertEqual(self.s, self.thetype(self.word)) 144a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(type(i), self.thetype) 145a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(PassThru, self.s.difference, check_pass_thru()) 146a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, self.s.difference, [[]]) 147f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger for C in set, frozenset, dict.fromkeys, str, unicode, list, tuple: 148f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertEqual(self.thetype('abcba').difference(C('cdc')), set('ab')) 149f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertEqual(self.thetype('abcba').difference(C('efgfe')), set('abc')) 150f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertEqual(self.thetype('abcba').difference(C('ccb')), set('a')) 151f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertEqual(self.thetype('abcba').difference(C('ef')), set('abc')) 152a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 153a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_sub(self): 154a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger i = self.s.difference(self.otherword) 155a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.s - set(self.otherword), i) 156a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.s - frozenset(self.otherword), i) 157a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger try: 158a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.s - self.otherword 159a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger except TypeError: 160a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger pass 161a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger else: 162a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.fail("s-t did not screen-out general iterables") 163a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 164a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_symmetric_difference(self): 165a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger i = self.s.symmetric_difference(self.otherword) 166a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for c in self.letters: 167a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(c in i, (c in self.d) ^ (c in self.otherword)) 16849ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger self.assertEqual(self.s, self.thetype(self.word)) 169a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(type(i), self.thetype) 170a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(PassThru, self.s.symmetric_difference, check_pass_thru()) 171a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, self.s.symmetric_difference, [[]]) 172f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger for C in set, frozenset, dict.fromkeys, str, unicode, list, tuple: 173f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertEqual(self.thetype('abcba').symmetric_difference(C('cdc')), set('abd')) 174f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertEqual(self.thetype('abcba').symmetric_difference(C('efgfe')), set('abcefg')) 175f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertEqual(self.thetype('abcba').symmetric_difference(C('ccb')), set('a')) 176f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertEqual(self.thetype('abcba').symmetric_difference(C('ef')), set('abcef')) 177a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 178a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_xor(self): 179a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger i = self.s.symmetric_difference(self.otherword) 180a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.s ^ set(self.otherword), i) 181a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.s ^ frozenset(self.otherword), i) 182a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger try: 183a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.s ^ self.otherword 184a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger except TypeError: 185a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger pass 186a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger else: 187a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.fail("s^t did not screen-out general iterables") 188a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 189a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_equality(self): 190a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.s, set(self.word)) 191a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.s, frozenset(self.word)) 192a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.s == self.word, False) 193a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertNotEqual(self.s, set(self.otherword)) 194a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertNotEqual(self.s, frozenset(self.otherword)) 195a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.s != self.word, True) 196a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 197a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_setOfFrozensets(self): 198a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger t = map(frozenset, ['abcdef', 'bcd', 'bdcb', 'fed', 'fedccba']) 199a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger s = self.thetype(t) 200a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(len(s), 3) 201a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 202a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_compare(self): 203a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, self.s.__cmp__, self.s) 204a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 205a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_sub_and_super(self): 206a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger p, q, r = map(self.thetype, ['ab', 'abcde', 'def']) 207a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(p < q) 208a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(p <= q) 209a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(q <= q) 210a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(q > p) 211a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(q >= p) 212a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.failIf(q < r) 213a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.failIf(q <= r) 214a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.failIf(q > r) 215a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.failIf(q >= r) 2163fbec701cae361de6beca55bc926e0540635f165Raymond Hettinger self.assert_(set('a').issubset('abc')) 2173fbec701cae361de6beca55bc926e0540635f165Raymond Hettinger self.assert_(set('abc').issuperset('a')) 2183fbec701cae361de6beca55bc926e0540635f165Raymond Hettinger self.failIf(set('a').issubset('cbs')) 2193fbec701cae361de6beca55bc926e0540635f165Raymond Hettinger self.failIf(set('cbs').issuperset('a')) 220a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 221a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_pickling(self): 22215056a5202c89846d75006d66541d5a634ac79b5Raymond Hettinger for i in (0, 1, 2): 22315056a5202c89846d75006d66541d5a634ac79b5Raymond Hettinger p = pickle.dumps(self.s, i) 22415056a5202c89846d75006d66541d5a634ac79b5Raymond Hettinger dup = pickle.loads(p) 22515056a5202c89846d75006d66541d5a634ac79b5Raymond Hettinger self.assertEqual(self.s, dup, "%s != %s" % (self.s, dup)) 22615056a5202c89846d75006d66541d5a634ac79b5Raymond Hettinger if type(self.s) not in (set, frozenset): 22715056a5202c89846d75006d66541d5a634ac79b5Raymond Hettinger self.s.x = 10 22815056a5202c89846d75006d66541d5a634ac79b5Raymond Hettinger p = pickle.dumps(self.s) 22915056a5202c89846d75006d66541d5a634ac79b5Raymond Hettinger dup = pickle.loads(p) 23015056a5202c89846d75006d66541d5a634ac79b5Raymond Hettinger self.assertEqual(self.s.x, dup.x) 231a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 23249ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger def test_deepcopy(self): 23349ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger class Tracer: 23449ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger def __init__(self, value): 23549ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger self.value = value 23649ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger def __hash__(self): 23758eb11cf62dd04ccc2c364b62fd51b4265e2e203Tim Peters return self.value 23849ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger def __deepcopy__(self, memo=None): 23949ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger return Tracer(self.value + 1) 24049ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger t = Tracer(10) 24149ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger s = self.thetype([t]) 24249ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger dup = copy.deepcopy(s) 24349ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger self.assertNotEqual(id(s), id(dup)) 24449ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger for elem in dup: 24549ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger newt = elem 24649ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger self.assertNotEqual(id(t), id(newt)) 24749ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger self.assertEqual(t.value + 1, newt.value) 24849ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger 249bb999b5925ae65d19282c3781cdbb678f92c410fRaymond Hettinger def test_gc(self): 250bb999b5925ae65d19282c3781cdbb678f92c410fRaymond Hettinger # Create a nest of cycles to exercise overall ref count check 251bb999b5925ae65d19282c3781cdbb678f92c410fRaymond Hettinger class A: 252bb999b5925ae65d19282c3781cdbb678f92c410fRaymond Hettinger pass 253bb999b5925ae65d19282c3781cdbb678f92c410fRaymond Hettinger s = set(A() for i in xrange(1000)) 254bb999b5925ae65d19282c3781cdbb678f92c410fRaymond Hettinger for elem in s: 255bb999b5925ae65d19282c3781cdbb678f92c410fRaymond Hettinger elem.cycle = s 256bb999b5925ae65d19282c3781cdbb678f92c410fRaymond Hettinger elem.sub = elem 257bb999b5925ae65d19282c3781cdbb678f92c410fRaymond Hettinger elem.set = set([elem]) 258bb999b5925ae65d19282c3781cdbb678f92c410fRaymond Hettinger 25997979ddc141b88cfd81bdf02404d0337a603f7cfRaymond Hettinger def test_subclass_with_custom_hash(self): 26097979ddc141b88cfd81bdf02404d0337a603f7cfRaymond Hettinger # Bug #1257731 26197979ddc141b88cfd81bdf02404d0337a603f7cfRaymond Hettinger class H(self.thetype): 26297979ddc141b88cfd81bdf02404d0337a603f7cfRaymond Hettinger def __hash__(self): 2636902b44406ba2940dd7f34b7ec77e2ea13ff2e66Tim Peters return int(id(self) & 0x7fffffff) 26497979ddc141b88cfd81bdf02404d0337a603f7cfRaymond Hettinger s=H() 26597979ddc141b88cfd81bdf02404d0337a603f7cfRaymond Hettinger f=set() 26697979ddc141b88cfd81bdf02404d0337a603f7cfRaymond Hettinger f.add(s) 26797979ddc141b88cfd81bdf02404d0337a603f7cfRaymond Hettinger self.assert_(s in f) 26897979ddc141b88cfd81bdf02404d0337a603f7cfRaymond Hettinger f.remove(s) 26997979ddc141b88cfd81bdf02404d0337a603f7cfRaymond Hettinger f.add(s) 27097979ddc141b88cfd81bdf02404d0337a603f7cfRaymond Hettinger f.discard(s) 27197979ddc141b88cfd81bdf02404d0337a603f7cfRaymond Hettinger 2729bda1d6f645bd0f3e76c14f27bbbac919814cd38Raymond Hettinger def test_badcmp(self): 2739bda1d6f645bd0f3e76c14f27bbbac919814cd38Raymond Hettinger s = self.thetype([BadCmp()]) 2749bda1d6f645bd0f3e76c14f27bbbac919814cd38Raymond Hettinger # Detect comparison errors during insertion and lookup 2759bda1d6f645bd0f3e76c14f27bbbac919814cd38Raymond Hettinger self.assertRaises(RuntimeError, self.thetype, [BadCmp(), BadCmp()]) 2769bda1d6f645bd0f3e76c14f27bbbac919814cd38Raymond Hettinger self.assertRaises(RuntimeError, s.__contains__, BadCmp()) 2779bda1d6f645bd0f3e76c14f27bbbac919814cd38Raymond Hettinger # Detect errors during mutating operations 2789bda1d6f645bd0f3e76c14f27bbbac919814cd38Raymond Hettinger if hasattr(s, 'add'): 2799bda1d6f645bd0f3e76c14f27bbbac919814cd38Raymond Hettinger self.assertRaises(RuntimeError, s.add, BadCmp()) 2809bda1d6f645bd0f3e76c14f27bbbac919814cd38Raymond Hettinger self.assertRaises(RuntimeError, s.discard, BadCmp()) 2819bda1d6f645bd0f3e76c14f27bbbac919814cd38Raymond Hettinger self.assertRaises(RuntimeError, s.remove, BadCmp()) 2829bda1d6f645bd0f3e76c14f27bbbac919814cd38Raymond Hettinger 2835399910eba1ef3580aebf49482b1367f14fa6c48Raymond Hettinger def test_cyclical_repr(self): 2845399910eba1ef3580aebf49482b1367f14fa6c48Raymond Hettinger w = ReprWrapper() 2855399910eba1ef3580aebf49482b1367f14fa6c48Raymond Hettinger s = self.thetype([w]) 2865399910eba1ef3580aebf49482b1367f14fa6c48Raymond Hettinger w.value = s 2875399910eba1ef3580aebf49482b1367f14fa6c48Raymond Hettinger name = repr(s).partition('(')[0] # strip class name from repr string 2885399910eba1ef3580aebf49482b1367f14fa6c48Raymond Hettinger self.assertEqual(repr(s), '%s([%s(...)])' % (name, name)) 2895399910eba1ef3580aebf49482b1367f14fa6c48Raymond Hettinger 2905399910eba1ef3580aebf49482b1367f14fa6c48Raymond Hettinger def test_cyclical_print(self): 2915399910eba1ef3580aebf49482b1367f14fa6c48Raymond Hettinger w = ReprWrapper() 2925399910eba1ef3580aebf49482b1367f14fa6c48Raymond Hettinger s = self.thetype([w]) 2935399910eba1ef3580aebf49482b1367f14fa6c48Raymond Hettinger w.value = s 294be9160b035449b00ff4aee1837c510ec518b08bcNeal Norwitz fo = open(test_support.TESTFN, "wb") 2955399910eba1ef3580aebf49482b1367f14fa6c48Raymond Hettinger try: 2965399910eba1ef3580aebf49482b1367f14fa6c48Raymond Hettinger print >> fo, s, 2975399910eba1ef3580aebf49482b1367f14fa6c48Raymond Hettinger fo.close() 2985399910eba1ef3580aebf49482b1367f14fa6c48Raymond Hettinger fo = open(test_support.TESTFN, "rb") 2995399910eba1ef3580aebf49482b1367f14fa6c48Raymond Hettinger self.assertEqual(fo.read(), repr(s)) 3005399910eba1ef3580aebf49482b1367f14fa6c48Raymond Hettinger finally: 3015399910eba1ef3580aebf49482b1367f14fa6c48Raymond Hettinger fo.close() 302be9160b035449b00ff4aee1837c510ec518b08bcNeal Norwitz test_support.unlink(test_support.TESTFN) 3035399910eba1ef3580aebf49482b1367f14fa6c48Raymond Hettinger 304d6fc72a5ae27048dae56c773896ccbd6152d9b9bRaymond Hettinger def test_do_not_rehash_dict_keys(self): 305d6fc72a5ae27048dae56c773896ccbd6152d9b9bRaymond Hettinger n = 10 306d6fc72a5ae27048dae56c773896ccbd6152d9b9bRaymond Hettinger d = dict.fromkeys(map(HashCountingInt, xrange(n))) 307d6fc72a5ae27048dae56c773896ccbd6152d9b9bRaymond Hettinger self.assertEqual(sum(elem.hash_count for elem in d), n) 308d6fc72a5ae27048dae56c773896ccbd6152d9b9bRaymond Hettinger s = self.thetype(d) 309d6fc72a5ae27048dae56c773896ccbd6152d9b9bRaymond Hettinger self.assertEqual(sum(elem.hash_count for elem in d), n) 310d6fc72a5ae27048dae56c773896ccbd6152d9b9bRaymond Hettinger s.difference(d) 311ea5962f86e8550978446724dadcacd60e03feef2Tim Peters self.assertEqual(sum(elem.hash_count for elem in d), n) 312d6fc72a5ae27048dae56c773896ccbd6152d9b9bRaymond Hettinger if hasattr(s, 'symmetric_difference_update'): 313d6fc72a5ae27048dae56c773896ccbd6152d9b9bRaymond Hettinger s.symmetric_difference_update(d) 3140d4c06e06e5ee1f3bb1fa8068114bd700d74864aNeal Norwitz self.assertEqual(sum(elem.hash_count for elem in d), n) 3150bbbfc4c0b0cf84a23d2644080d09fb8af5324d2Raymond Hettinger d2 = dict.fromkeys(set(d)) 3160bbbfc4c0b0cf84a23d2644080d09fb8af5324d2Raymond Hettinger self.assertEqual(sum(elem.hash_count for elem in d), n) 3170bbbfc4c0b0cf84a23d2644080d09fb8af5324d2Raymond Hettinger d3 = dict.fromkeys(frozenset(d)) 318ea5962f86e8550978446724dadcacd60e03feef2Tim Peters self.assertEqual(sum(elem.hash_count for elem in d), n) 319e3146f5aa3cbb8d28a6a429b5ccc07002e339ff2Raymond Hettinger d3 = dict.fromkeys(frozenset(d), 123) 320e3146f5aa3cbb8d28a6a429b5ccc07002e339ff2Raymond Hettinger self.assertEqual(sum(elem.hash_count for elem in d), n) 321e3146f5aa3cbb8d28a6a429b5ccc07002e339ff2Raymond Hettinger self.assertEqual(d3, dict.fromkeys(d, 123)) 322d6fc72a5ae27048dae56c773896ccbd6152d9b9bRaymond Hettinger 323a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestSet(TestJointOps): 324a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger thetype = set 325a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 32650a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger def test_init(self): 32749ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger s = self.thetype() 32850a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger s.__init__(self.word) 32950a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger self.assertEqual(s, set(self.word)) 33050a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger s.__init__(self.otherword) 33150a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger self.assertEqual(s, set(self.otherword)) 332eae05de91be776d141e531a11cb169dd30a8241dRaymond Hettinger self.assertRaises(TypeError, s.__init__, s, 2); 333eae05de91be776d141e531a11cb169dd30a8241dRaymond Hettinger self.assertRaises(TypeError, s.__init__, 1); 33450a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger 33549ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger def test_constructor_identity(self): 33649ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger s = self.thetype(range(3)) 33749ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger t = self.thetype(s) 33849ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger self.assertNotEqual(id(s), id(t)) 33949ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger 340a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_hash(self): 341a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, hash, self.s) 342a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 343a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_clear(self): 344a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.s.clear() 345f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertEqual(self.s, set()) 346f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertEqual(len(self.s), 0) 347a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 34849ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger def test_copy(self): 34949ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger dup = self.s.copy() 35049ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger self.assertEqual(self.s, dup) 35149ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger self.assertNotEqual(id(self.s), id(dup)) 35249ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger 353a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_add(self): 354a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.s.add('Q') 355a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_('Q' in self.s) 356f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger dup = self.s.copy() 357f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.s.add('Q') 358f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertEqual(self.s, dup) 359a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, self.s.add, []) 360a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 361a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_remove(self): 362a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.s.remove('a') 363a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_('a' not in self.s) 364a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(KeyError, self.s.remove, 'Q') 365a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, self.s.remove, []) 366bfd334a42d35e58369e3a53e16733234e2741975Raymond Hettinger s = self.thetype([frozenset(self.word)]) 367bfd334a42d35e58369e3a53e16733234e2741975Raymond Hettinger self.assert_(self.thetype(self.word) in s) 368bfd334a42d35e58369e3a53e16733234e2741975Raymond Hettinger s.remove(self.thetype(self.word)) 369bfd334a42d35e58369e3a53e16733234e2741975Raymond Hettinger self.assert_(self.thetype(self.word) not in s) 370bfd334a42d35e58369e3a53e16733234e2741975Raymond Hettinger self.assertRaises(KeyError, self.s.remove, self.thetype(self.word)) 371a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 372c789f341bb3d1a7689110238669360fc8f379c44Raymond Hettinger def test_remove_keyerror_unpacking(self): 373c789f341bb3d1a7689110238669360fc8f379c44Raymond Hettinger # bug: www.python.org/sf/1576657 374c789f341bb3d1a7689110238669360fc8f379c44Raymond Hettinger for v1 in ['Q', (1,)]: 375c789f341bb3d1a7689110238669360fc8f379c44Raymond Hettinger try: 376c789f341bb3d1a7689110238669360fc8f379c44Raymond Hettinger self.s.remove(v1) 377c789f341bb3d1a7689110238669360fc8f379c44Raymond Hettinger except KeyError, e: 378c789f341bb3d1a7689110238669360fc8f379c44Raymond Hettinger v2 = e.args[0] 379c789f341bb3d1a7689110238669360fc8f379c44Raymond Hettinger self.assertEqual(v1, v2) 380c789f341bb3d1a7689110238669360fc8f379c44Raymond Hettinger else: 381c789f341bb3d1a7689110238669360fc8f379c44Raymond Hettinger self.fail() 382c789f341bb3d1a7689110238669360fc8f379c44Raymond Hettinger 383a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_discard(self): 384a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.s.discard('a') 385a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_('a' not in self.s) 386a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.s.discard('Q') 387a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, self.s.discard, []) 388bfd334a42d35e58369e3a53e16733234e2741975Raymond Hettinger s = self.thetype([frozenset(self.word)]) 389bfd334a42d35e58369e3a53e16733234e2741975Raymond Hettinger self.assert_(self.thetype(self.word) in s) 390bfd334a42d35e58369e3a53e16733234e2741975Raymond Hettinger s.discard(self.thetype(self.word)) 391bfd334a42d35e58369e3a53e16733234e2741975Raymond Hettinger self.assert_(self.thetype(self.word) not in s) 392bfd334a42d35e58369e3a53e16733234e2741975Raymond Hettinger s.discard(self.thetype(self.word)) 393a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 394a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_pop(self): 395a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for i in xrange(len(self.s)): 396a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger elem = self.s.pop() 397a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(elem not in self.s) 398a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(KeyError, self.s.pop) 399a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 400f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger def test_update(self): 401f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger retval = self.s.update(self.otherword) 402a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(retval, None) 403a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for c in (self.word + self.otherword): 404a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(c in self.s) 405f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertRaises(PassThru, self.s.update, check_pass_thru()) 406f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertRaises(TypeError, self.s.update, [[]]) 407f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger for p, q in (('cdc', 'abcd'), ('efgfe', 'abcefg'), ('ccb', 'abc'), ('ef', 'abcef')): 408f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger for C in set, frozenset, dict.fromkeys, str, unicode, list, tuple: 409f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger s = self.thetype('abcba') 410f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertEqual(s.update(C(p)), None) 411f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertEqual(s, set(q)) 412ee4bcad68ec383c0140d0a21f4ac296073c0f938Raymond Hettinger for p in ('cdc', 'efgfe', 'ccb', 'ef', 'abcda'): 413ee4bcad68ec383c0140d0a21f4ac296073c0f938Raymond Hettinger q = 'ahi' 414ee4bcad68ec383c0140d0a21f4ac296073c0f938Raymond Hettinger for C in set, frozenset, dict.fromkeys, str, unicode, list, tuple: 415ee4bcad68ec383c0140d0a21f4ac296073c0f938Raymond Hettinger s = self.thetype('abcba') 416ee4bcad68ec383c0140d0a21f4ac296073c0f938Raymond Hettinger self.assertEqual(s.update(C(p), C(q)), None) 417ee4bcad68ec383c0140d0a21f4ac296073c0f938Raymond Hettinger self.assertEqual(s, set(s) | set(p) | set(q)) 418a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 419a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_ior(self): 420a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.s |= set(self.otherword) 421a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for c in (self.word + self.otherword): 422a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(c in self.s) 423a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 424a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_intersection_update(self): 425a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger retval = self.s.intersection_update(self.otherword) 426a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(retval, None) 427a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for c in (self.word + self.otherword): 428a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger if c in self.otherword and c in self.word: 429a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(c in self.s) 430a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger else: 431a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(c not in self.s) 432a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(PassThru, self.s.intersection_update, check_pass_thru()) 433a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, self.s.intersection_update, [[]]) 434f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger for p, q in (('cdc', 'c'), ('efgfe', ''), ('ccb', 'bc'), ('ef', '')): 435f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger for C in set, frozenset, dict.fromkeys, str, unicode, list, tuple: 436f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger s = self.thetype('abcba') 437f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertEqual(s.intersection_update(C(p)), None) 438f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertEqual(s, set(q)) 4395c4d3d0e4c6b533dbfbab36ad8034010fe90cf69Raymond Hettinger ss = 'abcba' 4405c4d3d0e4c6b533dbfbab36ad8034010fe90cf69Raymond Hettinger s = self.thetype(ss) 4415c4d3d0e4c6b533dbfbab36ad8034010fe90cf69Raymond Hettinger t = 'cbc' 4425c4d3d0e4c6b533dbfbab36ad8034010fe90cf69Raymond Hettinger self.assertEqual(s.intersection_update(C(p), C(t)), None) 4435c4d3d0e4c6b533dbfbab36ad8034010fe90cf69Raymond Hettinger self.assertEqual(s, set('abcba')&set(p)&set(t)) 444a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 445a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_iand(self): 446a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.s &= set(self.otherword) 447a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for c in (self.word + self.otherword): 448a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger if c in self.otherword and c in self.word: 449a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(c in self.s) 450a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger else: 451a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(c not in self.s) 452a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 453a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_difference_update(self): 454a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger retval = self.s.difference_update(self.otherword) 455a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(retval, None) 456a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for c in (self.word + self.otherword): 457a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger if c in self.word and c not in self.otherword: 458a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(c in self.s) 459a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger else: 460a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(c not in self.s) 461a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(PassThru, self.s.difference_update, check_pass_thru()) 462a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, self.s.difference_update, [[]]) 463f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertRaises(TypeError, self.s.symmetric_difference_update, [[]]) 464f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger for p, q in (('cdc', 'ab'), ('efgfe', 'abc'), ('ccb', 'a'), ('ef', 'abc')): 465f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger for C in set, frozenset, dict.fromkeys, str, unicode, list, tuple: 466f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger s = self.thetype('abcba') 467f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertEqual(s.difference_update(C(p)), None) 468f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertEqual(s, set(q)) 469a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 470a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_isub(self): 471a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.s -= set(self.otherword) 472a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for c in (self.word + self.otherword): 473a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger if c in self.word and c not in self.otherword: 474a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(c in self.s) 475a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger else: 476a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(c not in self.s) 477a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 478a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_symmetric_difference_update(self): 479a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger retval = self.s.symmetric_difference_update(self.otherword) 480a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(retval, None) 481a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for c in (self.word + self.otherword): 482a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger if (c in self.word) ^ (c in self.otherword): 483a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(c in self.s) 484a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger else: 485a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(c not in self.s) 486a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(PassThru, self.s.symmetric_difference_update, check_pass_thru()) 487a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, self.s.symmetric_difference_update, [[]]) 488f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger for p, q in (('cdc', 'abd'), ('efgfe', 'abcefg'), ('ccb', 'a'), ('ef', 'abcef')): 489f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger for C in set, frozenset, dict.fromkeys, str, unicode, list, tuple: 490f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger s = self.thetype('abcba') 491f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertEqual(s.symmetric_difference_update(C(p)), None) 492f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertEqual(s, set(q)) 493a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 494a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_ixor(self): 495a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.s ^= set(self.otherword) 496a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for c in (self.word + self.otherword): 497a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger if (c in self.word) ^ (c in self.otherword): 498a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(c in self.s) 499a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger else: 500a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(c not in self.s) 501a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 502c991db240ca8ea838c6acb0c8dc5300dca23c39eRaymond Hettinger def test_inplace_on_self(self): 503c991db240ca8ea838c6acb0c8dc5300dca23c39eRaymond Hettinger t = self.s.copy() 504c991db240ca8ea838c6acb0c8dc5300dca23c39eRaymond Hettinger t |= t 505c991db240ca8ea838c6acb0c8dc5300dca23c39eRaymond Hettinger self.assertEqual(t, self.s) 506c991db240ca8ea838c6acb0c8dc5300dca23c39eRaymond Hettinger t &= t 507c991db240ca8ea838c6acb0c8dc5300dca23c39eRaymond Hettinger self.assertEqual(t, self.s) 508c991db240ca8ea838c6acb0c8dc5300dca23c39eRaymond Hettinger t -= t 509c991db240ca8ea838c6acb0c8dc5300dca23c39eRaymond Hettinger self.assertEqual(t, self.thetype()) 510c991db240ca8ea838c6acb0c8dc5300dca23c39eRaymond Hettinger t = self.s.copy() 511c991db240ca8ea838c6acb0c8dc5300dca23c39eRaymond Hettinger t ^= t 512c991db240ca8ea838c6acb0c8dc5300dca23c39eRaymond Hettinger self.assertEqual(t, self.thetype()) 513c991db240ca8ea838c6acb0c8dc5300dca23c39eRaymond Hettinger 514691d80532b0a0204e92de35ecba1472d87af6e94Raymond Hettinger def test_weakref(self): 515691d80532b0a0204e92de35ecba1472d87af6e94Raymond Hettinger s = self.thetype('gallahad') 516691d80532b0a0204e92de35ecba1472d87af6e94Raymond Hettinger p = proxy(s) 517691d80532b0a0204e92de35ecba1472d87af6e94Raymond Hettinger self.assertEqual(str(p), str(s)) 518691d80532b0a0204e92de35ecba1472d87af6e94Raymond Hettinger s = None 519691d80532b0a0204e92de35ecba1472d87af6e94Raymond Hettinger self.assertRaises(ReferenceError, str, p) 520691d80532b0a0204e92de35ecba1472d87af6e94Raymond Hettinger 521c47e01d02021253dd9f8fd4ced6eb663436431bbRaymond Hettinger # C API test only available in a debug build 522176014ffad8d39820293b63bf7177a7d2953343aBarry Warsaw if hasattr(set, "test_c_api"): 523c47e01d02021253dd9f8fd4ced6eb663436431bbRaymond Hettinger def test_c_api(self): 524c47e01d02021253dd9f8fd4ced6eb663436431bbRaymond Hettinger self.assertEqual(set('abc').test_c_api(), True) 525c47e01d02021253dd9f8fd4ced6eb663436431bbRaymond Hettinger 52650a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettingerclass SetSubclass(set): 52750a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger pass 52850a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger 52950a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettingerclass TestSetSubclass(TestSet): 53050a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger thetype = SetSubclass 531a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 5329fdfadb06ee3c6d182af084afaa97bc6bf4652bcRaymond Hettingerclass SetSubclassWithKeywordArgs(set): 5339fdfadb06ee3c6d182af084afaa97bc6bf4652bcRaymond Hettinger def __init__(self, iterable=[], newarg=None): 5349fdfadb06ee3c6d182af084afaa97bc6bf4652bcRaymond Hettinger set.__init__(self, iterable) 5359fdfadb06ee3c6d182af084afaa97bc6bf4652bcRaymond Hettinger 5369fdfadb06ee3c6d182af084afaa97bc6bf4652bcRaymond Hettingerclass TestSetSubclassWithKeywordArgs(TestSet): 537f733abb7831d6566cb0fccd0550d58ec3b7f05a4Tim Peters 5389fdfadb06ee3c6d182af084afaa97bc6bf4652bcRaymond Hettinger def test_keywords_in_subclass(self): 5399fdfadb06ee3c6d182af084afaa97bc6bf4652bcRaymond Hettinger 'SF bug #1486663 -- this used to erroneously raise a TypeError' 5409fdfadb06ee3c6d182af084afaa97bc6bf4652bcRaymond Hettinger SetSubclassWithKeywordArgs(newarg=1) 5419fdfadb06ee3c6d182af084afaa97bc6bf4652bcRaymond Hettinger 542a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestFrozenSet(TestJointOps): 543a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger thetype = frozenset 544a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 54550a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger def test_init(self): 54649ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger s = self.thetype(self.word) 54749ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger s.__init__(self.otherword) 54849ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger self.assertEqual(s, set(self.word)) 54949ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger 550d794666048510deca0d4987a4c74d0fca85be411Raymond Hettinger def test_singleton_empty_frozenset(self): 551d794666048510deca0d4987a4c74d0fca85be411Raymond Hettinger f = frozenset() 552d794666048510deca0d4987a4c74d0fca85be411Raymond Hettinger efs = [frozenset(), frozenset([]), frozenset(()), frozenset(''), 553d794666048510deca0d4987a4c74d0fca85be411Raymond Hettinger frozenset(), frozenset([]), frozenset(()), frozenset(''), 554d794666048510deca0d4987a4c74d0fca85be411Raymond Hettinger frozenset(xrange(0)), frozenset(frozenset()), 555d794666048510deca0d4987a4c74d0fca85be411Raymond Hettinger frozenset(f), f] 556d794666048510deca0d4987a4c74d0fca85be411Raymond Hettinger # All of the empty frozensets should have just one id() 557d794666048510deca0d4987a4c74d0fca85be411Raymond Hettinger self.assertEqual(len(set(map(id, efs))), 1) 558d794666048510deca0d4987a4c74d0fca85be411Raymond Hettinger 55949ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger def test_constructor_identity(self): 56049ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger s = self.thetype(range(3)) 56149ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger t = self.thetype(s) 56249ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger self.assertEqual(id(s), id(t)) 56350a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger 564a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_hash(self): 56549ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger self.assertEqual(hash(self.thetype('abcdeb')), 56649ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger hash(self.thetype('ebecda'))) 56749ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger 56882cb9a235de45074d578d46bbf6680e726b13efdRaymond Hettinger # make sure that all permutations give the same hash value 56982cb9a235de45074d578d46bbf6680e726b13efdRaymond Hettinger n = 100 57082cb9a235de45074d578d46bbf6680e726b13efdRaymond Hettinger seq = [randrange(n) for i in xrange(n)] 57182cb9a235de45074d578d46bbf6680e726b13efdRaymond Hettinger results = set() 57282cb9a235de45074d578d46bbf6680e726b13efdRaymond Hettinger for i in xrange(200): 57382cb9a235de45074d578d46bbf6680e726b13efdRaymond Hettinger shuffle(seq) 57482cb9a235de45074d578d46bbf6680e726b13efdRaymond Hettinger results.add(hash(self.thetype(seq))) 57582cb9a235de45074d578d46bbf6680e726b13efdRaymond Hettinger self.assertEqual(len(results), 1) 57682cb9a235de45074d578d46bbf6680e726b13efdRaymond Hettinger 57749ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger def test_copy(self): 57849ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger dup = self.s.copy() 57949ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger self.assertEqual(id(self.s), id(dup)) 580a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 581a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_frozen_as_dictkey(self): 582a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger seq = range(10) + list('abcdefg') + ['apple'] 58349ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger key1 = self.thetype(seq) 58449ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger key2 = self.thetype(reversed(seq)) 585a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(key1, key2) 586a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertNotEqual(id(key1), id(key2)) 587a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger d = {} 588a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger d[key1] = 42 589a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(d[key2], 42) 590a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 591a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_hash_caching(self): 59249ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger f = self.thetype('abcdcda') 593a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(hash(f), hash(f)) 594a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 59549ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger def test_hash_effectiveness(self): 59649ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger n = 13 59749ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger hashvalues = set() 5986e70accaffc61a5af7d78be1b365d1cab804751bRaymond Hettinger addhashvalue = hashvalues.add 5996e70accaffc61a5af7d78be1b365d1cab804751bRaymond Hettinger elemmasks = [(i+1, 1<<i) for i in range(n)] 60049ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger for i in xrange(2**n): 6016e70accaffc61a5af7d78be1b365d1cab804751bRaymond Hettinger addhashvalue(hash(frozenset([e for e, m in elemmasks if m&i]))) 6026e70accaffc61a5af7d78be1b365d1cab804751bRaymond Hettinger self.assertEqual(len(hashvalues), 2**n) 60349ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger 60450a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettingerclass FrozenSetSubclass(frozenset): 60550a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger pass 60650a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger 60750a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettingerclass TestFrozenSetSubclass(TestFrozenSet): 60850a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger thetype = FrozenSetSubclass 60950a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger 61049ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger def test_constructor_identity(self): 61149ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger s = self.thetype(range(3)) 61249ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger t = self.thetype(s) 61349ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger self.assertNotEqual(id(s), id(t)) 61449ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger 61549ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger def test_copy(self): 61649ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger dup = self.s.copy() 61749ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger self.assertNotEqual(id(self.s), id(dup)) 61849ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger 61949ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger def test_nested_empty_constructor(self): 62049ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger s = self.thetype() 62149ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger t = self.thetype(s) 62249ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger self.assertEqual(s, t) 62349ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger 624d794666048510deca0d4987a4c74d0fca85be411Raymond Hettinger def test_singleton_empty_frozenset(self): 625d794666048510deca0d4987a4c74d0fca85be411Raymond Hettinger Frozenset = self.thetype 626d794666048510deca0d4987a4c74d0fca85be411Raymond Hettinger f = frozenset() 627d794666048510deca0d4987a4c74d0fca85be411Raymond Hettinger F = Frozenset() 628d794666048510deca0d4987a4c74d0fca85be411Raymond Hettinger efs = [Frozenset(), Frozenset([]), Frozenset(()), Frozenset(''), 629d794666048510deca0d4987a4c74d0fca85be411Raymond Hettinger Frozenset(), Frozenset([]), Frozenset(()), Frozenset(''), 630d794666048510deca0d4987a4c74d0fca85be411Raymond Hettinger Frozenset(xrange(0)), Frozenset(Frozenset()), 631d794666048510deca0d4987a4c74d0fca85be411Raymond Hettinger Frozenset(frozenset()), f, F, Frozenset(f), Frozenset(F)] 632d794666048510deca0d4987a4c74d0fca85be411Raymond Hettinger # All empty frozenset subclass instances should have different ids 633d794666048510deca0d4987a4c74d0fca85be411Raymond Hettinger self.assertEqual(len(set(map(id, efs))), len(efs)) 634d794666048510deca0d4987a4c74d0fca85be411Raymond Hettinger 635a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger# Tests taken from test_sets.py ============================================= 636a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 637a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerempty_set = set() 638a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 639a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#============================================================================== 640a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 641a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestBasicOps(unittest.TestCase): 642a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 643a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_repr(self): 644a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger if self.repr is not None: 64570a6b49821a3226f55e9716f32d802d06640cb89Walter Dörwald self.assertEqual(repr(self.set), self.repr) 646a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 647eae05de91be776d141e531a11cb169dd30a8241dRaymond Hettinger def test_print(self): 648be9160b035449b00ff4aee1837c510ec518b08bcNeal Norwitz fo = open(test_support.TESTFN, "wb") 649eae05de91be776d141e531a11cb169dd30a8241dRaymond Hettinger try: 650eae05de91be776d141e531a11cb169dd30a8241dRaymond Hettinger print >> fo, self.set, 651eae05de91be776d141e531a11cb169dd30a8241dRaymond Hettinger fo.close() 652eae05de91be776d141e531a11cb169dd30a8241dRaymond Hettinger fo = open(test_support.TESTFN, "rb") 653eae05de91be776d141e531a11cb169dd30a8241dRaymond Hettinger self.assertEqual(fo.read(), repr(self.set)) 654eae05de91be776d141e531a11cb169dd30a8241dRaymond Hettinger finally: 655eae05de91be776d141e531a11cb169dd30a8241dRaymond Hettinger fo.close() 656be9160b035449b00ff4aee1837c510ec518b08bcNeal Norwitz test_support.unlink(test_support.TESTFN) 657eae05de91be776d141e531a11cb169dd30a8241dRaymond Hettinger 658a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_length(self): 659a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(len(self.set), self.length) 660a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 661a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_self_equality(self): 662a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, self.set) 663a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 664a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_equivalent_equality(self): 665a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, self.dup) 666a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 667a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_copy(self): 668a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set.copy(), self.dup) 669a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 670a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_self_union(self): 671a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger result = self.set | self.set 672a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(result, self.dup) 673a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 674a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_empty_union(self): 675a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger result = self.set | empty_set 676a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(result, self.dup) 677a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 678a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_union_empty(self): 679a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger result = empty_set | self.set 680a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(result, self.dup) 681a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 682a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_self_intersection(self): 683a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger result = self.set & self.set 684a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(result, self.dup) 685a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 686a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_empty_intersection(self): 687a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger result = self.set & empty_set 688a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(result, empty_set) 689a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 690a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_intersection_empty(self): 691a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger result = empty_set & self.set 692a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(result, empty_set) 693a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 6941760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger def test_self_isdisjoint(self): 6951760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger result = self.set.isdisjoint(self.set) 6961760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger self.assertEqual(result, not self.set) 6971760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger 6981760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger def test_empty_isdisjoint(self): 6991760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger result = self.set.isdisjoint(empty_set) 7001760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger self.assertEqual(result, True) 7011760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger 7021760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger def test_isdisjoint_empty(self): 7031760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger result = empty_set.isdisjoint(self.set) 7041760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger self.assertEqual(result, True) 7051760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger 706a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_self_symmetric_difference(self): 707a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger result = self.set ^ self.set 708a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(result, empty_set) 709a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 710a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def checkempty_symmetric_difference(self): 711a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger result = self.set ^ empty_set 712a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(result, self.set) 713a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 714a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_self_difference(self): 715a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger result = self.set - self.set 716a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(result, empty_set) 717a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 718a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_empty_difference(self): 719a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger result = self.set - empty_set 720a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(result, self.dup) 721a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 722a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_empty_difference_rev(self): 723a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger result = empty_set - self.set 724a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(result, empty_set) 725a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 726a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_iteration(self): 727a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for v in self.set: 728a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(v in self.values) 729fcf4435ae02c3962a8ad71a9539877060c694468Neal Norwitz setiter = iter(self.set) 730f5b3e36493da275334e29afdbd238863697dca35Armin Rigo # note: __length_hint__ is an internal undocumented API, 731f5b3e36493da275334e29afdbd238863697dca35Armin Rigo # don't rely on it in your own programs 732f5b3e36493da275334e29afdbd238863697dca35Armin Rigo self.assertEqual(setiter.__length_hint__(), len(self.set)) 733a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 734a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_pickling(self): 735a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger p = pickle.dumps(self.set) 736a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger copy = pickle.loads(p) 737a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, copy, 738a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger "%s != %s" % (self.set, copy)) 739a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 740a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------ 741a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 742a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestBasicOpsEmpty(TestBasicOps): 743a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def setUp(self): 744a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.case = "empty set" 745a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.values = [] 746a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set = set(self.values) 747a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.dup = set(self.values) 748a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.length = 0 749a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.repr = "set([])" 750a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 751a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------ 752a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 753a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestBasicOpsSingleton(TestBasicOps): 754a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def setUp(self): 755a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.case = "unit set (number)" 756a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.values = [3] 757a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set = set(self.values) 758a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.dup = set(self.values) 759a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.length = 1 760a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.repr = "set([3])" 761a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 762a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_in(self): 763a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.failUnless(3 in self.set) 764a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 765a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_not_in(self): 766a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.failUnless(2 not in self.set) 767a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 768a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------ 769a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 770a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestBasicOpsTuple(TestBasicOps): 771a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def setUp(self): 772a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.case = "unit set (tuple)" 773a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.values = [(0, "zero")] 774a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set = set(self.values) 775a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.dup = set(self.values) 776a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.length = 1 777a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.repr = "set([(0, 'zero')])" 778a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 779a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_in(self): 780a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.failUnless((0, "zero") in self.set) 781a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 782a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_not_in(self): 783a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.failUnless(9 not in self.set) 784a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 785a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------ 786a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 787a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestBasicOpsTriple(TestBasicOps): 788a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def setUp(self): 789a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.case = "triple set" 790a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.values = [0, "zero", operator.add] 791a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set = set(self.values) 792a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.dup = set(self.values) 793a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.length = 3 794a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.repr = None 795a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 796a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#============================================================================== 797a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 798a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerdef baditer(): 799a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger raise TypeError 800a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger yield True 801a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 802a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerdef gooditer(): 803a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger yield True 804a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 805a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestExceptionPropagation(unittest.TestCase): 806a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger """SF 628246: Set constructor should not trap iterator TypeErrors""" 807a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 808a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_instanceWithException(self): 809a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, set, baditer()) 810a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 811a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_instancesWithoutException(self): 812a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger # All of these iterables should load without exception. 813a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger set([1,2,3]) 814a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger set((1,2,3)) 815a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger set({'one':1, 'two':2, 'three':3}) 816a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger set(xrange(3)) 817a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger set('abc') 818a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger set(gooditer()) 819a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 820fcf4435ae02c3962a8ad71a9539877060c694468Neal Norwitz def test_changingSizeWhileIterating(self): 821fcf4435ae02c3962a8ad71a9539877060c694468Neal Norwitz s = set([1,2,3]) 822fcf4435ae02c3962a8ad71a9539877060c694468Neal Norwitz try: 823fcf4435ae02c3962a8ad71a9539877060c694468Neal Norwitz for i in s: 824fcf4435ae02c3962a8ad71a9539877060c694468Neal Norwitz s.update([4]) 825fcf4435ae02c3962a8ad71a9539877060c694468Neal Norwitz except RuntimeError: 826fcf4435ae02c3962a8ad71a9539877060c694468Neal Norwitz pass 827fcf4435ae02c3962a8ad71a9539877060c694468Neal Norwitz else: 828fcf4435ae02c3962a8ad71a9539877060c694468Neal Norwitz self.fail("no exception when changing size during iteration") 829fcf4435ae02c3962a8ad71a9539877060c694468Neal Norwitz 830a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#============================================================================== 831a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 832a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestSetOfSets(unittest.TestCase): 833a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_constructor(self): 834a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger inner = frozenset([1]) 835a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger outer = set([inner]) 836a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger element = outer.pop() 837a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(type(element), frozenset) 838a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger outer.add(inner) # Rebuild set of sets with .add method 839a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger outer.remove(inner) 840a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(outer, set()) # Verify that remove worked 841a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger outer.discard(inner) # Absence of KeyError indicates working fine 842a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 843a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#============================================================================== 844a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 845a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestBinaryOps(unittest.TestCase): 846a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def setUp(self): 847a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set = set((2, 4, 6)) 848a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 849a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_eq(self): # SF bug 643115 850a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set({2:1,4:3,6:5})) 851a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 852a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_union_subset(self): 853a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger result = self.set | set([2]) 854a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(result, set((2, 4, 6))) 855a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 856a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_union_superset(self): 857a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger result = self.set | set([2, 4, 6, 8]) 858a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(result, set([2, 4, 6, 8])) 859a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 860a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_union_overlap(self): 861a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger result = self.set | set([3, 4, 5]) 862a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(result, set([2, 3, 4, 5, 6])) 863a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 864a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_union_non_overlap(self): 865a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger result = self.set | set([8]) 866a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(result, set([2, 4, 6, 8])) 867a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 868a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_intersection_subset(self): 869a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger result = self.set & set((2, 4)) 870a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(result, set((2, 4))) 871a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 872a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_intersection_superset(self): 873a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger result = self.set & set([2, 4, 6, 8]) 874a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(result, set([2, 4, 6])) 875a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 876a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_intersection_overlap(self): 877a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger result = self.set & set([3, 4, 5]) 878a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(result, set([4])) 879a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 880a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_intersection_non_overlap(self): 881a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger result = self.set & set([8]) 882a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(result, empty_set) 883a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 8841760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger def test_isdisjoint_subset(self): 8851760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger result = self.set.isdisjoint(set((2, 4))) 8861760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger self.assertEqual(result, False) 8871760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger 8881760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger def test_isdisjoint_superset(self): 8891760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger result = self.set.isdisjoint(set([2, 4, 6, 8])) 8901760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger self.assertEqual(result, False) 8911760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger 8921760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger def test_isdisjoint_overlap(self): 8931760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger result = self.set.isdisjoint(set([3, 4, 5])) 8941760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger self.assertEqual(result, False) 8951760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger 8961760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger def test_isdisjoint_non_overlap(self): 8971760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger result = self.set.isdisjoint(set([8])) 8981760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger self.assertEqual(result, True) 8991760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger 900a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_sym_difference_subset(self): 901a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger result = self.set ^ set((2, 4)) 902a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(result, set([6])) 903a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 904a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_sym_difference_superset(self): 905a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger result = self.set ^ set((2, 4, 6, 8)) 906a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(result, set([8])) 907a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 908a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_sym_difference_overlap(self): 909a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger result = self.set ^ set((3, 4, 5)) 910a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(result, set([2, 3, 5, 6])) 911a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 912a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_sym_difference_non_overlap(self): 913a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger result = self.set ^ set([8]) 914a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(result, set([2, 4, 6, 8])) 915a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 916a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_cmp(self): 917a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger a, b = set('a'), set('b') 918a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, cmp, a, b) 919a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 920a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger # You can view this as a buglet: cmp(a, a) does not raise TypeError, 921a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger # because __eq__ is tried before __cmp__, and a.__eq__(a) returns True, 922a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger # which Python thinks is good enough to synthesize a cmp() result 923a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger # without calling __cmp__. 924a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(cmp(a, a), 0) 925a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 926a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, cmp, a, 12) 927a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, cmp, "abc", a) 928a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 929a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#============================================================================== 930a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 931a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestUpdateOps(unittest.TestCase): 932a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def setUp(self): 933a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set = set((2, 4, 6)) 934a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 935a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_union_subset(self): 936a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set |= set([2]) 937a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set((2, 4, 6))) 938a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 939a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_union_superset(self): 940a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set |= set([2, 4, 6, 8]) 941a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set([2, 4, 6, 8])) 942a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 943a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_union_overlap(self): 944a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set |= set([3, 4, 5]) 945a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set([2, 3, 4, 5, 6])) 946a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 947a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_union_non_overlap(self): 948a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set |= set([8]) 949a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set([2, 4, 6, 8])) 950a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 951a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_union_method_call(self): 952f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.set.update(set([3, 4, 5])) 953a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set([2, 3, 4, 5, 6])) 954a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 955a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_intersection_subset(self): 956a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set &= set((2, 4)) 957a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set((2, 4))) 958a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 959a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_intersection_superset(self): 960a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set &= set([2, 4, 6, 8]) 961a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set([2, 4, 6])) 962a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 963a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_intersection_overlap(self): 964a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set &= set([3, 4, 5]) 965a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set([4])) 966a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 967a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_intersection_non_overlap(self): 968a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set &= set([8]) 969a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, empty_set) 970a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 971a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_intersection_method_call(self): 972a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set.intersection_update(set([3, 4, 5])) 973a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set([4])) 974a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 975a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_sym_difference_subset(self): 976a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set ^= set((2, 4)) 977a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set([6])) 978a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 979a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_sym_difference_superset(self): 980a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set ^= set((2, 4, 6, 8)) 981a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set([8])) 982a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 983a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_sym_difference_overlap(self): 984a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set ^= set((3, 4, 5)) 985a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set([2, 3, 5, 6])) 986a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 987a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_sym_difference_non_overlap(self): 988a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set ^= set([8]) 989a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set([2, 4, 6, 8])) 990a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 991a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_sym_difference_method_call(self): 992a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set.symmetric_difference_update(set([3, 4, 5])) 993a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set([2, 3, 5, 6])) 994a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 995a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_difference_subset(self): 996a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set -= set((2, 4)) 997a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set([6])) 998a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 999a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_difference_superset(self): 1000a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set -= set((2, 4, 6, 8)) 1001a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set([])) 1002a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1003a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_difference_overlap(self): 1004a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set -= set((3, 4, 5)) 1005a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set([2, 6])) 1006a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1007a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_difference_non_overlap(self): 1008a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set -= set([8]) 1009a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set([2, 4, 6])) 1010a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1011a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_difference_method_call(self): 1012a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set.difference_update(set([3, 4, 5])) 1013a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set([2, 6])) 1014a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1015a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#============================================================================== 1016a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1017a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestMutate(unittest.TestCase): 1018a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def setUp(self): 1019a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.values = ["a", "b", "c"] 1020a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set = set(self.values) 1021a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1022a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_add_present(self): 1023a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set.add("c") 1024a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set("abc")) 1025a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1026a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_add_absent(self): 1027a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set.add("d") 1028a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set("abcd")) 1029a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1030a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_add_until_full(self): 1031a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger tmp = set() 1032a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger expected_len = 0 1033a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for v in self.values: 1034a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger tmp.add(v) 1035a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger expected_len += 1 1036a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(len(tmp), expected_len) 1037a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(tmp, self.set) 1038a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1039a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_remove_present(self): 1040a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set.remove("b") 1041a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set("ac")) 1042a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1043a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_remove_absent(self): 1044a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger try: 1045a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set.remove("d") 1046a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.fail("Removing missing element should have raised LookupError") 1047a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger except LookupError: 1048a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger pass 1049a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1050a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_remove_until_empty(self): 1051a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger expected_len = len(self.set) 1052a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for v in self.values: 1053a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set.remove(v) 1054a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger expected_len -= 1 1055a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(len(self.set), expected_len) 1056a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1057a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_discard_present(self): 1058a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set.discard("c") 1059a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set("ab")) 1060a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1061a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_discard_absent(self): 1062a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set.discard("d") 1063a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set("abc")) 1064a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1065a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_clear(self): 1066a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set.clear() 1067a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(len(self.set), 0) 1068a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1069a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_pop(self): 1070a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger popped = {} 1071a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger while self.set: 1072a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger popped[self.set.pop()] = None 1073a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(len(popped), len(self.values)) 1074a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for v in self.values: 1075a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.failUnless(v in popped) 1076a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1077a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_update_empty_tuple(self): 1078f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.set.update(()) 1079a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set(self.values)) 1080a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1081a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_update_unit_tuple_overlap(self): 1082f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.set.update(("a",)) 1083a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set(self.values)) 1084a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1085a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_update_unit_tuple_non_overlap(self): 1086f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.set.update(("a", "z")) 1087a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set(self.values + ["z"])) 1088a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1089a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#============================================================================== 1090a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1091a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestSubsets(unittest.TestCase): 1092a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1093a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger case2method = {"<=": "issubset", 1094a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger ">=": "issuperset", 1095a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger } 1096a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1097a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger reverse = {"==": "==", 1098a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger "!=": "!=", 1099a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger "<": ">", 1100a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger ">": "<", 1101a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger "<=": ">=", 1102a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger ">=": "<=", 1103a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger } 1104a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1105a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_issubset(self): 1106a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger x = self.left 1107a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger y = self.right 1108a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for case in "!=", "==", "<", "<=", ">", ">=": 1109a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger expected = case in self.cases 1110a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger # Test the binary infix spelling. 1111a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger result = eval("x" + case + "y", locals()) 1112a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(result, expected) 1113a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger # Test the "friendly" method-name spelling, if one exists. 1114a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger if case in TestSubsets.case2method: 1115a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger method = getattr(x, TestSubsets.case2method[case]) 1116a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger result = method(y) 1117a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(result, expected) 1118a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1119a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger # Now do the same for the operands reversed. 1120a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger rcase = TestSubsets.reverse[case] 1121a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger result = eval("y" + rcase + "x", locals()) 1122a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(result, expected) 1123a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger if rcase in TestSubsets.case2method: 1124a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger method = getattr(y, TestSubsets.case2method[rcase]) 1125a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger result = method(x) 1126a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(result, expected) 1127a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------ 1128a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1129a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestSubsetEqualEmpty(TestSubsets): 1130a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger left = set() 1131a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger right = set() 1132a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger name = "both empty" 1133a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger cases = "==", "<=", ">=" 1134a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1135a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------ 1136a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1137a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestSubsetEqualNonEmpty(TestSubsets): 1138a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger left = set([1, 2]) 1139a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger right = set([1, 2]) 1140a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger name = "equal pair" 1141a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger cases = "==", "<=", ">=" 1142a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1143a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------ 1144a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1145a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestSubsetEmptyNonEmpty(TestSubsets): 1146a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger left = set() 1147a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger right = set([1, 2]) 1148a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger name = "one empty, one non-empty" 1149a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger cases = "!=", "<", "<=" 1150a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1151a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------ 1152a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1153a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestSubsetPartial(TestSubsets): 1154a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger left = set([1]) 1155a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger right = set([1, 2]) 1156a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger name = "one a non-empty proper subset of other" 1157a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger cases = "!=", "<", "<=" 1158a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1159a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------ 1160a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1161a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestSubsetNonOverlap(TestSubsets): 1162a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger left = set([1]) 1163a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger right = set([2]) 1164a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger name = "neither empty, neither contains" 1165a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger cases = "!=" 1166a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1167a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#============================================================================== 1168a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1169a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestOnlySetsInBinaryOps(unittest.TestCase): 1170a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1171a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_eq_ne(self): 1172a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger # Unlike the others, this is testing that == and != *are* allowed. 1173a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.other == self.set, False) 1174a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set == self.other, False) 1175a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.other != self.set, True) 1176a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set != self.other, True) 1177a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1178a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_ge_gt_le_lt(self): 1179a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, lambda: self.set < self.other) 1180a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, lambda: self.set <= self.other) 1181a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, lambda: self.set > self.other) 1182a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, lambda: self.set >= self.other) 1183a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1184a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, lambda: self.other < self.set) 1185a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, lambda: self.other <= self.set) 1186a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, lambda: self.other > self.set) 1187a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, lambda: self.other >= self.set) 1188a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1189f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger def test_update_operator(self): 1190a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger try: 1191a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set |= self.other 1192a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger except TypeError: 1193a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger pass 1194a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger else: 1195a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.fail("expected TypeError") 1196a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1197f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger def test_update(self): 1198a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger if self.otherIsIterable: 1199f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.set.update(self.other) 1200a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger else: 1201f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertRaises(TypeError, self.set.update, self.other) 1202a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1203a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_union(self): 1204a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, lambda: self.set | self.other) 1205a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, lambda: self.other | self.set) 1206a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger if self.otherIsIterable: 1207a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set.union(self.other) 1208a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger else: 1209a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, self.set.union, self.other) 1210a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1211a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_intersection_update_operator(self): 1212a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger try: 1213a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set &= self.other 1214a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger except TypeError: 1215a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger pass 1216a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger else: 1217a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.fail("expected TypeError") 1218a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1219a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_intersection_update(self): 1220a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger if self.otherIsIterable: 1221a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set.intersection_update(self.other) 1222a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger else: 1223a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, 1224a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set.intersection_update, 1225a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.other) 1226a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1227a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_intersection(self): 1228a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, lambda: self.set & self.other) 1229a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, lambda: self.other & self.set) 1230a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger if self.otherIsIterable: 1231a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set.intersection(self.other) 1232a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger else: 1233a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, self.set.intersection, self.other) 1234a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1235a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_sym_difference_update_operator(self): 1236a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger try: 1237a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set ^= self.other 1238a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger except TypeError: 1239a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger pass 1240a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger else: 1241a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.fail("expected TypeError") 1242a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1243a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_sym_difference_update(self): 1244a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger if self.otherIsIterable: 1245a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set.symmetric_difference_update(self.other) 1246a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger else: 1247a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, 1248a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set.symmetric_difference_update, 1249a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.other) 1250a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1251a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_sym_difference(self): 1252a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, lambda: self.set ^ self.other) 1253a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, lambda: self.other ^ self.set) 1254a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger if self.otherIsIterable: 1255a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set.symmetric_difference(self.other) 1256a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger else: 1257a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, self.set.symmetric_difference, self.other) 1258a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1259a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_difference_update_operator(self): 1260a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger try: 1261a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set -= self.other 1262a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger except TypeError: 1263a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger pass 1264a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger else: 1265a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.fail("expected TypeError") 1266a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1267a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_difference_update(self): 1268a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger if self.otherIsIterable: 1269a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set.difference_update(self.other) 1270a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger else: 1271a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, 1272a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set.difference_update, 1273a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.other) 1274a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1275a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_difference(self): 1276a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, lambda: self.set - self.other) 1277a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, lambda: self.other - self.set) 1278a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger if self.otherIsIterable: 1279a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set.difference(self.other) 1280a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger else: 1281a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, self.set.difference, self.other) 1282a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1283a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------ 1284a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1285a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestOnlySetsNumeric(TestOnlySetsInBinaryOps): 1286a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def setUp(self): 1287a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set = set((1, 2, 3)) 1288a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.other = 19 1289a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.otherIsIterable = False 1290a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1291a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------ 1292a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1293a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestOnlySetsDict(TestOnlySetsInBinaryOps): 1294a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def setUp(self): 1295a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set = set((1, 2, 3)) 1296a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.other = {1:2, 3:4} 1297a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.otherIsIterable = True 1298a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1299a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------ 1300a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1301a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestOnlySetsOperator(TestOnlySetsInBinaryOps): 1302a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def setUp(self): 1303a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set = set((1, 2, 3)) 1304a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.other = operator.add 1305a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.otherIsIterable = False 1306a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1307a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------ 1308a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1309a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestOnlySetsTuple(TestOnlySetsInBinaryOps): 1310a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def setUp(self): 1311a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set = set((1, 2, 3)) 1312a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.other = (2, 4, 6) 1313a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.otherIsIterable = True 1314a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1315a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------ 1316a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1317a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestOnlySetsString(TestOnlySetsInBinaryOps): 1318a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def setUp(self): 1319a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set = set((1, 2, 3)) 1320a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.other = 'abc' 1321a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.otherIsIterable = True 1322a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1323a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------ 1324a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1325a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestOnlySetsGenerator(TestOnlySetsInBinaryOps): 1326a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def setUp(self): 1327a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def gen(): 1328a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for i in xrange(0, 10, 2): 1329a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger yield i 1330a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set = set((1, 2, 3)) 1331a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.other = gen() 1332a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.otherIsIterable = True 1333a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1334a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#============================================================================== 1335a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1336a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestCopying(unittest.TestCase): 1337a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1338a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_copy(self): 1339a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger dup = self.set.copy() 1340a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger dup_list = list(dup); dup_list.sort() 1341a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger set_list = list(self.set); set_list.sort() 1342a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(len(dup_list), len(set_list)) 1343a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for i in range(len(dup_list)): 1344a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.failUnless(dup_list[i] is set_list[i]) 1345a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1346a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_deep_copy(self): 1347a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger dup = copy.deepcopy(self.set) 134870a6b49821a3226f55e9716f32d802d06640cb89Walter Dörwald ##print type(dup), repr(dup) 1349a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger dup_list = list(dup); dup_list.sort() 1350a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger set_list = list(self.set); set_list.sort() 1351a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(len(dup_list), len(set_list)) 1352a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for i in range(len(dup_list)): 1353a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(dup_list[i], set_list[i]) 1354a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1355a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------ 1356a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1357a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestCopyingEmpty(TestCopying): 1358a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def setUp(self): 1359a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set = set() 1360a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1361a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------ 1362a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1363a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestCopyingSingleton(TestCopying): 1364a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def setUp(self): 1365a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set = set(["hello"]) 1366a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1367a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------ 1368a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1369a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestCopyingTriple(TestCopying): 1370a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def setUp(self): 1371a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set = set(["zero", 0, None]) 1372a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1373a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------ 1374a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1375a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestCopyingTuple(TestCopying): 1376a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def setUp(self): 1377a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set = set([(1, 2)]) 1378a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1379a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------ 1380a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1381a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestCopyingNested(TestCopying): 1382a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def setUp(self): 1383a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set = set([((1, 2), (3, 4))]) 1384a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1385a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#============================================================================== 1386a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1387a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestIdentities(unittest.TestCase): 1388a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def setUp(self): 1389a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.a = set('abracadabra') 1390a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.b = set('alacazam') 1391a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1392a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_binopsVsSubsets(self): 1393a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger a, b = self.a, self.b 1394a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(a - b < a) 1395a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(b - a < b) 1396a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(a & b < a) 1397a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(a & b < b) 1398a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(a | b > a) 1399a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(a | b > b) 1400a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(a ^ b < a | b) 1401a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1402a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_commutativity(self): 1403a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger a, b = self.a, self.b 1404a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(a&b, b&a) 1405a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(a|b, b|a) 1406a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(a^b, b^a) 1407a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger if a != b: 1408a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertNotEqual(a-b, b-a) 1409a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1410a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_summations(self): 1411a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger # check that sums of parts equal the whole 1412a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger a, b = self.a, self.b 1413a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual((a-b)|(a&b)|(b-a), a|b) 1414a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual((a&b)|(a^b), a|b) 1415a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(a|(b-a), a|b) 1416a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual((a-b)|b, a|b) 1417a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual((a-b)|(a&b), a) 1418a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual((b-a)|(a&b), b) 1419a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual((a-b)|(b-a), a^b) 1420a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1421a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_exclusion(self): 1422a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger # check that inverse operations show non-overlap 1423a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger a, b, zero = self.a, self.b, set() 1424a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual((a-b)&b, zero) 1425a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual((b-a)&a, zero) 1426a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual((a&b)&(a^b), zero) 1427a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1428a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger# Tests derived from test_itertools.py ======================================= 1429a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1430a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerdef R(seqn): 1431a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 'Regular generator' 1432a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for i in seqn: 1433a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger yield i 1434a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1435a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass G: 1436a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 'Sequence using __getitem__' 1437a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def __init__(self, seqn): 1438a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.seqn = seqn 1439a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def __getitem__(self, i): 1440a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger return self.seqn[i] 1441a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1442a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass I: 1443a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 'Sequence using iterator protocol' 1444a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def __init__(self, seqn): 1445a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.seqn = seqn 1446a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.i = 0 1447a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def __iter__(self): 1448a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger return self 1449a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def next(self): 1450a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger if self.i >= len(self.seqn): raise StopIteration 1451a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger v = self.seqn[self.i] 1452a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.i += 1 1453a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger return v 1454a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1455a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass Ig: 1456a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 'Sequence using iterator protocol defined with a generator' 1457a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def __init__(self, seqn): 1458a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.seqn = seqn 1459a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.i = 0 1460a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def __iter__(self): 1461a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for val in self.seqn: 1462a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger yield val 1463a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1464a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass X: 1465a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 'Missing __getitem__ and __iter__' 1466a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def __init__(self, seqn): 1467a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.seqn = seqn 1468a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.i = 0 1469a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def next(self): 1470a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger if self.i >= len(self.seqn): raise StopIteration 1471a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger v = self.seqn[self.i] 1472a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.i += 1 1473a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger return v 1474a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1475a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass N: 1476a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 'Iterator missing next()' 1477a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def __init__(self, seqn): 1478a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.seqn = seqn 1479a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.i = 0 1480a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def __iter__(self): 1481a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger return self 1482a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1483a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass E: 1484a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 'Test propagation of exceptions' 1485a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def __init__(self, seqn): 1486a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.seqn = seqn 1487a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.i = 0 1488a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def __iter__(self): 1489a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger return self 1490a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def next(self): 1491ffdb8bb99c4017152a9dca70669f9d6b9831d454Raymond Hettinger 3 // 0 1492a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1493a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass S: 1494a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 'Test immediate stop' 1495a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def __init__(self, seqn): 1496a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger pass 1497a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def __iter__(self): 1498a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger return self 1499a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def next(self): 1500a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger raise StopIteration 1501a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1502a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerfrom itertools import chain, imap 1503a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerdef L(seqn): 1504a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 'Test multiple tiers of iterators' 1505a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger return chain(imap(lambda x:x, R(Ig(G(seqn))))) 1506a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1507a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestVariousIteratorArgs(unittest.TestCase): 1508a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1509a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_constructor(self): 1510a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for cons in (set, frozenset): 1511a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for s in ("123", "", range(1000), ('do', 1.2), xrange(2000,2200,5)): 1512a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for g in (G, I, Ig, S, L, R): 151364958a15d7c03efdc3d2eddf247666e18d1fd910Raymond Hettinger self.assertEqual(sorted(cons(g(s))), sorted(g(s))) 1514a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, cons , X(s)) 1515a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, cons , N(s)) 1516a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(ZeroDivisionError, cons , E(s)) 1517a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1518a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_inline_methods(self): 1519a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger s = set('november') 1520a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for data in ("123", "", range(1000), ('do', 1.2), xrange(2000,2200,5), 'december'): 15211760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger for meth in (s.union, s.intersection, s.difference, s.symmetric_difference, s.isdisjoint): 1522a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for g in (G, I, Ig, L, R): 1523a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger expected = meth(data) 1524a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger actual = meth(G(data)) 15251760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger if isinstance(expected, bool): 15261760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger self.assertEqual(actual, expected) 15271760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger else: 15281760c8a017ca87dc3b21d383542a23bca4370b34Raymond Hettinger self.assertEqual(sorted(actual), sorted(expected)) 1529a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, meth, X(s)) 1530a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, meth, N(s)) 1531a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(ZeroDivisionError, meth, E(s)) 1532a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1533a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_inplace_methods(self): 1534a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for data in ("123", "", range(1000), ('do', 1.2), xrange(2000,2200,5), 'december'): 1535f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger for methname in ('update', 'intersection_update', 1536a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 'difference_update', 'symmetric_difference_update'): 1537a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for g in (G, I, Ig, S, L, R): 1538a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger s = set('january') 1539a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger t = s.copy() 1540a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger getattr(s, methname)(list(g(data))) 1541a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger getattr(t, methname)(g(data)) 154264958a15d7c03efdc3d2eddf247666e18d1fd910Raymond Hettinger self.assertEqual(sorted(s), sorted(t)) 1543a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1544a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, getattr(set('january'), methname), X(data)) 1545a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, getattr(set('january'), methname), N(data)) 1546a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(ZeroDivisionError, getattr(set('january'), methname), E(data)) 1547a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 15486170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger# Application tests (based on David Eppstein's graph recipes ==================================== 15496170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger 15506170874f9c16b45a60851821c599898f51ba02d2Raymond Hettingerdef powerset(U): 15516170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger """Generates all subsets of a set or sequence U.""" 15526170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger U = iter(U) 15536170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger try: 15546170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger x = frozenset([U.next()]) 15556170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger for S in powerset(U): 15566170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger yield S 15576170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger yield S | x 15586170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger except StopIteration: 15596170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger yield frozenset() 15606170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger 15616170874f9c16b45a60851821c599898f51ba02d2Raymond Hettingerdef cube(n): 15626170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger """Graph of n-dimensional hypercube.""" 15636170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger singletons = [frozenset([x]) for x in range(n)] 15646170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger return dict([(x, frozenset([x^s for s in singletons])) 15656170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger for x in powerset(range(n))]) 15666170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger 15676170874f9c16b45a60851821c599898f51ba02d2Raymond Hettingerdef linegraph(G): 15686170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger """Graph, the vertices of which are edges of G, 15696170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger with two vertices being adjacent iff the corresponding 15706170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger edges share a vertex.""" 15716170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger L = {} 15726170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger for x in G: 15736170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger for y in G[x]: 15746170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger nx = [frozenset([x,z]) for z in G[x] if z != y] 15756170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger ny = [frozenset([y,z]) for z in G[y] if z != x] 15766170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger L[frozenset([x,y])] = frozenset(nx+ny) 15776170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger return L 15786170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger 15796170874f9c16b45a60851821c599898f51ba02d2Raymond Hettingerdef faces(G): 15806170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger 'Return a set of faces in G. Where a face is a set of vertices on that face' 15816170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger # currently limited to triangles,squares, and pentagons 15826170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger f = set() 15836170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger for v1, edges in G.items(): 15846170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger for v2 in edges: 15856170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger for v3 in G[v2]: 15866170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger if v1 == v3: 15876170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger continue 15886170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger if v1 in G[v3]: 15896170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger f.add(frozenset([v1, v2, v3])) 15906170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger else: 15916170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger for v4 in G[v3]: 15926170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger if v4 == v2: 15936170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger continue 15946170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger if v1 in G[v4]: 15956170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger f.add(frozenset([v1, v2, v3, v4])) 15966170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger else: 15976170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger for v5 in G[v4]: 15986170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger if v5 == v3 or v5 == v2: 15996170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger continue 16006170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger if v1 in G[v5]: 16016170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger f.add(frozenset([v1, v2, v3, v4, v5])) 16026170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger return f 16036170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger 16046170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger 16056170874f9c16b45a60851821c599898f51ba02d2Raymond Hettingerclass TestGraphs(unittest.TestCase): 16066170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger 16076170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger def test_cube(self): 16086170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger 16096170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger g = cube(3) # vert --> {v1, v2, v3} 16106170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger vertices1 = set(g) 16116170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger self.assertEqual(len(vertices1), 8) # eight vertices 16126170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger for edge in g.values(): 16136170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger self.assertEqual(len(edge), 3) # each vertex connects to three edges 16146170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger vertices2 = set(v for edges in g.values() for v in edges) 16156170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger self.assertEqual(vertices1, vertices2) # edge vertices in original set 16166170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger 16176170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger cubefaces = faces(g) 16186170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger self.assertEqual(len(cubefaces), 6) # six faces 16196170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger for face in cubefaces: 16206170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger self.assertEqual(len(face), 4) # each face is a square 16216170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger 16226170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger def test_cuboctahedron(self): 16236170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger 16246170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger # http://en.wikipedia.org/wiki/Cuboctahedron 16256170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger # 8 triangular faces and 6 square faces 16266170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger # 12 indentical vertices each connecting a triangle and square 16276170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger 16286170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger g = cube(3) 16296170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger cuboctahedron = linegraph(g) # V( --> {V1, V2, V3, V4} 16306170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger self.assertEqual(len(cuboctahedron), 12)# twelve vertices 16316170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger 16326170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger vertices = set(cuboctahedron) 16336170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger for edges in cuboctahedron.values(): 16346170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger self.assertEqual(len(edges), 4) # each vertex connects to four other vertices 16356170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger othervertices = set(edge for edges in cuboctahedron.values() for edge in edges) 16366170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger self.assertEqual(vertices, othervertices) # edge vertices in original set 16376170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger 16386170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger cubofaces = faces(cuboctahedron) 16396170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger facesizes = collections.defaultdict(int) 16406170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger for face in cubofaces: 16416170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger facesizes[len(face)] += 1 16426170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger self.assertEqual(facesizes[3], 8) # eight triangular faces 16436170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger self.assertEqual(facesizes[4], 6) # six square faces 16446170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger 16456170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger for vertex in cuboctahedron: 16466170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger edge = vertex # Cuboctahedron vertices are edges in Cube 16476170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger self.assertEqual(len(edge), 2) # Two cube vertices define an edge 16486170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger for cubevert in edge: 16496170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger self.assert_(cubevert in g) 16506170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger 16516170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger 1652a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#============================================================================== 1653a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1654a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerdef test_main(verbose=None): 1655a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger from test import test_sets 1656a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger test_classes = ( 1657a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestSet, 165850a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger TestSetSubclass, 1659f733abb7831d6566cb0fccd0550d58ec3b7f05a4Tim Peters TestSetSubclassWithKeywordArgs, 1660a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestFrozenSet, 166150a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger TestFrozenSetSubclass, 1662a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestSetOfSets, 1663a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestExceptionPropagation, 1664a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestBasicOpsEmpty, 1665a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestBasicOpsSingleton, 1666a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestBasicOpsTuple, 1667a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestBasicOpsTriple, 1668a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestBinaryOps, 1669a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestUpdateOps, 1670a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestMutate, 1671a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestSubsetEqualEmpty, 1672a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestSubsetEqualNonEmpty, 1673a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestSubsetEmptyNonEmpty, 1674a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestSubsetPartial, 1675a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestSubsetNonOverlap, 1676a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestOnlySetsNumeric, 1677a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestOnlySetsDict, 1678a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestOnlySetsOperator, 1679a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestOnlySetsTuple, 1680a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestOnlySetsString, 1681a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestOnlySetsGenerator, 1682a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestCopyingEmpty, 1683a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestCopyingSingleton, 1684a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestCopyingTriple, 1685a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestCopyingTuple, 1686a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestCopyingNested, 1687a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestIdentities, 1688a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestVariousIteratorArgs, 16896170874f9c16b45a60851821c599898f51ba02d2Raymond Hettinger TestGraphs, 1690a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger ) 1691a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1692a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger test_support.run_unittest(*test_classes) 1693a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1694a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger # verify reference counting 1695a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger if verbose and hasattr(sys, "gettotalrefcount"): 1696a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger import gc 1697a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger counts = [None] * 5 1698a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for i in xrange(len(counts)): 1699a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger test_support.run_unittest(*test_classes) 1700a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger gc.collect() 1701a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger counts[i] = sys.gettotalrefcount() 1702a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger print counts 1703a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1704a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerif __name__ == "__main__": 1705a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger test_main(verbose=True) 1706