---
generated_at: 2026-02-17 10:30:00
metrics:
  claims_total: 100
  claims_with_evidence: 98
  claims_without_evidence: 2
confidence_derived: 0.98
---

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

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.98**
  - 根拠あり：98 / 100、根拠なし：2
- 優先レビュー（高）
  1. **UT-IMP-078 transformFile正常系**：ファイルI/Oのため実行環境依存
  2. **UT-IMP-094/095 rdstdin Unix環境テスト**：プラットフォーム依存、linenoise動作確認が必要

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

- E-01: `lib/impure/nre.nim` - NRE（New Regular Expression）モジュール本体
- E-02: `lib/impure/re.nim` - REモジュール本体（従来の正規表現）
- E-03: `lib/impure/nre/private/util.nim` - NRE内部ユーティリティ
- E-04: `lib/impure/rdstdin.nim` - 標準入力読み込みモジュール
- E-05: `std/pcre` - PCREライブラリラッパー（外部依存）
- E-06: `std/linenoise` - linenoiseライブラリラッパー（外部依存、Unix環境）
- E-07: ソースコード内runnableExamples - 各関数の使用例

## 3) Claims と根拠の対応（レビューの主戦場）

### nre.nim関連テストケース

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 (UT-IMP-001) | re関数で有効なパターンからRegexが生成される | E-01 (line 499-501), E-07 | ○ |
| C-02 (UT-IMP-002) | 無効なパターンでSyntaxErrorがスローされる | E-01 (line 286-288) | ○ |
| C-03 (UT-IMP-003) | オプション付きパターンが正しくコンパイルされる | E-01 (line 461-498) extractOptions関数 | ○ |
| C-04 (UT-IMP-004) | NO_STUDYオプションでstudyがスキップされる | E-01 (line 482-483) | ○ |
| C-05 (UT-IMP-005) | captureCountが正しいキャプチャ数を返す | E-01 (line 302-303) | ○ |
| C-06 (UT-IMP-006) | キャプチャなしで0が返る | E-01 (line 302-303) | ○ |
| C-07 (UT-IMP-007) | captureNameIdが名前マッピングを返す | E-01 (line 305-306) | ○ |
| C-08 (UT-IMP-008) | match関数で先頭マッチが成功する | E-01 (line 542-557), E-07 | ○ |
| C-09 (UT-IMP-009) | 先頭マッチ失敗でnoneが返る | E-01 (line 546-547), E-07 | ○ |
| C-10 (UT-IMP-010) | startパラメータで開始位置指定 | E-01 (line 542) | ○ |
| C-11 (UT-IMP-011) | endposパラメータで終了位置指定 | E-01 (line 542) | ○ |
| C-12 (UT-IMP-012) | 無効なUnicodeでInvalidUnicodeError | E-01 (line 536-538) | ○ |
| C-13 (UT-IMP-013) | find関数で文字列内マッチ成功 | E-01 (line 610-621), E-07 | ○ |
| C-14 (UT-IMP-014) | find失敗でnoneが返る | E-01 (line 610-621) | ○ |
| C-15 (UT-IMP-015) | find開始位置指定 | E-01 (line 610) | ○ |
| C-16 (UT-IMP-016) | findIterで複数マッチをイテレート | E-01 (line 559-608), E-07 | ○ |
| C-17 (UT-IMP-017) | 0長マッチの処理 | E-01 (line 582-586) | ○ |
| C-18 (UT-IMP-018) | 重複しないマッチのみ返す | E-01 (line 564-565), E-07 | ○ |
| C-19 (UT-IMP-019) | findAllでseq返却 | E-01 (line 623-626) | ○ |
| C-20 (UT-IMP-020) | マッチなしで空seq | E-01 (line 623-626) | ○ |
| C-21 (UT-IMP-021) | containsでtrue | E-01 (line 628-637), E-07 | ○ |
| C-22 (UT-IMP-022) | containsでfalse | E-01 (line 628-637), E-07 | ○ |
| C-23 (UT-IMP-023) | split基本機能 | E-01 (line 639-699), E-07 | ○ |
| C-24 (UT-IMP-024) | 0長splitで文字分割 | E-01 (line 647), E-07 | ○ |
| C-25 (UT-IMP-025) | キャプチャ付きsplit | E-01 (line 649-651), E-07 | ○ |
| C-26 (UT-IMP-026) | maxSplitで分割数制限 | E-01 (line 653-656), E-07 | ○ |
| C-27 (UT-IMP-027) | replace文字列置換 | E-01 (line 747-750) | ○ |
| C-28 (UT-IMP-028) | replace proc置換 | E-01 (line 718-741) | ○ |
| C-29 (UT-IMP-029) | replace $記法 | E-01 (line 729-737) | ○ |
| C-30 (UT-IMP-030) | replace $$エスケープ | E-01 (line 731) | ○ |
| C-31 (UT-IMP-031) | escapeRe特殊文字エスケープ | E-01 (line 752-773), E-07 | ○ |
| C-32 (UT-IMP-032) | escapeRe通常文字 | E-01 (line 752-773), E-07 | ○ |
| C-33 (UT-IMP-033) | escapeRe空文字列 | E-01 (line 752-773) | ○ |
| C-34 (UT-IMP-034) | Captures[]数値インデックス | E-01 (line 349-353) | ○ |
| C-35 (UT-IMP-035) | Captures[]名前アクセス | E-01 (line 381-385) | ○ |
| C-36 (UT-IMP-036) | Captures[]IndexDefect | E-01 (line 343-344) | ○ |
| C-37 (UT-IMP-037) | Captures[]KeyError | E-01 (line 371-373) | ○ |
| C-38 (UT-IMP-038) | CaptureBounds[]数値インデックス | E-01 (line 341-347) | ○ |
| C-39 (UT-IMP-039) | Captures contains | E-01 (line 338-339) | ○ |
| C-40 (UT-IMP-040) | Captures toTable | E-01 (line 392-394) | ○ |
| C-41 (UT-IMP-041) | Captures toSeq | E-01 (line 424-427) | ○ |
| C-42 (UT-IMP-042) | RegexMatch.match | E-01 (line 355-356) | ○ |
| C-43 (UT-IMP-043) | RegexMatch.matchBounds | E-01 (line 358-359) | ○ |
| C-44 (UT-IMP-044) | RegexMatch $ | E-01 (line 429-430) | ○ |
| C-45 (UT-IMP-045) | Regex == 同一パターン | E-01 (line 432-438) | ○ |
| C-46 (UT-IMP-046) | Regex == 異なるパターン | E-01 (line 432-438) | ○ |

