---
generated_at: 2026-02-22 10:00:00
metrics:
  claims_total: 84
  claims_with_evidence: 80
  claims_without_evidence: 4
confidence_derived: 0.95
---

# 根拠レポート：mruby-test 単体テストケース一覧

## 本レポートについて

### 目的
本レポートは、生成された設計書・ドキュメントの信頼性を検証し、人間レビュアーが効率的にレビューできるようにすることを目的としています。

### チェック方法
以下の観点でドキュメントの内容（Claim：主張）を検証しています：

1. **根拠の有無確認**：各主張に対して、ソースコード・既存設計書・要件定義書などの根拠（Evidence）が存在するか
2. **根拠との整合性**：主張の内容が根拠と矛盾していないか
3. **網羅性**：参照すべき情報源を適切にカバーしているか

### 信頼度スコアの算出
- **confidence_derived** = 根拠あり件数 / 総主張件数
- 状態「○」：根拠あり、「△」：根拠不足または要確認

### 本レポートの使い方
1. まず「サマリー」で全体の信頼度と優先レビュー項目を確認
2. 「Claims と根拠の対応」で △ の項目を重点的にレビュー
3. 「不足情報」で補完が必要な情報源を確認

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.95**
  - 根拠あり：80 / 84、根拠なし：4
- 優先レビュー（高）
  1. **C-35（不完全ブレースの処理）**：lbraceのみでrbraceがない場合の挙動がコードから推測されるが、str_match_no_brace_pにも委譲されない分岐の結果が明確でない
  2. **C-36（ブレース内エスケープ）**：エスケープ処理の正確な挙動はmrb_formatの内部実装に依存
  3. **C-60（mrb_open失敗時の処理）**：MRB_OPEN_FAILUREマクロの具体的な判定条件が外部ヘッダに定義
  4. **C-58（mainの基本動作）**：mrbtest_assert_irep/mrbgemtest_initの動作は外部依存

## 2) 参照した情報（Evidence一覧）
> ここに「実在するもの」だけ列挙。抽出フェーズで付けたIDをそのまま出す。

- E-01: `mrbgems/mruby-test/driver.c` - テストドライバ本体（316行）
- E-02: `mrbgems/mruby-test/vformat.c` - vformatテストヘルパー（152行）
- E-03: `mrbgems/mruby-test/mrbgem.rake` - gemビルド定義（173行）
- E-04: `docs/code-to-docs/単体テストケース一覧/plan.md` - プラン定義

