7
>>> cython_set() is set
10
assert set is cython.set
14
def cython_frozenset():
16
>>> cython_frozenset() is frozenset
19
assert frozenset is cython.frozenset
20
return cython.frozenset
23
def cython_set_override():
25
>>> cython_set_override() is set
32
def cython_frozenset_override():
34
>>> cython_frozenset_override() is frozenset
38
return cython.frozenset
41
def test_set_literal():
43
>>> type(test_set_literal()) is set
45
>>> sorted(test_set_literal())
48
cdef set s1 = {1,'a',1,'b','a'}
54
>>> type(test_set_add()) is set
56
>>> sorted(test_set_add())
68
def test_set_contains(v):
70
>>> test_set_contains(1)
72
>>> test_set_contains(2)
74
>>> test_set_contains(frozenset([1, 2, 3]))
76
>>> test_set_contains(frozenset([1, 2]))
78
>>> test_set_contains(set([1, 2, 3]))
80
>>> test_set_contains(set([1, 2]))
82
>>> try: test_set_contains([1, 2])
83
... except TypeError: pass
84
... else: print("NOT RAISED!")
90
s1.add(frozenset([1, 2, 3]))
94
def test_set_update(v=None):
96
>>> type(test_set_update()) is set
98
>>> sorted(test_set_update())
99
['a', 'b', 'c', 1, 2, (1, 2)]
100
>>> sorted(test_set_update([]))
101
['a', 'b', 'c', 1, 2, (1, 2)]
102
>>> try: test_set_update(object())
103
... except TypeError: pass
104
... else: print("NOT RAISED!")
107
s1 = set([1, (1, 2)])
111
s1.update(frozenset((1,2)))
117
def test_set_multi_update():
119
>>> type(test_set_multi_update()) is set
121
>>> sorted(test_set_multi_update())
122
['a', 'b', 'c', 1, 2, 3]
125
s1.update('abc', set([1, 3]), frozenset([1, 2]))
129
def test_object_update(v=None):
131
>>> type(test_object_update()) is set
133
>>> sorted(test_object_update())
134
['a', 'b', 'c', 1, 2, (1, 2)]
135
>>> sorted(test_object_update([]))
136
['a', 'b', 'c', 1, 2, (1, 2)]
137
>>> try: test_object_update(object())
138
... except TypeError: pass
139
... else: print("NOT RAISED!")
142
s1 = set([1, (1, 2)])
146
s1.update(frozenset((1,2)))
154
>>> type(test_set_clear()) is set
156
>>> list(test_set_clear())
165
def test_set_clear_None():
167
>>> test_set_clear_None()
168
Traceback (most recent call last):
169
AttributeError: 'NoneType' object has no attribute 'clear'
175
def test_set_list_comp():
177
>>> type(test_set_list_comp()) is set
179
>>> sorted(test_set_list_comp())
183
s1 = set([i%3 for i in range(5)])
187
def test_frozenset_list_comp():
189
>>> type(test_frozenset_list_comp()) is frozenset
191
>>> sorted(test_frozenset_list_comp())
195
s1 = frozenset([i%3 for i in range(5)])
201
>>> type(test_set_pop()) is set
203
>>> list(test_set_pop())
213
@cython.test_fail_if_path_exists("//SimpleCallNode//NameNode")
214
def test_object_pop(s):
217
>>> test_object_pop(s)
232
def test_noop_pop_exception():
234
>>> try: test_noop_pop_exception()
235
... except KeyError: pass
236
... else: print("KeyError expected but not raised!")
241
def test_set_discard():
243
>>> type(test_set_discard()) is set
245
>>> sorted(test_set_discard())
258
def test_set_sideeffect_unhashable_failure():
260
>>> test_set_sideeffect_unhashable_failure()
267
def unhashable_value(x):
271
s = set([1,sideeffect(2),3,unhashable_value(4),sideeffect(5)])
272
except TypeError: pass
273
else: assert False, "expected exception not raised"
277
def test_set_sideeffect_unhashable_failure_literal():
279
>>> test_set_sideeffect_unhashable_failure_literal()
286
def unhashable_value(x):
290
s = {1,sideeffect(2),3,unhashable_value(4),sideeffect(5)}
291
except TypeError: pass
292
else: assert False, "expected exception not raised"
296
def test_frozenset_sideeffect_unhashable_failure():
298
>>> test_frozenset_sideeffect_unhashable_failure()
305
def unhashable_value(x):
309
s = frozenset([1,sideeffect(2),3,unhashable_value(4),sideeffect(5)])
310
except TypeError: pass
311
else: assert False, "expected exception not raised"
315
@cython.test_assert_path_exists("//SetNode")
316
@cython.test_fail_if_path_exists(
318
"//PythonCapiCallNode"
320
def test_set_of_list():
322
>>> s = test_set_of_list()
323
>>> isinstance(s, set)
328
return set([1, 2, 3])
331
@cython.test_assert_path_exists("//PythonCapiCallNode")
332
@cython.test_fail_if_path_exists("//SetNode")
333
def test_frozenset_of_list():
335
>>> s = test_frozenset_of_list()
336
>>> isinstance(s, frozenset)
341
return frozenset([1, 2, 3])
344
@cython.test_assert_path_exists("//SetNode")
345
@cython.test_fail_if_path_exists("//SimpleCallNode")
346
def test_set_of_tuple():
348
>>> s = test_set_of_tuple()
349
>>> isinstance(s, set)
354
return set((1, 2, 3))
357
@cython.test_assert_path_exists("//PythonCapiCallNode")
358
@cython.test_fail_if_path_exists("//SetNode")
359
def test_frozenset_of_tuple():
361
>>> s = test_frozenset_of_tuple()
362
>>> isinstance(s, frozenset)
367
return frozenset((1, 2, 3))
370
@cython.test_assert_path_exists("//PythonCapiCallNode")
371
@cython.test_fail_if_path_exists(
375
def test_set_of_iterable(x):
377
>>> s = test_set_of_iterable([1, 2, 3])
378
>>> isinstance(s, set)
386
@cython.test_assert_path_exists("//PythonCapiCallNode")
387
@cython.test_fail_if_path_exists(
391
def test_frozenset_of_iterable(x):
393
>>> s = test_frozenset_of_iterable([1, 2, 3])
394
>>> isinstance(s, frozenset)
399
>>> s = test_frozenset_of_iterable(frozenset([1, 2, 3]))
400
>>> isinstance(s, frozenset)
408
@cython.test_assert_path_exists("//PythonCapiCallNode")
409
@cython.test_fail_if_path_exists(
413
def test_empty_frozenset():
415
>>> s = test_empty_frozenset()
416
>>> isinstance(s, frozenset)
421
>>> sys.version_info >= (3, 10) or s is frozenset() # singleton (in Python < 3.10)!
427
@cython.test_fail_if_path_exists(
428
'//ListNode//ListNode',
429
'//ListNode//PythonCapiCallNode//PythonCapiCallNode',
430
'//ListNode//SimpleCallNode//SimpleCallNode',
432
def test_singleton_empty_frozenset():
435
>>> test_singleton_empty_frozenset() if sys.version_info < (3, 10) else 1 # from CPython's test_set.py
439
efs = [frozenset(), frozenset([]), frozenset(()), frozenset(''),
440
frozenset(), frozenset([]), frozenset(()), frozenset(''),
441
frozenset(range(0)), frozenset(frozenset()),
443
return len(set(map(id, efs))) # note, only a singleton in Python <3.10
447
# Py3 can't compare different types
452
if type(item) is int:
454
elif type(item) is tuple:
461
return chars+nums+tuples