GraphResearcher / tests /test_readme_quality.py
yugbirla's picture
Add evaluation framework, ablation tests, and lean README
7728916
Raw
History Blame Contribute Delete
2.57 kB
"""Tests for README quality and required content."""
from pathlib import Path
README = Path(__file__).parent.parent / "README.md"
def read_readme() -> str:
assert README.exists(), "README.md not found"
return README.read_text(encoding="utf-8")
def test_readme_exists():
assert README.exists()
def test_readme_has_eval_markers():
"""README must contain eval results placeholder markers."""
content = read_readme()
assert "EVAL_RESULTS_START" in content, "Missing <!-- EVAL_RESULTS_START --> marker"
assert "EVAL_RESULTS_END" in content, "Missing <!-- EVAL_RESULTS_END --> marker"
def test_readme_mentions_ablation():
"""README must mention RAG vs RAG + Graph comparison."""
content = read_readme().lower()
assert "rag" in content
assert "graph" in content
# Should mention ablation or comparison
assert any(term in content for term in ["ablation", "rag + graph", "rag+graph", "rag only", "graph-guided"]), \
"README should mention RAG vs Graph ablation/comparison"
def test_readme_has_limitations():
"""README must have an honest limitations section."""
content = read_readme().lower()
assert "limitation" in content, "README should have a limitations section"
def test_readme_no_fake_metrics():
"""README should not contain suspicious hardcoded metric claims."""
content = read_readme()
# Check for suspicious patterns like "95% accuracy" or "Recall@5: 0.92"
import re
suspicious = re.findall(r'(?:accuracy|recall|precision|f1)[:\s]+(?:0\.\d{2,}|\d{2,}%)', content, re.IGNORECASE)
# Filter out legitimate eval table placeholders
for match in suspicious:
assert "actual" in match.lower() or "pending" in match.lower() or "n/a" in match.lower(), \
f"Suspicious hardcoded metric found: {match}. Metrics should come from real evaluation runs."
def test_readme_has_project_title():
"""README should have a project title."""
content = read_readme()
assert "GraphResearcher" in content
def test_readme_has_setup_section():
"""README should have setup instructions."""
content = read_readme().lower()
assert any(term in content for term in ["setup", "install", "pip install", "requirements"]), \
"README should have setup/installation instructions"
def test_readme_not_too_long():
"""README should be reasonable length (not bloated)."""
content = read_readme()
lines = content.strip().split("\n")
assert len(lines) < 400, f"README is {len(lines)} lines — should be concise and professional"