---
generated_at: 2026-02-22 12:00:00
metrics:
  claims_total: 135
  claims_with_evidence: 128
  claims_without_evidence: 7
confidence_derived: 0.95
---

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

## 本レポートについて

### 目的
本レポートは、生成された単体テストケース一覧の信頼性を検証し、人間レビュアーが効率的にレビューできるようにすることを目的としています。

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.95**
  - 根拠あり：128 / 135、根拠なし：7
- 優先レビュー（高）
  1. **UT-SPR-083 (Float→Integer暗黙変換)**：文字列入力から整数変換の期待結果が実装依存
  2. **UT-SPR-131 (バッファサイズ推定)**：内部最適化ロジックのためテスト可観測性が低い
  3. **UT-SPR-133 (精度0での0値)**：CRubyとの互換性が未確認

## 2) 参照した情報（Evidence一覧）
> ここに「実在するもの」だけ列挙。

- E-01: `mrbgems/mruby-sprintf/src/sprintf.c` - sprintf Cソースコード（メイン実装）
- E-02: `mrbgems/mruby-sprintf/mrblib/string.rb` - String#% Ruby実装
- E-03: `mrbgems/mruby-sprintf/test/sprintf.rb` - 既存テストコード
- E-04: `mrbgems/mruby-sprintf/src/sprintf.c` 行910-1165 - sprintf関数のRubyドキュメントコメント
- E-05: `mrbgems/mruby-sprintf/src/sprintf.c` 行1184-1195 - gem初期化コード
- E-06: `mrbgems/mruby-sprintf/src/sprintf.c` 行22-46 - remove_sign_bits関数
- E-07: `mrbgems/mruby-sprintf/src/sprintf.c` 行48-76 - mrb_uint_to_cstr関数
- E-08: `mrbgems/mruby-sprintf/src/sprintf.c` 行110-174 - get_fmt_spec関数
- E-09: `mrbgems/mruby-sprintf/src/sprintf.c` 行177-219 - fmt_float関数
- E-10: `mrbgems/mruby-sprintf/src/sprintf.c` 行245-258 - check_next_arg関数
- E-11: `mrbgems/mruby-sprintf/src/sprintf.c` 行260-273 - check_pos_arg関数
- E-12: `mrbgems/mruby-sprintf/src/sprintf.c` 行275-285 - check_name_arg関数
- E-13: `mrbgems/mruby-sprintf/src/sprintf.c` 行323-333 - get_num関数
- E-14: `mrbgems/mruby-sprintf/src/sprintf.c` 行335-347 - get_hash関数
- E-15: `mrbgems/mruby-sprintf/src/sprintf.c` 行349-908 - mrb_str_format関数（コアフォーマットロジック）
- E-16: `mrbgems/mruby-sprintf/src/sprintf.c` 行1167-1182 - mrb_f_sprintf関数

