Exemplo n.º 1
0
def test_memoize_by_id_do_not_use_inspect_if_only_kwargs_are_provided(
        mock_getcallargs):
    calls = []

    def function(a, b=None):
        calls.append([a, b])
        return id(a) + id(b)

    decorated_function = memoize_by_id(function)

    assert decorated_function(1) == id(1) + id(None)
    mock_getcallargs.assert_called_once_with(function, 1)
    assert calls == [[1, None]]
    assert decorated_function.cache == {
        (('a', id(1)), ('b', id(None))): id(1) + id(None),
    }
    mock_getcallargs.reset_mock()

    assert decorated_function(a=1) == id(1) + id(None)
    assert not mock_getcallargs.called
    assert decorated_function.cache == {
        (('a', id(1)), ('b', id(None))): id(1) + id(None),
    }
Exemplo n.º 2
0
def test_memoize_by_id_decorator():
    calls = []

    def function(a, b=None):
        calls.append([a, b])
        return id(a) + id(b)

    decorated_function = memoize_by_id(function)

    assert decorated_function(1) == id(1) + id(None)
    assert decorated_function.cache == {
        (('a', id(1)), ('b', id(None))): id(1) + id(None)
    }
    assert calls == [[1, None]]

    assert decorated_function(2, 3) == id(2) + id(3)
    assert decorated_function.cache == {
        (('a', id(1)), ('b', id(None))): id(1) + id(None),
        (('a', id(2)), ('b', id(3))): id(2) + id(3),
    }
    assert calls == [[1, None], [2, 3]]

    # Calling the decorated method with known arguments will not call the inner method
    assert decorated_function(1) == id(1) + id(None)
    assert decorated_function.cache == {
        (('a', id(1)), ('b', id(None))): id(1) + id(None),
        (('a', id(2)), ('b', id(3))): id(2) + id(3),
    }
    assert calls == [[1, None], [2, 3]]

    decorated_function.cache.clear()

    assert decorated_function(1) == id(1) + id(None)
    assert decorated_function.cache == {
        (('a', id(1)), ('b', id(None))): id(1) + id(None)
    }
    assert calls == [[1, None], [2, 3], [1, None]]
Exemplo n.º 3
0
def test_memoize_by_id_decorator():
    calls = []

    def function(a, b=None):
        calls.append([a, b])
        return id(a) + id(b)
    decorated_function = memoize_by_id(function)

    assert decorated_function(1) == id(1) + id(None)
    assert decorated_function.cache == {
        (('a', id(1)), ('b', id(None))): id(1) + id(None)
    }
    assert calls == [[1, None]]

    assert decorated_function(2, 3) == id(2) + id(3)
    assert decorated_function.cache == {
        (('a', id(1)), ('b', id(None))): id(1) + id(None),
        (('a', id(2)), ('b', id(3))): id(2) + id(3),
    }
    assert calls == [[1, None], [2, 3]]

    # Calling the decorated method with known arguments will not call the inner method
    assert decorated_function(1) == id(1) + id(None)
    assert decorated_function.cache == {
        (('a', id(1)), ('b', id(None))): id(1) + id(None),
        (('a', id(2)), ('b', id(3))): id(2) + id(3),
    }
    assert calls == [[1, None], [2, 3]]

    decorated_function.cache.clear()

    assert decorated_function(1) == id(1) + id(None)
    assert decorated_function.cache == {
        (('a', id(1)), ('b', id(None))): id(1) + id(None)
    }
    assert calls == [[1, None], [2, 3], [1, None]]