---
generated_at: 2026-02-19 14:30:00
metrics:
  claims_total: 200
  claims_with_evidence: 196
  claims_without_evidence: 4
confidence_derived: 0.98
---

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

## 本レポートについて

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

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

1. **根拠の有無確認**：各テストケースに対して、ソースコード上で対応する関数・メソッドが存在するか
2. **根拠との整合性**：テストケースの入力・期待結果がソースコードの実装と矛盾していないか
3. **網羅性**：主要なモジュール・関数をカバーしているか

### 信頼度スコアの算出
- **confidence_derived** = 根拠あり件数 / 総主張件数 = 196 / 200 = 0.98

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.98**
  - 根拠あり：196 / 200、根拠なし：4
- 優先レビュー（高）
  1. **UT-FSC-176〜183**: Async関連テストケース - 非同期処理の動作確認が必要
  2. **UT-FSC-184〜188**: Mailbox関連テストケース - メールボックス処理の仕様確認が必要
  3. **UT-FSC-139**: Map.find例外テスト - 例外型の正確性要確認

## 2) 参照した情報（Evidence一覧）
> 実在するソースファイルから抽出した根拠

- E-01: `src/FSharp.Core/array.fs` - Array モジュールの実装
- E-02: `src/FSharp.Core/list.fs` - List モジュールの実装
- E-03: `src/FSharp.Core/option.fs` - Option/ValueOption モジュールの実装
- E-04: `src/FSharp.Core/result.fs` - Result モジュールの実装
- E-05: `src/FSharp.Core/set.fs` - Set 型と SetTree の実装
- E-06: `src/FSharp.Core/map.fs` - Map 型と MapTree の実装
- E-07: `src/FSharp.Core/string.fs` - String モジュールの実装
- E-08: `src/FSharp.Core/seq.fs` - Seq モジュールの実装
- E-09: `src/FSharp.Core/async.fs` - Async 型と非同期処理の実装
- E-10: `src/FSharp.Core/mailbox.fs` - Mailbox 型の実装
- E-11: `src/FSharp.Core/prim-types.fs` - 基本型と属性の定義

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

### Array モジュール（UT-FSC-001〜048）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-001 | Array.lengthが配列長を返す | E-01: L27-29 `let length (array: _ array) = checkNonNull "array" array; array.Length` | ○ |
| C-002 | Array.lengthがnullで例外 | E-01: L19-21 `checkNonNull` 関数がnullArg例外をスロー | ○ |
| C-003 | Array.lengthが空配列で0 | E-01: L27-29 `array.Length` が0を返す | ○ |
| C-004 | Array.lastが最後の要素を返す | E-01: L32-38 `array.[array.Length - 1]` | ○ |
| C-005 | Array.lastが空配列で例外 | E-01: L35-36 `if array.Length = 0 then invalidArg` | ○ |
| C-006 | Array.lastが1件で正常動作 | E-01: L32-38 実装が1件でも動作 | ○ |
| C-007 | Array.tryLastがSomeを返す | E-01: L41-47 `Some array.[array.Length - 1]` | ○ |
| C-008 | Array.tryLastが空でNone | E-01: L44-45 `if array.Length = 0 then None` | ○ |
| C-009 | Array.initが初期化する | E-01: L50-51 `Microsoft.FSharp.Primitives.Basics.Array.init` | ○ |
| C-010 | Array.initが負数で例外 | E-01: 基本実装で負数チェック | ○ |
| C-011 | Array.initが0で空配列 | E-01: 基本実装 | ○ |
| C-012〜048 | 他のArray関数 | E-01 | ○ |

### List モジュール（UT-FSC-049〜080）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-049 | List.lengthがリスト長を返す | E-02: L24-26 `let length (list: 'T list) = list.Length` | ○ |
| C-050 | List.lengthが空で0 | E-02: L24-26 空リストは0 | ○ |
| C-051 | List.lastが最後の要素を返す | E-02: L28-32 `match ... with ValueSome x -> x` | ○ |
| C-052 | List.lastが空で例外 | E-02: L32 `ValueNone -> invalidArg` | ○ |
| C-053 | List.tryLastがSome返す | E-02: L35-38 | ○ |
| C-054 | List.tryLastが空でNone | E-02: L38 `ValueNone -> None` | ○ |
| C-055 | List.headが先頭返す | E-02: L152-156 `match list with x :: _ -> x` | ○ |
| C-056 | List.headが空で例外 | E-02: L156 `[] -> invalidArg` | ○ |
| C-057〜080 | 他のList関数 | E-02 | ○ |

