---
generated_at: 2026-02-22 17:00:00
metrics:
  claims_total: 109
  claims_with_evidence: 105
  claims_without_evidence: 4
confidence_derived: 0.96
---

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

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.96**
  - 根拠あり：105 / 109、根拠なし：4
- 優先レビュー（高）
  1. **C-103 (UT-UTH-103)**：AIX/MVS/PASEプラットフォームでのuv__thread_setname動作は、対象プラットフォーム実機でのみ検証可能
  2. **C-105 (UT-UTH-105)**：AIX/MVS/PASE/旧AndroidでのUV_ENOSYS返却は、対象プラットフォーム実機でのみ検証可能
  3. **C-108 (UT-UTH-108)**：glibc 2.20以下でのカスタムセマフォ有効化は特定環境でのみ検証可能
  4. **C-109 (UT-UTH-109)**：glibc 2.21以上での標準セマフォ使用は特定環境でのみ検証可能

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

- E-01: `src/unix/thread.c` (行1-973) - unix-threadモジュールのメインソースコード
- E-02: `src/unix/internal.h` (行1-597) - Unix内部ヘッダ（関数宣言、マクロ定義）
- E-03: `include/uv.h` (行1-200+) - libuvパブリックAPIヘッダ
- E-04: `docs/code-to-docs/単体テストケース一覧/plan.md` - モジュール分割計画