## 3) Claims と根拠の対応（レビューの主戦場）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | UT-SPR-001: リテラル文字列の出力 | E-15 (行403-416) | ○ |
| C-02 | UT-SPR-002: 引数0個でArgumentError | E-16 (行1175-1177) | ○ |
| C-03 | UT-SPR-003: %dで10進数フォーマット | E-01 (行155), E-04 | ○ |
| C-04 | UT-SPR-004: %iで10進数フォーマット | E-01 (行156), E-04 | ○ |
| C-05 | UT-SPR-005: %uでフォーマット | E-01 (行157), E-04 | ○ |
| C-06 | UT-SPR-006: %oで8進数フォーマット | E-01 (行158), E-03 | ○ |
| C-07 | UT-SPR-007: %xで16進数小文字 | E-01 (行159), E-04 | ○ |
| C-08 | UT-SPR-008: %Xで16進数大文字 | E-01 (行160), E-04 | ○ |
| C-09 | UT-SPR-009: %bで2進数 | E-01 (行161), E-03 | ○ |
| C-10 | UT-SPR-010: %Bで2進数大文字 | E-01 (行162), E-04 | ○ |
| C-11 | UT-SPR-011: %sで文字列 | E-15 (行570-620), E-04 | ○ |
| C-12 | UT-SPR-012: %pでinspect | E-15 (行579), E-04 | ○ |
| C-13 | UT-SPR-013: %cで整数→文字変換 | E-15 (行529-539), E-04 | ○ |
| C-14 | UT-SPR-014: %cで1文字文字列 | E-15 (行542-552) | ○ |
| C-15 | UT-SPR-015: %cで複数文字エラー | E-15 (行547-549) | ○ |
| C-16 | UT-SPR-016: %cで無効型エラー | E-15 (行544-546) | ○ |
| C-17 | UT-SPR-017: %%でリテラル% | E-15 (行512-520), E-04 | ○ |
| C-18 | UT-SPR-018: +フラグで正数に+ | E-04 (行1029), E-15 (行687-689) | ○ |
| C-19 | UT-SPR-019: スペースフラグ | E-04 (行1030), E-15 (行691-693) | ○ |
| C-20 | UT-SPR-020: -フラグで左寄せ | E-04 (行1093), E-15 (行785-788) | ○ |
| C-21 | UT-SPR-021: 0フラグでゼロパディング | E-04 (行1090), E-15 (行773-776) | ○ |
| C-22 | UT-SPR-022: #フラグで0xプレフィックス | E-04 (行1040-1041), E-15 (行644) | ○ |
| C-23 | UT-SPR-023: #フラグで0プレフィックス（8進） | E-04 (行1032), E-15 (行643) | ○ |
| C-24 | UT-SPR-024: #フラグで0bプレフィックス | E-04 (行1053), E-15 (行645) | ○ |
| C-25 | UT-SPR-025: #Xで0Xプレフィックス | E-04 (行1049-1050), E-15 (行644) | ○ |
| C-26 | UT-SPR-026: #Bで0Bプレフィックス | E-04 (行1063-1064), E-15 (行645) | ○ |
| C-27 | UT-SPR-027: #x 0でプレフィックスなし | E-04 (行1046), E-15 (行762-764) | ○ |
| C-28 | UT-SPR-028: #b 0でプレフィックスなし | E-04 (行1059), E-15 (行762-764) | ○ |
| C-29 | UT-SPR-029: 幅指定で右寄せ | E-04 (行1088), E-03 (行83) | ○ |
| C-30 | UT-SPR-030: 幅不足時そのまま出力 | E-03 (行85) | ○ |
| C-31 | UT-SPR-031: 精度指定で整数ゼロパディング | E-04 (行1109) | ○ |
| C-32 | UT-SPR-032: 精度指定で文字列切り詰め | E-04 (行1146) | ○ |
| C-33 | UT-SPR-033: *で動的幅指定 | E-15 (行480-491), E-04 (行1019) | ○ |
| C-34 | UT-SPR-034: *で負数→左寄せ | E-15 (行487-489) | ○ |
| C-35 | UT-SPR-035: 負数の%d | E-15 (行697-699) | ○ |
| C-36 | UT-SPR-036: 負数の%o（2の補数） | E-04 (行1036), E-15 (行704-708) | ○ |
| C-37 | UT-SPR-037: 負数の%x（2の補数） | E-04 (行1044), E-15 (行704-708) | ○ |
| C-38 | UT-SPR-038: 負数の%b（2の補数） | E-04 (行1057), E-15 (行704-708) | ○ |
| C-39 | UT-SPR-039: +フラグ付き負数%x | E-04 (行1043) | ○ |
| C-40 | UT-SPR-040: +フラグ付き負数%o | E-04 (行1035) | ○ |
| C-41 | UT-SPR-041: +フラグ付き負数%b | E-04 (行1056) | ○ |
| C-42 | UT-SPR-042: 位置指定引数(n$) | E-04 (行1152), E-15 (行443-449) | ○ |
| C-43 | UT-SPR-043: 位置指定と非位置指定の混在エラー | E-10 (行248-257), E-11 (行263-266) | ○ |
| C-44 | UT-SPR-044: 名前付き引数(<>スタイル) | E-04 (行1161), E-15 (行456-478) | ○ |
| C-45 | UT-SPR-045: 名前付き引数({}スタイル) | E-04 (行1163), E-15 (行475) | ○ |
| C-46 | UT-SPR-046: 名前付き引数キーなしKeyError | E-15 (行472-474) | ○ |
| C-47 | UT-SPR-047: HashなしArgumentError | E-14 (行339-341) | ○ |
| C-48 | UT-SPR-048: 名前付きと位置指定の混在エラー | E-12 (行282-284) | ○ |
| C-49 | UT-SPR-049: 引数不足エラー | E-15 (行298) | ○ |
| C-50 | UT-SPR-050: 不正フォーマット指定子エラー | E-15 (行432), E-03 (行88-92) | ○ |
| C-51 | UT-SPR-051: 末尾%エラー | E-15 (行410-413) | ○ |
| C-52 | UT-SPR-052: 幅2回指定エラー | E-15 (行367-369) | ○ |
| C-53 | UT-SPR-053: 精度2回指定エラー | E-15 (行495-497) | ○ |
| C-54 | UT-SPR-054: 精度後フラグエラー | E-15 (行377-379) | ○ |
| C-55 | UT-SPR-055: 幅後フラグエラー | E-15 (行374-376) | ○ |
| C-56 | UT-SPR-056: 精度後幅指定エラー | E-15 (行370-372) | ○ |
| C-57 | UT-SPR-057: %fで浮動小数点フォーマット | E-09, E-04 (行959-962) | ○ |
| C-58 | UT-SPR-058: %eで指数表記 | E-04 (行953-957) | ○ |
| C-59 | UT-SPR-059: %Eで大文字指数表記 | E-04 (行957-958) | ○ |
| C-60 | UT-SPR-060: %gで有効桁数 | E-04 (行963-966) | ○ |
| C-61 | UT-SPR-061: %Gで大文字有効桁数 | E-04 (行967) | ○ |
| C-62 | UT-SPR-062: %f精度指定 | E-03 (行12), E-09 | ○ |
| C-63 | UT-SPR-063: %fスペースフラグ | E-03 (行13) | ○ |
| C-64 | UT-SPR-064: %f左寄せ | E-03 (行14) | ○ |
| C-65 | UT-SPR-065: %fプラスフラグ | E-03 (行15) | ○ |
| C-66 | UT-SPR-066: %fゼロパディング | E-03 (行17) | ○ |
| C-67 | UT-SPR-067: Infinityの%f | E-03 (行24) | ○ |
| C-68 | UT-SPR-068: Infinityの幅指定 | E-03 (行28) | ○ |
| C-69 | UT-SPR-069: Infinityの+フラグ | E-03 (行30-34) | ○ |
| C-70 | UT-SPR-070: Infinityの左寄せ | E-03 (行39-40) | ○ |
| C-71 | UT-SPR-071: Infinityのスペースフラグ | E-03 (行42-46) | ○ |
| C-72 | UT-SPR-072: NaNの%f | E-03 (行53) | ○ |
| C-73 | UT-SPR-073: NaNの幅指定 | E-03 (行57) | ○ |
| C-74 | UT-SPR-074: NaNの+フラグ | E-03 (行59-63) | ○ |
| C-75 | UT-SPR-075: NaNの左寄せ | E-03 (行68-69) | ○ |
| C-76 | UT-SPR-076: NaNのスペースフラグ | E-03 (行71-75) | ○ |
| C-77 | UT-SPR-077: 複数フォーマット指定子 | E-04 (行1150) | ○ |
| C-78 | UT-SPR-078: 混在フォーマット | E-04 (行1151) | ○ |
| C-79 | UT-SPR-079: 位置指定+動的幅 | E-04 (行1152) | ○ |
| C-80 | UT-SPR-080: 整数0のフォーマット | E-07 (行56-58) | ○ |
| C-81 | UT-SPR-081: 大きな整数値 | E-15 | ○ |
| C-82 | UT-SPR-082: 空文字列のフォーマット | E-15 (行570-618) | ○ |
| C-83 | UT-SPR-083: Float→Integer暗黙変換 | E-15 (行654-656) | △ |
| C-84 | UT-SPR-084: String→Integer暗黙変換 | E-15 (行674-676) | ○ |
| C-85 | UT-SPR-085: #eで小数点強制 | E-04 (行1066-1067) | ○ |
| C-86 | UT-SPR-086: #fで小数点強制 | E-04 (行1070-1071) | ○ |
| C-87 | UT-SPR-087: #gで末尾ゼロ保持 | E-04 (行1075-1076) | ○ |
| C-88 | UT-SPR-088: 位置指定インデックス0以下エラー | E-11 (行270-272) | ○ |
| C-89 | UT-SPR-089: 位置指定と*の混在エラー | E-03 (行2) | ○ |
| C-90 | UT-SPR-090: 位置指定と.*の混在エラー | E-03 (行3) | ○ |
| C-91 | UT-SPR-091: 16進数符号ビット除去 | E-06 (行28-32) | ○ |
| C-92 | UT-SPR-092: 8進数符号ビット除去 | E-06 (行33-37) | ○ |
| C-93 | UT-SPR-093: 2進数符号ビット除去 | E-06 (行39-43) | ○ |
| C-94 | UT-SPR-094: 16進数変換 | E-07 (行60-65) | ○ |
| C-95 | UT-SPR-095: 8進数変換 | E-07 (行62) | ○ |
| C-96 | UT-SPR-096: 2進数変換 | E-07 (行63) | ○ |
| C-97 | UT-SPR-097: 0の変換 | E-07 (行56-58) | ○ |
| C-98 | UT-SPR-098: 不正基数でNULL | E-07 (行64) | ○ |
| C-99 | UT-SPR-099: フォーマット文字ルックアップ | E-08 (行155) | ○ |
| C-100 | UT-SPR-100: フラグ文字ルックアップ | E-08 (行121) | ○ |
| C-101 | UT-SPR-101: 無効文字でFMT_INVALID | E-08 (行111, 171-172) | ○ |
| C-102 | UT-SPR-102: 浮動小数点内部フォーマット | E-09 (行178-219) | ○ |
| C-103 | UT-SPR-103: 左寄せ内部フォーマット | E-09 (行207-209) | ○ |
| C-104 | UT-SPR-104: ゼロパディング内部フォーマット | E-09 (行212-214) | ○ |
| C-105 | UT-SPR-105: 正常な非位置指定引数チェック | E-10 (行254-257) | ○ |
| C-106 | UT-SPR-106: 位置指定引数との混在検知 | E-10 (行249-251) | ○ |
| C-107 | UT-SPR-107: 名前付き引数との混在検知 | E-10 (行252-254) | ○ |
| C-108 | UT-SPR-108: 非位置指定引数との混在検知 | E-11 (行263-266) | ○ |
| C-109 | UT-SPR-109: 名前付き引数との混在検知 | E-11 (行267-269) | ○ |
| C-110 | UT-SPR-110: 不正インデックス検知 | E-11 (行270-272) | ○ |
| C-111 | UT-SPR-111: 名前付き引数混在検知(unnumbered後) | E-12 (行278-281) | ○ |
| C-112 | UT-SPR-112: 名前付き引数混在検知(numbered後) | E-12 (行282-284) | ○ |
| C-113 | UT-SPR-113: 数値パース基本動作 | E-13 (行324-332) | ○ |
| C-114 | UT-SPR-114: オーバーフロー検知 | E-13 (行328-329) | ○ |
| C-115 | UT-SPR-115: Hash引数の取得 | E-14 (行336-347) | ○ |
| C-116 | UT-SPR-116: 引数数不正エラー | E-14 (行339-341) | ○ |
| C-117 | UT-SPR-117: Hash型チェックエラー | E-14 (行343-345) | ○ |
| C-118 | UT-SPR-118: Kernel#sprintf定義 | E-05 (行1188) | ○ |
| C-119 | UT-SPR-119: Kernel#format定義 | E-05 (行1189) | ○ |
| C-120 | UT-SPR-120: String#%単一引数 | E-02 (行17-23), E-03 (行7) | ○ |
| C-121 | UT-SPR-121: String#%配列引数 | E-02 (行18-19), E-03 (行8) | ○ |
| C-122 | UT-SPR-122: String#%Hash引数 | E-02 (行17-23), E-03 (行9) | ○ |
| C-123 | UT-SPR-123: 配列展開の確認 | E-02 (行18-19) | ○ |
| C-124 | UT-SPR-124: 非配列引数の確認 | E-02 (行20-21) | ○ |
| C-125 | UT-SPR-125: 大きな値の2進数 | E-03 (行10) | ○ |
| C-126 | UT-SPR-126: %c幅指定（右寄せ） | E-15 (行563-565) | ○ |
| C-127 | UT-SPR-127: %c幅指定（左寄せ） | E-15 (行559-561) | ○ |
| C-128 | UT-SPR-128: 幅大きすぎエラー | E-15 (行484-485) | △ |
| C-129 | UT-SPR-129: 複合フラグ(+,0) | E-04 (行1091) | ○ |
| C-130 | UT-SPR-130: 負数16進数ゼロパディング | E-04 (行1096) | ○ |
| C-131 | UT-SPR-131: バッファサイズ推定 | **根拠なし** | △ |
| C-132 | UT-SPR-132: バッファリサイズ | E-15 (行222-231) | △ |
| C-133 | UT-SPR-133: 精度0での0値 | E-15 (行779) | △ |
| C-134 | UT-SPR-134: 負のInfinity | E-15 (行845-846) | ○ |
| C-135 | UT-SPR-135: 文字列の幅+精度 | E-04 (行1146) | △ |

