test_set.py revision 6e70accaffc61a5af7d78be1b365d1cab804751b
1a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerimport unittest 2a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerfrom test import test_support 3a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerimport operator 4a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerimport copy 5a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerimport pickle 6a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 7a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass PassThru(Exception): 8a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger pass 9a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 10a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerdef check_pass_thru(): 11a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger raise PassThru 12a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger yield 1 13a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 14a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestJointOps(unittest.TestCase): 15a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger # Tests common to both set and frozenset 16a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 17a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def setUp(self): 18a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.word = word = 'simsalabim' 19a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.otherword = 'madagascar' 20a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.letters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' 21a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.s = self.thetype(word) 22a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.d = dict.fromkeys(word) 23a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 24a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_uniquification(self): 2564958a15d7c03efdc3d2eddf247666e18d1fd910Raymond Hettinger actual = sorted(self.s) 2664958a15d7c03efdc3d2eddf247666e18d1fd910Raymond Hettinger expected = sorted(self.d) 27a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(actual, expected) 28a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(PassThru, self.thetype, check_pass_thru()) 29a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, self.thetype, [[]]) 30a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 31a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_len(self): 32a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(len(self.s), len(self.d)) 33a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 34a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_contains(self): 35a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for c in self.letters: 36a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(c in self.s, c in self.d) 37a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, self.s.__contains__, [[]]) 3819c2d77842290af9b5f470c1eea2a71d1f77c9feRaymond Hettinger s = self.thetype([frozenset(self.letters)]) 3919c2d77842290af9b5f470c1eea2a71d1f77c9feRaymond Hettinger self.assert_(self.thetype(self.letters) in s) 40a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 41a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_union(self): 42a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger u = self.s.union(self.otherword) 43a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for c in self.letters: 44a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(c in u, c in self.d or c in self.otherword) 4549ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger self.assertEqual(self.s, self.thetype(self.word)) 46a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(type(u), self.thetype) 47a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(PassThru, self.s.union, check_pass_thru()) 48a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, self.s.union, [[]]) 49f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger for C in set, frozenset, dict.fromkeys, str, unicode, list, tuple: 50f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertEqual(self.thetype('abcba').union(C('cdc')), set('abcd')) 51f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertEqual(self.thetype('abcba').union(C('efgfe')), set('abcefg')) 52f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertEqual(self.thetype('abcba').union(C('ccb')), set('abc')) 53f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertEqual(self.thetype('abcba').union(C('ef')), set('abcef')) 54a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 55a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_or(self): 56a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger i = self.s.union(self.otherword) 57a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.s | set(self.otherword), i) 58a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.s | frozenset(self.otherword), i) 59a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger try: 60a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.s | self.otherword 61a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger except TypeError: 62a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger pass 63a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger else: 64a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.fail("s|t did not screen-out general iterables") 65a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 66a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_intersection(self): 67a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger i = self.s.intersection(self.otherword) 68a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for c in self.letters: 69a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(c in i, c in self.d and c in self.otherword) 7049ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger self.assertEqual(self.s, self.thetype(self.word)) 71a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(type(i), self.thetype) 72a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(PassThru, self.s.intersection, check_pass_thru()) 73f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger for C in set, frozenset, dict.fromkeys, str, unicode, list, tuple: 74f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertEqual(self.thetype('abcba').intersection(C('cdc')), set('cc')) 75f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertEqual(self.thetype('abcba').intersection(C('efgfe')), set('')) 76f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertEqual(self.thetype('abcba').intersection(C('ccb')), set('bc')) 77f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertEqual(self.thetype('abcba').intersection(C('ef')), set('')) 78a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 79a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_and(self): 80a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger i = self.s.intersection(self.otherword) 81a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.s & set(self.otherword), i) 82a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.s & frozenset(self.otherword), i) 83a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger try: 84a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.s & self.otherword 85a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger except TypeError: 86a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger pass 87a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger else: 88a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.fail("s&t did not screen-out general iterables") 89a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 90a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_difference(self): 91a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger i = self.s.difference(self.otherword) 92a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for c in self.letters: 93a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(c in i, c in self.d and c not in self.otherword) 9449ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger self.assertEqual(self.s, self.thetype(self.word)) 95a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(type(i), self.thetype) 96a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(PassThru, self.s.difference, check_pass_thru()) 97a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, self.s.difference, [[]]) 98f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger for C in set, frozenset, dict.fromkeys, str, unicode, list, tuple: 99f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertEqual(self.thetype('abcba').difference(C('cdc')), set('ab')) 100f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertEqual(self.thetype('abcba').difference(C('efgfe')), set('abc')) 101f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertEqual(self.thetype('abcba').difference(C('ccb')), set('a')) 102f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertEqual(self.thetype('abcba').difference(C('ef')), set('abc')) 103a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 104a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_sub(self): 105a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger i = self.s.difference(self.otherword) 106a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.s - set(self.otherword), i) 107a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.s - frozenset(self.otherword), i) 108a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger try: 109a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.s - self.otherword 110a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger except TypeError: 111a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger pass 112a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger else: 113a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.fail("s-t did not screen-out general iterables") 114a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 115a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_symmetric_difference(self): 116a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger i = self.s.symmetric_difference(self.otherword) 117a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for c in self.letters: 118a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(c in i, (c in self.d) ^ (c in self.otherword)) 11949ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger self.assertEqual(self.s, self.thetype(self.word)) 120a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(type(i), self.thetype) 121a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(PassThru, self.s.symmetric_difference, check_pass_thru()) 122a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, self.s.symmetric_difference, [[]]) 123f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger for C in set, frozenset, dict.fromkeys, str, unicode, list, tuple: 124f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertEqual(self.thetype('abcba').symmetric_difference(C('cdc')), set('abd')) 125f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertEqual(self.thetype('abcba').symmetric_difference(C('efgfe')), set('abcefg')) 126f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertEqual(self.thetype('abcba').symmetric_difference(C('ccb')), set('a')) 127f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertEqual(self.thetype('abcba').symmetric_difference(C('ef')), set('abcef')) 128a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 129a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_xor(self): 130a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger i = self.s.symmetric_difference(self.otherword) 131a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.s ^ set(self.otherword), i) 132a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.s ^ frozenset(self.otherword), i) 133a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger try: 134a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.s ^ self.otherword 135a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger except TypeError: 136a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger pass 137a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger else: 138a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.fail("s^t did not screen-out general iterables") 139a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 140a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_equality(self): 141a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.s, set(self.word)) 142a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.s, frozenset(self.word)) 143a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.s == self.word, False) 144a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertNotEqual(self.s, set(self.otherword)) 145a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertNotEqual(self.s, frozenset(self.otherword)) 146a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.s != self.word, True) 147a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 148a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_setOfFrozensets(self): 149a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger t = map(frozenset, ['abcdef', 'bcd', 'bdcb', 'fed', 'fedccba']) 150a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger s = self.thetype(t) 151a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(len(s), 3) 152a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 153a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_compare(self): 154a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, self.s.__cmp__, self.s) 155a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 156a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_sub_and_super(self): 157a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger p, q, r = map(self.thetype, ['ab', 'abcde', 'def']) 158a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(p < q) 159a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(p <= q) 160a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(q <= q) 161a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(q > p) 162a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(q >= p) 163a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.failIf(q < r) 164a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.failIf(q <= r) 165a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.failIf(q > r) 166a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.failIf(q >= r) 1673fbec701cae361de6beca55bc926e0540635f165Raymond Hettinger self.assert_(set('a').issubset('abc')) 1683fbec701cae361de6beca55bc926e0540635f165Raymond Hettinger self.assert_(set('abc').issuperset('a')) 1693fbec701cae361de6beca55bc926e0540635f165Raymond Hettinger self.failIf(set('a').issubset('cbs')) 1703fbec701cae361de6beca55bc926e0540635f165Raymond Hettinger self.failIf(set('cbs').issuperset('a')) 171a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 172a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_pickling(self): 173a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger p = pickle.dumps(self.s) 174a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger dup = pickle.loads(p) 175a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.s, dup, "%s != %s" % (self.s, dup)) 176a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 17749ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger def test_deepcopy(self): 17849ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger class Tracer: 17949ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger def __init__(self, value): 18049ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger self.value = value 18149ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger def __hash__(self): 18249ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger return self.value 18349ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger def __deepcopy__(self, memo=None): 18449ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger return Tracer(self.value + 1) 18549ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger t = Tracer(10) 18649ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger s = self.thetype([t]) 18749ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger dup = copy.deepcopy(s) 18849ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger self.assertNotEqual(id(s), id(dup)) 18949ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger for elem in dup: 19049ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger newt = elem 19149ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger self.assertNotEqual(id(t), id(newt)) 19249ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger self.assertEqual(t.value + 1, newt.value) 19349ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger 194a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestSet(TestJointOps): 195a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger thetype = set 196a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 19750a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger def test_init(self): 19849ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger s = self.thetype() 19950a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger s.__init__(self.word) 20050a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger self.assertEqual(s, set(self.word)) 20150a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger s.__init__(self.otherword) 20250a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger self.assertEqual(s, set(self.otherword)) 20350a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger 20449ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger def test_constructor_identity(self): 20549ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger s = self.thetype(range(3)) 20649ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger t = self.thetype(s) 20749ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger self.assertNotEqual(id(s), id(t)) 20849ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger 209a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_hash(self): 210a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, hash, self.s) 211a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 212a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_clear(self): 213a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.s.clear() 214f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertEqual(self.s, set()) 215f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertEqual(len(self.s), 0) 216a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 21749ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger def test_copy(self): 21849ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger dup = self.s.copy() 21949ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger self.assertEqual(self.s, dup) 22049ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger self.assertNotEqual(id(self.s), id(dup)) 22149ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger 222a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_add(self): 223a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.s.add('Q') 224a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_('Q' in self.s) 225f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger dup = self.s.copy() 226f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.s.add('Q') 227f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertEqual(self.s, dup) 228a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, self.s.add, []) 229a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 230a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_remove(self): 231a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.s.remove('a') 232a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_('a' not in self.s) 233a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(KeyError, self.s.remove, 'Q') 234a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, self.s.remove, []) 235bfd334a42d35e58369e3a53e16733234e2741975Raymond Hettinger s = self.thetype([frozenset(self.word)]) 236bfd334a42d35e58369e3a53e16733234e2741975Raymond Hettinger self.assert_(self.thetype(self.word) in s) 237bfd334a42d35e58369e3a53e16733234e2741975Raymond Hettinger s.remove(self.thetype(self.word)) 238bfd334a42d35e58369e3a53e16733234e2741975Raymond Hettinger self.assert_(self.thetype(self.word) not in s) 239bfd334a42d35e58369e3a53e16733234e2741975Raymond Hettinger self.assertRaises(KeyError, self.s.remove, self.thetype(self.word)) 240a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 241a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_discard(self): 242a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.s.discard('a') 243a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_('a' not in self.s) 244a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.s.discard('Q') 245a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, self.s.discard, []) 246bfd334a42d35e58369e3a53e16733234e2741975Raymond Hettinger s = self.thetype([frozenset(self.word)]) 247bfd334a42d35e58369e3a53e16733234e2741975Raymond Hettinger self.assert_(self.thetype(self.word) in s) 248bfd334a42d35e58369e3a53e16733234e2741975Raymond Hettinger s.discard(self.thetype(self.word)) 249bfd334a42d35e58369e3a53e16733234e2741975Raymond Hettinger self.assert_(self.thetype(self.word) not in s) 250bfd334a42d35e58369e3a53e16733234e2741975Raymond Hettinger s.discard(self.thetype(self.word)) 251a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 252a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_pop(self): 253a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for i in xrange(len(self.s)): 254a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger elem = self.s.pop() 255a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(elem not in self.s) 256a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(KeyError, self.s.pop) 257a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 258f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger def test_update(self): 259f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger retval = self.s.update(self.otherword) 260a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(retval, None) 261a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for c in (self.word + self.otherword): 262a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(c in self.s) 263f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertRaises(PassThru, self.s.update, check_pass_thru()) 264f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertRaises(TypeError, self.s.update, [[]]) 265f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger for p, q in (('cdc', 'abcd'), ('efgfe', 'abcefg'), ('ccb', 'abc'), ('ef', 'abcef')): 266f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger for C in set, frozenset, dict.fromkeys, str, unicode, list, tuple: 267f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger s = self.thetype('abcba') 268f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertEqual(s.update(C(p)), None) 269f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertEqual(s, set(q)) 270a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 271a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_ior(self): 272a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.s |= set(self.otherword) 273a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for c in (self.word + self.otherword): 274a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(c in self.s) 275a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 276a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_intersection_update(self): 277a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger retval = self.s.intersection_update(self.otherword) 278a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(retval, None) 279a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for c in (self.word + self.otherword): 280a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger if c in self.otherword and c in self.word: 281a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(c in self.s) 282a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger else: 283a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(c not in self.s) 284a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(PassThru, self.s.intersection_update, check_pass_thru()) 285a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, self.s.intersection_update, [[]]) 286f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger for p, q in (('cdc', 'c'), ('efgfe', ''), ('ccb', 'bc'), ('ef', '')): 287f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger for C in set, frozenset, dict.fromkeys, str, unicode, list, tuple: 288f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger s = self.thetype('abcba') 289f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertEqual(s.intersection_update(C(p)), None) 290f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertEqual(s, set(q)) 291a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 292a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_iand(self): 293a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.s &= set(self.otherword) 294a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for c in (self.word + self.otherword): 295a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger if c in self.otherword and c in self.word: 296a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(c in self.s) 297a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger else: 298a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(c not in self.s) 299a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 300a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_difference_update(self): 301a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger retval = self.s.difference_update(self.otherword) 302a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(retval, None) 303a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for c in (self.word + self.otherword): 304a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger if c in self.word and c not in self.otherword: 305a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(c in self.s) 306a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger else: 307a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(c not in self.s) 308a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(PassThru, self.s.difference_update, check_pass_thru()) 309a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, self.s.difference_update, [[]]) 310f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertRaises(TypeError, self.s.symmetric_difference_update, [[]]) 311f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger for p, q in (('cdc', 'ab'), ('efgfe', 'abc'), ('ccb', 'a'), ('ef', 'abc')): 312f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger for C in set, frozenset, dict.fromkeys, str, unicode, list, tuple: 313f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger s = self.thetype('abcba') 314f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertEqual(s.difference_update(C(p)), None) 315f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertEqual(s, set(q)) 316a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 317a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_isub(self): 318a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.s -= set(self.otherword) 319a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for c in (self.word + self.otherword): 320a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger if c in self.word and c not in self.otherword: 321a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(c in self.s) 322a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger else: 323a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(c not in self.s) 324a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 325a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_symmetric_difference_update(self): 326a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger retval = self.s.symmetric_difference_update(self.otherword) 327a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(retval, None) 328a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for c in (self.word + self.otherword): 329a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger if (c in self.word) ^ (c in self.otherword): 330a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(c in self.s) 331a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger else: 332a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(c not in self.s) 333a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(PassThru, self.s.symmetric_difference_update, check_pass_thru()) 334a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, self.s.symmetric_difference_update, [[]]) 335f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger for p, q in (('cdc', 'abd'), ('efgfe', 'abcefg'), ('ccb', 'a'), ('ef', 'abcef')): 336f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger for C in set, frozenset, dict.fromkeys, str, unicode, list, tuple: 337f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger s = self.thetype('abcba') 338f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertEqual(s.symmetric_difference_update(C(p)), None) 339f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertEqual(s, set(q)) 340a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 341a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_ixor(self): 342a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.s ^= set(self.otherword) 343a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for c in (self.word + self.otherword): 344a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger if (c in self.word) ^ (c in self.otherword): 345a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(c in self.s) 346a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger else: 347a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(c not in self.s) 348a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 34950a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettingerclass SetSubclass(set): 35050a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger pass 35150a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger 35250a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettingerclass TestSetSubclass(TestSet): 35350a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger thetype = SetSubclass 354a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 355a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestFrozenSet(TestJointOps): 356a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger thetype = frozenset 357a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 35850a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger def test_init(self): 35949ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger s = self.thetype(self.word) 36049ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger s.__init__(self.otherword) 36149ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger self.assertEqual(s, set(self.word)) 36249ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger 36349ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger def test_constructor_identity(self): 36449ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger s = self.thetype(range(3)) 36549ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger t = self.thetype(s) 36649ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger self.assertEqual(id(s), id(t)) 36750a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger 368a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_hash(self): 36949ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger self.assertEqual(hash(self.thetype('abcdeb')), 37049ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger hash(self.thetype('ebecda'))) 37149ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger 37249ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger def test_copy(self): 37349ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger dup = self.s.copy() 37449ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger self.assertEqual(id(self.s), id(dup)) 375a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 376a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_frozen_as_dictkey(self): 377a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger seq = range(10) + list('abcdefg') + ['apple'] 37849ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger key1 = self.thetype(seq) 37949ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger key2 = self.thetype(reversed(seq)) 380a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(key1, key2) 381a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertNotEqual(id(key1), id(key2)) 382a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger d = {} 383a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger d[key1] = 42 384a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(d[key2], 42) 385a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 386a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_hash_caching(self): 38749ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger f = self.thetype('abcdcda') 388a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(hash(f), hash(f)) 389a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 39049ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger def test_hash_effectiveness(self): 39149ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger n = 13 39249ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger hashvalues = set() 3936e70accaffc61a5af7d78be1b365d1cab804751bRaymond Hettinger addhashvalue = hashvalues.add 3946e70accaffc61a5af7d78be1b365d1cab804751bRaymond Hettinger elemmasks = [(i+1, 1<<i) for i in range(n)] 39549ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger for i in xrange(2**n): 3966e70accaffc61a5af7d78be1b365d1cab804751bRaymond Hettinger addhashvalue(hash(frozenset([e for e, m in elemmasks if m&i]))) 3976e70accaffc61a5af7d78be1b365d1cab804751bRaymond Hettinger self.assertEqual(len(hashvalues), 2**n) 39849ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger 39950a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettingerclass FrozenSetSubclass(frozenset): 40050a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger pass 40150a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger 40250a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettingerclass TestFrozenSetSubclass(TestFrozenSet): 40350a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger thetype = FrozenSetSubclass 40450a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger 40549ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger def test_constructor_identity(self): 40649ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger s = self.thetype(range(3)) 40749ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger t = self.thetype(s) 40849ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger self.assertNotEqual(id(s), id(t)) 40949ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger 41049ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger def test_copy(self): 41149ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger dup = self.s.copy() 41249ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger self.assertNotEqual(id(self.s), id(dup)) 41349ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger 41449ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger def test_nested_empty_constructor(self): 41549ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger s = self.thetype() 41649ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger t = self.thetype(s) 41749ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger self.assertEqual(s, t) 41849ba4c39c49ff6b1db666e6c90365fc1361c4a64Raymond Hettinger 419a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger# Tests taken from test_sets.py ============================================= 420a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 421a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerempty_set = set() 422a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 423a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#============================================================================== 424a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 425a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestBasicOps(unittest.TestCase): 426a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 427a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_repr(self): 428a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger if self.repr is not None: 429a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(`self.set`, self.repr) 430a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 431a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_length(self): 432a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(len(self.set), self.length) 433a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 434a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_self_equality(self): 435a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, self.set) 436a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 437a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_equivalent_equality(self): 438a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, self.dup) 439a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 440a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_copy(self): 441a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set.copy(), self.dup) 442a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 443a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_self_union(self): 444a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger result = self.set | self.set 445a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(result, self.dup) 446a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 447a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_empty_union(self): 448a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger result = self.set | empty_set 449a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(result, self.dup) 450a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 451a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_union_empty(self): 452a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger result = empty_set | self.set 453a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(result, self.dup) 454a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 455a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_self_intersection(self): 456a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger result = self.set & self.set 457a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(result, self.dup) 458a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 459a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_empty_intersection(self): 460a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger result = self.set & empty_set 461a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(result, empty_set) 462a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 463a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_intersection_empty(self): 464a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger result = empty_set & self.set 465a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(result, empty_set) 466a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 467a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_self_symmetric_difference(self): 468a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger result = self.set ^ self.set 469a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(result, empty_set) 470a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 471a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def checkempty_symmetric_difference(self): 472a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger result = self.set ^ empty_set 473a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(result, self.set) 474a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 475a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_self_difference(self): 476a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger result = self.set - self.set 477a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(result, empty_set) 478a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 479a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_empty_difference(self): 480a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger result = self.set - empty_set 481a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(result, self.dup) 482a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 483a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_empty_difference_rev(self): 484a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger result = empty_set - self.set 485a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(result, empty_set) 486a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 487a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_iteration(self): 488a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for v in self.set: 489a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(v in self.values) 490a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 491a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_pickling(self): 492a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger p = pickle.dumps(self.set) 493a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger copy = pickle.loads(p) 494a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, copy, 495a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger "%s != %s" % (self.set, copy)) 496a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 497a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------ 498a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 499a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestBasicOpsEmpty(TestBasicOps): 500a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def setUp(self): 501a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.case = "empty set" 502a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.values = [] 503a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set = set(self.values) 504a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.dup = set(self.values) 505a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.length = 0 506a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.repr = "set([])" 507a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 508a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------ 509a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 510a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestBasicOpsSingleton(TestBasicOps): 511a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def setUp(self): 512a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.case = "unit set (number)" 513a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.values = [3] 514a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set = set(self.values) 515a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.dup = set(self.values) 516a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.length = 1 517a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.repr = "set([3])" 518a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 519a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_in(self): 520a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.failUnless(3 in self.set) 521a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 522a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_not_in(self): 523a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.failUnless(2 not in self.set) 524a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 525a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------ 526a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 527a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestBasicOpsTuple(TestBasicOps): 528a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def setUp(self): 529a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.case = "unit set (tuple)" 530a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.values = [(0, "zero")] 531a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set = set(self.values) 532a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.dup = set(self.values) 533a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.length = 1 534a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.repr = "set([(0, 'zero')])" 535a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 536a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_in(self): 537a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.failUnless((0, "zero") in self.set) 538a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 539a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_not_in(self): 540a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.failUnless(9 not in self.set) 541a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 542a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------ 543a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 544a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestBasicOpsTriple(TestBasicOps): 545a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def setUp(self): 546a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.case = "triple set" 547a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.values = [0, "zero", operator.add] 548a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set = set(self.values) 549a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.dup = set(self.values) 550a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.length = 3 551a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.repr = None 552a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 553a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#============================================================================== 554a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 555a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerdef baditer(): 556a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger raise TypeError 557a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger yield True 558a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 559a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerdef gooditer(): 560a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger yield True 561a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 562a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestExceptionPropagation(unittest.TestCase): 563a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger """SF 628246: Set constructor should not trap iterator TypeErrors""" 564a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 565a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_instanceWithException(self): 566a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, set, baditer()) 567a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 568a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_instancesWithoutException(self): 569a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger # All of these iterables should load without exception. 570a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger set([1,2,3]) 571a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger set((1,2,3)) 572a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger set({'one':1, 'two':2, 'three':3}) 573a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger set(xrange(3)) 574a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger set('abc') 575a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger set(gooditer()) 576a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 577a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#============================================================================== 578a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 579a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestSetOfSets(unittest.TestCase): 580a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_constructor(self): 581a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger inner = frozenset([1]) 582a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger outer = set([inner]) 583a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger element = outer.pop() 584a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(type(element), frozenset) 585a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger outer.add(inner) # Rebuild set of sets with .add method 586a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger outer.remove(inner) 587a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(outer, set()) # Verify that remove worked 588a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger outer.discard(inner) # Absence of KeyError indicates working fine 589a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 590a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#============================================================================== 591a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 592a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestBinaryOps(unittest.TestCase): 593a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def setUp(self): 594a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set = set((2, 4, 6)) 595a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 596a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_eq(self): # SF bug 643115 597a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set({2:1,4:3,6:5})) 598a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 599a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_union_subset(self): 600a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger result = self.set | set([2]) 601a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(result, set((2, 4, 6))) 602a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 603a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_union_superset(self): 604a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger result = self.set | set([2, 4, 6, 8]) 605a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(result, set([2, 4, 6, 8])) 606a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 607a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_union_overlap(self): 608a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger result = self.set | set([3, 4, 5]) 609a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(result, set([2, 3, 4, 5, 6])) 610a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 611a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_union_non_overlap(self): 612a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger result = self.set | set([8]) 613a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(result, set([2, 4, 6, 8])) 614a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 615a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_intersection_subset(self): 616a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger result = self.set & set((2, 4)) 617a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(result, set((2, 4))) 618a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 619a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_intersection_superset(self): 620a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger result = self.set & set([2, 4, 6, 8]) 621a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(result, set([2, 4, 6])) 622a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 623a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_intersection_overlap(self): 624a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger result = self.set & set([3, 4, 5]) 625a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(result, set([4])) 626a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 627a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_intersection_non_overlap(self): 628a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger result = self.set & set([8]) 629a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(result, empty_set) 630a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 631a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_sym_difference_subset(self): 632a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger result = self.set ^ set((2, 4)) 633a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(result, set([6])) 634a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 635a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_sym_difference_superset(self): 636a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger result = self.set ^ set((2, 4, 6, 8)) 637a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(result, set([8])) 638a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 639a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_sym_difference_overlap(self): 640a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger result = self.set ^ set((3, 4, 5)) 641a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(result, set([2, 3, 5, 6])) 642a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 643a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_sym_difference_non_overlap(self): 644a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger result = self.set ^ set([8]) 645a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(result, set([2, 4, 6, 8])) 646a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 647a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_cmp(self): 648a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger a, b = set('a'), set('b') 649a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, cmp, a, b) 650a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 651a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger # You can view this as a buglet: cmp(a, a) does not raise TypeError, 652a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger # because __eq__ is tried before __cmp__, and a.__eq__(a) returns True, 653a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger # which Python thinks is good enough to synthesize a cmp() result 654a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger # without calling __cmp__. 655a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(cmp(a, a), 0) 656a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 657a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, cmp, a, 12) 658a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, cmp, "abc", a) 659a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 660a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#============================================================================== 661a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 662a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestUpdateOps(unittest.TestCase): 663a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def setUp(self): 664a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set = set((2, 4, 6)) 665a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 666a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_union_subset(self): 667a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set |= set([2]) 668a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set((2, 4, 6))) 669a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 670a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_union_superset(self): 671a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set |= set([2, 4, 6, 8]) 672a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set([2, 4, 6, 8])) 673a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 674a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_union_overlap(self): 675a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set |= set([3, 4, 5]) 676a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set([2, 3, 4, 5, 6])) 677a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 678a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_union_non_overlap(self): 679a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set |= set([8]) 680a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set([2, 4, 6, 8])) 681a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 682a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_union_method_call(self): 683f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.set.update(set([3, 4, 5])) 684a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set([2, 3, 4, 5, 6])) 685a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 686a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_intersection_subset(self): 687a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set &= set((2, 4)) 688a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set((2, 4))) 689a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 690a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_intersection_superset(self): 691a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set &= set([2, 4, 6, 8]) 692a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set([2, 4, 6])) 693a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 694a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_intersection_overlap(self): 695a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set &= set([3, 4, 5]) 696a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set([4])) 697a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 698a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_intersection_non_overlap(self): 699a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set &= set([8]) 700a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, empty_set) 701a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 702a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_intersection_method_call(self): 703a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set.intersection_update(set([3, 4, 5])) 704a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set([4])) 705a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 706a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_sym_difference_subset(self): 707a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set ^= set((2, 4)) 708a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set([6])) 709a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 710a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_sym_difference_superset(self): 711a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set ^= set((2, 4, 6, 8)) 712a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set([8])) 713a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 714a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_sym_difference_overlap(self): 715a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set ^= set((3, 4, 5)) 716a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set([2, 3, 5, 6])) 717a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 718a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_sym_difference_non_overlap(self): 719a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set ^= set([8]) 720a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set([2, 4, 6, 8])) 721a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 722a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_sym_difference_method_call(self): 723a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set.symmetric_difference_update(set([3, 4, 5])) 724a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set([2, 3, 5, 6])) 725a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 726a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_difference_subset(self): 727a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set -= set((2, 4)) 728a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set([6])) 729a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 730a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_difference_superset(self): 731a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set -= set((2, 4, 6, 8)) 732a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set([])) 733a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 734a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_difference_overlap(self): 735a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set -= set((3, 4, 5)) 736a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set([2, 6])) 737a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 738a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_difference_non_overlap(self): 739a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set -= set([8]) 740a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set([2, 4, 6])) 741a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 742a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_difference_method_call(self): 743a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set.difference_update(set([3, 4, 5])) 744a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set([2, 6])) 745a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 746a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#============================================================================== 747a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 748a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestMutate(unittest.TestCase): 749a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def setUp(self): 750a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.values = ["a", "b", "c"] 751a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set = set(self.values) 752a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 753a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_add_present(self): 754a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set.add("c") 755a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set("abc")) 756a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 757a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_add_absent(self): 758a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set.add("d") 759a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set("abcd")) 760a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 761a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_add_until_full(self): 762a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger tmp = set() 763a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger expected_len = 0 764a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for v in self.values: 765a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger tmp.add(v) 766a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger expected_len += 1 767a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(len(tmp), expected_len) 768a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(tmp, self.set) 769a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 770a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_remove_present(self): 771a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set.remove("b") 772a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set("ac")) 773a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 774a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_remove_absent(self): 775a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger try: 776a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set.remove("d") 777a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.fail("Removing missing element should have raised LookupError") 778a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger except LookupError: 779a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger pass 780a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 781a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_remove_until_empty(self): 782a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger expected_len = len(self.set) 783a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for v in self.values: 784a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set.remove(v) 785a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger expected_len -= 1 786a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(len(self.set), expected_len) 787a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 788a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_discard_present(self): 789a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set.discard("c") 790a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set("ab")) 791a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 792a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_discard_absent(self): 793a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set.discard("d") 794a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set("abc")) 795a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 796a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_clear(self): 797a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set.clear() 798a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(len(self.set), 0) 799a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 800a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_pop(self): 801a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger popped = {} 802a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger while self.set: 803a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger popped[self.set.pop()] = None 804a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(len(popped), len(self.values)) 805a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for v in self.values: 806a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.failUnless(v in popped) 807a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 808a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_update_empty_tuple(self): 809f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.set.update(()) 810a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set(self.values)) 811a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 812a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_update_unit_tuple_overlap(self): 813f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.set.update(("a",)) 814a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set(self.values)) 815a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 816a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_update_unit_tuple_non_overlap(self): 817f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.set.update(("a", "z")) 818a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set, set(self.values + ["z"])) 819a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 820a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#============================================================================== 821a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 822a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestSubsets(unittest.TestCase): 823a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 824a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger case2method = {"<=": "issubset", 825a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger ">=": "issuperset", 826a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger } 827a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 828a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger reverse = {"==": "==", 829a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger "!=": "!=", 830a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger "<": ">", 831a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger ">": "<", 832a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger "<=": ">=", 833a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger ">=": "<=", 834a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger } 835a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 836a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_issubset(self): 837a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger x = self.left 838a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger y = self.right 839a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for case in "!=", "==", "<", "<=", ">", ">=": 840a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger expected = case in self.cases 841a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger # Test the binary infix spelling. 842a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger result = eval("x" + case + "y", locals()) 843a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(result, expected) 844a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger # Test the "friendly" method-name spelling, if one exists. 845a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger if case in TestSubsets.case2method: 846a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger method = getattr(x, TestSubsets.case2method[case]) 847a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger result = method(y) 848a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(result, expected) 849a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 850a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger # Now do the same for the operands reversed. 851a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger rcase = TestSubsets.reverse[case] 852a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger result = eval("y" + rcase + "x", locals()) 853a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(result, expected) 854a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger if rcase in TestSubsets.case2method: 855a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger method = getattr(y, TestSubsets.case2method[rcase]) 856a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger result = method(x) 857a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(result, expected) 858a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------ 859a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 860a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestSubsetEqualEmpty(TestSubsets): 861a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger left = set() 862a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger right = set() 863a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger name = "both empty" 864a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger cases = "==", "<=", ">=" 865a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 866a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------ 867a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 868a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestSubsetEqualNonEmpty(TestSubsets): 869a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger left = set([1, 2]) 870a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger right = set([1, 2]) 871a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger name = "equal pair" 872a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger cases = "==", "<=", ">=" 873a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 874a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------ 875a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 876a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestSubsetEmptyNonEmpty(TestSubsets): 877a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger left = set() 878a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger right = set([1, 2]) 879a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger name = "one empty, one non-empty" 880a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger cases = "!=", "<", "<=" 881a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 882a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------ 883a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 884a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestSubsetPartial(TestSubsets): 885a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger left = set([1]) 886a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger right = set([1, 2]) 887a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger name = "one a non-empty proper subset of other" 888a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger cases = "!=", "<", "<=" 889a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 890a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------ 891a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 892a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestSubsetNonOverlap(TestSubsets): 893a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger left = set([1]) 894a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger right = set([2]) 895a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger name = "neither empty, neither contains" 896a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger cases = "!=" 897a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 898a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#============================================================================== 899a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 900a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestOnlySetsInBinaryOps(unittest.TestCase): 901a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 902a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_eq_ne(self): 903a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger # Unlike the others, this is testing that == and != *are* allowed. 904a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.other == self.set, False) 905a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set == self.other, False) 906a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.other != self.set, True) 907a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(self.set != self.other, True) 908a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 909a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_ge_gt_le_lt(self): 910a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, lambda: self.set < self.other) 911a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, lambda: self.set <= self.other) 912a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, lambda: self.set > self.other) 913a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, lambda: self.set >= self.other) 914a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 915a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, lambda: self.other < self.set) 916a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, lambda: self.other <= self.set) 917a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, lambda: self.other > self.set) 918a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, lambda: self.other >= self.set) 919a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 920f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger def test_update_operator(self): 921a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger try: 922a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set |= self.other 923a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger except TypeError: 924a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger pass 925a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger else: 926a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.fail("expected TypeError") 927a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 928f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger def test_update(self): 929a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger if self.otherIsIterable: 930f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.set.update(self.other) 931a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger else: 932f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger self.assertRaises(TypeError, self.set.update, self.other) 933a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 934a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_union(self): 935a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, lambda: self.set | self.other) 936a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, lambda: self.other | self.set) 937a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger if self.otherIsIterable: 938a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set.union(self.other) 939a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger else: 940a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, self.set.union, self.other) 941a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 942a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_intersection_update_operator(self): 943a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger try: 944a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set &= self.other 945a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger except TypeError: 946a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger pass 947a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger else: 948a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.fail("expected TypeError") 949a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 950a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_intersection_update(self): 951a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger if self.otherIsIterable: 952a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set.intersection_update(self.other) 953a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger else: 954a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, 955a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set.intersection_update, 956a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.other) 957a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 958a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_intersection(self): 959a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, lambda: self.set & self.other) 960a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, lambda: self.other & self.set) 961a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger if self.otherIsIterable: 962a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set.intersection(self.other) 963a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger else: 964a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, self.set.intersection, self.other) 965a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 966a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_sym_difference_update_operator(self): 967a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger try: 968a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set ^= self.other 969a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger except TypeError: 970a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger pass 971a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger else: 972a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.fail("expected TypeError") 973a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 974a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_sym_difference_update(self): 975a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger if self.otherIsIterable: 976a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set.symmetric_difference_update(self.other) 977a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger else: 978a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, 979a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set.symmetric_difference_update, 980a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.other) 981a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 982a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_sym_difference(self): 983a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, lambda: self.set ^ self.other) 984a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, lambda: self.other ^ self.set) 985a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger if self.otherIsIterable: 986a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set.symmetric_difference(self.other) 987a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger else: 988a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, self.set.symmetric_difference, self.other) 989a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 990a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_difference_update_operator(self): 991a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger try: 992a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set -= self.other 993a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger except TypeError: 994a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger pass 995a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger else: 996a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.fail("expected TypeError") 997a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 998a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_difference_update(self): 999a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger if self.otherIsIterable: 1000a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set.difference_update(self.other) 1001a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger else: 1002a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, 1003a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set.difference_update, 1004a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.other) 1005a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1006a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_difference(self): 1007a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, lambda: self.set - self.other) 1008a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, lambda: self.other - self.set) 1009a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger if self.otherIsIterable: 1010a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set.difference(self.other) 1011a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger else: 1012a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, self.set.difference, self.other) 1013a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1014a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------ 1015a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1016a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestOnlySetsNumeric(TestOnlySetsInBinaryOps): 1017a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def setUp(self): 1018a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set = set((1, 2, 3)) 1019a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.other = 19 1020a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.otherIsIterable = False 1021a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1022a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------ 1023a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1024a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestOnlySetsDict(TestOnlySetsInBinaryOps): 1025a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def setUp(self): 1026a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set = set((1, 2, 3)) 1027a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.other = {1:2, 3:4} 1028a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.otherIsIterable = True 1029a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1030a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------ 1031a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1032a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestOnlySetsOperator(TestOnlySetsInBinaryOps): 1033a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def setUp(self): 1034a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set = set((1, 2, 3)) 1035a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.other = operator.add 1036a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.otherIsIterable = False 1037a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1038a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------ 1039a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1040a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestOnlySetsTuple(TestOnlySetsInBinaryOps): 1041a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def setUp(self): 1042a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set = set((1, 2, 3)) 1043a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.other = (2, 4, 6) 1044a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.otherIsIterable = True 1045a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1046a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------ 1047a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1048a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestOnlySetsString(TestOnlySetsInBinaryOps): 1049a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def setUp(self): 1050a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set = set((1, 2, 3)) 1051a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.other = 'abc' 1052a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.otherIsIterable = True 1053a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1054a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------ 1055a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1056a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestOnlySetsGenerator(TestOnlySetsInBinaryOps): 1057a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def setUp(self): 1058a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def gen(): 1059a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for i in xrange(0, 10, 2): 1060a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger yield i 1061a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set = set((1, 2, 3)) 1062a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.other = gen() 1063a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.otherIsIterable = True 1064a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1065a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#============================================================================== 1066a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1067a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestCopying(unittest.TestCase): 1068a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1069a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_copy(self): 1070a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger dup = self.set.copy() 1071a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger dup_list = list(dup); dup_list.sort() 1072a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger set_list = list(self.set); set_list.sort() 1073a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(len(dup_list), len(set_list)) 1074a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for i in range(len(dup_list)): 1075a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.failUnless(dup_list[i] is set_list[i]) 1076a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1077a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_deep_copy(self): 1078a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger dup = copy.deepcopy(self.set) 1079a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger ##print type(dup), `dup` 1080a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger dup_list = list(dup); dup_list.sort() 1081a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger set_list = list(self.set); set_list.sort() 1082a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(len(dup_list), len(set_list)) 1083a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for i in range(len(dup_list)): 1084a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(dup_list[i], set_list[i]) 1085a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1086a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------ 1087a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1088a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestCopyingEmpty(TestCopying): 1089a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def setUp(self): 1090a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set = set() 1091a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1092a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------ 1093a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1094a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestCopyingSingleton(TestCopying): 1095a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def setUp(self): 1096a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set = set(["hello"]) 1097a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1098a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------ 1099a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1100a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestCopyingTriple(TestCopying): 1101a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def setUp(self): 1102a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set = set(["zero", 0, None]) 1103a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1104a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------ 1105a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1106a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestCopyingTuple(TestCopying): 1107a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def setUp(self): 1108a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set = set([(1, 2)]) 1109a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1110a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#------------------------------------------------------------------------------ 1111a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1112a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestCopyingNested(TestCopying): 1113a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def setUp(self): 1114a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.set = set([((1, 2), (3, 4))]) 1115a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1116a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#============================================================================== 1117a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1118a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestIdentities(unittest.TestCase): 1119a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def setUp(self): 1120a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.a = set('abracadabra') 1121a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.b = set('alacazam') 1122a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1123a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_binopsVsSubsets(self): 1124a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger a, b = self.a, self.b 1125a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(a - b < a) 1126a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(b - a < b) 1127a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(a & b < a) 1128a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(a & b < b) 1129a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(a | b > a) 1130a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(a | b > b) 1131a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assert_(a ^ b < a | b) 1132a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1133a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_commutativity(self): 1134a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger a, b = self.a, self.b 1135a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(a&b, b&a) 1136a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(a|b, b|a) 1137a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(a^b, b^a) 1138a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger if a != b: 1139a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertNotEqual(a-b, b-a) 1140a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1141a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_summations(self): 1142a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger # check that sums of parts equal the whole 1143a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger a, b = self.a, self.b 1144a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual((a-b)|(a&b)|(b-a), a|b) 1145a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual((a&b)|(a^b), a|b) 1146a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual(a|(b-a), a|b) 1147a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual((a-b)|b, a|b) 1148a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual((a-b)|(a&b), a) 1149a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual((b-a)|(a&b), b) 1150a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual((a-b)|(b-a), a^b) 1151a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1152a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_exclusion(self): 1153a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger # check that inverse operations show non-overlap 1154a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger a, b, zero = self.a, self.b, set() 1155a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual((a-b)&b, zero) 1156a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual((b-a)&a, zero) 1157a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertEqual((a&b)&(a^b), zero) 1158a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1159a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger# Tests derived from test_itertools.py ======================================= 1160a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1161a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerdef R(seqn): 1162a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 'Regular generator' 1163a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for i in seqn: 1164a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger yield i 1165a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1166a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass G: 1167a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 'Sequence using __getitem__' 1168a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def __init__(self, seqn): 1169a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.seqn = seqn 1170a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def __getitem__(self, i): 1171a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger return self.seqn[i] 1172a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1173a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass I: 1174a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 'Sequence using iterator protocol' 1175a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def __init__(self, seqn): 1176a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.seqn = seqn 1177a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.i = 0 1178a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def __iter__(self): 1179a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger return self 1180a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def next(self): 1181a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger if self.i >= len(self.seqn): raise StopIteration 1182a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger v = self.seqn[self.i] 1183a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.i += 1 1184a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger return v 1185a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1186a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass Ig: 1187a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 'Sequence using iterator protocol defined with a generator' 1188a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def __init__(self, seqn): 1189a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.seqn = seqn 1190a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.i = 0 1191a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def __iter__(self): 1192a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for val in self.seqn: 1193a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger yield val 1194a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1195a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass X: 1196a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 'Missing __getitem__ and __iter__' 1197a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def __init__(self, seqn): 1198a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.seqn = seqn 1199a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.i = 0 1200a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def next(self): 1201a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger if self.i >= len(self.seqn): raise StopIteration 1202a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger v = self.seqn[self.i] 1203a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.i += 1 1204a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger return v 1205a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1206a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass N: 1207a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 'Iterator missing next()' 1208a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def __init__(self, seqn): 1209a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.seqn = seqn 1210a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.i = 0 1211a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def __iter__(self): 1212a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger return self 1213a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1214a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass E: 1215a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 'Test propagation of exceptions' 1216a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def __init__(self, seqn): 1217a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.seqn = seqn 1218a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.i = 0 1219a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def __iter__(self): 1220a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger return self 1221a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def next(self): 1222a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 3/0 1223a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1224a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass S: 1225a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 'Test immediate stop' 1226a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def __init__(self, seqn): 1227a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger pass 1228a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def __iter__(self): 1229a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger return self 1230a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def next(self): 1231a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger raise StopIteration 1232a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1233a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerfrom itertools import chain, imap 1234a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerdef L(seqn): 1235a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 'Test multiple tiers of iterators' 1236a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger return chain(imap(lambda x:x, R(Ig(G(seqn))))) 1237a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1238a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerclass TestVariousIteratorArgs(unittest.TestCase): 1239a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1240a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_constructor(self): 1241a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for cons in (set, frozenset): 1242a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for s in ("123", "", range(1000), ('do', 1.2), xrange(2000,2200,5)): 1243a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for g in (G, I, Ig, S, L, R): 124464958a15d7c03efdc3d2eddf247666e18d1fd910Raymond Hettinger self.assertEqual(sorted(cons(g(s))), sorted(g(s))) 1245a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, cons , X(s)) 1246a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, cons , N(s)) 1247a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(ZeroDivisionError, cons , E(s)) 1248a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1249a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_inline_methods(self): 1250a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger s = set('november') 1251a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for data in ("123", "", range(1000), ('do', 1.2), xrange(2000,2200,5), 'december'): 1252a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for meth in (s.union, s.intersection, s.difference, s.symmetric_difference): 1253a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for g in (G, I, Ig, L, R): 1254a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger expected = meth(data) 1255a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger actual = meth(G(data)) 125664958a15d7c03efdc3d2eddf247666e18d1fd910Raymond Hettinger self.assertEqual(sorted(actual), sorted(expected)) 1257a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, meth, X(s)) 1258a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, meth, N(s)) 1259a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(ZeroDivisionError, meth, E(s)) 1260a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1261a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger def test_inplace_methods(self): 1262a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for data in ("123", "", range(1000), ('do', 1.2), xrange(2000,2200,5), 'december'): 1263f5f41bf087c28500df9399335e7452da3a06caaeRaymond Hettinger for methname in ('update', 'intersection_update', 1264a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 'difference_update', 'symmetric_difference_update'): 1265a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for g in (G, I, Ig, S, L, R): 1266a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger s = set('january') 1267a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger t = s.copy() 1268a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger getattr(s, methname)(list(g(data))) 1269a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger getattr(t, methname)(g(data)) 127064958a15d7c03efdc3d2eddf247666e18d1fd910Raymond Hettinger self.assertEqual(sorted(s), sorted(t)) 1271a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1272a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, getattr(set('january'), methname), X(data)) 1273a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(TypeError, getattr(set('january'), methname), N(data)) 1274a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.assertRaises(ZeroDivisionError, getattr(set('january'), methname), E(data)) 1275a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1276a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger#============================================================================== 1277a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1278a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerdef test_main(verbose=None): 1279a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger import sys 1280a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger from test import test_sets 1281a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger test_classes = ( 1282a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestSet, 128350a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger TestSetSubclass, 1284a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestFrozenSet, 128550a4bb325c29e7ac2e4727787cb5a40f995ea204Raymond Hettinger TestFrozenSetSubclass, 1286a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestSetOfSets, 1287a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestExceptionPropagation, 1288a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestBasicOpsEmpty, 1289a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestBasicOpsSingleton, 1290a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestBasicOpsTuple, 1291a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestBasicOpsTriple, 1292a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestBinaryOps, 1293a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestUpdateOps, 1294a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestMutate, 1295a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestSubsetEqualEmpty, 1296a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestSubsetEqualNonEmpty, 1297a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestSubsetEmptyNonEmpty, 1298a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestSubsetPartial, 1299a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestSubsetNonOverlap, 1300a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestOnlySetsNumeric, 1301a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestOnlySetsDict, 1302a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestOnlySetsOperator, 1303a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestOnlySetsTuple, 1304a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestOnlySetsString, 1305a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestOnlySetsGenerator, 1306a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestCopyingEmpty, 1307a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestCopyingSingleton, 1308a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestCopyingTriple, 1309a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestCopyingTuple, 1310a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestCopyingNested, 1311a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestIdentities, 1312a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger TestVariousIteratorArgs, 1313a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger ) 1314a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1315a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger test_support.run_unittest(*test_classes) 1316a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1317a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger # verify reference counting 1318a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger if verbose and hasattr(sys, "gettotalrefcount"): 1319a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger import gc 1320a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger counts = [None] * 5 1321a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger for i in xrange(len(counts)): 1322a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger test_support.run_unittest(*test_classes) 1323a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger gc.collect() 1324a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger counts[i] = sys.gettotalrefcount() 1325a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger print counts 1326a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger 1327a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettingerif __name__ == "__main__": 1328a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger test_main(verbose=True) 1329