## 3) Claims と根拠の対応（レビューの主戦場）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-001 | uv_thread_createが有効な引数でスレッドを作成する | E-01 (行126-130) | ○ |
| C-002 | uv_thread_createが引数付きでスレッドを作成する | E-01 (行126-130) | ○ |
| C-003 | uv_thread_createがuv_thread_create_exに委譲する | E-01 (行127-129) | ○ |
| C-004 | uv_thread_create_exがデフォルトスタックサイズでスレッドを作成する | E-01 (行138-187) | ○ |
| C-005 | uv_thread_create_exがカスタムスタックサイズでスレッドを作成する | E-01 (行155-156, 162-168) | ○ |
| C-006 | スタックサイズが最小値未満の場合に補正される | E-01 (行165-167) | ○ |
| C-007 | スタックサイズがページサイズにアラインされる | E-01 (行163-164) | ○ |
| C-008 | stack_size=0の場合にデフォルト値が使用される | E-01 (行159-161) | ○ |
| C-009 | uv_thread_detachが正常に動作する | E-01 (行133-135) | ○ |
| C-010 | 二重デタッチでエラーが返る | E-01 (行134) | ○ |
| C-011 | uv_thread_joinがスレッド終了を待機する | E-01 (行294-296) | ○ |
| C-012 | 終了済みスレッドのjoin | E-01 (行294-296) | ○ |
| C-013 | デタッチ済みスレッドのjoinでエラー | E-01 (行294-296) | ○ |
| C-014 | uv_thread_selfが現在のスレッドIDを返す | E-01 (行290-292) | ○ |
| C-015 | 同一スレッドIDの比較でtrue | E-01 (行299-301) | ○ |
| C-016 | 異なるスレッドIDの比較でfalse | E-01 (行299-301) | ○ |
| C-017 | uv_thread_setnameが有効な名前で設定される | E-01 (行303-307) | ○ |
| C-018 | uv_thread_setnameでNULL時にUV_EINVAL | E-01 (行304-305) | ○ |
| C-019 | 長い名前がUV_PTHREAD_MAX_NAMELEN_NPに切り詰められる | E-01 (行904-906, 914-916, 929-931) | ○ |
| C-020 | 空文字列の扱い | E-01 (行303-307) | ○ |
| C-021 | uv_thread_getnameでスレッド名が取得される | E-01 (行309-314) | ○ |
| C-022 | uv_thread_getnameでname=NULLの場合UV_EINVAL | E-01 (行310-311) | ○ |
| C-023 | uv_thread_getnameでsize=0の場合UV_EINVAL | E-01 (行310-311) | ○ |
| C-024 | size=1の場合の挙動 | E-01 (行309-314, 947-949, 957-958, 969-970) | ○ |
| C-025 | uv_thread_setaffinityが正常にマスクを設定する | E-01 (行191-227) | ○ |
| C-026 | oldmask指定時に旧マスクが取得される | E-01 (行206-209) | ○ |
| C-027 | mask_sizeがcpumasksize未満でUV_EINVAL | E-01 (行203-204) | ○ |
| C-028 | 非対応プラットフォームでUV_ENOTSUP | E-01 (行261-266) | ○ |
| C-029 | uv_thread_getaffinityが正常にマスクを取得する | E-01 (行230-259) | ○ |
| C-030 | getaffinityでmask_size不足時にUV_EINVAL | E-01 (行242-243) | ○ |
| C-031 | getaffinity非対応プラットフォームでUV_ENOTSUP | E-01 (行269-273) | ○ |
| C-032 | uv_thread_getcpuがCPU番号を返す | E-01 (行276-288) | ○ |
| C-033 | getcpu非対応プラットフォームでUV_ENOTSUP | E-01 (行286) | ○ |
| C-034 | uv_mutex_initが正常に初期化する | E-01 (行316-336) | ○ |
| C-035 | uv_mutex_init_recursiveが正常に初期化する | E-01 (行339-355) | ○ |
| C-036 | 再帰Mutexで同一スレッドから複数回ロック可能 | E-01 (行346) | ○ |
| C-037 | uv_mutex_destroyが正常に破棄する | E-01 (行358-361) | ○ |
| C-038 | uv_mutex_lockが正常にロックする | E-01 (行364-367) | ○ |
| C-039 | ロック済みMutexで別スレッドがブロックされる | E-01 (行364-367) | ○ |
| C-040 | uv_mutex_trylockがアンロック状態で成功する | E-01 (行370-381) | ○ |
| C-041 | uv_mutex_trylockがロック中でUV_EBUSY | E-01 (行374-378) | ○ |
| C-042 | uv_mutex_unlockが正常にアンロックする | E-01 (行384-387) | ○ |
| C-043 | uv_rwlock_initが正常に初期化する | E-01 (行390-392) | ○ |
| C-044 | uv_rwlock_destroyが正常に破棄する | E-01 (行395-398) | ○ |
| C-045 | uv_rwlock_rdlockが読み取りロックを取得する | E-01 (行401-404) | ○ |
| C-046 | 複数スレッドで同時に読み取りロック取得可能 | E-01 (行401-404) | ○ |
| C-047 | uv_rwlock_tryrdlockが未ロック時に成功する | E-01 (行407-418) | ○ |
| C-048 | tryrdlockが書き込みロック中にUV_EBUSY | E-01 (行411-415) | ○ |
| C-049 | uv_rwlock_rdunlockが読み取りロックを解放する | E-01 (行421-424) | ○ |
| C-050 | uv_rwlock_wrlockが書き込みロックを取得する | E-01 (行427-430) | ○ |
| C-051 | 読み取りロック中に書き込みロックがブロックされる | E-01 (行427-430) | ○ |
| C-052 | uv_rwlock_trywrlockが未ロック時に成功する | E-01 (行433-444) | ○ |
| C-053 | trywrlockが読み取りロック中にUV_EBUSY | E-01 (行437-441) | ○ |
| C-054 | trywrlockが書き込みロック中にUV_EBUSY | E-01 (行437-441) | ○ |
| C-055 | uv_rwlock_wrunlockが書き込みロックを解放する | E-01 (行447-450) | ○ |
| C-056 | uv_onceがコールバックを1回だけ実行する | E-01 (行453-456) | ○ |
| C-057 | 複数回呼び出しても1回だけ実行される | E-01 (行453-456) | ○ |
| C-058 | マルチスレッドでも1回だけ実行される | E-01 (行453-456) | ○ |
| C-059 | uv_sem_initが値0で初期化する | E-01 (行460-473, 684-693) | ○ |
| C-060 | uv_sem_initが値1で初期化する | E-01 (行460-473, 684-693) | ○ |
| C-061 | uv_sem_initが大きな初期値で初期化する | E-01 (行460-473, 684-693) | ○ |
| C-062 | uv_sem_destroyが正常に破棄する | E-01 (行476-479, 696-701) | ○ |
| C-063 | uv_sem_postがセマフォ値をインクリメントする | E-01 (行482-485, 704-709) | ○ |
| C-064 | uv_sem_waitが値1以上で即座に返る | E-01 (行488-497, 712-717) | ○ |
| C-065 | uv_sem_waitが値0でブロックされる | E-01 (行488-497, 712-717) | ○ |
| C-066 | uv_sem_trywaitが値1以上で成功する | E-01 (行500-515, 720-725) | ○ |
| C-067 | uv_sem_trywaitが値0でUV_EAGAIN | E-01 (行507-511, 720-725) | ○ |
| C-068 | post/waitでスレッド間同期ができる | E-01 (行482-497, 704-717) | ○ |
| C-069 | uv_cond_initが正常に初期化する | E-01 (行732-734, 738-765) | ○ |
| C-070 | uv_cond_destroyが正常に破棄する | E-01 (行769-801) | ○ |
| C-071 | uv_cond_signalがシグナルを送信する | E-01 (行803-806) | ○ |
| C-072 | 待機中スレッドが1つ起床される | E-01 (行803-806, 815-838) | ○ |
| C-073 | uv_cond_broadcastがブロードキャストを送信する | E-01 (行808-811) | ○ |
| C-074 | 全待機スレッドが起床される | E-01 (行808-811, 815-838) | ○ |
| C-075 | uv_cond_waitがsignal受信まで待機する | E-01 (行815-838) | ○ |
| C-076 | wait中にmutexが解放される | E-01 (行815-838) | ○ |
| C-077 | uv_cond_timedwaitがsignal受信で0を返す | E-01 (行841-874) | ○ |
| C-078 | uv_cond_timedwaitがタイムアウトでUV_ETIMEDOUT | E-01 (行869-870) | ○ |
| C-079 | timeout=0での挙動 | E-01 (行841-874) | ○ |
| C-080 | uv_key_createがTLSキーを作成する | E-01 (行877-879) | ○ |
| C-081 | uv_key_deleteがTLSキーを削除する | E-01 (行882-885) | ○ |
| C-082 | uv_key_setがTLS値を設定する | E-01 (行893-896) | ○ |
| C-083 | uv_key_setがNULLを設定できる | E-01 (行893-896) | ○ |
| C-084 | uv_key_getが設定済み値を取得する | E-01 (行888-890) | ○ |
| C-085 | 値未設定のTLSキーからNULLが返る | E-01 (行888-890) | ○ |
| C-086 | 異なるスレッドでTLS値が独立している | E-01 (行888-896) | ○ |
| C-087 | uv__min_stack_sizeが8192以上を返す | E-01 (行72-81) | ○ |
| C-088 | uv__default_stack_sizeがプラットフォームに応じた値を返す | E-01 (行87-95) | ○ |
| C-089 | uv__thread_stack_sizeが適切な値を返す | E-01 (行101-123) | ○ |
| C-090 | RLIM_INFINITYの場合にデフォルト値が返る | E-01 (行112-113) | ○ |
| C-091 | rlim_curが最小スタックサイズ未満の場合にデフォルト値が返る | E-01 (行118-119) | ○ |
| C-092 | カスタムセマフォが正常に初期化される | E-01 (行560-582) | ○ |
| C-093 | メモリ確保失敗時にUV_ENOMEMが返る | E-01 (行564-566) | ○ |
| C-094 | カスタムセマフォpostでcond_signalが送信される | E-01 (行595-604) | ○ |
| C-095 | カスタムセマフォwaitが即座にデクリメントする | E-01 (行607-616) | ○ |
| C-096 | カスタムセマフォwaitがvalue==0でブロックされる | E-01 (行612-613) | ○ |
| C-097 | カスタムセマフォtrywaitが成功する | E-01 (行619-635) | ○ |
| C-098 | カスタムセマフォtrywaitがvalue==0でUV_EAGAIN | E-01 (行626-629) | ○ |
| C-099 | カスタムセマフォtrywaitでmutex競合時UV_EAGAIN | E-01 (行623-624) | ○ |
| C-100 | POSIXセマフォtrywaitのEINTRリトライ | E-01 (行668-682) | ○ |
| C-101 | POSIXセマフォwaitのEINTRリトライ | E-01 (行656-665) | ○ |
| C-102 | 内部関数でスレッド名がプラットフォーム固有APIで設定される | E-01 (行903-933) | ○ |
| C-103 | AIX/MVS/PASEでUV_ENOSYSが返る(setname) | E-01 (行899-901) | △ |
| C-104 | 内部関数でスレッド名がプラットフォーム固有APIで取得される | E-01 (行940-972) | ○ |
| C-105 | AIX/MVS/PASE/旧AndroidでUV_ENOSYSが返る(getname) | E-01 (行940-942) | △ |
| C-106 | 非AppleプラットフォームでCLOCK_MONOTONIC属性で初期化される | E-01 (行738-765) | ○ |
| C-107 | 条件変数初期化失敗時にエラーが返る | E-01 (行747-764) | ○ |
| C-108 | glibc 2.20以下でカスタムセマフォが有効化される | E-01 (行532-537) | △ |
| C-109 | glibc 2.21以上で標準セマフォが使用される | E-01 (行532-537) | △ |

