---
generated_at: 2026-02-21 12:00:00
metrics:
  claims_total: 149
  claims_with_evidence: 141
  claims_without_evidence: 8
confidence_derived: 0.95
---

# 根拠レポート：root モジュール単体テストケース一覧

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.95**
  - 根拠あり：141 / 149、根拠なし：8
- 優先レビュー（高）
  1. **getdouble関数のFPU操作テスト (UT-ROT-086)**：低レベルアセンブリコードのため動作検証が困難
  2. **HGIMG3描画関数群のテスト (UT-ROT-080~085)**：グラフィックライブラリの内部動作に依存
  3. **tofloat関数のビット操作テスト (UT-ROT-069~071)**：IEEE 754ビット操作の正確性は実行時検証が必要

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

- E-01: `kshootmania.hsp` L118-127 - `__picload__` モジュール定義（picload_関数）
- E-02: `kshootmania.hsp` L130-138 - `__instr__` モジュール定義（instr_関数、マルチバイトバグ修正）
- E-03: `kshootmania.hsp` L2197-2199 - `min` 関数定義
- E-04: `kshootmania.hsp` L2201-2203 - `max` 関数定義
- E-05: `kshootmania.hsp` L2205-2206 - `ran` 関数定義（min(max(a,b),c)）
- E-06: `kshootmania.hsp` L2208-2210 - `maxf` 関数定義
- E-07: `kshootmania.hsp` L2212-2214 - `minf` 関数定義
- E-08: `kshootmania.hsp` L2216-2217 - `ranf` 関数定義
- E-09: `kshootmania.hsp` L2176-2183 - `ardel` 関数定義（配列要素削除）
- E-10: `kshootmania.hsp` L2185-2195 - `ardel2` 関数定義（2次元配列要素削除）
- E-11: `kshootmania.hsp` L2128-2137 - `ginfo2` 関数定義（ウィンドウ状態判定）
- E-12: `kshootmania.hsp` L2153-2174 - `Ime_Control` モジュール定義（imeset, imeget）
- E-13: `kshootmania.hsp` L2219-2247 - `getjoykeystat` 関数定義
- E-14: `kshootmania.hsp` L2249-2263 - `getkey_a` 関数定義
- E-15: `kshootmania.hsp` L2265-2283 - `getesckey` 関数定義
- E-16: `kshootmania.hsp` L2285-2297 - `drawtxt` / `_drawtxt` 関数定義
- E-17: `kshootmania.hsp` L2299-2326 - `blackout` 関数定義
- E-18: `kshootmania.hsp` L2328-2355 - `whiteout` 関数定義
- E-19: `kshootmania.hsp` L2357-2372 - `imgbufload` 関数定義
- E-20: `kshootmania.hsp` L2374-2390 - `imgbufload_bg` 関数定義
- E-21: `kshootmania.hsp` L2392-2419 - `generate_cache_imgs` 関数定義
- E-22: `kshootmania.hsp` L2424-2438 - `save_cache_img`, `exists`, `not_exists` 関数定義
- E-23: `kshootmania.hsp` L2441-2443 - `tofloat` 関数定義
- E-24: `kshootmania.hsp` L2448-2493 - `hgcopy`, `hgcopy_a`, `hgzoom`, `hgzoom_a`, `settex2` 関数定義
- E-25: `kshootmania.hsp` L2496-2500 - `two` 関数定義
- E-26: `kshootmania.hsp` L2503-2506 - `strmid2` 関数定義
- E-27: `kshootmania.hsp` L2511-2515 - `GetTxtExtPoint` 関数定義
- E-28: `kshootmania.hsp` L2139-2151 - `getdouble` 関数定義（FPU操作）
- E-29: `kshootmania.hsp` L1246-1297 - `*refreshlang` ラベル定義
- E-30: `kshootmania.hsp` L1299-1499 - `*saveconfig` ラベル定義
- E-31: `kshootmania.hsp` L2023-2036 - `*refreshhs` ラベル定義
- E-32: `kshootmania.hsp` L2038-2048 - `*volactive` ラベル定義
- E-33: `kshootmania.hsp` L2062-2074 - `*exit` ラベル定義
- E-34: `kshootmania.hsp` L2076-2112 - `*delcache` ラベル定義
- E-35: `kshootmania.hsp` L2114-2119 - `*refreshgetsize` ラベル定義
- E-36: `kshootmania.hsp` L2121-2126 - `*mdatafree` ラベル定義
- E-37: `kshootmania.hsp` L390-681 - config.ini読み込み処理
- E-38: `kshootmania.hsp` L686-741 - キー配列初期化処理
- E-39: `kshootmania.hsp` L750-776 - DLL存在チェック・バージョンチェック処理
- E-40: `kshootmania.hsp` L909-944 - コマンドライン引数処理
- E-41: `kshootmania.hsp` L946-1236 - メインループ・シーン遷移処理
- E-42: `kshootmania.hsp` L954-999 - SCENE_BEFORE_PLAY（コースモード）処理
- E-43: `kshooteditor.hsp` L227-235 - エディタ版`picload`関数定義
- E-44: `kshooteditor.hsp` L240-243 - `vzoom` 関数定義
- E-45: `kshooteditor.hsp` L530-583 - エディタconfig.ini読み込み処理
- E-46: `kshooteditor.hsp` L586-624 - エディタ言語ファイル読み込み処理
- E-47: `kshooteditor.hsp` L634-644 - エディタDLLチェック・BASS初期化処理
- E-48: `kshooteditor.hsp` L862-871 - ドラッグ&ドロップ・ファイル指定起動処理
- E-49: `kshooteditor.hsp` L874-879 - Shift+Ctrl起動時DD設定トグル処理

