test_set.py revision c47e01d02021253dd9f8fd4ced6eb663436431bb
1a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerimport unittest 2a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerfrom test import test_support 3691d80532b0a0204e92de35ecba1472d87af6e94Raymond Hettingerfrom weakref import proxy 4a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerimport operator 5a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerimport copy 6a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerimport pickle 7eae05de91be776d141e531a11cb169dd30a8241dRaymond Hettingerimport os 882cb9a235de45074d578d46bbf6680e726b13efdRaymond Hettingerfrom random import randrange, shuffle 9c47e01d02021253dd9f8fd4ced6eb663436431bbRaymond Hettingerimport sys 10a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 11a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass PassThru(Exception): 12a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger pass 13a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 14a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerdef check_pass_thru(): 15a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger raise PassThru 16a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger yield 1 17a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 18a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestJointOps(unittest.TestCase): 19a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger # Tests common to both set and frozenset 20a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 21a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def setUp(self): 22a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.word = word = 'simsalabim' 23a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.otherword = 'madagascar' 24a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.letters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' 25a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.s = self.thetype(word) 26a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.d = dict.fromkeys(word) 27a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 286429a4727e4bb8bcb0d3deefaefe195e63e6bb6eRaymond Hettinger def test_new_or_init(self): 296429a4727e4bb8bcb0d3deefaefe195e63e6bb6eRaymond Hettinger self.assertRaises(TypeError, self.thetype, [], 2) 306429a4727e4bb8bcb0d3deefaefe195e63e6bb6eRaymond Hettinger 31a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_uniquification(self): 3264958a15d7c03efdc3d2eddf247666e18d1fd910Raymond Hettinger actual = sorted(self.s) 3364958a15d7c03efdc3d2eddf247666e18d1fd910Raymond Hettinger expected = sorted(self.d) 34a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(actual, expected) 35a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(PassThru, self.thetype, check_pass_thru()) 36a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, self.thetype, [[]]) 37a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 38a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_len(self): 39a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(len(self.s), len(self.d)) 40a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 41a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_contains(self): 42a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for c in self.letters: 43a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(c in self.s, c in self.d) 44a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, self.s.__contains__, [[]]) 4519c2d77842290af9b5f470c1eea2a71d1f77c9feRaymond Hettinger s = self.thetype([frozenset(self.letters)]) 4619c2d77842290af9b5f470c1eea2a71d1f77c9feRaymond Hettinger self.assert_(self.thetype(self.letters) in s) 47a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 48a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_union(self): 49a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger u = self.s.union(self.otherword) 50a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for c in self.letters: 51a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(c in u, c in self.d or c in self.otherword) 5249ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger self.assertEqual(self.s, self.thetype(self.word)) 53a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(type(u), self.thetype) 54a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(PassThru, self.s.union, check_pass_thru()) 55a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, self.s.union, [[]]) 56f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger for C in set, frozenset, dict.fromkeys, str, unicode, list, tuple: 57f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertEqual(self.thetype('abcba').union(C('cdc')), set('abcd')) 58f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertEqual(self.thetype('abcba').union(C('efgfe')), set('abcefg')) 59f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertEqual(self.thetype('abcba').union(C('ccb')), set('abc')) 60f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertEqual(self.thetype('abcba').union(C('ef')), set('abcef')) 61a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 62a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_or(self): 63a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger i = self.s.union(self.otherword) 64a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.s | set(self.otherword), i) 65a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.s | frozenset(self.otherword), i) 66a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger try: 67a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.s | self.otherword 68a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger except TypeError: 69a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger pass 70a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger else: 71a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.fail("s|t did not screen-out general iterables") 72a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 73a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_intersection(self): 74a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger i = self.s.intersection(self.otherword) 75a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for c in self.letters: 76a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(c in i, c in self.d and c in self.otherword) 7749ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger self.assertEqual(self.s, self.thetype(self.word)) 78a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(type(i), self.thetype) 79a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(PassThru, self.s.intersection, check_pass_thru()) 80f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger for C in set, frozenset, dict.fromkeys, str, unicode, list, tuple: 81f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertEqual(self.thetype('abcba').intersection(C('cdc')), set('cc')) 82f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertEqual(self.thetype('abcba').intersection(C('efgfe')), set('')) 83f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertEqual(self.thetype('abcba').intersection(C('ccb')), set('bc')) 84f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertEqual(self.thetype('abcba').intersection(C('ef')), set('')) 85a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 86a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_and(self): 87a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger i = self.s.intersection(self.otherword) 88a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.s & set(self.otherword), i) 89a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.s & frozenset(self.otherword), i) 90a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger try: 91a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.s & self.otherword 92a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger except TypeError: 93a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger pass 94a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger else: 95a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.fail("s&t did not screen-out general iterables") 96a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 97a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_difference(self): 98a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger i = self.s.difference(self.otherword) 99a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for c in self.letters: 100a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(c in i, c in self.d and c not in self.otherword) 10149ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger self.assertEqual(self.s, self.thetype(self.word)) 102a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(type(i), self.thetype) 103a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(PassThru, self.s.difference, check_pass_thru()) 104a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, self.s.difference, [[]]) 105f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger for C in set, frozenset, dict.fromkeys, str, unicode, list, tuple: 106f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertEqual(self.thetype('abcba').difference(C('cdc')), set('ab')) 107f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertEqual(self.thetype('abcba').difference(C('efgfe')), set('abc')) 108f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertEqual(self.thetype('abcba').difference(C('ccb')), set('a')) 109f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertEqual(self.thetype('abcba').difference(C('ef')), set('abc')) 110a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 111a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_sub(self): 112a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger i = self.s.difference(self.otherword) 113a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.s - set(self.otherword), i) 114a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.s - frozenset(self.otherword), i) 115a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger try: 116a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.s - self.otherword 117a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger except TypeError: 118a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger pass 119a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger else: 120a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.fail("s-t did not screen-out general iterables") 121a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 122a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_symmetric_difference(self): 123a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger i = self.s.symmetric_difference(self.otherword) 124a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for c in self.letters: 125a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(c in i, (c in self.d) ^ (c in self.otherword)) 12649ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger self.assertEqual(self.s, self.thetype(self.word)) 127a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(type(i), self.thetype) 128a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(PassThru, self.s.symmetric_difference, check_pass_thru()) 129a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, self.s.symmetric_difference, [[]]) 130f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger for C in set, frozenset, dict.fromkeys, str, unicode, list, tuple: 131f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertEqual(self.thetype('abcba').symmetric_difference(C('cdc')), set('abd')) 132f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertEqual(self.thetype('abcba').symmetric_difference(C('efgfe')), set('abcefg')) 133f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertEqual(self.thetype('abcba').symmetric_difference(C('ccb')), set('a')) 134f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertEqual(self.thetype('abcba').symmetric_difference(C('ef')), set('abcef')) 135a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 136a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_xor(self): 137a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger i = self.s.symmetric_difference(self.otherword) 138a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.s ^ set(self.otherword), i) 139a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.s ^ frozenset(self.otherword), i) 140a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger try: 141a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.s ^ self.otherword 142a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger except TypeError: 143a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger pass 144a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger else: 145a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.fail("s^t did not screen-out general iterables") 146a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 147a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_equality(self): 148a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.s, set(self.word)) 149a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.s, frozenset(self.word)) 150a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.s == self.word, False) 151a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertNotEqual(self.s, set(self.otherword)) 152a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertNotEqual(self.s, frozenset(self.otherword)) 153a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.s != self.word, True) 154a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 155a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_setOfFrozensets(self): 156a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger t = map(frozenset, ['abcdef', 'bcd', 'bdcb', 'fed', 'fedccba']) 157a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger s = self.thetype(t) 158a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(len(s), 3) 159a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 160a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_compare(self): 161a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, self.s.__cmp__, self.s) 162a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 163a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_sub_and_super(self): 164a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger p, q, r = map(self.thetype, ['ab', 'abcde', 'def']) 165a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(p < q) 166a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(p <= q) 167a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(q <= q) 168a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(q > p) 169a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(q >= p) 170a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.failIf(q < r) 171a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.failIf(q <= r) 172a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.failIf(q > r) 173a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.failIf(q >= r) 1743fbec701cae361de6beca55bc926e0540635f165Raymond Hettinger self.assert_(set('a').issubset('abc')) 1753fbec701cae361de6beca55bc926e0540635f165Raymond Hettinger self.assert_(set('abc').issuperset('a')) 1763fbec701cae361de6beca55bc926e0540635f165Raymond Hettinger self.failIf(set('a').issubset('cbs')) 1773fbec701cae361de6beca55bc926e0540635f165Raymond Hettinger self.failIf(set('cbs').issuperset('a')) 178a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 179a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_pickling(self): 18015056a5202c89846d75006d66541d5a634ac79b5Raymond Hettinger for i in (0, 1, 2): 18115056a5202c89846d75006d66541d5a634ac79b5Raymond Hettinger p = pickle.dumps(self.s, i) 18215056a5202c89846d75006d66541d5a634ac79b5Raymond Hettinger dup = pickle.loads(p) 18315056a5202c89846d75006d66541d5a634ac79b5Raymond Hettinger self.assertEqual(self.s, dup, "%s != %s" % (self.s, dup)) 18415056a5202c89846d75006d66541d5a634ac79b5Raymond Hettinger if type(self.s) not in (set, frozenset): 18515056a5202c89846d75006d66541d5a634ac79b5Raymond Hettinger self.s.x = 10 18615056a5202c89846d75006d66541d5a634ac79b5Raymond Hettinger p = pickle.dumps(self.s) 18715056a5202c89846d75006d66541d5a634ac79b5Raymond Hettinger dup = pickle.loads(p) 18815056a5202c89846d75006d66541d5a634ac79b5Raymond Hettinger self.assertEqual(self.s.x, dup.x) 189a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 19049ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger def test_deepcopy(self): 19149ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger class Tracer: 19249ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger def __init__(self, value): 19349ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger self.value = value 19449ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger def __hash__(self): 19558eb11cf62dd04ccc2c364b62fd51b4265e2e203Tim Peters return self.value 19649ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger def __deepcopy__(self, memo=None): 19749ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger return Tracer(self.value + 1) 19849ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger t = Tracer(10) 19949ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger s = self.thetype([t]) 20049ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger dup = copy.deepcopy(s) 20149ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger self.assertNotEqual(id(s), id(dup)) 20249ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger for elem in dup: 20349ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger newt = elem 20449ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger self.assertNotEqual(id(t), id(newt)) 20549ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger self.assertEqual(t.value + 1, newt.value) 20649ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger 207bb999b5925ae65d19282c3781cdbb678f92c410fRaymond Hettinger def test_gc(self): 208bb999b5925ae65d19282c3781cdbb678f92c410fRaymond Hettinger # Create a nest of cycles to exercise overall ref count check 209bb999b5925ae65d19282c3781cdbb678f92c410fRaymond Hettinger class A: 210bb999b5925ae65d19282c3781cdbb678f92c410fRaymond Hettinger pass 211bb999b5925ae65d19282c3781cdbb678f92c410fRaymond Hettinger s = set(A() for i in xrange(1000)) 212bb999b5925ae65d19282c3781cdbb678f92c410fRaymond Hettinger for elem in s: 213bb999b5925ae65d19282c3781cdbb678f92c410fRaymond Hettinger elem.cycle = s 214bb999b5925ae65d19282c3781cdbb678f92c410fRaymond Hettinger elem.sub = elem 215bb999b5925ae65d19282c3781cdbb678f92c410fRaymond Hettinger elem.set = set([elem]) 216bb999b5925ae65d19282c3781cdbb678f92c410fRaymond Hettinger 21797979ddc141b88cfd81bdf02404d0337a603f7cfRaymond Hettinger def test_subclass_with_custom_hash(self): 21897979ddc141b88cfd81bdf02404d0337a603f7cfRaymond Hettinger # Bug #1257731 21997979ddc141b88cfd81bdf02404d0337a603f7cfRaymond Hettinger class H(self.thetype): 22097979ddc141b88cfd81bdf02404d0337a603f7cfRaymond Hettinger def __hash__(self): 22197979ddc141b88cfd81bdf02404d0337a603f7cfRaymond Hettinger return id(self) 22297979ddc141b88cfd81bdf02404d0337a603f7cfRaymond Hettinger s=H() 22397979ddc141b88cfd81bdf02404d0337a603f7cfRaymond Hettinger f=set() 22497979ddc141b88cfd81bdf02404d0337a603f7cfRaymond Hettinger f.add(s) 22597979ddc141b88cfd81bdf02404d0337a603f7cfRaymond Hettinger self.assert_(s in f) 22697979ddc141b88cfd81bdf02404d0337a603f7cfRaymond Hettinger f.remove(s) 22797979ddc141b88cfd81bdf02404d0337a603f7cfRaymond Hettinger f.add(s) 22897979ddc141b88cfd81bdf02404d0337a603f7cfRaymond Hettinger f.discard(s) 22997979ddc141b88cfd81bdf02404d0337a603f7cfRaymond Hettinger 230a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestSet(TestJointOps): 231a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger thetype = set 232a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 23350a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger def test_init(self): 23449ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger s = self.thetype() 23550a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger s.__init__(self.word) 23650a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger self.assertEqual(s, set(self.word)) 23750a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger s.__init__(self.otherword) 23850a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger self.assertEqual(s, set(self.otherword)) 239eae05de91be776d141e531a11cb169dd30a8241dRaymond Hettinger self.assertRaises(TypeError, s.__init__, s, 2); 240eae05de91be776d141e531a11cb169dd30a8241dRaymond Hettinger self.assertRaises(TypeError, s.__init__, 1); 24150a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger 24249ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger def test_constructor_identity(self): 24349ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger s = self.thetype(range(3)) 24449ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger t = self.thetype(s) 24549ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger self.assertNotEqual(id(s), id(t)) 24649ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger 247a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_hash(self): 248a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, hash, self.s) 249a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 250a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_clear(self): 251a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.s.clear() 252f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertEqual(self.s, set()) 253f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertEqual(len(self.s), 0) 254a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 25549ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger def test_copy(self): 25649ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger dup = self.s.copy() 25749ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger self.assertEqual(self.s, dup) 25849ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger self.assertNotEqual(id(self.s), id(dup)) 25949ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger 260a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_add(self): 261a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.s.add('Q') 262a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_('Q' in self.s) 263f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger dup = self.s.copy() 264f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.s.add('Q') 265f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertEqual(self.s, dup) 266a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, self.s.add, []) 267a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 268a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_remove(self): 269a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.s.remove('a') 270a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_('a' not in self.s) 271a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(KeyError, self.s.remove, 'Q') 272a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, self.s.remove, []) 273bfd334a42d35e58369e3a53e16733234e2741975Raymond Hettinger s = self.thetype([frozenset(self.word)]) 274bfd334a42d35e58369e3a53e16733234e2741975Raymond Hettinger self.assert_(self.thetype(self.word) in s) 275bfd334a42d35e58369e3a53e16733234e2741975Raymond Hettinger s.remove(self.thetype(self.word)) 276bfd334a42d35e58369e3a53e16733234e2741975Raymond Hettinger self.assert_(self.thetype(self.word) not in s) 277bfd334a42d35e58369e3a53e16733234e2741975Raymond Hettinger self.assertRaises(KeyError, self.s.remove, self.thetype(self.word)) 278a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 279a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_discard(self): 280a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.s.discard('a') 281a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_('a' not in self.s) 282a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.s.discard('Q') 283a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, self.s.discard, []) 284bfd334a42d35e58369e3a53e16733234e2741975Raymond Hettinger s = self.thetype([frozenset(self.word)]) 285bfd334a42d35e58369e3a53e16733234e2741975Raymond Hettinger self.assert_(self.thetype(self.word) in s) 286bfd334a42d35e58369e3a53e16733234e2741975Raymond Hettinger s.discard(self.thetype(self.word)) 287bfd334a42d35e58369e3a53e16733234e2741975Raymond Hettinger self.assert_(self.thetype(self.word) not in s) 288bfd334a42d35e58369e3a53e16733234e2741975Raymond Hettinger s.discard(self.thetype(self.word)) 289a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 290a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_pop(self): 291a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for i in xrange(len(self.s)): 292a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger elem = self.s.pop() 293a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(elem not in self.s) 294a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(KeyError, self.s.pop) 295a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 296f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger def test_update(self): 297f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger retval = self.s.update(self.otherword) 298a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(retval, None) 299a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for c in (self.word + self.otherword): 300a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(c in self.s) 301f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertRaises(PassThru, self.s.update, check_pass_thru()) 302f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertRaises(TypeError, self.s.update, [[]]) 303f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger for p, q in (('cdc', 'abcd'), ('efgfe', 'abcefg'), ('ccb', 'abc'), ('ef', 'abcef')): 304f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger for C in set, frozenset, dict.fromkeys, str, unicode, list, tuple: 305f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger s = self.thetype('abcba') 306f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertEqual(s.update(C(p)), None) 307f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertEqual(s, set(q)) 308a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 309a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_ior(self): 310a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.s |= set(self.otherword) 311a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for c in (self.word + self.otherword): 312a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(c in self.s) 313a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 314a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_intersection_update(self): 315a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger retval = self.s.intersection_update(self.otherword) 316a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(retval, None) 317a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for c in (self.word + self.otherword): 318a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger if c in self.otherword and c in self.word: 319a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(c in self.s) 320a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger else: 321a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(c not in self.s) 322a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(PassThru, self.s.intersection_update, check_pass_thru()) 323a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, self.s.intersection_update, [[]]) 324f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger for p, q in (('cdc', 'c'), ('efgfe', ''), ('ccb', 'bc'), ('ef', '')): 325f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger for C in set, frozenset, dict.fromkeys, str, unicode, list, tuple: 326f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger s = self.thetype('abcba') 327f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertEqual(s.intersection_update(C(p)), None) 328f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertEqual(s, set(q)) 329a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 330a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_iand(self): 331a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.s &= set(self.otherword) 332a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for c in (self.word + self.otherword): 333a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger if c in self.otherword and c in self.word: 334a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(c in self.s) 335a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger else: 336a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(c not in self.s) 337a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 338a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_difference_update(self): 339a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger retval = self.s.difference_update(self.otherword) 340a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(retval, None) 341a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for c in (self.word + self.otherword): 342a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger if c in self.word and c not in self.otherword: 343a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(c in self.s) 344a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger else: 345a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(c not in self.s) 346a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(PassThru, self.s.difference_update, check_pass_thru()) 347a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, self.s.difference_update, [[]]) 348f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertRaises(TypeError, self.s.symmetric_difference_update, [[]]) 349f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger for p, q in (('cdc', 'ab'), ('efgfe', 'abc'), ('ccb', 'a'), ('ef', 'abc')): 350f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger for C in set, frozenset, dict.fromkeys, str, unicode, list, tuple: 351f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger s = self.thetype('abcba') 352f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertEqual(s.difference_update(C(p)), None) 353f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertEqual(s, set(q)) 354a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 355a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_isub(self): 356a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.s -= set(self.otherword) 357a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for c in (self.word + self.otherword): 358a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger if c in self.word and c not in self.otherword: 359a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(c in self.s) 360a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger else: 361a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(c not in self.s) 362a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 363a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_symmetric_difference_update(self): 364a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger retval = self.s.symmetric_difference_update(self.otherword) 365a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(retval, None) 366a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for c in (self.word + self.otherword): 367a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger if (c in self.word) ^ (c in self.otherword): 368a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(c in self.s) 369a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger else: 370a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(c not in self.s) 371a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(PassThru, self.s.symmetric_difference_update, check_pass_thru()) 372a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, self.s.symmetric_difference_update, [[]]) 373f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger for p, q in (('cdc', 'abd'), ('efgfe', 'abcefg'), ('ccb', 'a'), ('ef', 'abcef')): 374f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger for C in set, frozenset, dict.fromkeys, str, unicode, list, tuple: 375f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger s = self.thetype('abcba') 376f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertEqual(s.symmetric_difference_update(C(p)), None) 377f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertEqual(s, set(q)) 378a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 379a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_ixor(self): 380a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.s ^= set(self.otherword) 381a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for c in (self.word + self.otherword): 382a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger if (c in self.word) ^ (c in self.otherword): 383a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(c in self.s) 384a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger else: 385a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(c not in self.s) 386a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 387c991db240ca8ea838c6acb0c8dc5300dca23c39eRaymond Hettinger def test_inplace_on_self(self): 388c991db240ca8ea838c6acb0c8dc5300dca23c39eRaymond Hettinger t = self.s.copy() 389c991db240ca8ea838c6acb0c8dc5300dca23c39eRaymond Hettinger t |= t 390c991db240ca8ea838c6acb0c8dc5300dca23c39eRaymond Hettinger self.assertEqual(t, self.s) 391c991db240ca8ea838c6acb0c8dc5300dca23c39eRaymond Hettinger t &= t 392c991db240ca8ea838c6acb0c8dc5300dca23c39eRaymond Hettinger self.assertEqual(t, self.s) 393c991db240ca8ea838c6acb0c8dc5300dca23c39eRaymond Hettinger t -= t 394c991db240ca8ea838c6acb0c8dc5300dca23c39eRaymond Hettinger self.assertEqual(t, self.thetype()) 395c991db240ca8ea838c6acb0c8dc5300dca23c39eRaymond Hettinger t = self.s.copy() 396c991db240ca8ea838c6acb0c8dc5300dca23c39eRaymond Hettinger t ^= t 397c991db240ca8ea838c6acb0c8dc5300dca23c39eRaymond Hettinger self.assertEqual(t, self.thetype()) 398c991db240ca8ea838c6acb0c8dc5300dca23c39eRaymond Hettinger 399691d80532b0a0204e92de35ecba1472d87af6e94Raymond Hettinger def test_weakref(self): 400691d80532b0a0204e92de35ecba1472d87af6e94Raymond Hettinger s = self.thetype('gallahad') 401691d80532b0a0204e92de35ecba1472d87af6e94Raymond Hettinger p = proxy(s) 402691d80532b0a0204e92de35ecba1472d87af6e94Raymond Hettinger self.assertEqual(str(p), str(s)) 403691d80532b0a0204e92de35ecba1472d87af6e94Raymond Hettinger s = None 404691d80532b0a0204e92de35ecba1472d87af6e94Raymond Hettinger self.assertRaises(ReferenceError, str, p) 405691d80532b0a0204e92de35ecba1472d87af6e94Raymond Hettinger 406c47e01d02021253dd9f8fd4ced6eb663436431bbRaymond Hettinger # C API test only available in a debug build 407c47e01d02021253dd9f8fd4ced6eb663436431bbRaymond Hettinger if hasattr(sys, "gettotalrefcount"): 408c47e01d02021253dd9f8fd4ced6eb663436431bbRaymond Hettinger def test_c_api(self): 409c47e01d02021253dd9f8fd4ced6eb663436431bbRaymond Hettinger self.assertEqual(set('abc').test_c_api(), True) 410c47e01d02021253dd9f8fd4ced6eb663436431bbRaymond Hettinger 41150a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettingerclass SetSubclass(set): 41250a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger pass 41350a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger 41450a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettingerclass TestSetSubclass(TestSet): 41550a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger thetype = SetSubclass 416a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 417a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestFrozenSet(TestJointOps): 418a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger thetype = frozenset 419a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 42050a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger def test_init(self): 42149ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger s = self.thetype(self.word) 42249ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger s.__init__(self.otherword) 42349ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger self.assertEqual(s, set(self.word)) 42449ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger 425d794666048510deca0d4987a4c74d0fca85be411Raymond Hettinger def test_singleton_empty_frozenset(self): 426d794666048510deca0d4987a4c74d0fca85be411Raymond Hettinger f = frozenset() 427d794666048510deca0d4987a4c74d0fca85be411Raymond Hettinger efs = [frozenset(), frozenset([]), frozenset(()), frozenset(''), 428d794666048510deca0d4987a4c74d0fca85be411Raymond Hettinger frozenset(), frozenset([]), frozenset(()), frozenset(''), 429d794666048510deca0d4987a4c74d0fca85be411Raymond Hettinger frozenset(xrange(0)), frozenset(frozenset()), 430d794666048510deca0d4987a4c74d0fca85be411Raymond Hettinger frozenset(f), f] 431d794666048510deca0d4987a4c74d0fca85be411Raymond Hettinger # All of the empty frozensets should have just one id() 432d794666048510deca0d4987a4c74d0fca85be411Raymond Hettinger self.assertEqual(len(set(map(id, efs))), 1) 433d794666048510deca0d4987a4c74d0fca85be411Raymond Hettinger 43449ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger def test_constructor_identity(self): 43549ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger s = self.thetype(range(3)) 43649ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger t = self.thetype(s) 43749ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger self.assertEqual(id(s), id(t)) 43850a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger 439a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_hash(self): 44049ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger self.assertEqual(hash(self.thetype('abcdeb')), 44149ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger hash(self.thetype('ebecda'))) 44249ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger 44382cb9a235de45074d578d46bbf6680e726b13efdRaymond Hettinger # make sure that all permutations give the same hash value 44482cb9a235de45074d578d46bbf6680e726b13efdRaymond Hettinger n = 100 44582cb9a235de45074d578d46bbf6680e726b13efdRaymond Hettinger seq = [randrange(n) for i in xrange(n)] 44682cb9a235de45074d578d46bbf6680e726b13efdRaymond Hettinger results = set() 44782cb9a235de45074d578d46bbf6680e726b13efdRaymond Hettinger for i in xrange(200): 44882cb9a235de45074d578d46bbf6680e726b13efdRaymond Hettinger shuffle(seq) 44982cb9a235de45074d578d46bbf6680e726b13efdRaymond Hettinger results.add(hash(self.thetype(seq))) 45082cb9a235de45074d578d46bbf6680e726b13efdRaymond Hettinger self.assertEqual(len(results), 1) 45182cb9a235de45074d578d46bbf6680e726b13efdRaymond Hettinger 45249ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger def test_copy(self): 45349ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger dup = self.s.copy() 45449ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger self.assertEqual(id(self.s), id(dup)) 455a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 456a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_frozen_as_dictkey(self): 457a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger seq = range(10) + list('abcdefg') + ['apple'] 45849ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger key1 = self.thetype(seq) 45949ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger key2 = self.thetype(reversed(seq)) 460a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(key1, key2) 461a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertNotEqual(id(key1), id(key2)) 462a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger d = {} 463a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger d[key1] = 42 464a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(d[key2], 42) 465a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 466a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_hash_caching(self): 46749ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger f = self.thetype('abcdcda') 468a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(hash(f), hash(f)) 469a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 47049ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger def test_hash_effectiveness(self): 47149ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger n = 13 47249ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger hashvalues = set() 4736e70accaffc61a5af7d78be1b365d1cab804751bRaymond Hettinger addhashvalue = hashvalues.add 4746e70accaffc61a5af7d78be1b365d1cab804751bRaymond Hettinger elemmasks = [(i+1, 1<<i) for i in range(n)] 47549ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger for i in xrange(2**n): 4766e70accaffc61a5af7d78be1b365d1cab804751bRaymond Hettinger addhashvalue(hash(frozenset([e for e, m in elemmasks if m&i]))) 4776e70accaffc61a5af7d78be1b365d1cab804751bRaymond Hettinger self.assertEqual(len(hashvalues), 2**n) 47849ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger 47950a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettingerclass FrozenSetSubclass(frozenset): 48050a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger pass 48150a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger 48250a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettingerclass TestFrozenSetSubclass(TestFrozenSet): 48350a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger thetype = FrozenSetSubclass 48450a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger 48549ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger def test_constructor_identity(self): 48649ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger s = self.thetype(range(3)) 48749ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger t = self.thetype(s) 48849ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger self.assertNotEqual(id(s), id(t)) 48949ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger 49049ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger def test_copy(self): 49149ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger dup = self.s.copy() 49249ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger self.assertNotEqual(id(self.s), id(dup)) 49349ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger 49449ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger def test_nested_empty_constructor(self): 49549ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger s = self.thetype() 49649ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger t = self.thetype(s) 49749ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger self.assertEqual(s, t) 49849ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger 499d794666048510deca0d4987a4c74d0fca85be411Raymond Hettinger def test_singleton_empty_frozenset(self): 500d794666048510deca0d4987a4c74d0fca85be411Raymond Hettinger Frozenset = self.thetype 501d794666048510deca0d4987a4c74d0fca85be411Raymond Hettinger f = frozenset() 502d794666048510deca0d4987a4c74d0fca85be411Raymond Hettinger F = Frozenset() 503d794666048510deca0d4987a4c74d0fca85be411Raymond Hettinger efs = [Frozenset(), Frozenset([]), Frozenset(()), Frozenset(''), 504d794666048510deca0d4987a4c74d0fca85be411Raymond Hettinger Frozenset(), Frozenset([]), Frozenset(()), Frozenset(''), 505d794666048510deca0d4987a4c74d0fca85be411Raymond Hettinger Frozenset(xrange(0)), Frozenset(Frozenset()), 506d794666048510deca0d4987a4c74d0fca85be411Raymond Hettinger Frozenset(frozenset()), f, F, Frozenset(f), Frozenset(F)] 507d794666048510deca0d4987a4c74d0fca85be411Raymond Hettinger # All empty frozenset subclass instances should have different ids 508d794666048510deca0d4987a4c74d0fca85be411Raymond Hettinger self.assertEqual(len(set(map(id, efs))), len(efs)) 509d794666048510deca0d4987a4c74d0fca85be411Raymond Hettinger 510a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger# Tests taken from test_sets.py ============================================= 511a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 512a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerempty_set = set() 513a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 514a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#============================================================================== 515a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 516a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestBasicOps(unittest.TestCase): 517a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 518a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_repr(self): 519a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger if self.repr is not None: 52070a6b49821a3226f55e9716f32d802d06640cb89Walter Dörwald self.assertEqual(repr(self.set), self.repr) 521a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 522eae05de91be776d141e531a11cb169dd30a8241dRaymond Hettinger def test_print(self): 523eae05de91be776d141e531a11cb169dd30a8241dRaymond Hettinger try: 524eae05de91be776d141e531a11cb169dd30a8241dRaymond Hettinger fo = open(test_support.TESTFN, "wb") 525eae05de91be776d141e531a11cb169dd30a8241dRaymond Hettinger print >> fo, self.set, 526eae05de91be776d141e531a11cb169dd30a8241dRaymond Hettinger fo.close() 527eae05de91be776d141e531a11cb169dd30a8241dRaymond Hettinger fo = open(test_support.TESTFN, "rb") 528eae05de91be776d141e531a11cb169dd30a8241dRaymond Hettinger self.assertEqual(fo.read(), repr(self.set)) 529eae05de91be776d141e531a11cb169dd30a8241dRaymond Hettinger finally: 530eae05de91be776d141e531a11cb169dd30a8241dRaymond Hettinger fo.close() 531eae05de91be776d141e531a11cb169dd30a8241dRaymond Hettinger os.remove(test_support.TESTFN) 532eae05de91be776d141e531a11cb169dd30a8241dRaymond Hettinger 533a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_length(self): 534a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(len(self.set), self.length) 535a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 536a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_self_equality(self): 537a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, self.set) 538a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 539a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_equivalent_equality(self): 540a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, self.dup) 541a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 542a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_copy(self): 543a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set.copy(), self.dup) 544a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 545a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_self_union(self): 546a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger result = self.set | self.set 547a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(result, self.dup) 548a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 549a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_empty_union(self): 550a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger result = self.set | empty_set 551a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(result, self.dup) 552a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 553a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_union_empty(self): 554a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger result = empty_set | self.set 555a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(result, self.dup) 556a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 557a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_self_intersection(self): 558a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger result = self.set & self.set 559a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(result, self.dup) 560a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 561a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_empty_intersection(self): 562a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger result = self.set & empty_set 563a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(result, empty_set) 564a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 565a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_intersection_empty(self): 566a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger result = empty_set & self.set 567a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(result, empty_set) 568a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 569a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_self_symmetric_difference(self): 570a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger result = self.set ^ self.set 571a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(result, empty_set) 572a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 573a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def checkempty_symmetric_difference(self): 574a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger result = self.set ^ empty_set 575a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(result, self.set) 576a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 577a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_self_difference(self): 578a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger result = self.set - self.set 579a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(result, empty_set) 580a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 581a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_empty_difference(self): 582a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger result = self.set - empty_set 583a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(result, self.dup) 584a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 585a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_empty_difference_rev(self): 586a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger result = empty_set - self.set 587a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(result, empty_set) 588a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 589a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_iteration(self): 590a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for v in self.set: 591a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(v in self.values) 592a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 593a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_pickling(self): 594a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger p = pickle.dumps(self.set) 595a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger copy = pickle.loads(p) 596a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, copy, 597a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger "%s != %s" % (self.set, copy)) 598a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 599a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------ 600a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 601a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestBasicOpsEmpty(TestBasicOps): 602a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def setUp(self): 603a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.case = "empty set" 604a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.values = [] 605a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set = set(self.values) 606a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.dup = set(self.values) 607a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.length = 0 608a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.repr = "set([])" 609a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 610a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------ 611a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 612a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestBasicOpsSingleton(TestBasicOps): 613a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def setUp(self): 614a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.case = "unit set (number)" 615a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.values = [3] 616a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set = set(self.values) 617a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.dup = set(self.values) 618a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.length = 1 619a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.repr = "set([3])" 620a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 621a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_in(self): 622a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.failUnless(3 in self.set) 623a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 624a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_not_in(self): 625a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.failUnless(2 not in self.set) 626a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 627a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------ 628a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 629a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestBasicOpsTuple(TestBasicOps): 630a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def setUp(self): 631a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.case = "unit set (tuple)" 632a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.values = [(0, "zero")] 633a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set = set(self.values) 634a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.dup = set(self.values) 635a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.length = 1 636a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.repr = "set([(0, 'zero')])" 637a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 638a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_in(self): 639a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.failUnless((0, "zero") in self.set) 640a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 641a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_not_in(self): 642a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.failUnless(9 not in self.set) 643a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 644a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------ 645a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 646a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestBasicOpsTriple(TestBasicOps): 647a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def setUp(self): 648a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.case = "triple set" 649a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.values = [0, "zero", operator.add] 650a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set = set(self.values) 651a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.dup = set(self.values) 652a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.length = 3 653a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.repr = None 654a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 655a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#============================================================================== 656a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 657a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerdef baditer(): 658a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger raise TypeError 659a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger yield True 660a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 661a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerdef gooditer(): 662a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger yield True 663a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 664a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestExceptionPropagation(unittest.TestCase): 665a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger """SF 628246: Set constructor should not trap iterator TypeErrors""" 666a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 667a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_instanceWithException(self): 668a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, set, baditer()) 669a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 670a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_instancesWithoutException(self): 671a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger # All of these iterables should load without exception. 672a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger set([1,2,3]) 673a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger set((1,2,3)) 674a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger set({'one':1, 'two':2, 'three':3}) 675a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger set(xrange(3)) 676a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger set('abc') 677a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger set(gooditer()) 678a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 679a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#============================================================================== 680a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 681a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestSetOfSets(unittest.TestCase): 682a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_constructor(self): 683a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger inner = frozenset([1]) 684a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger outer = set([inner]) 685a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger element = outer.pop() 686a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(type(element), frozenset) 687a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger outer.add(inner) # Rebuild set of sets with .add method 688a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger outer.remove(inner) 689a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(outer, set()) # Verify that remove worked 690a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger outer.discard(inner) # Absence of KeyError indicates working fine 691a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 692a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#============================================================================== 693a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 694a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestBinaryOps(unittest.TestCase): 695a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def setUp(self): 696a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set = set((2, 4, 6)) 697a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 698a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_eq(self): # SF bug 643115 699a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set({2:1,4:3,6:5})) 700a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 701a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_union_subset(self): 702a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger result = self.set | set([2]) 703a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(result, set((2, 4, 6))) 704a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 705a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_union_superset(self): 706a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger result = self.set | set([2, 4, 6, 8]) 707a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(result, set([2, 4, 6, 8])) 708a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 709a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_union_overlap(self): 710a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger result = self.set | set([3, 4, 5]) 711a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(result, set([2, 3, 4, 5, 6])) 712a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 713a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_union_non_overlap(self): 714a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger result = self.set | set([8]) 715a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(result, set([2, 4, 6, 8])) 716a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 717a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_intersection_subset(self): 718a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger result = self.set & set((2, 4)) 719a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(result, set((2, 4))) 720a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 721a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_intersection_superset(self): 722a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger result = self.set & set([2, 4, 6, 8]) 723a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(result, set([2, 4, 6])) 724a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 725a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_intersection_overlap(self): 726a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger result = self.set & set([3, 4, 5]) 727a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(result, set([4])) 728a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 729a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_intersection_non_overlap(self): 730a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger result = self.set & set([8]) 731a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(result, empty_set) 732a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 733a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_sym_difference_subset(self): 734a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger result = self.set ^ set((2, 4)) 735a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(result, set([6])) 736a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 737a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_sym_difference_superset(self): 738a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger result = self.set ^ set((2, 4, 6, 8)) 739a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(result, set([8])) 740a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 741a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_sym_difference_overlap(self): 742a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger result = self.set ^ set((3, 4, 5)) 743a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(result, set([2, 3, 5, 6])) 744a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 745a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_sym_difference_non_overlap(self): 746a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger result = self.set ^ set([8]) 747a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(result, set([2, 4, 6, 8])) 748a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 749a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_cmp(self): 750a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger a, b = set('a'), set('b') 751a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, cmp, a, b) 752a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 753a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger # You can view this as a buglet: cmp(a, a) does not raise TypeError, 754a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger # because __eq__ is tried before __cmp__, and a.__eq__(a) returns True, 755a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger # which Python thinks is good enough to synthesize a cmp() result 756a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger # without calling __cmp__. 757a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(cmp(a, a), 0) 758a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 759a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, cmp, a, 12) 760a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, cmp, "abc", a) 761a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 762a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#============================================================================== 763a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 764a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestUpdateOps(unittest.TestCase): 765a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def setUp(self): 766a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set = set((2, 4, 6)) 767a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 768a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_union_subset(self): 769a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set |= set([2]) 770a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set((2, 4, 6))) 771a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 772a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_union_superset(self): 773a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set |= set([2, 4, 6, 8]) 774a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set([2, 4, 6, 8])) 775a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 776a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_union_overlap(self): 777a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set |= set([3, 4, 5]) 778a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set([2, 3, 4, 5, 6])) 779a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 780a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_union_non_overlap(self): 781a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set |= set([8]) 782a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set([2, 4, 6, 8])) 783a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 784a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_union_method_call(self): 785f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.set.update(set([3, 4, 5])) 786a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set([2, 3, 4, 5, 6])) 787a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 788a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_intersection_subset(self): 789a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set &= set((2, 4)) 790a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set((2, 4))) 791a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 792a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_intersection_superset(self): 793a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set &= set([2, 4, 6, 8]) 794a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set([2, 4, 6])) 795a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 796a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_intersection_overlap(self): 797a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set &= set([3, 4, 5]) 798a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set([4])) 799a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 800a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_intersection_non_overlap(self): 801a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set &= set([8]) 802a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, empty_set) 803a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 804a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_intersection_method_call(self): 805a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set.intersection_update(set([3, 4, 5])) 806a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set([4])) 807a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 808a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_sym_difference_subset(self): 809a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set ^= set((2, 4)) 810a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set([6])) 811a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 812a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_sym_difference_superset(self): 813a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set ^= set((2, 4, 6, 8)) 814a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set([8])) 815a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 816a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_sym_difference_overlap(self): 817a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set ^= set((3, 4, 5)) 818a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set([2, 3, 5, 6])) 819a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 820a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_sym_difference_non_overlap(self): 821a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set ^= set([8]) 822a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set([2, 4, 6, 8])) 823a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 824a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_sym_difference_method_call(self): 825a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set.symmetric_difference_update(set([3, 4, 5])) 826a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set([2, 3, 5, 6])) 827a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 828a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_difference_subset(self): 829a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set -= set((2, 4)) 830a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set([6])) 831a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 832a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_difference_superset(self): 833a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set -= set((2, 4, 6, 8)) 834a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set([])) 835a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 836a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_difference_overlap(self): 837a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set -= set((3, 4, 5)) 838a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set([2, 6])) 839a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 840a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_difference_non_overlap(self): 841a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set -= set([8]) 842a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set([2, 4, 6])) 843a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 844a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_difference_method_call(self): 845a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set.difference_update(set([3, 4, 5])) 846a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set([2, 6])) 847a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 848a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#============================================================================== 849a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 850a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestMutate(unittest.TestCase): 851a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def setUp(self): 852a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.values = ["a", "b", "c"] 853a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set = set(self.values) 854a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 855a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_add_present(self): 856a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set.add("c") 857a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set("abc")) 858a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 859a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_add_absent(self): 860a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set.add("d") 861a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set("abcd")) 862a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 863a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_add_until_full(self): 864a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger tmp = set() 865a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger expected_len = 0 866a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for v in self.values: 867a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger tmp.add(v) 868a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger expected_len += 1 869a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(len(tmp), expected_len) 870a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(tmp, self.set) 871a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 872a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_remove_present(self): 873a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set.remove("b") 874a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set("ac")) 875a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 876a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_remove_absent(self): 877a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger try: 878a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set.remove("d") 879a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.fail("Removing missing element should have raised LookupError") 880a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger except LookupError: 881a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger pass 882a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 883a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_remove_until_empty(self): 884a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger expected_len = len(self.set) 885a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for v in self.values: 886a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set.remove(v) 887a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger expected_len -= 1 888a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(len(self.set), expected_len) 889a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 890a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_discard_present(self): 891a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set.discard("c") 892a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set("ab")) 893a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 894a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_discard_absent(self): 895a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set.discard("d") 896a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set("abc")) 897a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 898a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_clear(self): 899a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set.clear() 900a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(len(self.set), 0) 901a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 902a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_pop(self): 903a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger popped = {} 904a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger while self.set: 905a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger popped[self.set.pop()] = None 906a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(len(popped), len(self.values)) 907a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for v in self.values: 908a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.failUnless(v in popped) 909a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 910a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_update_empty_tuple(self): 911f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.set.update(()) 912a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set(self.values)) 913a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 914a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_update_unit_tuple_overlap(self): 915f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.set.update(("a",)) 916a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set(self.values)) 917a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 918a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_update_unit_tuple_non_overlap(self): 919f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.set.update(("a", "z")) 920a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set(self.values + ["z"])) 921a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 922a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#============================================================================== 923a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 924a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestSubsets(unittest.TestCase): 925a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 926a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger case2method = {"<=": "issubset", 927a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger ">=": "issuperset", 928a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger } 929a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 930a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger reverse = {"==": "==", 931a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger "!=": "!=", 932a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger "<": ">", 933a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger ">": "<", 934a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger "<=": ">=", 935a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger ">=": "<=", 936a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger } 937a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 938a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_issubset(self): 939a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger x = self.left 940a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger y = self.right 941a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for case in "!=", "==", "<", "<=", ">", ">=": 942a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger expected = case in self.cases 943a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger # Test the binary infix spelling. 944a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger result = eval("x" + case + "y", locals()) 945a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(result, expected) 946a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger # Test the "friendly" method-name spelling, if one exists. 947a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger if case in TestSubsets.case2method: 948a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger method = getattr(x, TestSubsets.case2method[case]) 949a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger result = method(y) 950a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(result, expected) 951a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 952a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger # Now do the same for the operands reversed. 953a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger rcase = TestSubsets.reverse[case] 954a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger result = eval("y" + rcase + "x", locals()) 955a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(result, expected) 956a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger if rcase in TestSubsets.case2method: 957a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger method = getattr(y, TestSubsets.case2method[rcase]) 958a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger result = method(x) 959a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(result, expected) 960a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------ 961a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 962a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestSubsetEqualEmpty(TestSubsets): 963a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger left = set() 964a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger right = set() 965a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger name = "both empty" 966a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger cases = "==", "<=", ">=" 967a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 968a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------ 969a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 970a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestSubsetEqualNonEmpty(TestSubsets): 971a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger left = set([1, 2]) 972a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger right = set([1, 2]) 973a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger name = "equal pair" 974a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger cases = "==", "<=", ">=" 975a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 976a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------ 977a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 978a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestSubsetEmptyNonEmpty(TestSubsets): 979a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger left = set() 980a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger right = set([1, 2]) 981a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger name = "one empty, one non-empty" 982a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger cases = "!=", "<", "<=" 983a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 984a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------ 985a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 986a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestSubsetPartial(TestSubsets): 987a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger left = set([1]) 988a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger right = set([1, 2]) 989a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger name = "one a non-empty proper subset of other" 990a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger cases = "!=", "<", "<=" 991a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 992a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------ 993a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 994a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestSubsetNonOverlap(TestSubsets): 995a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger left = set([1]) 996a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger right = set([2]) 997a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger name = "neither empty, neither contains" 998a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger cases = "!=" 999a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1000a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#============================================================================== 1001a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1002a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestOnlySetsInBinaryOps(unittest.TestCase): 1003a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1004a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_eq_ne(self): 1005a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger # Unlike the others, this is testing that == and != *are* allowed. 1006a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.other == self.set, False) 1007a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set == self.other, False) 1008a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.other != self.set, True) 1009a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set != self.other, True) 1010a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1011a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_ge_gt_le_lt(self): 1012a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, lambda: self.set < self.other) 1013a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, lambda: self.set <= self.other) 1014a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, lambda: self.set > self.other) 1015a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, lambda: self.set >= self.other) 1016a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1017a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, lambda: self.other < self.set) 1018a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, lambda: self.other <= self.set) 1019a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, lambda: self.other > self.set) 1020a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, lambda: self.other >= self.set) 1021a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1022f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger def test_update_operator(self): 1023a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger try: 1024a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set |= self.other 1025a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger except TypeError: 1026a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger pass 1027a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger else: 1028a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.fail("expected TypeError") 1029a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1030f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger def test_update(self): 1031a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger if self.otherIsIterable: 1032f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.set.update(self.other) 1033a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger else: 1034f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertRaises(TypeError, self.set.update, self.other) 1035a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1036a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_union(self): 1037a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, lambda: self.set | self.other) 1038a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, lambda: self.other | self.set) 1039a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger if self.otherIsIterable: 1040a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set.union(self.other) 1041a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger else: 1042a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, self.set.union, self.other) 1043a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1044a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_intersection_update_operator(self): 1045a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger try: 1046a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set &= self.other 1047a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger except TypeError: 1048a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger pass 1049a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger else: 1050a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.fail("expected TypeError") 1051a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1052a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_intersection_update(self): 1053a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger if self.otherIsIterable: 1054a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set.intersection_update(self.other) 1055a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger else: 1056a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, 1057a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set.intersection_update, 1058a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.other) 1059a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1060a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_intersection(self): 1061a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, lambda: self.set & self.other) 1062a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, lambda: self.other & self.set) 1063a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger if self.otherIsIterable: 1064a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set.intersection(self.other) 1065a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger else: 1066a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, self.set.intersection, self.other) 1067a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1068a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_sym_difference_update_operator(self): 1069a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger try: 1070a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set ^= self.other 1071a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger except TypeError: 1072a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger pass 1073a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger else: 1074a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.fail("expected TypeError") 1075a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1076a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_sym_difference_update(self): 1077a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger if self.otherIsIterable: 1078a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set.symmetric_difference_update(self.other) 1079a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger else: 1080a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, 1081a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set.symmetric_difference_update, 1082a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.other) 1083a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1084a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_sym_difference(self): 1085a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, lambda: self.set ^ self.other) 1086a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, lambda: self.other ^ self.set) 1087a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger if self.otherIsIterable: 1088a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set.symmetric_difference(self.other) 1089a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger else: 1090a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, self.set.symmetric_difference, self.other) 1091a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1092a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_difference_update_operator(self): 1093a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger try: 1094a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set -= self.other 1095a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger except TypeError: 1096a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger pass 1097a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger else: 1098a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.fail("expected TypeError") 1099a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1100a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_difference_update(self): 1101a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger if self.otherIsIterable: 1102a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set.difference_update(self.other) 1103a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger else: 1104a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, 1105a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set.difference_update, 1106a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.other) 1107a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1108a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_difference(self): 1109a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, lambda: self.set - self.other) 1110a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, lambda: self.other - self.set) 1111a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger if self.otherIsIterable: 1112a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set.difference(self.other) 1113a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger else: 1114a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, self.set.difference, self.other) 1115a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1116a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------ 1117a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1118a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestOnlySetsNumeric(TestOnlySetsInBinaryOps): 1119a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def setUp(self): 1120a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set = set((1, 2, 3)) 1121a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.other = 19 1122a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.otherIsIterable = False 1123a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1124a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------ 1125a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1126a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestOnlySetsDict(TestOnlySetsInBinaryOps): 1127a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def setUp(self): 1128a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set = set((1, 2, 3)) 1129a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.other = {1:2, 3:4} 1130a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.otherIsIterable = True 1131a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1132a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------ 1133a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1134a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestOnlySetsOperator(TestOnlySetsInBinaryOps): 1135a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def setUp(self): 1136a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set = set((1, 2, 3)) 1137a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.other = operator.add 1138a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.otherIsIterable = False 1139a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1140a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------ 1141a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1142a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestOnlySetsTuple(TestOnlySetsInBinaryOps): 1143a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def setUp(self): 1144a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set = set((1, 2, 3)) 1145a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.other = (2, 4, 6) 1146a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.otherIsIterable = True 1147a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1148a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------ 1149a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1150a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestOnlySetsString(TestOnlySetsInBinaryOps): 1151a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def setUp(self): 1152a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set = set((1, 2, 3)) 1153a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.other = 'abc' 1154a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.otherIsIterable = True 1155a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1156a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------ 1157a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1158a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestOnlySetsGenerator(TestOnlySetsInBinaryOps): 1159a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def setUp(self): 1160a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def gen(): 1161a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for i in xrange(0, 10, 2): 1162a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger yield i 1163a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set = set((1, 2, 3)) 1164a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.other = gen() 1165a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.otherIsIterable = True 1166a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1167a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#============================================================================== 1168a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1169a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestCopying(unittest.TestCase): 1170a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1171a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_copy(self): 1172a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger dup = self.set.copy() 1173a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger dup_list = list(dup); dup_list.sort() 1174a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger set_list = list(self.set); set_list.sort() 1175a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(len(dup_list), len(set_list)) 1176a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for i in range(len(dup_list)): 1177a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.failUnless(dup_list[i] is set_list[i]) 1178a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1179a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_deep_copy(self): 1180a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger dup = copy.deepcopy(self.set) 118170a6b49821a3226f55e9716f32d802d06640cb89Walter Dörwald ##print type(dup), repr(dup) 1182a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger dup_list = list(dup); dup_list.sort() 1183a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger set_list = list(self.set); set_list.sort() 1184a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(len(dup_list), len(set_list)) 1185a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for i in range(len(dup_list)): 1186a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(dup_list[i], set_list[i]) 1187a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1188a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------ 1189a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1190a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestCopyingEmpty(TestCopying): 1191a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def setUp(self): 1192a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set = set() 1193a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1194a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------ 1195a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1196a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestCopyingSingleton(TestCopying): 1197a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def setUp(self): 1198a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set = set(["hello"]) 1199a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1200a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------ 1201a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1202a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestCopyingTriple(TestCopying): 1203a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def setUp(self): 1204a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set = set(["zero", 0, None]) 1205a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1206a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------ 1207a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1208a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestCopyingTuple(TestCopying): 1209a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def setUp(self): 1210a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set = set([(1, 2)]) 1211a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1212a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------ 1213a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1214a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestCopyingNested(TestCopying): 1215a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def setUp(self): 1216a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set = set([((1, 2), (3, 4))]) 1217a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1218a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#============================================================================== 1219a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1220a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestIdentities(unittest.TestCase): 1221a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def setUp(self): 1222a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.a = set('abracadabra') 1223a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.b = set('alacazam') 1224a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1225a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_binopsVsSubsets(self): 1226a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger a, b = self.a, self.b 1227a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(a - b < a) 1228a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(b - a < b) 1229a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(a & b < a) 1230a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(a & b < b) 1231a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(a | b > a) 1232a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(a | b > b) 1233a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(a ^ b < a | b) 1234a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1235a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_commutativity(self): 1236a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger a, b = self.a, self.b 1237a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(a&b, b&a) 1238a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(a|b, b|a) 1239a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(a^b, b^a) 1240a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger if a != b: 1241a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertNotEqual(a-b, b-a) 1242a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1243a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_summations(self): 1244a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger # check that sums of parts equal the whole 1245a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger a, b = self.a, self.b 1246a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual((a-b)|(a&b)|(b-a), a|b) 1247a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual((a&b)|(a^b), a|b) 1248a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(a|(b-a), a|b) 1249a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual((a-b)|b, a|b) 1250a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual((a-b)|(a&b), a) 1251a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual((b-a)|(a&b), b) 1252a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual((a-b)|(b-a), a^b) 1253a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1254a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_exclusion(self): 1255a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger # check that inverse operations show non-overlap 1256a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger a, b, zero = self.a, self.b, set() 1257a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual((a-b)&b, zero) 1258a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual((b-a)&a, zero) 1259a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual((a&b)&(a^b), zero) 1260a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1261a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger# Tests derived from test_itertools.py ======================================= 1262a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1263a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerdef R(seqn): 1264a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 'Regular generator' 1265a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for i in seqn: 1266a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger yield i 1267a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1268a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass G: 1269a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 'Sequence using __getitem__' 1270a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def __init__(self, seqn): 1271a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.seqn = seqn 1272a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def __getitem__(self, i): 1273a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger return self.seqn[i] 1274a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1275a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass I: 1276a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 'Sequence using iterator protocol' 1277a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def __init__(self, seqn): 1278a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.seqn = seqn 1279a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.i = 0 1280a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def __iter__(self): 1281a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger return self 1282a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def next(self): 1283a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger if self.i >= len(self.seqn): raise StopIteration 1284a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger v = self.seqn[self.i] 1285a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.i += 1 1286a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger return v 1287a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1288a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass Ig: 1289a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 'Sequence using iterator protocol defined with a generator' 1290a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def __init__(self, seqn): 1291a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.seqn = seqn 1292a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.i = 0 1293a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def __iter__(self): 1294a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for val in self.seqn: 1295a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger yield val 1296a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1297a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass X: 1298a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 'Missing __getitem__ and __iter__' 1299a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def __init__(self, seqn): 1300a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.seqn = seqn 1301a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.i = 0 1302a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def next(self): 1303a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger if self.i >= len(self.seqn): raise StopIteration 1304a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger v = self.seqn[self.i] 1305a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.i += 1 1306a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger return v 1307a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1308a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass N: 1309a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 'Iterator missing next()' 1310a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def __init__(self, seqn): 1311a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.seqn = seqn 1312a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.i = 0 1313a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def __iter__(self): 1314a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger return self 1315a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1316a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass E: 1317a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 'Test propagation of exceptions' 1318a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def __init__(self, seqn): 1319a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.seqn = seqn 1320a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.i = 0 1321a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def __iter__(self): 1322a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger return self 1323a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def next(self): 1324ffdb8bb99c4017152a9dca70669f9d6b9831d454Raymond Hettinger 3 // 0 1325a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1326a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass S: 1327a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 'Test immediate stop' 1328a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def __init__(self, seqn): 1329a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger pass 1330a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def __iter__(self): 1331a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger return self 1332a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def next(self): 1333a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger raise StopIteration 1334a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1335a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerfrom itertools import chain, imap 1336a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerdef L(seqn): 1337a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 'Test multiple tiers of iterators' 1338a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger return chain(imap(lambda x:x, R(Ig(G(seqn))))) 1339a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1340a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestVariousIteratorArgs(unittest.TestCase): 1341a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1342a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_constructor(self): 1343a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for cons in (set, frozenset): 1344a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for s in ("123", "", range(1000), ('do', 1.2), xrange(2000,2200,5)): 1345a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for g in (G, I, Ig, S, L, R): 134664958a15d7c03efdc3d2eddf247666e18d1fd910Raymond Hettinger self.assertEqual(sorted(cons(g(s))), sorted(g(s))) 1347a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, cons , X(s)) 1348a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, cons , N(s)) 1349a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(ZeroDivisionError, cons , E(s)) 1350a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1351a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_inline_methods(self): 1352a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger s = set('november') 1353a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for data in ("123", "", range(1000), ('do', 1.2), xrange(2000,2200,5), 'december'): 1354a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for meth in (s.union, s.intersection, s.difference, s.symmetric_difference): 1355a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for g in (G, I, Ig, L, R): 1356a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger expected = meth(data) 1357a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger actual = meth(G(data)) 135864958a15d7c03efdc3d2eddf247666e18d1fd910Raymond Hettinger self.assertEqual(sorted(actual), sorted(expected)) 1359a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, meth, X(s)) 1360a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, meth, N(s)) 1361a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(ZeroDivisionError, meth, E(s)) 1362a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1363a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_inplace_methods(self): 1364a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for data in ("123", "", range(1000), ('do', 1.2), xrange(2000,2200,5), 'december'): 1365f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger for methname in ('update', 'intersection_update', 1366a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 'difference_update', 'symmetric_difference_update'): 1367a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for g in (G, I, Ig, S, L, R): 1368a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger s = set('january') 1369a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger t = s.copy() 1370a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger getattr(s, methname)(list(g(data))) 1371a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger getattr(t, methname)(g(data)) 137264958a15d7c03efdc3d2eddf247666e18d1fd910Raymond Hettinger self.assertEqual(sorted(s), sorted(t)) 1373a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1374a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, getattr(set('january'), methname), X(data)) 1375a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, getattr(set('january'), methname), N(data)) 1376a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(ZeroDivisionError, getattr(set('january'), methname), E(data)) 1377a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1378a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#============================================================================== 1379a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1380a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerdef test_main(verbose=None): 1381a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger from test import test_sets 1382a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger test_classes = ( 1383a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestSet, 138450a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger TestSetSubclass, 1385a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestFrozenSet, 138650a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger TestFrozenSetSubclass, 1387a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestSetOfSets, 1388a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestExceptionPropagation, 1389a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestBasicOpsEmpty, 1390a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestBasicOpsSingleton, 1391a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestBasicOpsTuple, 1392a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestBasicOpsTriple, 1393a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestBinaryOps, 1394a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestUpdateOps, 1395a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestMutate, 1396a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestSubsetEqualEmpty, 1397a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestSubsetEqualNonEmpty, 1398a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestSubsetEmptyNonEmpty, 1399a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestSubsetPartial, 1400a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestSubsetNonOverlap, 1401a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestOnlySetsNumeric, 1402a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestOnlySetsDict, 1403a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestOnlySetsOperator, 1404a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestOnlySetsTuple, 1405a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestOnlySetsString, 1406a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestOnlySetsGenerator, 1407a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestCopyingEmpty, 1408a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestCopyingSingleton, 1409a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestCopyingTriple, 1410a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestCopyingTuple, 1411a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestCopyingNested, 1412a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestIdentities, 1413a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestVariousIteratorArgs, 1414a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger ) 1415a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1416a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger test_support.run_unittest(*test_classes) 1417a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1418a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger # verify reference counting 1419a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger if verbose and hasattr(sys, "gettotalrefcount"): 1420a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger import gc 1421a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger counts = [None] * 5 1422a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for i in xrange(len(counts)): 1423a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger test_support.run_unittest(*test_classes) 1424a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger gc.collect() 1425a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger counts[i] = sys.gettotalrefcount() 1426a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger print counts 1427a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1428a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerif __name__ == "__main__": 1429a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger test_main(verbose=True) 1430