---
generated_at: 2026-02-22 12:00:00
metrics:
  claims_total: 65
  claims_with_evidence: 62
  claims_without_evidence: 3
confidence_derived: 0.95
---

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

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.95**
  - 根拠あり：62 / 65、根拠なし：3
- 優先レビュー（高）
  1. **C-07 (UT-SYE-007)**: 数字で始まるシンボルのcapitalize動作 - ソースコード上に明示的な分岐がない
  2. **C-59 (UT-SYE-059)**: 数字のみシンボルのcapitalize - 同上
  3. **C-34 (UT-SYE-034)**: 空シンボル(:""の生成可否) - mrubyでの空シンボル生成の仕様確認が必要

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

- E-01: `mrbgems/mruby-symbol-ext/mrblib/symbol.rb` - Symbolクラスの拡張メソッド定義（Ruby実装）
- E-02: `mrbgems/mruby-symbol-ext/src/symbol.c` - Symbolクラスの拡張メソッド定義（C実装）
- E-03: `mrbgems/mruby-symbol-ext/test/symbol.rb` - 既存テストコード
- E-04: `mrbgems/mruby-symbol-ext/README.md` - モジュールのドキュメント
- E-05: `mrbgems/mruby-symbol-ext/mrbgem.rake` - gem定義ファイル

