Skip to content

Commit f945e8c

Browse files
authored
handle zero capacity for lru cache (#20080)
1 parent cfeeae1 commit f945e8c

File tree

2 files changed

+24
-4
lines changed

2 files changed

+24
-4
lines changed

chia/_tests/core/util/test_lru_cache.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import unittest
44

5+
import pytest
6+
57
from chia.util.lru_cache import LRUCache
68

79

@@ -54,3 +56,17 @@ def test_lru_cache(self):
5456
assert len(cache.cache) == 5
5557
assert cache.get(b"0") is None
5658
assert cache.get(b"1") == 1
59+
60+
61+
@pytest.mark.parametrize(argnames="capacity", argvalues=[-10, -1, 0])
62+
def test_with_zero_capacity(capacity: int) -> None:
63+
cache: LRUCache[bytes, int] = LRUCache(capacity=capacity)
64+
cache.put(b"0", 1)
65+
assert cache.get(b"0") is None
66+
assert len(cache.cache) == 0
67+
68+
69+
@pytest.mark.parametrize(argnames="capacity", argvalues=[-10, -1, 0, 1, 5, 10])
70+
def test_get_capacity(capacity: int) -> None:
71+
cache: LRUCache[object, object] = LRUCache(capacity=capacity)
72+
assert cache.get_capacity() == capacity

chia/util/lru_cache.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,14 @@ def get(self, key: K) -> Optional[V]:
2222
return self.cache[key]
2323

2424
def put(self, key: K, value: V) -> None:
25-
self.cache[key] = value
26-
self.cache.move_to_end(key)
27-
if len(self.cache) > self.capacity:
28-
self.cache.popitem(last=False)
25+
if self.capacity > 0:
26+
self.cache[key] = value
27+
self.cache.move_to_end(key)
28+
if len(self.cache) > self.capacity:
29+
self.cache.popitem(last=False)
2930

3031
def remove(self, key: K) -> None:
3132
self.cache.pop(key)
33+
34+
def get_capacity(self) -> int:
35+
return self.capacity

0 commit comments

Comments
 (0)