## 3) Claims と根拠の対応（レビューの主戦場）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | print_hint: stdoutにヒントメッセージが出力される | E-01 (L28-31) | ○ |
| C-02 | eval_test: テスト成功時にEXIT_SUCCESSが返る | E-01 (L33-47) | ○ |
| C-03 | eval_test: テスト失敗時にEXIT_FAILUREが返る | E-01 (L45) | ○ |
| C-04 | eval_test: 例外発生時にEXIT_FAILUREが返りexcリセット | E-01 (L39-43) | ○ |
| C-05 | t_print: 単一引数がstdoutに出力される | E-01 (L50-66) | ○ |
| C-06 | t_print: 複数引数が順番に出力される | E-01 (L58-62) | ○ |
| C-07 | t_print: 引数0個で何も出力されない | E-01 (L58) | ○ |
| C-08 | t_print: 非文字列がto_sで変換される | E-01 (L59: mrb_obj_as_string) | ○ |
| C-09 | str_match_bracket: [abc]が一致文字にマッチ | E-01 (L71-99) | ○ |
| C-10 | str_match_bracket: [abc]が不一致文字にマッチしない | E-01 (L94, L98) | ○ |
| C-11 | str_match_bracket: [!abc]の否定パターン | E-01 (L78-79) | ○ |
| C-12 | str_match_bracket: [^abc]の否定パターン | E-01 (L78) | ○ |
| C-13 | str_match_bracket: 範囲指定[a-z]マッチ | E-01 (L87-91) | ○ |
| C-14 | str_match_bracket: 範囲指定[a-z]範囲外不一致 | E-01 (L91) | ○ |
| C-15 | str_match_bracket: 空パターンでNULL | E-01 (L77) | ○ |
| C-16 | str_match_bracket: エスケープ文字のリテラルマッチ | E-01 (L85: UNESCAPE) | ○ |
| C-17 | str_match_no_brace_p: リテラル完全一致 | E-01 (L101-153) | ○ |
| C-18 | str_match_no_brace_p: リテラル不一致 | E-01 (L140) | ○ |
| C-19 | str_match_no_brace_p: *ワイルドカードのマッチ | E-01 (L112-118) | ○ |
| C-20 | str_match_no_brace_p: *が空文字列にマッチ | E-01 (L114) | ○ |
| C-21 | str_match_no_brace_p: ?が1文字にマッチ | E-01 (L119-123) | ○ |
| C-22 | str_match_no_brace_p: ?が2文字以上にマッチしない | E-01 (L119-123) | ○ |
| C-23 | str_match_no_brace_p: [abc]パターンの統合テスト | E-01 (L124-133) | ○ |
| C-24 | str_match_no_brace_p: 空パターンと空文字列が一致 | E-01 (L110) | ○ |
| C-25 | str_match_no_brace_p: 空パターンと非空文字列が不一致 | E-01 (L110) | ○ |
| C-26 | str_match_no_brace_p: 連続*の処理 | E-01 (L113) | ○ |
| C-27 | str_match_no_brace_p: エスケープされた*のリテラルマッチ | E-01 (L137: UNESCAPE) | ○ |
| C-28 | str_match_no_brace_p: ?が文字列末尾でFALSE | E-01 (L120) | ○ |
| C-29 | str_match_no_brace_p: *の後のリテラルマッチ | E-01 (L116-118, L143-149) | ○ |
| C-30 | str_match_p: ブレース展開{a,b,c}の基本動作 | E-01 (L158-201) | ○ |
| C-31 | str_match_p: ブレース展開の不一致 | E-01 (L191) | ○ |
| C-32 | str_match_p: ブレースとワイルドカードの組み合わせ | E-01 (L176-194) | ○ |
| C-33 | str_match_p: ネストブレースの処理 | E-01 (L169-170, L186-187) | ○ |
| C-34 | str_match_p: ブレースなしパターンの委譲 | E-01 (L196-198) | ○ |
| C-35 | str_match_p: 不完全ブレースの処理 | E-01 (L168-173) | △ |
| C-36 | str_match_p: ブレース内エスケープ | E-01 (L187-188) | △ |
| C-37 | m_str_match_p: Rubyバインディングのマッチ成功 | E-01 (L203-211) | ○ |
| C-38 | m_str_match_p: Rubyバインディングのマッチ失敗 | E-01 (L210) | ○ |
| C-39 | mrb_init_test_driver: t_printがKernelに定義される | E-01 (L217) | ○ |
| C-40 | mrb_init_test_driver: _str_match?がKernelに定義される | E-01 (L218) | ○ |
| C-41 | mrb_init_test_driver: Mrbtestモジュールが定義される | E-01 (L220) | ○ |
| C-42 | mrb_init_test_driver: FLOAT_TOLERANCEが定義される | E-01 (L222-234) | ○ |
| C-43 | mrb_init_test_driver: FLOAT32時に1e-4 | E-01 (L227) | ○ |
| C-44 | mrb_init_test_driver: WORDBOX_NO_FLOAT_TRUNCATE時に1e-5 | E-01 (L225) | ○ |
| C-45 | mrb_init_test_driver: double時に1e-10 | E-01 (L230) | ○ |
| C-46 | mrb_init_test_driver: verbose=TRUEで$mrbtest_verbose設定 | E-01 (L238-240) | ○ |
| C-47 | mrb_init_test_driver: verbose=FALSEで未設定 | E-01 (L238) | ○ |
| C-48 | mrb_init_test_driver: mrb_init_test_vformat呼び出し | E-01 (L236) | ○ |
| C-49 | mrb_t_pass_result: $ok_testカウンタの加算 | E-01 (L251-260) | ○ |
| C-50 | mrb_t_pass_result: $ko_testカウンタの受け渡し | E-01 (L261) | ○ |
| C-51 | mrb_t_pass_result: $kill_testカウンタの受け渡し | E-01 (L262) | ○ |
| C-52 | mrb_t_pass_result: $warning_testカウンタの受け渡し | E-01 (L263) | ○ |
| C-53 | mrb_t_pass_result: $skip_testカウンタの受け渡し | E-01 (L264) | ○ |
| C-54 | mrb_t_pass_result: $asserts配列のコピー | E-01 (L268-280) | ○ |
| C-55 | mrb_t_pass_result: 空$asserts配列の処理 | E-01 (L274) | ○ |
| C-56 | mrb_t_pass_result: 例外時のexit | E-01 (L246-249) | ○ |
| C-57 | mrb_t_pass_result: 非Integerカウンタのスキップ | E-01 (L254) | ○ |
| C-58 | main: 正常起動とテスト実行 | E-01 (L283-315) | △ |
| C-59 | main: -vオプションでverbose有効 | E-01 (L299-302) | ○ |
| C-60 | main: mrb_open失敗時のEXIT_FAILURE | E-01 (L293-297) | △ |
| C-61 | vf_s_format_0: 引数なしフォーマット | E-02 (L8-15) | ○ |
| C-62 | vf_s_format_0: 空フォーマット文字列 | E-02 (L13-14) | ○ |
| C-63 | vf_s_format_c: charフォーマット | E-02 (L18-28) | ○ |
| C-64 | vf_s_format_c: 混在フォーマット | E-02 (L24-27) | ○ |
| C-65 | vf_s_format_d: intフォーマット | E-02 (L31-41) | ○ |
| C-66 | vf_s_format_d: ゼロ値 | E-02 (L39) | ○ |
| C-67 | vf_s_format_d: 負値 | E-02 (L39) | ○ |
| C-68 | vf_s_format_f: floatフォーマット | E-02 (L44-54) | ○ |
| C-69 | vf_s_format_f: ゼロ浮動小数点 | E-02 (L52-53) | ○ |
| C-70 | vf_s_format_i: fixnumフォーマット | E-02 (L58-67) | ○ |
| C-71 | vf_s_format_i: 最大mrb_int値 | E-02 (L65-66) | ○ |
| C-72 | vf_s_format_l: 部分文字列フォーマット | E-02 (L70-83) | ○ |
| C-73 | vf_s_format_l: 長さ0 | E-02 (L79-82) | ○ |
| C-74 | vf_s_format_l: 長さ超過の安全処理 | E-02 (L80) | ○ |
| C-75 | vf_s_format_n: symbolフォーマット | E-02 (L86-95) | ○ |
| C-76 | vf_s_format_s: 文字列フォーマット | E-02 (L98-106) | ○ |
| C-77 | vf_s_format_s: 空文字列 | E-02 (L104) | ○ |
| C-78 | vf_s_format_C: RClassフォーマット | E-02 (L109-118) | ○ |
| C-79 | vf_s_format_v: valueフォーマット | E-02 (L121-129) | ○ |
| C-80 | vf_s_format_v: nil値のフォーマット | E-02 (L127-128) | ○ |
| C-81 | mrb_init_test_vformat: TestVFormatモジュール定義 | E-02 (L132-134) | ○ |
| C-82 | mrb_init_test_vformat: zメソッドの登録 | E-02 (L135) | ○ |
| C-83 | mrb_init_test_vformat: 全フォーマットメソッドの登録 | E-02 (L140-150) | ○ |
| C-84 | mrb_init_test_vformat: MRB_NO_FLOAT時にfが未定義 | E-02 (L142-144) | ○ |