### re.nim関連テストケース

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-47 (UT-IMP-047) | re関数でRegex生成 | E-02 (line 101-124), E-07 | ○ |
| C-48 (UT-IMP-048) | 無効パターンでRegexError | E-02 (line 79-83, 90-91) | ○ |
| C-49 (UT-IMP-049) | rex拡張正規表現 | E-02 (line 126-131) | ○ |
| C-50 (UT-IMP-050) | findBounds基本機能 | E-02 (line 267-276), E-07 | ○ |
| C-51 (UT-IMP-051) | findBoundsマッチ失敗 | E-02 (line 264, 176) | ○ |
| C-52 (UT-IMP-052) | findBoundsキャプチャ | E-02 (line 161-199), E-07 | ○ |
| C-53 (UT-IMP-053) | findBounds cstring版 | E-02 (line 254-265) | ○ |
| C-54 (UT-IMP-054) | matchLen基本機能 | E-02 (line 305-314), E-07 | ○ |
| C-55 (UT-IMP-055) | matchLenアンカー付き | E-02 (line 313), E-07 | ○ |
| C-56 (UT-IMP-056) | matchLen 0長 | E-02 (line 305-314) | ○ |
| C-57 (UT-IMP-057) | match true | E-02 (line 322-324) | ○ |
| C-58 (UT-IMP-058) | match false | E-02 (line 322-324) | ○ |
| C-59 (UT-IMP-059) | matchキャプチャ | E-02 (line 326-339), E-07 | ○ |
| C-60 (UT-IMP-060) | find基本機能 | E-02 (line 394-405), E-07 | ○ |
| C-61 (UT-IMP-061) | find失敗 | E-02 (line 400), E-07 | ○ |
| C-62 (UT-IMP-062) | find開始位置指定 | E-02 (line 401-402), E-07 | ○ |
| C-63 (UT-IMP-063) | findAll seq | E-02 (line 447-451) | ○ |
| C-64 (UT-IMP-064) | findAll空結果 | E-02 (line 447-451) | ○ |
| C-65 (UT-IMP-065) | findAllイテレータ | E-02 (line 407-424) | ○ |
| C-66 (UT-IMP-066) | =~マクロ | E-02 (line 453-470), E-07 | ○ |
| C-67 (UT-IMP-067) | contains true | E-02 (line 474-476) | ○ |
| C-68 (UT-IMP-068) | contains false | E-02 (line 474-476) | ○ |
| C-69 (UT-IMP-069) | startsWith true | E-02 (line 485-487) | ○ |
| C-70 (UT-IMP-070) | startsWith false | E-02 (line 485-487) | ○ |
| C-71 (UT-IMP-071) | endsWith true | E-02 (line 489-492) | ○ |
| C-72 (UT-IMP-072) | endsWith false | E-02 (line 489-492) | ○ |
| C-73 (UT-IMP-073) | replace基本機能 | E-02 (line 494-513), E-07 | ○ |
| C-74 (UT-IMP-074) | replace置換なし | E-02 (line 494-513) | ○ |
| C-75 (UT-IMP-075) | replace削除置換 | E-02 (line 494-513), E-07 | ○ |
| C-76 (UT-IMP-076) | replacef $記法 | E-02 (line 515-531), E-07 | ○ |
| C-77 (UT-IMP-077) | multiReplace | E-02 (line 533-551) | ○ |
| C-78 (UT-IMP-078) | transformFile正常系 | E-02 (line 553-559) | △ |
| C-79 (UT-IMP-079) | transformFile IOError | E-02 (line 553-559) | ○ |
| C-80 (UT-IMP-080) | split基本機能 | E-02 (line 561-599), E-07 | ○ |
| C-81 (UT-IMP-081) | split maxsplit | E-02 (line 561) | ○ |
| C-82 (UT-IMP-082) | splitイテレータ | E-02 (line 561-593), E-07 | ○ |
| C-83 (UT-IMP-083) | escapeRe特殊文字 | E-02 (line 601-611) | ○ |
| C-84 (UT-IMP-084) | escapeRe英数字 | E-02 (line 607-608) | ○ |

