tests/test_graders.py
Rama main · réplica de lectura del repositorio original.
"""判分逻辑栈测试:实时执行 truth_sql,再用纯判分器比较答案。"""
import pytest
from dm.eval.run_eval import _grade, grade_refusal
SQL_QTY = "SELECT SUM(qty) FROM inventory WHERE material_id='M0001'"
SQL_WH = "SELECT DISTINCT warehouse_id FROM inventory WHERE material_id='M0001' ORDER BY 1"
def _numeric_case() -> dict[str, str]:
return {"grader": "numeric", "truth_sql": SQL_QTY}
def _set_case() -> dict[str, str]:
return {"grader": "set", "truth_sql": SQL_WH}
@pytest.mark.stack
def test_numeric_hit():
assert _grade(_numeric_case(), "M0001 总库存 12 箱")[0] is True
@pytest.mark.stack
def test_numeric_no_false_hit():
assert _grade(_numeric_case(), "总库存 120 箱")[0] is False
@pytest.mark.stack
def test_set_hit():
assert _grade(_set_case(), "存放在 W02 半成品仓")[0] is True
@pytest.mark.stack
def test_set_missing():
assert _grade(_set_case(), "存放在 W99 仓")[0] is False
def test_refusal_hit():
assert grade_refusal("数据平台中暂无排班数据")[0] is True
def test_refusal_no_false():
assert grade_refusal("库存是 12 箱")[0] is False