## 4) 不足情報（Unknown / Missing）
- **UT-SPR-083**: Float→Integer暗黙変換の正確な期待値（切り捨て動作の詳細）はmrb_float_to_integer関数の実装に依存しており、sprintf.c内では直接確認できない
  - 候補：`src/numeric.c` の mrb_float_to_integer 実装を確認
- **UT-SPR-128**: INT16_MAX/INT16_MIN境界での幅チェックは実装コードから確認できるが、具体的なエラーメッセージの正確な文字列が変わる可能性がある
  - 候補：実際のテスト実行で確認
- **UT-SPR-131**: バッファサイズ初期推定ロジック（行386-397）は内部最適化であり、外部からの可観測性が低い
  - 候補：メモリプロファイリングツールでの確認
- **UT-SPR-132**: CHECKマクロのリサイズ動作は大量のフォーマット指定子で間接的にテスト可能だが、直接的な検証は困難
  - 候補：特大フォーマット文字列でのクラッシュテスト
- **UT-SPR-133**: 精度0・値0のケースはコード上の条件分岐（行779）から推定しているが、CRubyとの互換性は未確認
  - 候補：CRuby仕様書を確認
- **UT-SPR-135**: %10.10sの動作はドキュメントコメントから推定しているが、Unicode文字列でのバイト数/文字数の違いは未考慮
  - 候補：UTF-8文字列でのテスト追加