## 3) Claims と根拠の対応（レビューの主戦場）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | picload_: 存在するファイルを正常ロード | E-01 | ○ |
| C-02 | picload_: 存在しないファイルでダイアログ表示 | E-01 | ○ |
| C-03 | picload_: mode省略時デフォルト0 | E-01 | ○ |
| C-04 | instr_: 検索文字列の位置を返す | E-02 | ○ |
| C-05 | instr_: 開始位置指定検索 | E-02 | ○ |
| C-06 | instr_: 未検出時-1 | E-02 | ○ |
| C-07 | instr_: マルチバイト終端超過で-1 | E-02 | ○ |
| C-08 | instr_: 空文字列検索で-1 | E-02 | ○ |
| C-09 | min: 小さい方を返す | E-03 | ○ |
| C-10 | min: 等値の場合 | E-03 | ○ |
| C-11 | min: 負値ハンドリング | E-03 | ○ |
| C-12 | max: 大きい方を返す | E-04 | ○ |
| C-13 | max: 等値の場合 | E-04 | ○ |
| C-14 | max: 負値ハンドリング | E-04 | ○ |
| C-15 | ran: 範囲内の値 | E-05 | ○ |
| C-16 | ran: 下限クランプ | E-05 | ○ |
| C-17 | ran: 上限クランプ | E-05 | ○ |
| C-18 | ran: 下限境界値 | E-05 | ○ |
| C-19 | ran: 上限境界値 | E-05 | ○ |
| C-20 | maxf: double版max | E-06 | ○ |
| C-21 | maxf: 等値 | E-06 | ○ |
| C-22 | minf: double版min | E-07 | ○ |
| C-23 | minf: 等値 | E-07 | ○ |
| C-24 | ranf: 範囲内 | E-08 | ○ |
| C-25 | ranf: 下限クランプ | E-08 | ○ |
| C-26 | ranf: 上限クランプ | E-08 | ○ |
| C-27 | ardel: 正常削除 | E-09 | ○ |
| C-28 | ardel: 先頭要素削除 | E-09 | ○ |
| C-29 | ardel: 末尾要素 | E-09 | ○ |
| C-30 | ardel: armax<2ガード | E-09 | ○ |
| C-31 | ardel: artarget<0ガード | E-09 | ○ |
| C-32 | ardel: 範囲外ガード | E-09 | ○ |
| C-33 | ardel2: 正常削除 | E-10 | ○ |
| C-34 | ardel2: arxmax<2ガード | E-10 | ○ |
| C-35 | ardel2: artargetx<0ガード | E-10 | ○ |
| C-36 | ardel2: 範囲外ガード | E-10 | ○ |
| C-37 | ginfo2: アクティブ時ウィンドウID | E-11 | ○ |
| C-38 | ginfo2: 非アクティブ時-1 | E-11 | ○ |
| C-39 | ginfo2: 最小化時-1 | E-11 | ○ |
| C-40 | imeset: IME ON | E-12 | ○ |
| C-41 | imeset: IME OFF | E-12 | ○ |
| C-42 | imeget: IME状態取得 | E-12 | ○ |
| C-43 | getjoykeystat: ボタン押下状態 | E-13 | ○ |
| C-44 | getjoykeystat: knum=11複合入力 | E-13 | ○ |
| C-45 | getjoykeystat: knum=12複合入力 | E-13 | ○ |
| C-46 | getjoykeystat: テンキー切替 | E-13 | ○ |
| C-47 | getjoykeystat: ジョイスティック未接続 | E-13 | ○ |
| C-48 | getesckey: ESC押下で1 | E-15 | ○ |
| C-49 | getesckey: BTコンボESC | E-15 | ○ |
| C-50 | getesckey: ESC非押下で0 | E-15 | ○ |
| C-51 | getesckey: esc_bt3=0でコンボ無効 | E-15 | ○ |
| C-52 | getkey_a: 通常モード | E-14 | ○ |
| C-53 | getkey_a: usenumpad=1 | E-14 | ○ |
| C-54 | getkey_a: usenumpad=2 | E-14 | ○ |
| C-55 | drawtxt: テキスト描画 | E-16 | ○ |
| C-56 | _drawtxt: テキスト描画本体 | E-16 | ○ |
| C-57 | blackout: 黒フェード | E-17 | ○ |
| C-58 | blackout: blength=0 | E-17 | ○ |
| C-59 | whiteout: 白フェード | E-18 | ○ |
| C-60 | whiteout: wlength=0 | E-18 | ○ |
| C-61 | imgbufload: キャッシュあり | E-19 | ○ |
| C-62 | imgbufload: キャッシュなし | E-19 | ○ |
| C-63 | imgbufload_bg: 背景リサイズ | E-20 | ○ |
| C-64 | imgbufload_bg: アスペクト比保持 | E-20 | ○ |
| C-65 | exists: ファイル存在 | E-22 | ○ |
| C-66 | exists: ファイル非存在 | E-22 | ○ |
| C-67 | not_exists: ファイル非存在 | E-22 | ○ |
| C-68 | not_exists: ファイル存在 | E-22 | ○ |
| C-69 | tofloat: 正常変換 | E-23 | ○ |
| C-70 | tofloat: ゼロ値 | E-23 | ○ |
| C-71 | tofloat: 負値変換 | E-23 | ○ |
| C-72 | two: 2の冪乗算出 | E-25 | ○ |
| C-73 | two: 既に2の冪乗 | E-25 | ○ |
| C-74 | two: 入力値1 | E-25 | ○ |
| C-75 | two: 入力値0以下 | E-25 | ○ |
| C-76 | strmid2: 正常取得 | E-26 | ○ |
| C-77 | strmid2: num=0 | E-26 | ○ |
| C-78 | GetTxtExtPoint: テキストサイズ取得 | E-27 | ○ |
| C-79 | GetTxtExtPoint: 空文字列 | E-27 | ○ |
| C-80 | hgcopy: 等倍描画 | E-24 | ○ |
| C-81 | hgzoom: リサイズ描画 | E-24 | ○ |
| C-82 | hgzoom_a: 中心基準描画 | E-24 | ○ |
| C-83 | settex2: テクスチャ登録 | E-24 | ○ |
| C-84 | settex2: 非2の冪乗補正 | E-24 | ○ |
| C-85 | settex2: 登録失敗 | E-24 | ○ |
| C-86 | getdouble: FPU操作 | E-28 | △ |
| C-87 | *refreshlang: 言語読み込み | E-29 | ○ |
| C-88 | *refreshlang: フォールバック | E-29 | ○ |
| C-89 | *refreshlang: ファイル完全欠損 | E-29 | ○ |
| C-90 | *saveconfig: 設定保存 | E-30 | ○ |
| C-91 | *saveconfig: hispeed xタイプ | E-30 | ○ |
| C-92 | *saveconfig: hispeed Cタイプ | E-30 | ○ |
| C-93 | *saveconfig: 項目追加・更新 | E-30 | ○ |
| C-94 | *refreshhs: HiSpeed種別判定 | E-31 | ○ |
| C-95 | *refreshhs: hstypenow=1 | E-31 | ○ |
| C-96 | *volactive: 自動ミュート | E-32 | ○ |
| C-97 | *volactive: ミュート解除 | E-32 | ○ |
| C-98 | *volactive: automute無効 | E-32 | ○ |
| C-99 | *exit: 正常終了 | E-33 | ○ |
| C-100 | *exit: ダイアログ表示中キャンセル | E-33 | ○ |
| C-101 | *delcache: ファイル削除 | E-34 | ○ |
| C-102 | *delcache: bgサブディレクトリ | E-34 | ○ |
| C-103 | *refreshgetsize: scrsize_h=480 | E-35 | ○ |
| C-104 | *refreshgetsize: scrsize_h=720 | E-35 | ○ |
| C-105 | *mdatafree: メモリ解放 | E-36 | ○ |
| C-106 | エディタpicload: 正常ロード | E-43 | ○ |
| C-107 | エディタpicload: ファイル不在 | E-43 | ○ |
| C-108 | vzoom: 等倍計算 | E-44 | ○ |
| C-109 | vzoom: 2倍計算 | E-44 | ○ |
| C-110 | vzoom: value=0 | E-44 | ○ |
| C-111 | config.ini key=パース | E-37, E-38 | ○ |
| C-112 | config.ini デフォルトキー | E-38 | ○ |
| C-113 | config.ini hispeed=xパース | E-37 | ○ |
| C-114 | config.ini hispeed=Cパース | E-37 | ○ |
| C-115 | config.ini windowsize | E-37 | ○ |
| C-116 | config.ini fullscrsize | E-37 | ○ |
| C-117 | config.ini hispeedtype | E-37 | ○ |
| C-118 | バージョンチェック: キャッシュ削除 | E-39, E-34 | ○ |
| C-119 | バージョンチェック: キャッシュ維持 | E-39 | ○ |
| C-120 | DLL: msvcr100.dll欠損 | E-39 | ○ |
| C-121 | DLL: kshlib.dll欠損 | E-39 | ○ |
| C-122 | DLL: kshlib.dllバージョン不足 | E-39 | ○ |
| C-123 | DLL: kson.dllバージョン不足 | E-39 | ○ |
| C-124 | BASS_Init失敗 | E-39 | ○ |
| C-125 | コマンドライン: KSH指定 | E-40 | ○ |
| C-126 | コマンドライン: -auto | E-40 | ○ |
| C-127 | コマンドライン: -hard | E-40 | ○ |
| C-128 | コマンドライン: -from | E-40 | ○ |
| C-129 | コマンドライン: ファイル不在 | E-40 | ○ |
| C-130 | シーン遷移: TITLE | E-41 | ○ |
| C-131 | シーン遷移: SELECT | E-41 | ○ |
| C-132 | シーン遷移: PLAY | E-41 | ○ |
| C-133 | シーン遷移: RESULT | E-41 | ○ |
| C-134 | シーン遷移: OPTION | E-41 | ○ |
| C-135 | シーン遷移: GATE | E-41 | ○ |
| C-136 | フレームスキップ | E-41 | △ |
| C-137 | コースモード初期化 | E-42 | ○ |
| C-138 | コースモード: パストラバーサル防止 | E-42 | ○ |
| C-139 | コースモード: 譜面不在 | E-42 | ○ |
| C-140 | エディタconfig読み込み | E-45 | ○ |
| C-141 | エディタconfigデフォルト | E-45 | △ |
| C-142 | エディタ言語ファイルパース | E-46 | ○ |
| C-143 | エディタ言語フォールバック | E-46 | ○ |
| C-144 | エディタフォント名パース | E-46 | ○ |
| C-145 | エディタkson.dll欠損 | E-47 | ○ |
| C-146 | エディタBASS_Init失敗 | E-47 | ○ |
| C-147 | エディタファイル指定起動 | E-48 | ○ |
| C-148 | エディタ不在ファイル指定 | E-48 | ○ |
| C-149 | DD設定トグル | E-49 | △ |

