Blame tests/run/dict_getitem.pyx

Packit 562c7a
# mode: run
Packit 562c7a
# tag: dict, getitem
Packit 562c7a
Packit 562c7a
cimport cython
Packit 562c7a
Packit 562c7a
def test(dict d, index):
Packit 562c7a
    """
Packit 562c7a
    >>> d = { 1: 10 }
Packit 562c7a
    >>> test(d, 1)
Packit 562c7a
    10
Packit 562c7a
Packit 562c7a
    >>> test(d, 2)
Packit 562c7a
    Traceback (most recent call last):
Packit 562c7a
    KeyError: 2
Packit 562c7a
Packit 562c7a
    >>> test(d, (1,2))
Packit 562c7a
    Traceback (most recent call last):
Packit 562c7a
    KeyError: (1, 2)
Packit 562c7a
Packit 562c7a
    >>> import sys
Packit 562c7a
    >>> try: d[(1,)]
Packit 562c7a
    ... except KeyError:
Packit 562c7a
    ...     args = sys.exc_info()[1].args
Packit 562c7a
    ...     if sys.version_info >= (2,5): print(args)
Packit 562c7a
    ...     else: print((args,))   # fake it for older CPython versions
Packit 562c7a
    ((1,),)
Packit 562c7a
Packit 562c7a
    >>> import sys
Packit 562c7a
    >>> try: test(d, (1,))
Packit 562c7a
    ... except KeyError:
Packit 562c7a
    ...     args = sys.exc_info()[1].args
Packit 562c7a
    ...     if sys.version_info >= (2,5): print(args)
Packit 562c7a
    ...     else: print((args,))   # fake it for older CPython versions
Packit 562c7a
    ((1,),)
Packit 562c7a
Packit 562c7a
    >>> class Unhashable:
Packit 562c7a
    ...    def __hash__(self):
Packit 562c7a
    ...        raise ValueError
Packit 562c7a
    >>> test(d, Unhashable())
Packit 562c7a
    Traceback (most recent call last):
Packit 562c7a
    ValueError
Packit 562c7a
Packit 562c7a
    >>> test(None, 1) # doctest: +ELLIPSIS
Packit 562c7a
    Traceback (most recent call last):
Packit 562c7a
    TypeError: ...object...
Packit 562c7a
    """
Packit 562c7a
    return d[index]
Packit 562c7a
Packit 562c7a
Packit 562c7a
def getitem_str(dict d, obj, str index):
Packit 562c7a
    """
Packit 562c7a
    >>> d = {'abc': 1, 'xyz': 2, None: 3}
Packit 562c7a
    >>> getitem_str(d, d, 'abc')
Packit 562c7a
    (1, 1)
Packit 562c7a
    >>> getitem_str(d, d, 'xyz')
Packit 562c7a
    (2, 2)
Packit 562c7a
    >>> getitem_str(d, d, None)
Packit 562c7a
    (3, 3)
Packit 562c7a
Packit 562c7a
    >>> class GetItem(object):
Packit 562c7a
    ...     def __getitem__(self, name): return d[name]
Packit 562c7a
    >>> getitem_str(d, GetItem(), 'abc')
Packit 562c7a
    (1, 1)
Packit 562c7a
    >>> getitem_str(d, GetItem(), 'xyz')
Packit 562c7a
    (2, 2)
Packit 562c7a
    >>> getitem_str(d, GetItem(), None)
Packit 562c7a
    (3, 3)
Packit 562c7a
    >>> getitem_str(d, GetItem(), 'no')
Packit 562c7a
    Traceback (most recent call last):
Packit 562c7a
    KeyError: 'no'
Packit 562c7a
Packit 562c7a
    >>> class GetItemFail(object):
Packit 562c7a
    ...     def __getitem__(self, name): raise ValueError("failed")
Packit 562c7a
    >>> getitem_str(d, GetItemFail(), 'abc')
Packit 562c7a
    Traceback (most recent call last):
Packit 562c7a
    ValueError: failed
Packit 562c7a
    >>> getitem_str(d, GetItemFail(), None)
Packit 562c7a
    Traceback (most recent call last):
Packit 562c7a
    ValueError: failed
Packit 562c7a
    """