## 5) リスクフラグ（レビュー観点）
- **0 (低リスク)**: フォーマット指定子（%d, %s, %x等）の基本動作テスト（C-01〜C-12, C-17〜C-28） - ソースコードとドキュメントの両方で十分な根拠がある
- **0 (低リスク)**: フラグ処理のテスト（C-18〜C-28） - ドキュメントコメント内の具体例と一致
- **0 (低リスク)**: 既存テストコードでカバーされているケース（C-29, C-30, C-62〜C-76, C-89, C-90） - test/sprintf.rbで検証済み
- **1 (中リスク)**: 内部関数のテストケース（C-91〜C-117） - static関数のため直接テスト不可、間接的にsprintfを通じてテストする必要がある
- **1 (中リスク)**: 型変換テスト（C-83, C-84） - mrb_float_to_integer, mrb_str_to_integerの動作に依存
- **2 (高リスク)**: バッファ管理テスト（C-131, C-132） - 内部実装の詳細に依存し、外部からの可観測性が低い

## 6) レビュアーチェックリスト（最小）
- [ ] 全てのフォーマット指定子（d, i, u, o, x, X, b, B, s, p, c, f, e, E, g, G, %%）がカバーされているか
- [ ] 各フラグ（+, -, 0, #, スペース）と各指定子の組み合わせが十分にテストされているか
- [ ] 位置指定引数、名前付き引数、通常引数の3種類の引数指定方式がカバーされているか
- [ ] 引数スタイル混在時のエラーケースが網羅されているか
- [ ] 境界値（Infinity, NaN, 0, 大きな整数, 空文字列）が十分にテストされているか
- [ ] 内部static関数のテストは間接テスト（sprintf経由）で実現可能か確認
- [ ] MRB_NO_FLOAT定義時の浮動小数点フォーマット無効化テストが必要かどうか検討
- [ ] MRB_UTF8_STRING定義時の%cフォーマットでのUTF-8エンコーディングテストが必要かどうか検討
- [ ] MRB_USE_BIGINT有効時のBigIntフォーマットテストが必要かどうか検討