## 4) 不足情報（Unknown / Missing）
- **getdouble関数 (C-86)**: アセンブリコード(`$0424448b,$04c218dd`)による低レベルFPU操作のため、関数の正確な入出力仕様の根拠が不十分。VirtualProtectによるコード領域の実行権限変更も含め、実行時テストでのみ検証可能。
  - 候補：HSP3のFPU内部仕様書 / x86 FPU命令セットリファレンス / 実行時テスト結果
- **フレームスキップ (C-136)**: `cnt\(frameskip+1)=0`の条件による描画スキップの具体的な挙動は、メインループ全体の実行フローに依存するため、単体テストとしての検証方法が不明確。
  - 候補：HSP3のawaitコマンド仕様 / フレームレート測定の実行テスト
- **エディタconfigデフォルト (C-141)**: config.iniが存在しない場合のstrsize条件分岐は確認できるが、全てのデフォルト値の正確性はコード上の変数初期化に依存。
  - 候補：エディタ要件定義書 / ユーザマニュアル
- **DD設定トグル (C-149)**: Shift+Ctrl同時押し起動は隠し機能であり、仕様書等で文書化されている根拠がない。
  - 候補：開発者ノート / リリースノート

## 5) リスクフラグ（レビュー観点）
- **2: 高リスク** - getdouble関数のアセンブリコード部分は、プラットフォーム依存性が高く、x86以外の環境では動作しない可能性がある
- **1: 中リスク** - tofloat関数のビット操作は、IEEE 754準拠を前提としているが、エッジケース（NaN, Infinity等）の挙動が不明
- **1: 中リスク** - *saveconfigの設定項目数が47項目と多く、全項目の保存・復元テストの網羅性確保が重要
- **1: 中リスク** - コマンドライン引数パースは文字列操作ベースのため、特殊文字やスペース含むパスの処理に注意が必要
- **0: 低リスク** - min/max/ran等のユーティリティ関数は実装がシンプルで、テストケースの正確性は高い
- **0: 低リスク** - exists/not_exists関数はexist命令のシンプルなラッパーで、動作は明確

## 6) レビュアーチェックリスト（最小）
- [ ] HSP言語のモジュール定義（#module / #global）のスコープが正しく考慮されているか
- [ ] getdouble関数のFPUテストが実行可能な方法で記述されているか
- [ ] config.ini読み込みの全設定項目（47項目）がテストでカバーされているか（主要項目のみ抜粋の場合はその旨を明記）
- [ ] コースモードのパストラバーサル防止テストが十分なパターンを網羅しているか
- [ ] HGIMG3グラフィックライブラリの描画テストが実行環境依存であることが考慮されているか
- [ ] エディタ（kshooteditor.hsp）のメニュー構築・イベントハンドラ部分のテストが意図的に省略されていることの妥当性
- [ ] キー入力系関数（getjoykeystat, getkey_a, getesckey）のテストでジョイスティック接続/非接続の両パターンが網羅されているか
