Ranjit Behera
FinEE v1.0 - Finance Entity Extractor
dcc24f8
"""
Tests for FinEE Cache (Tier 0).
"""
import time
from finee.cache import LRUCache, ExtractionResult
def test_cache_hashing():
cache = LRUCache()
text = " Rs.500 spent "
# Should normalize whitespace and case
key1 = cache.hash_text("Rs.500 spent")
key2 = cache.hash_text("rs.500 SPENT")
assert key1 == key2
def test_cache_operations():
cache = LRUCache(max_size=2)
# Add item
res1 = ExtractionResult(amount=100.0)
cache.set("tx1", res1)
# Get item
cached = cache.get("tx1")
assert cached.amount == 100.0
assert cached.from_cache is True
# Check stats
stats = cache.get_stats()
assert stats.hits == 1
assert stats.size == 1
def test_lru_eviction():
cache = LRUCache(max_size=2)
# Fill cache
cache.set("tx1", ExtractionResult(amount=1))
cache.set("tx2", ExtractionResult(amount=2))
# Access tx1 to make it recent
cache.get("tx1")
# Add 3rd item (should evict tx2, because tx1 was just used)
cache.set("tx3", ExtractionResult(amount=3))
assert cache.contains("tx1") # Kept
assert cache.contains("tx3") # New
assert not cache.contains("tx2") # Evicted
def test_cache_threading_safety():
# Basic check ensuring no crash on rapid updates
cache = LRUCache(max_size=100)
for i in range(200):
cache.set(f"tx{i}", ExtractionResult(amount=i))
assert len(cache) == 100
assert cache.get("tx199").amount == 199.0