1# Py2.7+ only 2 3import sys 4 5 6def test_set_literal(): 7 """ 8 >>> type(test_set_literal()) is set 9 True 10 >>> sorted(test_set_literal()) 11 ['a', 'b', 1] 12 """ 13 s1 = {1, 'a', 1, 'b', 'a'} 14 return s1 15 16 17def test_set_add(): 18 """ 19 >>> type(test_set_add()) is set 20 True 21 >>> sorted(test_set_add()) 22 ['a', 1, (1, 2)] 23 """ 24 s1 = {1, (1, 2)} 25 s1.add(1) 26 s1.add('a') 27 s1.add(1) 28 s1.add((1, 2)) 29 return s1 30 31 32def test_set_comp(): 33 """ 34 >>> type(test_set_comp()) is set 35 True 36 >>> sorted(test_set_comp()) 37 [0, 1, 2] 38 """ 39 s1 = {i % 3 for i in range(5)} 40 return s1 41 42 43def test_frozenset_set_comp(): 44 """ 45 >>> type(test_frozenset_set_comp()) is frozenset 46 True 47 >>> sorted(test_frozenset_set_comp()) 48 [0, 1, 2] 49 """ 50 s1 = frozenset({i % 3 for i in range(5)}) 51 return s1 52 53 54def test_set_sideeffect_unhashable_failure_literal(): 55 """ 56 >>> test_set_sideeffect_unhashable_failure_literal() 57 [2, 4, 5] 58 """ 59 L = [] 60 61 def sideeffect(x): 62 L.append(x) 63 return x 64 65 def unhashable_value(x): 66 L.append(x) 67 return set() 68 try: 69 s = {1, sideeffect(2), 3, unhashable_value(4), sideeffect(5)} 70 except TypeError: pass 71 else: assert False, "expected exception not raised" 72 return L 73 74 75def test_set_comp_sideeffect_unhashable_failure(): 76 """ 77 >>> test_set_comp_sideeffect_unhashable_failure() 78 (None, [2, 4]) 79 """ 80 L = [] 81 82 def value(x): 83 return x 84 85 def sideeffect(x): 86 L.append(x) 87 return x 88 89 def unhashable_value(x): 90 L.append(x) 91 return set() 92 s = None 93 try: 94 s = {f(i) for i, f in enumerate([value, sideeffect, value, unhashable_value, sideeffect], 1)} 95 except TypeError: pass 96 else: assert False, "expected exception not raised" 97 return s, L 98 99 100def sorted(it): 101 # Py3 can't compare different types 102 chars = [] 103 nums = [] 104 tuples = [] 105 for item in it: 106 if type(item) is int: 107 nums.append(item) 108 elif type(item) is tuple: 109 tuples.append(item) 110 else: 111 chars.append(item) 112 nums.sort() 113 chars.sort() 114 tuples.sort() 115 return chars+nums+tuples 116