Ctrl K
ComunidadGuías…

tests/test_graders.py

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
"""判分逻辑栈测试:实时执行 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