"""Tests for lru-cache.""" import pytest from solution import LRUCache class TestBasicCases: """Test basic functionality with typical inputs.""" def test_basic_put_get(self): """Test basic put and get operations.""" cache = LRUCache(2) cache.put("a", 1) cache.put("b", 2) assert cache.get("a") == 1 assert cache.get("b") == 2 def test_eviction_lru(self): """Test that least recently used is evicted.""" cache = LRUCache(2) cache.put("a", 1) cache.put("b", 2) cache.get("a") # a is now most recent cache.put("c", 3) # b should be evicted assert cache.get("b") == -1 assert cache.get("a") == 1 assert cache.get("c") == 3 def test_update_existing_key(self): """Test updating an existing key.""" cache = LRUCache(2) cache.put("a", 1) cache.put("a", 10) assert cache.get("a") == 10 class TestEdgeCases: """Test edge cases and boundary conditions.""" def test_capacity_one(self): """Test with capacity of 1.""" cache = LRUCache(1) cache.put("a", 1) cache.put("b", 2) assert cache.get("a") == -1 assert cache.get("b") == 2 def test_get_nonexistent(self): """Test getting a key that doesn't exist.""" cache = LRUCache(2) assert cache.get("missing") == -1 def test_put_updates_recency(self): """Test that put on existing key updates recency.""" cache = LRUCache(2) cache.put("a", 1) cache.put("b", 2) cache.put("a", 10) # a is now most recent cache.put("c", 3) # b should be evicted assert cache.get("b") == -1 assert cache.get("a") == 10 def test_many_operations(self): """Test a sequence of many operations.""" cache = LRUCache(3) cache.put("a", 1) cache.put("b", 2) cache.put("c", 3) cache.get("a") cache.put("d", 4) # evicts b cache.put("e", 5) # evicts c assert cache.get("a") == 1 assert cache.get("b") == -1 assert cache.get("c") == -1 assert cache.get("d") == 4 assert cache.get("e") == 5 def test_get_updates_recency(self): """Test that get updates the access order.""" cache = LRUCache(2) cache.put("a", 1) cache.put("b", 2) cache.get("a") # touch a cache.put("c", 3) # evicts b, not a assert cache.get("a") == 1 assert cache.get("b") == -1