cimport cython
def f(obj1, obj2, obj3, obj4, obj5):
"""
>>> f(1, 2, 3, 4, 5)
[]
"""
obj1 = []
return obj1
def g(obj1, obj2, obj3, obj4, obj5):
"""
>>> g(1, 2, 3, 4, 5)
[2]
"""
obj1 = [obj2]
return obj1
def h(obj1, obj2, obj3, obj4, obj5):
"""
>>> h(1, 2, 3, 4, 5)
[2, 3]
"""
obj1 = [obj2, obj3]
return obj1
def j(obj1, obj2, obj3, obj4, obj5):
"""
>>> j(1, 2, 3, 4, 5)
[2, 3, 4]
"""
obj1 = [obj2, obj3, obj4]
return obj1
def k(obj1, obj2, obj3, obj4, obj5):
"""
>>> k(1, 2, 3, 4, 5)
[17, 42, 88]
"""
obj1 = [17, 42, 88]
return obj1
@cython.test_fail_if_path_exists("//SimpleCallNode")
def test_list_call(ob):
"""
>>> def f():
... yield 1
... yield 2
...
>>> list(f())
[1, 2]
"""
return list(ob)
def test_list_sort():
"""
>>> test_list_sort()
[1, 2, 3, 4]
"""
cdef list l1
l1 = [2,3,1,4]
l1.sort()
return l1
def test_list_sort_reversed():
cdef list l1
l1 = [2,3,1,4]
l1.sort(reversed=True)
return l1
def test_list_reverse():
"""
>>> test_list_reverse()
[1, 2, 3, 4]
"""
cdef list l1
l1 = [4,3,2,1]
l1.reverse()
return l1
@cython.test_assert_path_exists(
'//SimpleCallNode//AttributeNode[@entry.cname = "__Pyx_PyList_Append"]',
)
def test_list_append():
"""
>>> test_list_append()
[1, 2, 3, 4]
"""
cdef list l1 = [1,2]
l1.append(3)
l1.append(4)
return l1
@cython.test_assert_path_exists(
'//SimpleCallNode//NameNode[@entry.cname = "__Pyx_PyList_Append"]',
)
def test_list_append_unbound():
"""
>>> test_list_append_unbound()
[1, 2, 3, 4]
"""
cdef list l1 = [1,2]
list.append(l1, 3)
list.append(l1, 4)
return l1
@cython.test_assert_path_exists(
'//SimpleCallNode//NameNode[@entry.cname = "__Pyx_PyList_Append"]',
)
def test_list_append_unbound_assigned():
"""
>>> test_list_append_unbound_assigned()
[1, 2, 3, 4]
"""
append = list.append
cdef list l1 = [1,2]
append(l1, 3)
append(l1, 4)
return l1
def test_list_append_insert():
"""
>>> test_list_append_insert()
['first', 'second']
"""
cdef list l = []
l.append("second")
l.insert(0, "first")
return l
def test_list_pop():
"""
>>> test_list_pop()
(2, [1])
"""
cdef list l1
l1 = [1,2]
two = l1.pop()
return two, l1
def test_list_pop0():
"""
>>> test_list_pop0()
(1, [2])
"""
cdef list l1
l1 = [1,2]
one = l1.pop(0)
return one, l1
def test_list_pop_all():
"""
>>> test_list_pop_all()
True
"""
cdef list l1
l1 = [1,2]
i = 0
try:
l1.pop()
i = 1
l1.pop(-1)
i = 2
l1.pop(0)
i = 3
except IndexError:
return i == 2
return False
@cython.test_assert_path_exists(
'//PythonCapiCallNode//PythonCapiFunctionNode[@cname = "__Pyx_ListComp_Append"]',
'//PythonCapiCallNode//PythonCapiFunctionNode[@cname = "__Pyx_PyList_Append"]',
)
def test_list_extend(seq=None, x=4):
"""
>>> test_list_extend()
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]
>>> test_list_extend([])
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]
>>> test_list_extend([1])
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 1]
>>> test_list_extend([1, 2])
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 1, 2]
"""
cdef list l = [1,2,3]
l.extend([])
l.extend(())
l.extend(set()) # not currently optimised (not worth the trouble)
assert l == [1,2,3]
assert len(l) == 3
l.extend([4,x+1,6])
l.extend([7,8,9,10,11,12,13,14,15,16])
if seq is not None:
l.extend(seq)
return l
@cython.test_assert_path_exists(
'//PythonCapiCallNode//PythonCapiFunctionNode[@cname = "__Pyx_ListComp_Append"]',
'//PythonCapiCallNode//PythonCapiFunctionNode[@cname = "__Pyx_PyList_Append"]',
)
def test_list_extend_unbound(seq=None, x=4):
"""
>>> test_list_extend_unbound()
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]
>>> test_list_extend_unbound([])
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]
>>> test_list_extend_unbound([1])
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 1]
>>> test_list_extend_unbound([1, 2])
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 1, 2]
"""
cdef list l = [1,2,3]
list.extend(l, [])
list.extend(l, ())
try:
list.extend((), ())
except TypeError:
pass
else:
assert False, "TypeError not raised!"
list.extend(l, set()) # not currently optimised (not worth the trouble)
assert l == [1,2,3]
assert len(l) == 3
list.extend(l, [4,x+1,6])
list.extend(l, [7,8,9,10,11,12,13,14,15,16])
if seq is not None:
list.extend(l, seq)
return l
@cython.test_assert_path_exists(
'//PythonCapiCallNode//PythonCapiFunctionNode[@cname = "__Pyx_ListComp_Append"]',
'//PythonCapiCallNode//PythonCapiFunctionNode[@cname = "__Pyx_PyList_Append"]',
)
def test_list_extend_sideeffect(seq=None, exc=False):
"""
>>> test_list_extend_sideeffect()
([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16], [4, 6, 7, 8])
>>> test_list_extend_sideeffect([])
([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16], [4, 6, 7, 8])
>>> test_list_extend_sideeffect([], exc=True)
([1, 2, 3, 10, 11, 12, 13, 14, 15, 16], [4, 7, 8])
>>> test_list_extend_sideeffect([1])
([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 1], [4, 6, 7, 8])
>>> test_list_extend_sideeffect([1], exc=True)
([1, 2, 3, 10, 11, 12, 13, 14, 15, 16, 1], [4, 7, 8])
>>> test_list_extend_sideeffect([1, 2])
([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 1, 2], [4, 6, 7, 8])
"""
calls = []
def sideeffect(value):
calls.append(value)
return value
def fail(value):
if exc:
raise TypeError("HUHU")
return value
cdef list l = [1,2,3]
l.extend([])
l.extend(())
l.extend(set()) # not currently optimised (not worth the trouble)
assert l == [1,2,3]
assert len(l) == 3
# Must first build all items, then append them in order.
# If building one value fails, none of them must be appended.
try:
l.extend([sideeffect(4), fail(5), sideeffect(6)])
except TypeError as e:
assert exc
assert "HUHU" in str(e)
else:
assert not exc
try:
l.extend([sideeffect(7), sideeffect(8), fail(9)])
except TypeError as e:
assert exc
assert "HUHU" in str(e)
else:
assert not exc
l.extend([10,11,12,13,14,15,16])
if seq is not None:
l.extend(seq)
return l, calls
def test_none_list_extend(list l):
"""
>>> test_none_list_extend([])
[1, 2, 3]
>>> test_none_list_extend([0, 0, 0])
[0, 0, 0, 1, 2, 3]
>>> test_none_list_extend(None)
123
"""
try:
l.extend([1,2,3])
except AttributeError:
return 123
return l