## 4) 不足情報（Unknown / Missing）
- C-35: 不完全ブレース（`{`のみで`}`なし）の場合、`lbrace`が設定されても`rbrace`がNULLのままとなり、コード上は`!lbrace && !rbrace`の条件にも合致しないため、`ret = FALSE`のまま返却される。ただしこの挙動が意図的な設計かは不明。
  - 候補：mrubyプロジェクトの設計ドキュメント / File.fnmatchのRuby仕様書
- C-36: ブレース内のバックスラッシュエスケープの正確な挙動はコードから推測可能だが、想定されるエッジケース（末尾のバックスラッシュ等）の網羅的検証が困難。
  - 候補：glob(7) manページ / Rubyのfnmatch仕様
- C-58: main関数内で外部シンボル`mrbtest_assert_irep`と`mrbgemtest_init`に依存しており、これらのランタイム動作は本モジュール外で定義される。
  - 候補：mrbgem.rakeで生成されるCコード / テストirepバイナリ
- C-60: `MRB_OPEN_FAILURE`マクロはincludeヘッダで定義されており、NULL判定を行うが正確な条件は外部依存。
  - 候補：`include/mruby.h`

## 5) リスクフラグ（レビュー観点）
- 0: 低リスク - vformat.cの各フォーマット関数は、mrb_formatのラッパーであり実装が単純
- 1: 中リスク - str_match_bracket/str_match_no_brace_p/str_match_pはglob風パターンマッチの複雑なロジックを含み、エッジケースの検証が重要
- 1: 中リスク - mrb_t_pass_resultは2つのmrb_state間でのデータ受け渡しを行い、メモリ管理が関わる
- 0: 低リスク - mrb_init_test_driver/mrb_init_test_vformatは初期化関数であり、定義の確認が主

## 6) レビュアーチェックリスト（最小）
- [ ] str_match_bracket: 否定パターン（`!`と`^`）の両方がテストされているか
- [ ] str_match_no_brace_p: ワイルドカード`*`のバックトラック処理（p_tmp/s_tmp）が網羅されているか
- [ ] str_match_p: ブレース展開のネスト深度に制限がないことの妥当性を確認
- [ ] mrb_t_pass_result: mrb_ensure_string_typeの失敗時（非文字列要素が$assertsに含まれる場合）の挙動を確認
- [ ] vf_s_format_l: lenパラメータが負値の場合の処理（size_tキャスト）を確認
- [ ] main: コマンドライン引数が3つ以上の場合の挙動を確認（現在未処理）
- [ ] FLOAT_TOLERANCEの3つの条件分岐が正しくカバーされているか