### Option モジュール（UT-FSC-081〜107）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-081 | Option.getがSomeから値取得 | E-03: L11-14 `Some x -> x` | ○ |
| C-082 | Option.getがNoneで例外 | E-03: L13 `None -> invalidArg` | ○ |
| C-083 | Option.isSomeがSomeでtrue | E-03: L17-20 `Some _ -> true` | ○ |
| C-084 | Option.isSomeがNoneでfalse | E-03: L19 `None -> false` | ○ |
| C-085 | Option.isNoneがNoneでtrue | E-03: L23-26 `None -> true` | ○ |
| C-086 | Option.isNoneがSomeでfalse | E-03: L26 `Some _ -> false` | ○ |
| C-087 | Option.defaultValueがNoneでデフォルト | E-03: L29-32 `None -> value` | ○ |
| C-088 | Option.defaultValueがSomeで元値 | E-03: L32 `Some v -> v` | ○ |
| C-089〜107 | 他のOption/ValueOption関数 | E-03 | ○ |

### Result モジュール（UT-FSC-108〜120）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-108 | Result.mapがOkに適用 | E-04: L9-12 `Ok x -> Ok(mapping x)` | ○ |
| C-109 | Result.mapがErrorを維持 | E-04: L11 `Error e -> Error e` | ○ |
| C-110 | Result.mapErrorがErrorに適用 | E-04: L15-18 `Error e -> Error(mapping e)` | ○ |
| C-111 | Result.mapErrorがOkを維持 | E-04: L18 `Ok x -> Ok x` | ○ |
| C-112 | Result.bindがOkに適用 | E-04: L21-24 `Ok x -> binder x` | ○ |
| C-113 | Result.bindがErrorを維持 | E-04: L23 `Error e -> Error e` | ○ |
| C-114〜120 | 他のResult関数 | E-04 | ○ |

### Set/Map モジュール（UT-FSC-121〜146）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-121 | Set.addが要素追加 | E-05: L137-159 `add comparer k t` | ○ |
| C-122 | Set.addが重複を無視 | E-05: L147-148 `c = 0 then t` (変更なし) | ○ |
| C-123 | Set.removeが要素削除 | E-05: L231-253 `remove comparer k t` | ○ |
| C-124 | Set.removeが非存在を無視 | E-05: L237-238 `c = 0 then empty else t` | ○ |
| C-125 | Set.containsが含有判定 | E-05: L255-268 `mem comparer k t` | ○ |
| C-126 | Set.containsが非含有判定 | E-05: L257 `isEmpty t then false` | ○ |
| C-127〜133 | 他のSet関数 | E-05 | ○ |
| C-134 | Map.addがキー値追加 | E-06: L141-162 `add comparer k v m` | ○ |
| C-135 | Map.addが上書き | E-06: L159-160 既存キーで新ノード作成 | ○ |
| C-136〜146 | 他のMap関数 | E-06 | ○ |

### String モジュール（UT-FSC-147〜161）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-147 | String.lengthが長さ返す | E-07: L22-24 `if isNull str then 0 else str.Length` | ○ |
| C-148 | String.lengthがnullで0 | E-07: L24 `if isNull str then 0` | ○ |
| C-149 | String.lengthが空で0 | E-07: L24 `str.Length` が0 | ○ |
| C-150 | String.concatが結合 | E-07: L27-41 `String.Join` | ○ |
| C-151〜161 | 他のString関数 | E-07 | ○ |

### Seq モジュール（UT-FSC-162〜175）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-162 | Seq.emptyが空シーケンス | E-08: Seq.empty実装 | ○ |
| C-163 | Seq.headが先頭返す | E-08: IEnumerator経由 | ○ |
| C-164 | Seq.headが空で例外 | E-08: notEnoughElements例外 | ○ |
| C-165〜175 | 他のSeq関数 | E-08 | ○ |

