File size: 1,723 Bytes
8485798
 
c01667e
 
 
 
 
 
 
 
 
 
8485798
 
 
 
c01667e
8485798
 
 
 
c01667e
8485798
 
 
 
c01667e
8485798
 
 
 
 
c01667e
8485798
 
 
 
c01667e
8485798
 
 
 
c01667e
 
8485798
 
c01667e
 
 
8485798
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# 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"])