## 4) 不足情報（Unknown / Missing）
- C-103, C-105: AIX/MVS/PASE/旧Androidプラットフォーム実機での検証が不可能。ソースコードの条件コンパイルディレクティブ(`#if defined(_AIX) || defined(__MVS__) || defined(__PASE__)`)は確認できるが、実際の動作検証はこれらのプラットフォームでのみ可能
  - 候補：AIX実機テスト / z/OS実機テスト / IBM i実機テスト
- C-108, C-109: glibc特定バージョン(`gnu_get_libc_version()`の返り値)に依存するロジック。テスト環境のglibcバージョンによっては検証不能
  - 候補：glibc 2.20以下の環境 / glibc 2.21以上の環境 / モック化による検証

## 5) リスクフラグ（レビュー観点）
- 0: 低リスク - 大半のテストケース(105/109)はソースコードの直接的な条件分岐・エラー処理から導出されており、根拠が明確
- 1: 中リスク - スレッド同期の正確なタイミングに依存するテスト(C-039, C-051, C-065, C-068等)は、テスト実装時にレースコンディションを避ける工夫が必要
- 1: 中リスク - プラットフォーム固有の条件コンパイル(`#if defined(__APPLE__)`, `#ifdef __MVS__`等)により、一部テストケースは特定環境でのみ有効
- 0: 低リスク - abort()を呼ぶエラーパス(uv_mutex_destroy, uv_rwlock_destroy等)のテストはプロセスが終了するため、異常系テストの実装方針をレビューで確認すべき

## 6) レビュアーチェックリスト（最小）
- [ ] テストケース109件がsrc/unix/thread.c内の全public関数・重要internal関数を網羅しているか確認
- [ ] 各同期プリミティブ(mutex, rwlock, semaphore, cond, once, TLS)のライフサイクル(init/use/destroy)が網羅されているか確認
- [ ] スレッド間同期のテストケース(UT-UTH-039, 051, 065, 068等)のテスト実装可能性を確認
- [ ] プラットフォーム固有テストケース(UT-UTH-028, 031, 033, 103, 105等)のスキップ条件が適切か確認
- [ ] abort()を呼ぶエラーパスに対する異常系テスト(UT-UTH-037, 044等)の実装方針を確認
- [ ] カスタムセマフォ(glibc<2.21/MVS向け)のテストケース(UT-UTH-092-099)の実行環境を確認
