Spaces:
Runtime error
Runtime error
| import pytest | |
| import time | |
| from backend.app.utils.cache import QACache, cache_qa_result | |
| from backend.app.nlp.qa import answer_question | |
| def test_cache_basic(): | |
| # Create a new cache instance | |
| cache = QACache(max_size=10) | |
| # Test setting and getting values | |
| cache.set("q1", "c1", "a1") | |
| assert cache.get("q1", "c1") == "a1" | |
| # Test cache miss | |
| assert cache.get("q2", "c2") is None | |
| def test_cache_size_limit(): | |
| # Create a small cache | |
| cache = QACache(max_size=2) | |
| # Fill the cache | |
| cache.set("q1", "c1", "a1") | |
| cache.set("q2", "c2", "a2") | |
| cache.set("q3", "c3", "a3") # This should remove q1 | |
| # Verify oldest item was removed | |
| assert cache.get("q1", "c1") is None | |
| assert cache.get("q2", "c2") == "a2" | |
| assert cache.get("q3", "c3") == "a3" | |
| def test_qa_caching(): | |
| # Test data with very different contexts and questions | |
| question1 = "What is the punishment for theft under IPC?" | |
| context1 = "Section 378 of IPC defines theft. The punishment for theft is imprisonment up to 3 years or fine or both." | |
| question2 = "What are the conditions for bail in a murder case?" | |
| context2 = "Section 437 of CrPC states that bail may be granted in non-bailable cases except for murder. The court must be satisfied that there are reasonable grounds for believing that the accused is not guilty." | |
| # First call for question1 | |
| start_time = time.time() | |
| result1 = answer_question(question1, context1) | |
| first_call_time = time.time() - start_time | |
| # Second call for question1 (should use cache) | |
| start_time = time.time() | |
| result2 = answer_question(question1, context1) | |
| second_call_time = time.time() - start_time | |
| # Verify results are the same for cached question | |
| assert result1 == result2 | |
| # Verify second call was faster (cached) | |
| assert second_call_time < first_call_time | |
| # Call for question2 (should not use cache) | |
| result3 = answer_question(question2, context2) | |
| # Verify different questions give different results | |
| assert result1["answer"] != result3["answer"] | |
| # Verify cache is working by calling question1 again | |
| start_time = time.time() | |
| result4 = answer_question(question1, context1) | |
| third_call_time = time.time() - start_time | |
| # Should still be using cache | |
| assert result4 == result1 | |
| assert third_call_time < first_call_time | |
| def test_cache_clear(): | |
| cache = QACache() | |
| # Add some items | |
| cache.set("q1", "c1", "a1") | |
| cache.set("q2", "c2", "a2") | |
| # Clear cache | |
| cache.clear() | |
| # Verify cache is empty | |
| assert cache.get("q1", "c1") is None | |
| assert cache.get("q2", "c2") is None |