# mode: run
# tag: set
cimport cython
@cython.test_assert_path_exists(
"//SetIterationNextNode",
)
def set_iter_comp(set s):
"""
>>> s = set([1, 2, 3])
>>> sorted(set_iter_comp(s))
[1, 2, 3]
"""
return [x for x in s]
@cython.test_assert_path_exists(
"//SetIterationNextNode",
)
def set_iter_comp_typed(set s):
"""
>>> s = set([1, 2, 3])
>>> sorted(set_iter_comp(s))
[1, 2, 3]
"""
cdef int x
return [x for x in s]
@cython.test_assert_path_exists(
"//SetIterationNextNode",
)
def frozenset_iter_comp(frozenset s):
"""
>>> s = frozenset([1, 2, 3])
>>> sorted(frozenset_iter_comp(s))
[1, 2, 3]
"""
return [x for x in s]
@cython.test_assert_path_exists(
"//SetIterationNextNode",
)
def set_iter_comp_frozenset(set s):
"""
>>> s = set([1, 2, 3])
>>> sorted(set_iter_comp(s))
[1, 2, 3]
"""
return [x for x in frozenset(s)]
@cython.test_assert_path_exists(
"//SetIterationNextNode",
)
def set_iter_modify(set s, int value):
"""
>>> s = set([1, 2, 3])
>>> sorted(set_iter_modify(s, 1))
[1, 2, 3]
>>> sorted(set_iter_modify(s, 2))
[1, 2, 3]
>>> sorted(set_iter_modify(s, 3))
[1, 2, 3]
>>> sorted(set_iter_modify(s, 4))
Traceback (most recent call last):
RuntimeError: set changed size during iteration
"""
for x in s:
s.add(value)
return s
@cython.test_fail_if_path_exists(
"//SimpleCallNode//NameNode[@name = 'enumerate']",
)
@cython.test_assert_path_exists(
"//AddNode",
"//SetIterationNextNode",
)
def set_iter_enumerate(set s):
"""
>>> s = set(['a', 'b', 'c'])
>>> numbers, values = set_iter_enumerate(s)
>>> sorted(numbers)
[0, 1, 2]
>>> sorted(values)
['a', 'b', 'c']
"""
cdef int i
numbers = []
values = []
for i, x in enumerate(s):
numbers.append(i)
values.append(x)
return numbers, values