# `CMDCEval.Case`
[🔗](https://github.com/tupleyun/cmdc_eval/blob/v0.1.0/lib/cmdc_eval/case.ex#L1)

单个评测用例 struct。

Suite 实现的 `cases/0` 返回 `[Case.t()]` 列表，Runner 按 case 并发跑。

## 字段

- `:id` —— case 唯一标识（在 Suite 内 unique）
- `:input` —— 用户 prompt 字符串
- `:expected` —— 期望结果 spec（map / 字符串 / 函数），由 Suite 的 `assert/2` 解释
- `:tools` —— 该 case 启用的工具模块列表（覆盖 Suite 默认）
- `:metadata` —— 附加 metadata（如 `:category`, `:difficulty`）
- `:timeout_ms` —— 单 case 超时（nil 表示用 Runner 默认）

# `t`

```elixir
@type t() :: %CMDCEval.Case{
  expected: term(),
  id: String.t(),
  input: String.t(),
  metadata: map(),
  timeout_ms: pos_integer() | nil,
  tools: [module()] | nil
}
```

# `new`

```elixir
@spec new(keyword()) :: t()
```

构造一个 Case struct（基础校验 + 默认值）。

## 示例

    Case.new(id: "sum_basic", input: "1 + 1 = ?", expected: ~r/2/)

---

*Consult [api-reference.md](api-reference.md) for complete listing*
