Skip to content

测试数据

Neuro OJ 不规定测试数据格式。出题人可以把测试数据放在纯净评测包里,也可以在 evaluate.py 中动态生成输入。只要 evaluator 能完成调用、评分和结果输出即可。用例与相关术语见术语表

当前内置样例题使用 JSON Lines 作为示例约定:每一行是一个独立 JSON 对象。下面内容描述的是这种样例约定,不是平台强制要求。

可见用例约定

在样例题中,visible.jsonl 用于存放可见用例。Evaluator 可以把这些用例的输入、期望和实际结果写入 details,帮助做题人调试。

示例:

json
{"id":"v001","input":"1 2\n","expected":3}

隐藏用例约定

在样例题中,hidden.jsonl 用于正式评分。Evaluator 可以读取隐藏用例,但应谨慎决定是否把隐藏输入、期望答案或错误细节返回给用户。

隐藏用例也可以使用同样结构:

json
{"id":"h001","input":"2 2\n","expected":4}

JSONL 字段约定

如果你采用 JSONL,可以至少包含:

  • id:稳定用例 ID,便于定位。
  • input:evaluator 解析的输入材料。
  • expected:标准结果或评分参考。

需要部分分时,可以增加:

  • score:该用例分值。
  • tags:用例分类。
  • message:对可见用例展示的说明。

避免泄露隐藏用例数据

隐藏用例的数据是否出现在结果详情中完全由 evaluator 决定。建议:

  • 可见用例可以展示输入、期望和实际输出。
  • 隐藏用例默认只展示用例 ID、通过状态和错误类型。
  • 不要把完整隐藏输入和标准答案直接放进面向用户的 details

其他组织方式

Neuro OJ 的自由度很高。以下方式都可以:

  • 把可见用例和隐藏用例分别放在 cases/visible/*.jsoncases/hidden/*.json
  • 使用一个 cases.db SQLite 文件,由 evaluator 查询用例。
  • 使用 CSV、YAML、纯文本或二进制资源。
  • 根据随机种子或固定参数在 evaluator 中动态生成测试输入。
  • 对模型输出类任务,在 evaluator 中加载评分脚本、规则文件或本地 fixture。

关键原则是:Solution 容器只接收 evaluator 通过 SDK 传过去的参数;隐藏用例数据应留在 Evaluator 侧。

Neuro OJ 是一个独立社区项目,与 CCF 及 LMCC 无官方关系。