def test_overflow_after_clear(): lru = LruCache(1) lru.clear() lru.set('a', 10) lru.set('b', 20) assert lru.get('c') == SENTINEL
def storage_lru(): storage = LruCache(128) storage.ring = ring.lru storage.is_binary = False storage.has_has = True storage.has_touch = True storage.has_expire = False return storage
def decorating_function(user_function): cache = LruCache(maxsize) def wrapper(*args, **kwds): # Size limited caching that tracks accesses by recency key = _make_key(args, kwds, typed) result = cache.get(key) if result is not SENTINEL: return result result = user_function(*args, **kwds) cache.set(key, result) return result return update_wrapper(wrapper, user_function)
def test_lru_object(): lru = LruCache(3) lru.set('a', 10) lru.set('b', 20) lru.set('c', 30) assert 10 == lru.get('a') lru.set('d', 40) assert SENTINEL is lru.get('b') assert 30 == lru.get('c') lru.delete('c') assert 10 == lru.get('a') assert SENTINEL is lru.get('b') assert SENTINEL is lru.get('c') assert 40 == lru.get('d') lru.clear() for c in 'abcd': assert SENTINEL is lru.get(c) lru.cache_info()
def test_maxsize_compatibility_check(): lru = LruCache(None) lru.set('a', 10) lru.set('b', 20) assert lru.get('a') == 10 lru = LruCache(0) lru.set('a', 10) assert lru.get('a') == SENTINEL lru = LruCache('test') with pytest.raises(TypeError): lru.set('a', 10)
def test_expire_object(): lru = LruCache(3) now_mock = MagicMock() now_mock.return_value = 0 lru.now = now_mock lru.set('a', 10, expire=1) lru.set('b', 20, expire=2) lru.set('c', 30, expire=3) # a - b - c # Check if cache works well assert lru.get('a') == 10 # b - c - a # Check if 'a' key expired now_mock.return_value = 1 assert lru.get('a') == SENTINEL # b - c # Check if lru logic works well lru.set('d', 40, expire=4) # b - c - d assert lru.get('b') == 20 # c - d - b # Check if 'c' key not expired assert lru.get('c') == 30 # d - b - c lru.set('e', 50) # b - c - e assert lru.get('d') == SENTINEL
def storage_lru(): return LruCache(128), ring.lru