code-debug-env / tests /test_graders.py
Souravdanyal's picture
Final complete version - all fixes applied
8485798
# tests/test_graders.py — Run: python -m pytest tests/ -v
import sys, os
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from server.graders.grader_easy import grade_easy
from server.graders.grader_medium import grade_medium
from server.graders.grader_hard import grade_hard
from server.tasks.task_easy import EASY_TASKS
from server.tasks.task_medium import MEDIUM_TASKS
from server.tasks.task_hard import HARD_TASKS
def test_task_counts():
assert len(EASY_TASKS) == 15
assert len(MEDIUM_TASKS) == 15
assert len(HARD_TASKS) == 15
def test_easy_correct_scores_1():
for t in EASY_TASKS:
r, _, _, _, _ = grade_easy(t["fixed_code"], t)
assert r == 1.0, f"{t['task_id']} expected 1.0 got {r}"
def test_medium_correct_scores_1():
for t in MEDIUM_TASKS:
r, _, _, _, _ = grade_medium(t["fixed_code"], t)
assert r == 1.0, f"{t['task_id']} expected 1.0 got {r}"
def test_hard_correct_scores_high():
for t in HARD_TASKS:
keywords = t.get("explanation_keywords", [])
r, _, _, _, _ = grade_hard(t["fixed_code"], t, " ".join(keywords))
assert r >= 0.9, f"{t['task_id']} expected >=0.9 got {r}"
def test_reward_in_range():
for t in EASY_TASKS:
r, _, _, _, _ = grade_easy(t["buggy_code"], t)
assert 0.0 <= r <= 1.0
def test_buggy_scores_less_than_1():
for t in EASY_TASKS[:5]:
r, _, _, _, _ = grade_easy(t["buggy_code"], t)
assert r < 1.0, f"{t['task_id']} buggy code should not score 1.0"
def test_empty_code_returns_zero():
r, _, _, _, _ = grade_easy("", EASY_TASKS[0])
assert r == 0.0
if __name__ == "__main__":
import pytest
pytest.main([__file__, "-v"])