Blame tests/run/dict_pop.pyx

Packit 562c7a
# mode: run
Packit 562c7a
# tag: dict, pop, builtins
Packit 562c7a
Packit 562c7a
cimport cython
Packit 562c7a
Packit 562c7a
@cython.test_assert_path_exists("//PythonCapiCallNode")
Packit 562c7a
@cython.test_fail_if_path_exists("//AttributeNode")
Packit 562c7a
def dict_pop(dict d, key):
Packit 562c7a
    """
Packit 562c7a
    >>> d = { 1: 10, 2: 20 }
Packit 562c7a
    >>> dict_pop(d, 1)
Packit 562c7a
    (10, {2: 20})
Packit 562c7a
    >>> dict_pop(d, 3)
Packit 562c7a
    Traceback (most recent call last):
Packit 562c7a
    KeyError: 3
Packit 562c7a
    >>> dict_pop(d, 2)
Packit 562c7a
    (20, {})
Packit 562c7a
    """
Packit 562c7a
    return d.pop(key), d
Packit 562c7a
Packit 562c7a
Packit 562c7a
@cython.test_assert_path_exists("//PythonCapiCallNode")
Packit 562c7a
@cython.test_fail_if_path_exists("//AttributeNode")
Packit 562c7a
def dict_pop_default(dict d, key, default):
Packit 562c7a
    """
Packit 562c7a
    >>> d = { 1: 10, 2: 20 }
Packit 562c7a
    >>> dict_pop_default(d, 1, "default")
Packit 562c7a
    (10, {2: 20})
Packit 562c7a
    >>> dict_pop_default(d, 3, None)
Packit 562c7a
    (None, {2: 20})
Packit 562c7a
    >>> dict_pop_default(d, 3, "default")
Packit 562c7a
    ('default', {2: 20})
Packit 562c7a
    >>> dict_pop_default(d, 2, "default")
Packit 562c7a
    (20, {})
Packit 562c7a
    """
Packit 562c7a
    return d.pop(key, default), d
Packit 562c7a
Packit 562c7a
Packit 562c7a
cdef class MyType:
Packit 562c7a
    cdef public int i
Packit 562c7a
    def __init__(self, i):
Packit 562c7a
        self.i = i
Packit 562c7a
Packit 562c7a
Packit 562c7a
@cython.test_assert_path_exists("//SingleAssignmentNode//PythonCapiCallNode")
Packit 562c7a
@cython.test_fail_if_path_exists("//SingleAssignmentNode//AttributeNode")
Packit 562c7a
def dict_pop_default_typed(dict d, key, default):
Packit 562c7a
    """
Packit 562c7a
    >>> d = {1: MyType(2)}
Packit 562c7a
    >>> dict_pop_default_typed(d, 1, None)
Packit 562c7a
    2
Packit 562c7a
    >>> dict_pop_default_typed(d, 3, None)
Packit 562c7a
    >>> dict_pop_default_typed(d, 3, "default")  # doctest: +ELLIPSIS
Packit 562c7a
    Traceback (most recent call last):
Packit 562c7a
    TypeError: Cannot convert str to ...MyType
Packit 562c7a
    """
Packit 562c7a
    cdef MyType x = d.pop(key, default)
Packit 562c7a
    return x.i if x is not None else None