## 3) Claims と根拠の対応（レビューの主戦場）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 (UT-SYE-001) | capitalize: 小文字シンボルが先頭大文字になる | E-01 (L12-14), E-03 (L27) | ○ |
| C-02 (UT-SYE-002) | capitalize: 全大文字シンボルが先頭のみ大文字になる | E-01 (L12-14), E-03 (L28) | ○ |
| C-03 (UT-SYE-003) | capitalize: 既にcapitalize済みならそのまま返る | E-01 (L12-14), E-03 (L29) | ○ |
| C-04 (UT-SYE-004) | capitalize: 混在ケースが正しくcapitalizeされる | E-01 (L12-14) | ○ |
| C-05 (UT-SYE-005) | capitalize: 戻り値がSymbol型 | E-01 (L13: `.to_sym`) | ○ |
| C-06 (UT-SYE-006) | capitalize: 1文字シンボルで動作する | E-01 (L12-14) | ○ |
| C-07 (UT-SYE-007) | capitalize: 数字で始まるシンボルの処理 | **根拠不足** | △ |
| C-08 (UT-SYE-008) | capitalize: 記号を含むシンボルの処理 | E-01 (L12-14) | ○ |
| C-09 (UT-SYE-009) | downcase: 混在ケースが小文字になる | E-01 (L22-24), E-03 (L33) | ○ |
| C-10 (UT-SYE-010) | downcase: 既に小文字ならそのまま返る | E-01 (L22-24), E-03 (L34) | ○ |
| C-11 (UT-SYE-011) | downcase: 全大文字が小文字になる | E-01 (L22-24) | ○ |
| C-12 (UT-SYE-012) | downcase: 戻り値がSymbol型 | E-01 (L23: `.to_sym`) | ○ |
| C-13 (UT-SYE-013) | downcase: 1文字シンボルで動作する | E-01 (L22-24) | ○ |
| C-14 (UT-SYE-014) | upcase: 混在ケースが大文字になる | E-01 (L32-34), E-03 (L38) | ○ |
| C-15 (UT-SYE-015) | upcase: 既に大文字ならそのまま返る | E-01 (L32-34), E-03 (L39) | ○ |
| C-16 (UT-SYE-016) | upcase: 全小文字が大文字になる | E-01 (L32-34) | ○ |
| C-17 (UT-SYE-017) | upcase: 戻り値がSymbol型 | E-01 (L33: `.to_sym`) | ○ |
| C-18 (UT-SYE-018) | upcase: 1文字シンボルで動作する | E-01 (L32-34) | ○ |
| C-19 (UT-SYE-019) | casecmp: 大文字小文字無視で等しければ0 | E-01 (L42-47), E-03 (L43) | ○ |
| C-20 (UT-SYE-020) | casecmp: レシーバが大きければ1 | E-01 (L42-47), E-03 (L44) | ○ |
| C-21 (UT-SYE-021) | casecmp: レシーバが小さければ-1 | E-01 (L42-47), E-03 (L45) | ○ |
| C-22 (UT-SYE-022) | casecmp: 引数がSymbolでなければnil | E-01 (L43), E-03 (L46) | ○ |
| C-23 (UT-SYE-023) | casecmp: 引数が数値の場合nil | E-01 (L43: `kind_of?(Symbol)`) | ○ |
| C-24 (UT-SYE-024) | casecmp: 引数がnilの場合nil | E-01 (L43: `kind_of?(Symbol)`) | ○ |
| C-25 (UT-SYE-025) | casecmp: 同一シンボルで0 | E-01 (L42-47) | ○ |
| C-26 (UT-SYE-026) | casecmp: 1文字シンボルの比較 | E-01 (L42-47) | ○ |
| C-27 (UT-SYE-027) | casecmp?: 等しい場合true | E-01 (L56-60) | ○ |
| C-28 (UT-SYE-028) | casecmp?: 異なる場合false | E-01 (L56-60) | ○ |
| C-29 (UT-SYE-029) | casecmp?: 引数がSymbolでなければnil | E-01 (L57-58) | ○ |
| C-30 (UT-SYE-030) | casecmp?: 引数がnilの場合nil | E-01 (L57-58) | ○ |
| C-31 (UT-SYE-031) | casecmp?: 完全一致でtrue | E-01 (L56-60) | ○ |
| C-32 (UT-SYE-032) | empty?: 非空シンボルでfalse | E-01 (L68-70), E-03 (L50) | ○ |
| C-33 (UT-SYE-033) | empty?: 複数文字でfalse | E-01 (L68-70) | ○ |
| C-34 (UT-SYE-034) | empty?: 空シンボルでtrue | E-01 (L69: `self.length == 0`) | △ |
| C-35 (UT-SYE-035) | empty?: 1文字シンボルでfalse | E-01 (L68-70) | ○ |
| C-36 (UT-SYE-036) | intern: 自分自身を返す | E-01 (L4: `alias intern to_sym`), E-03 (L54) | ○ |
| C-37 (UT-SYE-037) | intern: 戻り値がSymbol型 | E-01 (L4) | ○ |
| C-38 (UT-SYE-038) | intern: to_symと同じ結果 | E-01 (L4: `alias intern to_sym`) | ○ |
| C-39 (UT-SYE-039) | length: ASCII文字列で正しい長さ | E-02 (L47-59), E-03 (L14) | ○ |
| C-40 (UT-SYE-040) | length: NULLバイト含むシンボルで正しい長さ | E-02 (L47-59), E-03 (L15) | ○ |
| C-41 (UT-SYE-041) | length: 戻り値がInteger型 | E-02 (L58: `mrb_fixnum_value`) | ○ |
| C-42 (UT-SYE-042) | length: UTF-8モードで文字数カウント | E-02 (L51-54), E-03 (L17) | ○ |
| C-43 (UT-SYE-043) | length: 非UTF-8モードでバイト数カウント | E-02 (L55-57), E-03 (L20) | ○ |
| C-44 (UT-SYE-044) | length: UTF-8混在文字列の文字数カウント | E-02 (L51-54), E-03 (L18) | ○ |
| C-45 (UT-SYE-045) | length: 非UTF-8混在文字列のバイト数 | E-02 (L55-57), E-03 (L21) | ○ |
| C-46 (UT-SYE-046) | length: 1文字シンボルで1を返す | E-02 (L47-59) | ○ |
| C-47 (UT-SYE-047) | size: lengthと同じ結果 | E-02 (L63: `MRB_MT_ENTRY(mrb_sym_length, MRB_SYM(size))`), E-03 (L12-24) | ○ |
| C-48 (UT-SYE-048) | size: NULLバイト含むシンボルでlengthと一致 | E-02 (L63) | ○ |
| C-49 (UT-SYE-049) | all_symbols: 配列が返る | E-02 (L25-38), E-03 (L5-9) | ○ |
| C-50 (UT-SYE-050) | all_symbols: 新規シンボルが含まれる | E-02 (L25-38), E-03 (L6-8) | ○ |
| C-51 (UT-SYE-051) | all_symbols: 要素がSymbol型 | E-02 (L31: `mrb_symbol_value`) | ○ |
| C-52 (UT-SYE-052) | all_symbols: プリシンボルが含まれる | E-02 (L29-31) | ○ |
| C-53 (UT-SYE-053) | all_symbols: MRB_USE_ALL_SYMBOLS無効時に未定義 | E-02 (L23: `#ifdef MRB_USE_ALL_SYMBOLS`), E-03 (L4) | ○ |
| C-54 (UT-SYE-054) | gem_init: 正常初期化 | E-02 (L67-74) | ○ |
| C-55 (UT-SYE-055) | gem_init: length登録確認 | E-02 (L62, L73) | ○ |
| C-56 (UT-SYE-056) | gem_init: size登録確認 | E-02 (L63, L73) | ○ |
| C-57 (UT-SYE-057) | gem_final: 正常終了 | E-02 (L76-79) | ○ |
| C-58 (UT-SYE-058) | SymbolがComparableをincludeしている | E-01 (L2: `include Comparable`) | ○ |
| C-59 (UT-SYE-059) | capitalize: 数字のみシンボルで変化しない | **根拠不足** | △ |
| C-60 (UT-SYE-060) | downcase: 数字のみシンボルで変化しない | E-01 (L22-24) | ○ |
| C-61 (UT-SYE-061) | upcase: 数字のみシンボルで変化しない | E-01 (L32-34) | ○ |
| C-62 (UT-SYE-062) | casecmp: 長さが異なるシンボルの比較 | E-01 (L42-47) | ○ |
| C-63 (UT-SYE-063) | casecmp: 1文字シンボルの大小比較 | E-01 (L42-47) | ○ |
| C-64 (UT-SYE-064) | casecmp?: 長さ違いでfalse | E-01 (L56-60) | ○ |
| C-65 (UT-SYE-065) | casecmp?: 引数が数値の場合nil | E-01 (L57-58) | ○ |

