import pytest from src.cache import LRUCache from src.config import CACHE_MAX_SIZE def test_cache_put_and_get(): cache = LRUCache(max_size=CACHE_MAX_SIZE) cache.put("a", 1) assert cache.get("a") == 1 def test_cache_miss(): cache = LRUCache(max_size=CACHE_MAX_SIZE) assert cache.get("nonexistent") is None def test_cache_eviction(): cache = LRUCache(max_size=3) cache.put("a", 1) cache.put("b", 2) cache.put("c", 3) cache.put("d", 4) # should evict "a" assert cache.get("a") is None assert cache.get("d") == 4 def test_cache_lru_order(): cache = LRUCache(max_size=3) cache.put("a", 1) cache.put("b", 2) cache.put("c", 3) cache.get("a") # access "a" makes it most recent cache.put("d", 4) # should evict "b" (least recently used) assert cache.get("a") == 1 assert cache.get("b") is None def test_cache_size(): cache = LRUCache(max_size=5) assert cache.size == 0 cache.put("x", 10) cache.put("y", 20) assert cache.size == 2 def test_cache_clear(): cache = LRUCache(max_size=5) cache.put("a", 1) cache.put("b", 2) cache.clear() assert cache.size == 0 assert cache.get("a") is None def test_cache_update_existing(): cache = LRUCache(max_size=3) cache.put("a", 1) cache.put("a", 100) assert cache.get("a") == 100 assert cache.size == 1