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