## 4) 不足情報（Unknown / Missing）
- C-07, C-59: 数字で始まるシンボルや数字のみのシンボルに対するcapitalizeの動作は、Ruby標準のString#capitalize!の挙動に依存する。mruby-symbol-ext自体にはこの分岐の明示的なテストや仕様記述がない。
  - 候補：Ruby言語仕様書 / CRuby実装のString#capitalize!仕様 / mruby内部のString実装
- C-34: 空シンボル(:`""`)がmrubyで生成可能かの確認。`empty?`メソッドはlength == 0で判定しているが、空シンボルの生成可否はmrubyコアの仕様に依存する。
  - 候補：mrubyコアのシンボル生成処理 / `src/symbol.c`（コア） / テストコードでの空シンボル使用例

## 5) リスクフラグ（レビュー観点）
- 0: 低リスク - capitalize/downcase/upcase/intern/empty?は実装がシンプルで、Rubyの標準的な挙動に準拠している
- 0: 低リスク - casecmp/casecmp?は型チェック（kind_of?）でnilを返す分岐が明確
- 1: 中リスク - length/sizeはMRB_UTF8_STRINGコンパイルオプションにより挙動が異なるため、テスト環境のビルド設定に依存する
- 1: 中リスク - all_symbolsはMRB_USE_ALL_SYMBOLSコンパイルオプションにより存在有無が異なる
- 0: 低リスク - gem_init/gem_finalはC API経由の初期化・終了処理であり、単体テストでの直接テストが困難な場合がある

## 6) レビュアーチェックリスト（最小）
- [ ] 数字で始まるシンボル・数字のみのシンボルに対するcapitalize/downcase/upcaseの期待結果が、mrubyの実際の挙動と一致するか確認
- [ ] 空シンボル(:`""`)がmrubyで生成可能かを実機で確認し、empty?テストケースの前提条件が正しいか検証
- [ ] テスト実行環境のMRB_UTF8_STRING設定を確認し、length/sizeテストケースの期待値がビルド設定と整合するか検証
- [ ] テスト実行環境のMRB_USE_ALL_SYMBOLS設定を確認し、all_symbolsテストケースの適用可否を判断
- [ ] casecmpの引数にSymbol以外の各型（String, Integer, nil, Array等）を渡した場合のnil返却動作を実機で確認
- [ ] gem_init/gem_finalのテストが統合テストレベルで十分にカバーされているか確認
