---
generated_at: 2026-02-22 10:00:00
metrics:
  claims_total: 36
  claims_with_evidence: 33
  claims_without_evidence: 3
confidence_derived: 0.92
---

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

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.92**
  - 根拠あり：33 / 36、根拠なし：3
- 優先レビュー（高）
  1. **C-13 (UT-SLP-013)**: 最大mrb_int値のオーバーフロー挙動 - ソースコードに明示的な上限チェックがない
  2. **C-15 (UT-SLP-015)**: Float最大値のusleepオーバーフロー挙動 - 暗黙の型変換の挙動が不明
  3. **C-27 (UT-SLP-027)**: usleepの最大mrb_int値のオーバーフロー挙動 - ソースコードに明示的な上限チェックがない

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

- E-01: `mrbgems/mruby-sleep/src/sleep.c` - メインソースファイル（f_sleep, f_usleep, gem_init, gem_final関数）
- E-02: `mrbgems/mruby-sleep/test/sleep_test.rb` - 既存テストケース
- E-03: `mrbgems/mruby-sleep/mrbgem.rake` - gem仕様定義
- E-04: `mrbgems/mruby-sleep/README.md` - モジュール説明
- E-05: `mrbgems/mruby-sleep/example/sleep.rb` - 使用例

## 3) Claims と根拠の対応（レビューの主戦場）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | 正の整数値でsleepが正常動作する | E-01 (L69-71, L79-80), E-02 (L1-3) | ○ |
| C-02 | sec=0で即座に返る | E-01 (L69: sec>=0条件), E-02 (L3) | ○ |
| C-03 | 正のFloat値でsleepが動作する（MRB_NO_FLOAT未定義時） | E-01 (L66-71: float分岐), E-02 (L6-11) | ○ |
| C-04 | Float 0.0で即座に返る | E-01 (L69: sec>=0条件), E-02 (L9) | ○ |
| C-05 | -0.0でエラーが発生しない | E-01 (L69: sec>=0条件、-0.0>=0はIEEE754でtrue), E-02 (L10) | ○ |
| C-06 | 戻り値がmrb_fixnum型である | E-01 (L88: mrb_fixnum_value) | ○ |
| C-07 | MRB_NO_FLOAT定義時に整数引数で動作する | E-01 (L76-84: #else分岐) | ○ |
| C-08 | 負の整数値でArgumentErrorが発生する | E-01 (L73, L83: mrb_raise), E-02 (L13-15) | ○ |
| C-09 | 負のFloat値でArgumentErrorが発生する | E-01 (L73: mrb_raise), E-02 (L17-19) | ○ |
| C-10 | 引数なしでエラーが発生する | E-01 (L175: MRB_ARGS_REQ(1)) | ○ |
| C-11 | 文字列引数でTypeErrorが発生する | E-01 (L68: mrb_get_args "f"指定) | ○ |
| C-12 | nil引数でTypeErrorが発生する | E-01 (L68: mrb_get_args "f"指定) | ○ |
| C-13 | 最大mrb_int値でのオーバーフロー挙動 | **根拠なし** | △ |
| C-14 | 極小Float値での挙動 | E-01 (L70: usleep(sec*1000000)で0付近になる) | ○ |
| C-15 | Float最大値でのusleepオーバーフロー | **根拠なし** | △ |
| C-16 | 正の整数値でusleepが正常動作する | E-01 (L129-130), E-02 (L22-25) | ○ |
| C-17 | usec=0で即座に返る | E-01 (L129: usec>=0条件), E-02 (L24) | ○ |
| C-18 | 500000マイクロ秒でusleepが動作する | E-01 (L129-130) | ○ |
| C-19 | 1000マイクロ秒でusleepが動作する | E-01 (L129-130) | ○ |
| C-20 | usleepの戻り値がmrb_fixnum型である | E-01 (L158: mrb_fixnum_value) | ○ |
| C-21 | usleepで負の値がArgumentErrorを発生させる | E-01 (L133: mrb_raise), E-02 (L27-29) | ○ |
| C-22 | usleepで引数なしがエラーを発生させる | E-01 (L176: MRB_ARGS_REQ(1)) | ○ |
| C-23 | usleepで文字列引数がTypeErrorを発生させる | E-01 (L127: mrb_get_args "i"指定) | ○ |
| C-24 | usleepでnil引数がTypeErrorを発生させる | E-01 (L127: mrb_get_args "i"指定) | ○ |
| C-25 | usleepでFloat引数がTypeErrorを発生させる | E-01 (L127: mrb_get_args "i"指定) | ○ |
| C-26 | usleep 1マイクロ秒での挙動 | E-01 (L129-130) | ○ |
| C-27 | usleepの最大mrb_int値でのオーバーフロー挙動 | **根拠なし** | △ |
| C-28 | POSIX環境で秒をまたがない場合の時間計測 | E-01 (L153-154: ed_tm.tv_usec - st_tm.tv_usec) | ○ |
| C-29 | POSIX環境で秒をまたぐ場合の時間計測 | E-01 (L150-151: 1000000 + ed_tm.tv_usec - st_tm.tv_usec) | ○ |
| C-30 | Windows環境でのFILETIME経由の時間計測 | E-01 (L136-146: FILETIME計算ロジック) | ○ |
| C-31 | gem初期化でsleepが定義される | E-01 (L175: mrb_define_module_function_id for sleep) | ○ |
| C-32 | gem初期化でusleepが定義される | E-01 (L176: mrb_define_module_function_id for usleep) | ○ |
| C-33 | sleep/usleepがKernelモジュール関数として登録される | E-01 (L175-176: mrb->kernel_module) | ○ |
| C-34 | gem終了処理が正常に完了する | E-01 (L185-187: 空の関数体) | ○ |
| C-35 | sleepの戻り値がtime(0)差分を反映する | E-01 (L63, L86-88: beg=time(0), end=time(0)-beg) | ○ |
| C-36 | Float値のsleep戻り値が整数に丸められる | E-01 (L86-88: time_t差分のため整数化) | ○ |

## 4) 不足情報（Unknown / Missing）
- C-13, C-15, C-27: ソースコードにsleep/usleepの引数の上限値チェックが存在しない。非常に大きな値を渡した場合のシステムコール側の挙動（オーバーフロー、無限スリープ等）はOS/プラットフォーム依存であり、mrubyコード内では制御されていない。
  - 候補：OS APIドキュメント（usleep/Sleep/sleep のマニュアル） / mruby内部のmrb_int型定義 / C言語のtime_t型仕様

## 5) リスクフラグ（レビュー観点）
- 0: 低リスク - gem終了処理（C-34）は空関数であり、テストの実質的価値は低い
- 1: 中リスク - POSIX/Windows環境分岐のテスト（C-28, C-29, C-30）はプラットフォーム依存であり、クロスプラットフォームテスト環境が必要
- 1: 中リスク - MRB_NO_FLOAT定義有無による分岐（C-07）はコンパイル時フラグにより切り替わるため、両方のビルド構成でのテストが必要
- 2: 高リスク - 大きな値のオーバーフロー挙動（C-13, C-15, C-27）は未定義動作を含む可能性があり、潜在的なバグの温床となりうる

## 6) レビュアーチェックリスト（最小）
- [ ] sleep関数の正常系テスト（C-01〜C-07）が実際のコード分岐を正しくカバーしているか確認
- [ ] usleep関数の正常系テスト（C-16〜C-20）が実際のコード分岐を正しくカバーしているか確認
- [ ] 異常系テスト（C-08〜C-12, C-21〜C-25）のエラーメッセージ・例外型が実装と一致するか確認
- [ ] 境界値テスト（C-13〜C-15, C-26〜C-27）の期待結果がプラットフォーム環境で妥当か確認
- [ ] POSIX/Windows分岐テスト（C-28〜C-30）のテスト環境要件が現実的か確認
- [ ] gem初期化テスト（C-31〜C-33）がmruby APIの仕様に沿っているか確認
- [ ] mrb_get_argsの"f"/"i"指定による型チェック挙動（C-11, C-12, C-23〜C-25）が正確か確認