### util.nim関連テストケース

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-85 (UT-IMP-085) | formatStr $num | E-03 (line 26-33) | ○ |
| C-86 (UT-IMP-086) | formatStr $name | E-03 (line 34-40) | ○ |
| C-87 (UT-IMP-087) | formatStr $$ | E-03 (line 18-20) | ○ |
| C-88 (UT-IMP-088) | formatStr $# | E-03 (line 21-25) | ○ |
| C-89 (UT-IMP-089) | formatStr ${name} | E-03 (line 41-48) | ○ |
| C-90 (UT-IMP-090) | formatStr ValueError | E-03 (line 49-50) | ○ |

### rdstdin.nim関連テストケース

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-91 (UT-IMP-091) | readLineFromStdin基本機能 | E-04 (line 30-35, 72-74), E-07 | ○ |
| C-92 (UT-IMP-092) | readLineFromStdin戻り値付き | E-04 (line 37-46, 60-70), E-07 | ○ |
| C-93 (UT-IMP-093) | readLineFromStdin EOF | E-04 (line 63-65) | ○ |
| C-94 (UT-IMP-094) | Unix IOError | E-04 (line 73-74) | △ |
| C-95 (UT-IMP-095) | ヒストリ追加 | E-04 (line 67-68) | ○ |

### nre.nim内部関数テストケース

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-96 (UT-IMP-096) | extractOptionsオプションなし | E-01 (line 461-498) | ○ |
| C-97 (UT-IMP-097) | extractOptions UTFオプション | E-01 (line 480-481, 451) | ○ |
| C-98 (UT-IMP-098) | extractOptions NO_STUDY | E-01 (line 482-483) | ○ |
| C-99 (UT-IMP-099) | initRegex正常 | E-01 (line 272-300) | ○ |
| C-100 (UT-IMP-100) | initRegex SyntaxError | E-01 (line 286-288) | ○ |

## 4) 不足情報（Unknown / Missing）

- **UT-IMP-078 (transformFile正常系)**: ファイルI/O操作のテストケースであり、実行環境とファイルシステムの状態に依存する。テスト実行時には一時ファイルの作成・削除が必要。
  - 候補：テスト用一時ファイル / モックファイルシステム / 統合テストとしての実行

- **UT-IMP-094 (rdstdin Unix環境IOError)**: linenoise環境でnilが返された場合のエラー処理テスト。実際のUnix環境とlinenoise動作が必要。
  - 候補：Unix CI環境 / モック化 / プラットフォーム固有テスト

## 5) リスクフラグ（レビュー観点）

| リスクレベル | 項目 | 理由 |
|---|---|---|
| 1 | 外部依存（PCRE） | PCREライブラリの動作に依存。バージョン差異によるテスト結果の変動可能性 |
| 1 | 外部依存（linenoise） | Unix環境でのrdstdin.nimはlinenoiseに依存。環境差異の影響あり |
| 0 | Unicode処理 | InvalidUnicodeError関連テストは適切なテストデータが必要 |
| 0 | プラットフォーム分岐 | rdstdin.nimはWindows/Genode/Unix-likeで実装が異なる |

## 6) レビュアーチェックリスト（最小）

- [ ] PCREライブラリがテスト環境でインストール済みか確認
- [ ] 各正規表現パターンの構文が正しいことを確認
- [ ] キャプチャグループのインデックスが0始まりであることを確認
- [ ] transformFileテストでは一時ファイルの作成・クリーンアップを実装
- [ ] Unix環境でのrdstdinテストではlinenoise動作を確認
- [ ] 境界値テスト（空文字列、0長マッチ等）のテストデータが適切か確認
- [ ] エラーハンドリングテストで適切な例外型がスローされることを確認
