Ejemplo n.º 1
0
def test_lru_equality_cache_id():
    callargs = []

    def _callappend(*arg):
        callargs.append(arg)

    fun = lru_equality_cache(maxsize=1)(_callappend)

    class EqTester(object):
        def __init__(self, a):
            self.a = a

        def __eq__(self, other):
            return other.a == self.a

        def __hash__(self):
            return hash(id(self))

    a, b = EqTester(-424242), EqTester(-424242)
    assert a == b
    assert hash(a) != hash(b)

    fun(a)
    fun(b)
    assert fun.cache_info() == (1, 1, 1, 1)
Ejemplo n.º 2
0
def test_lru_equality_cache_basic():

    callargs = []
    result = [None]

    def _callappend(*arg):
        callargs.append(arg)
        return result[-1]

    fun = lru_equality_cache(maxsize=20)(_callappend)
    hits, misses, maxsize, currsize = fun.cache_info()
    assert hits == 0
    assert misses == 0
    assert maxsize == 20
    assert currsize == 0

    for i in range(100):
        fun(i)
        fun(i)
    hits, misses, maxsize, currsize = fun.cache_info()
    assert hits == 100
    assert misses == 100
    assert maxsize == 20
    assert currsize == 20
    assert len(callargs) == 100
    assert len(set(callargs)) == 100
    for i in range(80, 100):
        fun(i)
    assert fun.cache_info() == (120, 100, 20, 20)
    assert len(callargs) == 100

    # Change the return value
    assert fun(1) is None
    result.append("test_result")
    assert fun(1) is None
    assert fun.__wrapped__(1) == "test_result"
    assert fun(2) == "test_result"