Packit 562c7a
    return d[index], obj[index]
Packit 562c7a
Packit 562c7a
Packit 562c7a
def getitem_unicode(dict d, obj, unicode index):
Packit 562c7a
    """
Packit 562c7a
    >>> d = {'abc': 1, 'xyz': 2, None: 3}
Packit 562c7a
    >>> getitem_unicode(d, d, u'abc')
Packit 562c7a
    (1, 1)
Packit 562c7a
    >>> getitem_unicode(d, d, u'xyz')
Packit 562c7a
    (2, 2)
Packit 562c7a
    >>> getitem_unicode(d, d, None)
Packit 562c7a
    (3, 3)
Packit 562c7a
Packit 562c7a
    >>> class GetItem(object):
Packit 562c7a
    ...     def __getitem__(self, name): return d[name]
Packit 562c7a
    >>> getitem_unicode(d, GetItem(), u'abc')
Packit 562c7a
    (1, 1)
Packit 562c7a
    >>> getitem_unicode(d, GetItem(), u'xyz')
Packit 562c7a
    (2, 2)
Packit 562c7a
    >>> getitem_unicode(d, GetItem(), None)
Packit 562c7a
    (3, 3)
Packit 562c7a
    >>> try: getitem_unicode(d, GetItem(), u'no')
Packit 562c7a
    ... except KeyError as exc: assert exc.args[0] == u'no', str(exc)
Packit 562c7a
    ... else: assert False, "KeyError not raised"
Packit 562c7a
Packit 562c7a
    >>> class GetItemFail(object):
Packit 562c7a
    ...     def __getitem__(self, name): raise ValueError("failed")
Packit 562c7a
    >>> getitem_unicode(d, GetItemFail(), u'abc')
Packit 562c7a
    Traceback (most recent call last):
Packit 562c7a
    ValueError: failed
Packit 562c7a
    """
Packit 562c7a
    return d[index], obj[index]
Packit 562c7a
Packit 562c7a
Packit 562c7a
def getitem_tuple(dict d, index):
Packit 562c7a
    """
Packit 562c7a
    >>> d = {1: 1, (1,): 2}
Packit 562c7a
    >>> getitem_tuple(d, 1)
Packit 562c7a
    (1, 2)
Packit 562c7a
    """
Packit 562c7a
    return d[index], d[index,]
Packit 562c7a
Packit 562c7a
Packit 562c7a
def getitem_in_condition(dict d, key, expected_result):
Packit 562c7a
    """
Packit 562c7a
    >>> d = dict(a=1, b=2)
Packit 562c7a
    >>> getitem_in_condition(d, 'a', 1)
Packit 562c7a
    True
Packit 562c7a
    """
Packit 562c7a
    return d[key] is expected_result or d[key] == expected_result
Packit 562c7a
Packit 562c7a
Packit 562c7a
@cython.test_fail_if_path_exists('//NoneCheckNode')
Packit 562c7a
def getitem_not_none(dict d not None, key):
Packit 562c7a
    """
Packit 562c7a
    >>> d = { 1: 10 }
Packit 562c7a
    >>> test(d, 1)
Packit 562c7a
    10
Packit 562c7a
Packit 562c7a
    >>> test(d, 2)
Packit 562c7a
    Traceback (most recent call last):
Packit 562c7a
    KeyError: 2
Packit 562c7a
Packit 562c7a
    >>> test(d, (1,2))
Packit 562c7a
    Traceback (most recent call last):
Packit 562c7a
    KeyError: (1, 2)
Packit 562c7a
    """
Packit 562c7a
    return d[key]