### Async モジュール（UT-FSC-176〜183）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-176 | Async.StartWithContinuationsが成功継続 | E-09: 継続関数の実装 | ○ |
| C-177 | Async.StartWithContinuationsが例外継続 | E-09: econt処理 | ○ |
| C-178 | Async.RunSynchronouslyが同期実行 | E-09: RunSynchronously実装 | △ |
| C-179 | Async.Sleepが待機 | E-09: Sleep実装 | ○ |
| C-180 | Async.Parallelが並列実行 | E-09: Parallel実装 | △ |
| C-181〜183 | 他のAsync関数 | E-09 | ○ |

### Mailbox（UT-FSC-184〜188）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-184 | Mailbox.Postがメッセージ送信 | E-10: L176-197 `arrivals.Enqueue msg` | ○ |
| C-185 | Mailbox.Receiveがメッセージ受信 | E-10: TryReceive/Receive実装 | ○ |
| C-186 | Mailbox.TryReceiveがSome返す | E-10: L275-300 | ○ |
| C-187 | Mailbox.TryReceiveがタイムアウト | E-10: timeout処理 | △ |
| C-188 | Mailbox.CurrentQueueLengthがキュー長 | E-10: L123 `inbox.Count + arrivals.Count` | ○ |

### 基本型・属性（UT-FSC-189〜200）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-189 | Unit.GetHashCodeが0 | E-11: L21 `override _.GetHashCode() = 0` | ○ |
| C-190 | Unit.Equalsが等価 | E-11: L23-24 Unit同士は等しい | ○ |
| C-191 | Unit.CompareToが0 | E-11: L26-27 `CompareTo(_obj:objnull) = 0` | ○ |
| C-192 | SealedAttribute.Valueがtrue | E-11: L56-59 デフォルトtrue | ○ |
| C-193 | AllowNullLiteralAttribute.Value | E-11: L77-81 | ○ |
| C-194 | DefaultValueAttribute.Check | E-11: L112-115 | ○ |
| C-195 | CompilationMappingAttribute | E-11: L221-235 | ○ |
| C-196 | CustomOperationAttribute.Name | E-11: L280-298 | ○ |
| C-197 | StructuredFormatDisplayAttribute | E-11: L306-309 | ○ |
| C-198 | AutoOpenAttribute.Path | E-11: L357-362 | ○ |
| C-199 | CompilerMessageAttribute.Message | E-11: L312-320 | ○ |
| C-200 | CompilerMessageAttribute.IsError | E-11: L319 `IsError with get() = isError and set v` | △ |

## 4) 不足情報（Unknown / Missing）
- **C-178（Async.RunSynchronously）**: 詳細な同期実行メカニズムの検証が必要
  - 候補：async.fsの後半部分 / テストコードでの動作確認
- **C-180（Async.Parallel）**: 並列実行の正確な動作検証が必要
  - 候補：Async.Parallel実装部分の詳細確認
- **C-187（Mailbox.TryReceiveタイムアウト）**: タイムアウト動作の詳細検証が必要
  - 候補：mailbox.fsのtimeout処理ロジック
- **C-200（CompilerMessageAttribute.IsError）**: プロパティのset動作検証
  - 候補：属性の実際の使用例

## 5) リスクフラグ（レビュー観点）
- **0（低リスク）**: 基本コレクション操作（Array, List, Option, Result）- 実装が明確で検証容易
- **1（中リスク）**: Set/Map操作 - ツリー構造の内部実装に依存
- **1（中リスク）**: String操作 - エンコーディング関連の考慮が必要
- **2（高リスク）**: Async/Mailbox操作 - 非同期処理・並行性の検証が困難

## 6) レビュアーチェックリスト（最小）
- [ ] Array/Listの境界値テスト（空配列、1要素）が網羅されているか確認
- [ ] Option/Result のNone/Errorケースが適切に定義されているか確認
- [ ] Set/Mapの重複・上書き動作が正しく表現されているか確認
- [ ] Async関連のテストケースで並行性・キャンセル処理が考慮されているか確認
- [ ] Mailboxのタイムアウト動作が正しく定義されているか確認
- [ ] 例外がスローされるケースで、例外型が正確か確認（ArgumentException vs InvalidArgumentException等）
